Witam.
Mam następujący problem...
Chce zrobić sobie na uP attiny2313 (płytka startowa avt3500) stoper i timer w jednym, z dokładnością do dziesiątych części sekundy, na LED.
Dołączyłem do wyjść goldpin mojej płytki dodatkowe 2 przyciski bistabilne, pod porty PIND.2 oraz PIND.3, sterują one wyborem stoper/timer oraz gdy je "odklikujemy" zerują stan licznika.
Przyciski z płytki (widoczne pod PIND.0 oraz PIND.1) sterują start/stop zliczania.
Kod na razie nie jest dopracowany, więc nie ma wielkiej dokładności odwzorowania sekundy, lecz nie to jest moim problemem.
Napotkałem problem w postaci tego, że gdy włączam PIND.3, by wybrać tryb timera to zapala mi się cały jeden segment LED odpowiedzialny za wyświetlanie dziesiątych części sekundy i nie jestem w stanie obserwować zmian (np. po zatrzymaniu stopem).
Próbowałem nie wyświetlać tego segmentu, lecz zawsze, gdy tylko nacisnę PIND.3 to zapala się cały ten segment i po prostu niefajnie to wygląda
manipulowałem także konfiguracją portu D, lecz nie dało to nic...
Macie może jakieś pomysły czemu tak jest lub rady?
Nie ma błędów kompilacji itp.
Myślę, że może PIND.3 (oraz PIND.4, PIND.5 i PIND.6, bo pod nie także próbowałem podłączać ten przycisk, zmieniało się tylko to, że świecił się też cały, inny segment LED) jest odpowiedzialny za coś, o czym nie wiem...
Oto kod
Pomocy
Mam następujący problem...
Chce zrobić sobie na uP attiny2313 (płytka startowa avt3500) stoper i timer w jednym, z dokładnością do dziesiątych części sekundy, na LED.
Dołączyłem do wyjść goldpin mojej płytki dodatkowe 2 przyciski bistabilne, pod porty PIND.2 oraz PIND.3, sterują one wyborem stoper/timer oraz gdy je "odklikujemy" zerują stan licznika.
Przyciski z płytki (widoczne pod PIND.0 oraz PIND.1) sterują start/stop zliczania.
Kod na razie nie jest dopracowany, więc nie ma wielkiej dokładności odwzorowania sekundy, lecz nie to jest moim problemem.
Napotkałem problem w postaci tego, że gdy włączam PIND.3, by wybrać tryb timera to zapala mi się cały jeden segment LED odpowiedzialny za wyświetlanie dziesiątych części sekundy i nie jestem w stanie obserwować zmian (np. po zatrzymaniu stopem).
Próbowałem nie wyświetlać tego segmentu, lecz zawsze, gdy tylko nacisnę PIND.3 to zapala się cały ten segment i po prostu niefajnie to wygląda
Macie może jakieś pomysły czemu tak jest lub rady?
Nie ma błędów kompilacji itp.
Myślę, że może PIND.3 (oraz PIND.4, PIND.5 i PIND.6, bo pod nie także próbowałem podłączać ten przycisk, zmieniało się tylko to, że świecił się też cały, inny segment LED) jest odpowiedzialny za coś, o czym nie wiem...
Oto kod
$regfile = "attiny2313.dat"
$crystal = 1000000
Dim Sekundy As Byte , Sekundydzies As Byte , Minuty As Byte , Setnesekundy As Byte
Dim 1s As Byte , Wyborled As Byte , Licznik As Bit
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1110000 : Portd = &B1111111
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
Sekundy = 0 : Sekundydzies = 0 : Minuty = 0 : Setnesekundy = 0
On Timer0 Przerwanie
Do : Loop : End
Przerwanie:
Timer0 = 6
Poczatek:
Incr Wyborled : If Wyborled = 4 Then Wyborled = 0 'cykl: 0...3
Portd = &B1111111 ' led wylaczone
Select Case Wyborled
Case 0:
Portb = Lookup(setnesekundy , Tabela)
Portd.3 = 0
Case 1:
Portb = Lookup(sekundy , Tabela)
Portd.4 = 0
Portb.7 = 0
Case 2:
Portb = Lookup(sekundydzies , Tabela)
Portd.5 = 0
Case 3:
Portb = Lookup(minuty , Tabela)
Portb.7 = 0
Portd.6 = 0
End Select
If Pind.2 = 0 Then Goto Stoper
If Pind.3 = 0 Then Goto Tajmer
If Pind.2 = 1 Then Goto Zerowanie
If Pind.3 = 1 Then Goto Zerowanie
Stoper:
If Pind.0 = 0 Then Licznik = 1 'S1 nacisniety -> start
If Pind.1 = 0 Then Licznik = 0 'S2 nacisniety -> stop
If Licznik = 1 Then
Incr 1s
If 1s = 255 Then
1s = 0 'metoda prob i bledow, zwiekszanie licznika co 1s
Incr Setnesekundy
If Setnesekundy = 10 Then
Setnesekundy = 0
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Sekundydzies
If Sekundydzies = 6 Then
Sekundydzies = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
End If '9 minut i 59 sekund
End If
End If
End If
End If
End If
Goto Poczatek
Tajmer:
If Pind.0 = 0 Then Licznik = 1 'S1 nacisniety -> start
If Pind.1 = 0 Then Licznik = 0 'S2 nacisniety -> stop
If Licznik = 1 Then
Incr 1s
If 1s = 255 Then
1s = 0 'metoda prob i bledow, zwiekszanie licznika co 1s
Decr Setnesekundy
If Setnesekundy = 255 Then
Setnesekundy = 9
Decr Sekundy
If Sekundy = 255 Then
Sekundy = 9
Decr Sekundydzies
If Sekundydzies = 255 Then
Sekundydzies = 5
Decr Minuty
If Minuty = 255 Then
Minuty = 9
End If '9 minut i 59 sekund
End If
End If
End If
End If
End If
Goto Poczatek
Zerowanie:
Sekundy = 0
Sekundydzies = 0
Minuty = 0
Setnesekundy = 0
Goto Poczatek
Return
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Pomocy