[BASCOM] ATMEGA162 Wariujące przyciski...

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
Wojtas111
-
Posty: 4
Rejestracja: 04 sty 2010, 0:18
Lokalizacja: Warszawa

[BASCOM] ATMEGA162 Wariujące przyciski...

Post autor: Wojtas111 » 24 sty 2010, 13:25

Witam, mam problem, mianowicie procesor jest w gotowym układzie AVT-3505 i mam podejrzenia ze może być uszkodzony(?). Przy tym programie, który powinien zmienną L zwiększać o jeden po każdym naciśnięciu przycisku, dochodzi do dziwnego zjawiska bo tuż po włączeniu układu na LCD widać że zwiększa się zmienna L choć przycisk nie jest wciśnięty. Dzieje się tak w każdym programie z użyciem przycisków więc chyba jest to
wina procka ?

PS Jestem nowy w te klocki więc proszę mi wybaczyć jeśli jest to jakaś banalna sprawa...

Kod: Zaznacz cały

 
$regfile = "m162def.dat"
  $crystal = 6000000

Config Portd = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portd.4 , Rs = Portd.2       
Cursor Off Noblink
Cls
Lcd "RESET"
Wait 1
Cls

Dim L As Byte
L = 0
Do
If Pinb.0 = 1 Then
Incr L
Cls
Lcd L
Wait 1
End If
Loop

Awatar użytkownika
tom5555
Użytkownik
Posty: 625
Rejestracja: 23 sty 2008, 1:20
Lokalizacja: Zabrze
Kontakt:

Post autor: tom5555 » 24 sty 2010, 13:45

Prawdopodobnie przycisk masz włączony między masę a pin procka. Wtedy warunek powinien wyglądać tak:

Kod: Zaznacz cały

IF PinB.0 = 0 then
Przydało by się też włączyć wewnętrzny pull-up dla tego wejścia.

Wojtas111
-
Posty: 4
Rejestracja: 04 sty 2010, 0:18
Lokalizacja: Warszawa

Post autor: Wojtas111 » 24 sty 2010, 14:29

Zmieniłem trochę program tak aby korzystał z wbudowanych w układ przycisków i ten warunek. Lecz teraz przycisk tak jakby działa tzn. kiedy go wcisnę to L jest zmieniana o jeden i przez chwile po puszczeniu przycisku jest ok lecz po kilku sekundach nalicza sie kilka razy i znów przestaje i tak w kółko... Czy pull-up'a da się wstawić programowo? w tej chwili nie mam dostępu do części...

Kod: Zaznacz cały

$regfile = "m162def.dat"
  $crystal = 6000000

Config Portd = Output
Config Porte.0 = Input
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portd.4 , Rs = Portd.2
Cursor Off Noblink
Cls
Lcd "RESET"
Wait 1
Cls

Dim L As Byte
L = 0
Do
If Pine.0 = 0 Then
Waitms 25
If Pine.0 = 0 Then
Incr L
Cls
Lcd L
Wait 1
End If
End If
Loop

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 24 sty 2010, 14:49

Rezystory pull-up to wewnętrzne rezystory aktywujesz je przez wpisanie do rejestru PORTx logicznego 1.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 24 sty 2010, 15:08

Możesz też wykorzystać wejście INTx które ustawiasz na wybrane zbocze i wtedy tylko to zbocze wyzwala przerwanie.

Wojtas111
-
Posty: 4
Rejestracja: 04 sty 2010, 0:18
Lokalizacja: Warszawa

Post autor: Wojtas111 » 24 sty 2010, 15:29

OK, jakoś udało mi się to rozkminić dzięki waszej pomocy :wink:

ODPOWIEDZ