Witam
Chciałem poćwiczyć obsługę przycisków, sprawdzanie stanów portów i wystawianie odpowiedniej odpowiedzi na wyświetlaczu LCD. W ramach ćwiczeń napisałem krótki program:
Nie muszę chyba objaśniać poszczególnych linijek kodu, ponieważ program jak widać jest bardzo prosty.
Wyświetlacz w celu zaoszczędzenia miejsca na płytce stykowej jest wlutowany w płytkę drukowaną z potencjometrem, gniazdem na zasilanie i rezystorem przy podświetleniu. Połączony jest z ATmegą 8 przewodem 6-żyłowym.
Problem jest taki, że po zaprogramowaniu najpierw prawidłowo wyświetla się napis "Wciśnij przycisk", ale:
- po wciśnięciu przycisku nr. 1 zamiast "Wciśnięty Sw1" wyświetla się "Wciśnięty Sw1nij",
- po wciśnięciu przycisku nr. 2 zamiast "Wciśnięty Sw2" wyświetla się "Wciśnięty Sw2Sw1",
- po wciśnięciu obydwóch przycisków zamiast "Wciśnięty Sw1 + Sw2" wyświetla się "Wciśnięty Sw1 + Sw2Sw2".
Przyciski to microswitche, opóźnienie dla eliminacji drgań styków przeprowadzam za pomocą If...Then, ponieważ będzie mi to potrzebne do sterowania linefollowerem.
Dodano po 2 [godziny] 38 [minuty]:
P.S
Trochę próbowałem się pobawić symulacją sprzętową i napewno jest to wina programu.
Chciałem poćwiczyć obsługę przycisków, sprawdzanie stanów portów i wystawianie odpowiedniej odpowiedzi na wyświetlaczu LCD. W ramach ćwiczeń napisałem krótki program:
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Deflcdchar 1 , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 2 'ę
Deflcdchar 2 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32 'ś
Config Pind.0 = Input
Config Pind.1 = Input
S1 Alias Pind.0
S2 Alias Pind.1
Set Portd.0
Set Portd.1
Cursor Off Noblink
'-----------------------------------------------------------------'
If S1 = 0 And S2 = 0 Then
Waitms 25
If S1 = 0 And S2 = 0 Then
Cls
Upperline
Lcd "Wci" ; Chr(2) ; "ni" ; Chr(1) ; "ty"
Lowerline
Lcd "Sw1 + Sw2"
End If
End If
If S1 = 1 And S2 = 0 Then
Waitms 25
If S1 = 1 And S2 = 0 Then
Cls
Upperline
Lcd "Wci" ; Chr(2) ; "ni" ; Chr(1) ; "ty"
Lowerline
Lcd "Sw2"
End If
End If
If S2 = 1 And S1 = 0 Then
Waitms 25
If S2 = 1 And S1 = 0 Then
Cls
Upperline
Lcd "Wci" ; Chr(2) ; "ni" ; Chr(1) ; "ty"
Lowerline
Lcd "Sw1"
End If
End If
If S1 = 1 And S2 = 1 Then
Cls
Locate 1 , 5
Lcd "Wci" ; Chr(2) ; "nij"
Locate 2 , 5
Lcd "przycisk"
End If
Nie muszę chyba objaśniać poszczególnych linijek kodu, ponieważ program jak widać jest bardzo prosty.
Wyświetlacz w celu zaoszczędzenia miejsca na płytce stykowej jest wlutowany w płytkę drukowaną z potencjometrem, gniazdem na zasilanie i rezystorem przy podświetleniu. Połączony jest z ATmegą 8 przewodem 6-żyłowym.
Problem jest taki, że po zaprogramowaniu najpierw prawidłowo wyświetla się napis "Wciśnij przycisk", ale:
- po wciśnięciu przycisku nr. 1 zamiast "Wciśnięty Sw1" wyświetla się "Wciśnięty Sw1nij",
- po wciśnięciu przycisku nr. 2 zamiast "Wciśnięty Sw2" wyświetla się "Wciśnięty Sw2Sw1",
- po wciśnięciu obydwóch przycisków zamiast "Wciśnięty Sw1 + Sw2" wyświetla się "Wciśnięty Sw1 + Sw2Sw2".
Przyciski to microswitche, opóźnienie dla eliminacji drgań styków przeprowadzam za pomocą If...Then, ponieważ będzie mi to potrzebne do sterowania linefollowerem.
Dodano po 2 [godziny] 38 [minuty]:
P.S
Trochę próbowałem się pobawić symulacją sprzętową i napewno jest to wina programu.
