[bascom][Attiny2313] problem z programami

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
sven
-
Posty: 3
Rejestracja: 05 lis 2008, 22:55
Lokalizacja: Wrocław

[bascom][Attiny2313] problem z programami

Post autor: sven » 08 lis 2008, 20:56

Witam,

Mam pewien problem z programami pod Bascom (wersja 1.11.8.1)
Korzystam z płytki ZL11AVR, programatora USB-ISP (AVT451) oba samodzielnie zlutowane. Jeśli chodzi o naukę to korzystam z kursu Mikroprocesorowej Oślej łączki :)
Płytkę przetestowałem, za pomocą programu testowego - wyświetlacze LED działają poprawnie, zapalają się i gasną wszystkie segmenty.
Płytka jest zasilana przez USB albo poprzez niestabilizowane 9V
Prosty przerzutnik RS również działa bez problemu.
Kłopoty pojawiły się dopiero razem z poleceniem Toggle i tylko na jednym konkretnym porcie
Oto przykład:

Kod: Zaznacz cały

Config Portb = &B11111111                                  
       Portb = &B11111111                               
Config Portd = &B1111100                                    
       Portd = &B1110111                                   
Do                                                          
 If Pind.0 = 0 Then Toggle Portb.7                          
 If Pind.1 = 0 Then Portb.7 = 1                             
Loop
End
Ten program zadziała poprawnie na wszystkich portach (tzn. portb.0 do portb.6)
ale na portb.7 nie zapala się kropka dziesiętna wyświetlacza.
Dopiero zamiana polecenia TOGGLE na np. portb.7 = 0
daje rezultat.
Czy ktoś wie co jest przyczyną tego dziwnego zachowania?

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 09 lis 2008, 10:55

Być może chodzi o to, że jeśli naciśniesz przycisk to z racji tego ze wykonanie jednej komendy trwa 0,25us ( przy rezonatorze 4MHz) trudno jest wywołać tylko pojedyncze przełączenie pinu.

W praktyce częściej korzysta się z polecenia DEBOUNCE. Spróbuj wykorzystać je i napisz co się dzieje.

Pev4
-
Posty: 44
Rejestracja: 06 sie 2007, 19:26
Lokalizacja: Ostrowiec Św.
Kontakt:

Post autor: Pev4 » 15 lis 2008, 18:00

Witam.
Przedmówca ma rację, stan na PD.0 Jest zmieniany tak szybko że tego nie zauważasz, rozwiązanie:

Kod: Zaznacz cały

Config Portb = &B11111111                                 
       Portb = &B11111111                               
Config Portd = &B1111100                                   
       Portd = &B1110111                                   
Do                                                         
 If Pind.0 = 0 Then Toggle Portb.7 
 bitwait pind.0 = set                        
 If Pind.1 = 0 Then Portb.7 = 1                             
Loop
End

ODPOWIEDZ