 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
plesec Član

Pridružen-a: Sre 16 Sep 2009 20:21 Prispevkov: 135 Aktiv.: 0.70 Kraj: Medvode
|
Objavljeno: Pet Maj 07, 2010 2:56 pm Naslov sporočila: Branje tipke |
|
|
Imam problem - uporaba tipke na AT TINY 2313
Tipko imam priključeno na PD3 (med GND in PD3), za vsak slučaj imam med PD3 in +5V še pull up upor 10k (kljub temu da imam vključen interni pull up).
Kar hočem je da se ob pritisku na tipko določeni registri zbrišejo - ne vem zakaj ampak malo naključno se ti registri zbrišejo kar sami od sebe.
Pripenjam del kode - upam da je ta izsek zadosti, lahko pa priprem tudi celo kodo.
Gre se pa za števec pretoka vode - kaže trenutni pretok in količino pretočene vode (to hočem imet možnost resetirat (postavit na 0) prek RS232 (to deluje) ali s pritiskom na tipko.
Koda ki je problematična je od loop1: naprej
; PD3 (INT1) - vhod za reset - ce ga sklenemo na GND - reset stevca
in r16, PORTD
sbr r16, (1<<PD2) | (1<<PD3)
out PORTD,r16
in r16, DDRD
cbr r16, (1<<DDD2) | (1<<DDD3)
out DDRD,r16
clr r0 ;nicla - konstantno cez cel program
clr r1
inc r1 ;ena - konstantno cez cel program
clr r16
clr r29
clr r30
clr r17 ;pretoceni litri
clr r18 ;pretoceni litri
clr r19 ;pretoceni litri
clr r20 ;ostanek pretoka
_main:
rcall lcd_init ; Display initialisieren
rcall lcd_clear ; Display löschen
sei
loop:
sbis UCSRA, RXC
rjmp loop1
in r28, UDR
cpi r28, 127
brne loop1
cli
clr r17 ;pretoceni litri
clr r18 ;pretoceni litri
clr r19 ;pretoceni litri
clr r20 ;ostanek pretoka
sei
loop1:
;inc r29
add r29, r1
adc r30, r0
sbic PIND, PIND3
clr r30
cpi r30, 255
brne loop
cli
clr r17 ;pretoceni litri
clr r18 ;pretoceni litri
clr r19 ;pretoceni litri
clr r20 ;ostanek pretoka
sei
clr r30
rjmp loop
lp primož
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 07, 2010 3:55 pm Naslov sporočila: |
|
|
Koda: |
sbic PIND, PIND3
clr r30
cpi r30, 255 |
Program ti tukaj pobegne naprej.
Če hočeš počakati na pritisnjeno tipko bo potrebno napisati takole:
Koda: |
sbic PIND, PIND3
rjmp PC-1
clr r30
cpi r30, 255
.....
|
(seveda je dobro, da se potem ko se zgodi tisto kar želiš preveriš, če je tipka že spuščena)
Koda: |
sbis PIND, PIND3
rjmp PC-1 |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
plesec Član

Pridružen-a: Sre 16 Sep 2009 20:21 Prispevkov: 135 Aktiv.: 0.70 Kraj: Medvode
|
Objavljeno: Pet Maj 07, 2010 4:12 pm Naslov sporočila: |
|
|
Silvo je napisal/a: |
Koda: |
sbic PIND, PIND3
clr r30
cpi r30, 255 |
Program ti tukaj pobegne naprej.
|
Da malo razložim - registra r29 (LOW BYTE), r30 (HIGH BYTE) uporabim kot števec (neke sorte debounce) - vedno ko se izvede zanka se vrednost poveča za 1. Da se izvrši koda za brisanje števcev pretoka mora biti 2na16 zapodednih branj tipke enako 0.
Kaj sem želel naresti: če pritisnem tipko (na vhodu 0V) se r30 NE postavi na 0 ampak šteje naprej. In če doseže dovolj veliko vrednost potem se moji števci pretoka zbrišejo ... (mišljeno tako da je treba tipko za malo časa stisnit - števec mora prešteti do 2na16 in svako štetje recimo traja okoli 10 ciklov - če ne upoštevam še ciklov ki se morda vmes zgodijo v kaki prekinitveni rutini).
Če je na vhodu 5V - tipka na GND ni sklenjena - potem se ob takem prehodu zanke r30 postavi na 0. In nadaljna primerjava cri r30, 255 ni nikoli uspešna in se števci pretoka ne zbrišejo.
Uff sem zakompliciral Z razlago mislim - program je preprost.
lp primož
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 07, 2010 4:33 pm Naslov sporočila: |
|
|
Trenutno nimam časa študirati prilepljene kode- bom to storil zvečer. Mimogrede - vidim, da vključiš prekinitve. Kaj delaš v prekinitveni rutini. Shraniš stanje statusnega registra ter ga po vrnitni iz prekinitve vrneš? Uporabljaš v prekinitveni rutini iste restistre kot zunaj prekinitve?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
plesec Član

Pridružen-a: Sre 16 Sep 2009 20:21 Prispevkov: 135 Aktiv.: 0.70 Kraj: Medvode
|
Objavljeno: Pet Maj 07, 2010 4:53 pm Naslov sporočila: |
|
|
Pomojem bo statusni register problem. Hvala.
Stvar je res delovala malo "naključno".
Samo še vprašanje - nasplošno: Ali je pri AVRjih smiselno imeti zunanje upore za pullup-e? Škodi najbrž ne, kake velike koristi pa tudi ne vidim.
Ampak poskusim mislim da šele v ponedeljek. (Ali me bo pa tako matralo da bom šel jutri po teku trojk probat ... )
Če bi kdo gledal pa dodajam še zazipan projekt za AVRStudio. Je preglednejše kot copy paste moje kode zgoraj - tabulatorji so nekako izginili ...
lp primož
Opis: |
|
 Download |
Ime datoteke: |
fluxmeter_20100507_1.zip |
Velikost datoteke: |
14.83 KB |
Downloadano: |
6 krat |
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.93 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 07, 2010 5:30 pm Naslov sporočila: |
|
|
Za rabo tipk so interni pullupi čisto primerni. Za razne protokole kot so recimo I2C,1Wire pa sam raje uporabljam zunanje upore.
Glede programa. Ob vstopu v prekinitveno rutino shrani SREG nekam, (v začasni register, sram, sklad...). Po končani prekinitveni rutini ga vrni. V glavni rutini imaš nekaj instrukcij brne Ker program teče v zanki, je zelo velika verjetnost, da se prekinitev zgodi pred instrukcijo. Če statusne bite prekinitvena rutina spremeni, je "štala" tu .
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
plesec Član

Pridružen-a: Sre 16 Sep 2009 20:21 Prispevkov: 135 Aktiv.: 0.70 Kraj: Medvode
|
Objavljeno: Sob Maj 08, 2010 5:43 pm Naslov sporočila: |
|
|
Silvo hvala. Res je bil problem z SREG.
Tudi z internim pullupom deluje brez problema.
lp primož
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|