Witam po dłuższym czasie jak zwykle z problemem. Zrobiłem licznik dni sterowany z odbiornika GPS. $regfile = "m8def.dat" $crystal = 11059200 $hwstack = 32 $swstack = 8 $framesize = 24 Open "comc.2:9600,8,n,1" For Input As #2 ' PinC.2 jako wejście UART Dim Gpsin As Byte Dim X As Byte , Dim Count As Byte Dim Y(10) As Byte Dim Z As Byte Dim Mux As Byte Dim Kopia(10) As Byte Dim Jednostki As Byte Dim Dziesiatki As Byte Dim Setki As Byte Dim Tysiace As Byte Config Portd = Output '8 bitów na 7seg. Config Pinb.5 = Output 'anoda1 Config Pinb.4 = Output 'anoda2 Config Pinb.3 = Output 'anoda3 Config Pinb.2 = Output 'anoda4 Config Pinc.1 = Input 'przełącznik czasu ZIMA/LATO Config Pinc.5 = Input ' +1 ustawianie licznika dni Config Pinc.4 = Input ' +10 ustawianie licznika dni Config Pinc.3 = Input '+100 ustawianie licznika dni Config Timer0 = Timer , Prescale = 256 Enable Interrupts Enable Timer0 On Timer0 Co4ms Do Start: Gpsin = Waitkey(#2) If Gpsin <> "$" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "G" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "P" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "G" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "G" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "A" Then Goto Start Gpsin = Waitkey(#2) If Gpsin <> "," Then Goto Start Count = 0 For X = 1 To 6 Gpsin = Waitkey(#2) While Gpsin = "," Gpsin = Waitkey(#2) Count = Count + 1 If Count = 5 Then Goto Start Wend Y(x) = Gpsin - 48 Next X Z = Y(1) * 10 Z = Z + Y(2) Z = Z + 1 If Z = 24 Then Z = 0 If Pinc.1 = 1 Then Z = Z + 1 If Z = 24 Then Z = 0 Y(1) = Z / 10 Y(2) = Z Mod 10 If Pinc.5 = 0 Then Incr Jednostki If Pinc.4 = 0 Then Incr Dziesiatki If Pinc.3 = 0 Then Incr Setki If Jednostki = 10 Then Incr Dziesiatki If Jednostki = 10 Then Jednostki = 0 If Dziesiatki = 10 Then Incr Setki If Dziesiatki = 10 Then Dziesiatki = 0 If Setki = 10 Then Incr Tysiace If Setki = 10 Then Setki = 0 If Tysiace = 10 Then Tysiace = 0 If Y(1) = 0 Then If Y(2) = 0 Then If Y(3) = 0 Then If Y(4) = 0 Then If Y(5) = 0 Then If Y(6) = 0 Then Incr Jednostki End If End If End If End If End If End If Y(7) = Jednostki Y(8) = Dziesiatki Y(9) = Setki Y(10) = Tysiace Kopia(7) = Y(7) Kopia(8) = Y(8) Kopia(9) = Y(9) Kopia(10) = Y(10) Kopia(7) = Lookup(kopia(7) , Tabela2) Kopia(8) = Lookup(kopia(8) , Tabela2) Kopia(9) = Lookup(kopia(9) , Tabela2) Kopia(10) = Lookup(kopia(10) , Tabela2) Loop End Co4ms: Timer0 = 110 Incr Mux If Mux = 4 Then Mux = 0 Select Case Mux Case 0: Reset Portb.5 Portd = Kopia(7) Set Portb.2 Case 1: Reset Portb.2 Portd = Kopia(8) Set Portb.3 Case 2: Reset Portb.3 Portd = Kopia(9) Set Portb.4 Case 3: Reset Portb.4 Portd = Kopia(10) Set Portb.5 End Select Return Tabela2: Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 0 Obsługi wyswietlania godziny tu nie ma, ale to nie problem. Problem pojawił się gdy zachciało mnie się takiego samego licznika
|
|||
Re: Nowe zadanie , nowy problem
Widzę że wszystkie zmienne masz zadeklarowane jako byte więc musisz chwilę pomyśleć co się dzieje jeśli zmniejszasz zmienną i ona schodzi poniżej zera. Jaką wartość osiąga ?.....
Bingo, 255. Stawiasz warunek:
W ten sposób gdy dziesiątka zejdzie Ci poniżej zera będziesz miał nie 255 a 9
Moja strona w powijakach
Dzięki
Dzięki za podpowiedź , właśnie na to wpadłem, gdy rozpisałem sobie
całą procedurę na kartce przy pomocy pseudojęzyka. Tak jak uczyli w szkole.
Temat można zamknąć.
Nowe zadanie
Tym razem mam nowe zadanie do rozgryzienia.
Sterowanie wyświetlaczami 7seg przy pomocy 74HC595
ale .... bez multipleksowania czyli anody wyswietlaczy
na stałe podłączone do +5V.
Na przykład tak jak na tym schemacie.
Oczywiście chodzi mi o obsługę tego w Bascomie.
To jest układ ze wspólną katodą ale to tylko przykład.
Czy i tym razem ktoś pomoże ?
Odp. 74HC595
Na dole strony LINK jest kod dla jednego rejestru. Musisz wysłac cztery bajty po czym zatwierdzić/zatrzasnać tą sekwencją
W kodzie jest opis co podłaczyć do którego pinu i sa aliasy dla nazw które odpowiadają tym z noty układu.
BARTek
Moja strona
Nie działa
Hurrrra !
Już wiem jak to zrobić !
Dzięki stukrotne BARTek .
Ale to proste !
Tylko dlaczego muszę podać
A = 12
B = 182
C = 158
D = 204
Bo jak dam
A = 1
B = 2
C = 3
D = 4
to wyświetlają się głupoty.
Odp. 74HC595
"Mądrej głowie, dość po słowie" Może tu wystarczy obrazek ;)
BARTek
Moja strona
Już doszedłem do tego
Już doszedłem do tego.
Wysyłałem np. liczbę 64 i patrzyłem który segment się zapali.
No i musiałem utworzyć własną tablicę znaków.
No i teraz działa jak ta lala.
U mnie liczba 2 to dec 109 a nie 118 ----- co jest tego powodem nie wiem.