Postanowiłem jakoś uporządkować to wszystko dla potencjalnych Bascomowców
sam już się zresztą gubię w bascomie bo dawno go nie używałem -- siła ewolucji i został wyparty przez ARDUINO
do szybkiego sprawdzania koncepcji . Nie mniej warto to i owo sobie przypomnieć
Jedziemy:
Z wielu dziwnych zapytań wybór padła na 16 .... oto one
1. Jak deklarować zmienne?
2. Jak deklarować stałe?
3. Jak deklarować tablice?
4. Jak zrobić pętlę?
5. Jak deklarować i wywoływać podprogramy?
6. Jak sterować alfanumerycznym wyświetlaczem LCD?
7. Jak pisać warunki?
8. Jak zmienić nazwę zmiennych, stałych itp?
9. Jak wykonać pętle opóźnienia czasowego?
10. Jak obsługiwać przerwania?
11. Jak obsługiwać szynę I2C?
12. Jak wyeliminować drgania styków?
13. Co to jest wyświetlacz multipleksowy i jak nim sterować z poziomu Bascom'a?
14. Jak obsłużyć klawiaturę od PC'ta?
15. Jak zamienić liczbę na ciąg 01?
16. Jak obsłużyć impulsator?
------------------- ODPOWIEDZI ------------------------------
1. Jak deklarować zmienne?DIM nazwa_zmiennej1 AS BIT - zakres zmiennej 0..1
DIM nazwa_zmiennej2 AS BYTE - zakres zmiennej 0..255
DIM nazwa_zmiennej3 AS WORD - zakres zmiennej
DIM nazwa_zmiennej4 AS INTEGER - zakres zmiennej -32767..32768
DIM nazwa_zmiennej5*10 AS STRING - zmienna tekstowa o długości w tym przypadku 10
2. Jak deklarować stałe?CONST nazwa_stałej1 = &HF
CONST nazwa_stałej2 = -1000
CONST nazwa_stałej3 = 1.1
CONST nazwa_stałej4 = "tekst"
3. Jak deklarować tablice?DIM nazwa_tablicy(ilość) AS rodzaj_zmiennej
nazwa_tablicy(5) = 146 'zapianie do 5 elementu tablicy liczby 146
4. Jak zrobić pętlę?DO 'początek pętli
... 'operacje i polecenia wykonywane w pętli
LOOP 'koniec pętli i powrót do początku
5. Jak deklarować i wywoływać podprogramy?Na początku programu wpisujemy deklaracje o podprogramie:
DECLARE SUB nazwa_podprogramu(zmienna AS typ_zmiennej)
A następnie w programie piszemy, co konkretnie podprogram ma wykonywać. Robimy to w następujący sposób:
SUB nazwa_podprogramu(zmienna AS typ_zmiennej) 'początek podprogramu
... 'operacje i polecenia wykonywane w pętli
END SUB 'koniec podprogramu
Aby wywołać podprogram piszemy:
CALL nazwa_podprogramu(zmienna)
Oczywiście, jeśli w podprogramie nie będziemy wykonywać jakichkolwiek operacji na zmiennej podawanej w nawiasie, nie deklarujemy tego na początku, a przy wywoływaniu podprogramu pomijamy zmienną.
6. Jak sterować alfanumerycznym wyświetlaczem LCD?W Bascomie sterowanie wyświetlaczy alfanumerycznych LCD jest banalnie proste. Wystarczy tylko poinformować kompilator, do których linii portu będzie on podłączony (OPTIONS/COMPILER/LCD) i zadeklarować na początku programu rodzaj podłączanego wyświetlacza:
CONFIG LCD=ilość_znaków*ilość_linii
gdzie ilość znaków i ilośćlinii może być następująca: 40*4, 40*2, 16*1, 16*1a, 16*2, 16*4, 16*4, 20*2, 20*4,40*4a
W przypadku problemów ze sterowaniem 16*1 lub 40*4 należy zamienić je na 16*1a lub 40*4a
Bascom pozwala na wykonywanie następujących operacji na wyświetlaczu:
LCD "TEKST" 'wyświetlenie napisu TEKST
LCD zmienna 'wyświetlenie zmiennej
LCD "tekst"; zmienna 'wyświetlenie w jednej linii napisu TEKST i wartości zmiennej
CLS 'kasowanie wyświetlacz
CURSOR ON/OFF, BLINK/NOBLINK 'operacje na kursorze
gdzie ON/OFF - włącz lub wyłącz kursor, BLINK/NOBLINK - włącz lub wyłącz miganie kursora, polecenia ta mogą działać oddzielnie, czyli możemy np. napisać:
CURSOR BLINK
LOCATE linia,pozycja_kursora 'ustawienie kursora na linii i pozycji
SHIFTCURSOR LEFT/RIGHT 'przesuwanie kursora w lewo lub wprawo
SHIFTLCD LEFT/RIGHT 'przesuwanie tekstu w lewo lub w prawo
DISPLAY ON/OFF 'włączenie lub wyłączenie wyświetlacza
UPPERLINE 'przejście kursora do wyższej linii
LOWERLINE 'przejście kursora do niższej linii
THIRDLINE 'przejście kursora do trzeciej linii
FOURTHLINE 'przejście kursora do czwartej linii
DEFLCDCHAR numer_banku , 31 , 17 , 17 , 17 , 17 , 17 , 31 , 0 ' deklarowanie własnego znaku np. polskich liter, gdzie numer_banku: 0..7. Aby stworzyć dowolny znak należy wybrać z menu TOOLS/LCD DESIGNER, a następnie narysować żądany znak. Bascom automatycznie wstawi polecenie DEFLCDCHAR do programu. My tylko musimy podać numer banku.
7. Jak pisać warunki?IF zdarzenie THEN
... 'to co ma się zdarzyć jeśli warunek będzie spełniony
ELSE
... 'to co ma się zdarzyć jeśli warunek nie będzie spełniony
END IF 'koniec warunku
Zdarzenie może mieć następującą postać:
zmienna = 0 'jeśli zmienna będzie równa zero
P1.0 = 1 'jeśli bit 0 portu P1 będzie równy jeden
PRZYKŁAD:
'Chcemy zliczać sekundy w pętli
DIM sekundy AS BYTE 'deklaracja zmiennej sekundy
DO 'początek pętli
INCR sekundy 'zwiększenie o 1 zmiennej sekundy
IF sekundy = 60 THEN 'jeśli sekundy = 60 to
sekundy = 0 'wyzeruj sekundy
END IF 'koniec warunku przepełnienia
LOOP 'zapętlenie - skok do DO
Pewnie się zastanawiasz co trzeba zrobić, aby zliczać jeszcze minuty, godziny, czy nawet dni. Odpowiedź jest bardzo prosta. W warunku przepełnienia (if sekundy =60 then) wpisujemy polecenia od INCR do END IF odwołując się do minut. Następnie w warunku przepełnienia minut wpisujemy to samo odnośnie godzin itd.
8. Jak zmienić nazwę zmiennych, stałych itp?
nowa_nazwa ALIAS stara_nazwa
To polecenie jest bardzo przydatne, gdyż możemy nazwać np. bity portów w zależności od funkcji jakie pełnią np. chcemy za pomocą P3.7 sterować buzzerem możemy więc zmienić nazwę P3.7 na BUZZER, a nastepnie odwoływać się do nowej nazwy. Wygląda to tak:
BUZZER ALIAS P3.7
RESET BUZZER 'wyzerowanie BUZZER, a właściwie P3.7
WAIT 1 'poczekaj 1 sekundę
SET BUZZER 'ustawienie 1 na P3.7
9. Jak wykonać pętle opóźnienia czasowego?DELAY 'opóźnienie ok. 100us
WAITMS milisekundy 'opóżnienie w milisekundach 0..255
WAIT sekundy 'opóźnienie w sekundach
10. Jak obsługiwać przerwania?ENABLE INT0 'zezwolenie na przerwanie z INT0, zamiast INT0 możemy wpisać: INT1, SERIAL, TIMER0, TIMER1,TIMER2, a nawet INT3, INT4, INT5, INT6, INT7, INT8 , CAN. Zależy to oczywiście od używanego mikroprocesora.
ON INT0 podprogram 'poinformowanie kompilatora, który podprogram ma być wywoływany przy przerwaniu
ENABLE INTERRUPTS 'odblokowanie układu przerwań
DIASBLE INT0 'wyłączenie przerwania
11. Jak obsługiwać szynę I2C?Na początku musisz zadeklarować, które bity portu będą pełnić funkcje linii danych SDA i linii zegarowej SCL.
CONFIG SDA = P1.0
CONFIG SCL = P1.1
Potem w programie:
I2CSTART 'warunek startu szyny
I2CWBYTE zmienna, ACK/NOACK 'zapis zmiennej z potwierdzeniem (ACK) lub bez
I2CRBYTE zmienna, ACK/NOACK 'odczyt zmiennej z potwierdzeniem (ACK) lub bez
I2CSTOP 'warunek stopu szyny
12. Jak wyeliminować drgania styków?Drgania styków można wyeliminować w dwojaki sposób:
- sprzętowo poprzez dodanie kondensatorów zwierających
- programowo: poprzez dwukrotne sprawdzanie stanu przycisku z odstępem czasu między nimi. Wygląda to tak:
IF P1.0 = 0 THEN 'jeśli P1.0 = 0 to
WAITMS 30 'poczekaj 30 milisekund
IF P1.0 = 0 THEN 'sprawdź po raz drugi, czy P1.0 = 0 i jeśli tak to
CALL podprogram 'wywołaj podprogram
END IF 'koniec drugiego warunku
END IF 'koniec pierwszego warunku
13. Co to jest wyświetlacz multipleksowy i jak nim sterować z poziomu Bascom'a?Wyświetlacz multipleksowy to taki, w którym wykorzystuje się bezwładność ludzkiego oka sterując w jednej chwili tylko jednym znakiem na wyświetlaczu. Poprzez szybkie włączanie i wyłączanie kolejnych znaków uzyskuje się efekt świecenia wszystkich znaków.W przypadku wyświetlaczy LED robi się to w następujący sposób: każdy segment jednej cyfry łączymy z takim samym segmentem drugiej cyfry itd. W przypadku techniki mikroprocesorowej będą to najczęściej katody, gdyż wydajność prądowa portu jest dla "0" logicznego. Połączone segmenty łączy się z wybranymi bitami portu. Anody wyświetlaczy muszą być załączane z drugiego portu np. P3 poprzez tranzystory PNP. Sterowanie odbywa się w następujący sposób przy założeniu, że na początku wszystkie wyświetlacze są wyłączone:
- ustaw na porcie P1 to co ma być wyświetlone na pierwszym pojedyńczym wyświetlaczu,
- włącz pierwszy wyświetlacz,
- poczekaj chwilę
- wyłącz pierwszy wyświetlacz
- ustaw na porcie P1 to co ma być wyświetlone na drugim pojedyńczym wyświetlaczu,
- włącz drugi wyświetlacz,
- poczekaj chwilę,
- wyłącz drugi wyświetlacz
- ...
- skocz do początku
Przykładowy program:
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
14. Jak obsłużyć klawiaturę od PC'ta?
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
15. Jak zamienić liczbę na ciąg 01?Nazwa_zmiennej.numer_bitu = 1 'ustawienie bitu o numerze = numer_bitu.
Print Nazwa_zmiennej.numer_bitu 'wysłanie po RS' bitu o numerze = numer_bitu.
Gdzie numer_bitu liczymy od 0 (najmniej znaczący bit).
PRZYKŁAD:Chcemy wyświetlić na wyświetlaczu LCD 8 bitów liczby
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jeśli dla wartości poszczególnych bitów będziemy wykonywać inne czynności to musimy jeszcze dodać warunki na wartość zmiennej i. Można to zrobić za pomocą IF bądź CASE. Jest to najlepszy sposób na definiowanie ustawień w naszym urządzeniu. Jeśli np bit 5 zmiennej ustawienia ma wartość 1 to znaczy, że np budzik jest włączony.
16. Jak obsłużyć impulsator?Przykład z listy dyskusyjnej bascoma
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Może się to komyś przyda ....