www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Branje tipke

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
plesec
Član
Član



Pridružen-a: Sre 16 Sep 2009 20:21
Prispevkov: 135
Aktiv.: 0.70
Kraj: Medvode

PrispevekObjavljeno: Pet Maj 07, 2010 2:56 pm    Naslov sporočila:  Branje tipke Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Maj 07, 2010 3:55 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
plesec
Član
Član



Pridružen-a: Sre 16 Sep 2009 20:21
Prispevkov: 135
Aktiv.: 0.70
Kraj: Medvode

PrispevekObjavljeno: Pet Maj 07, 2010 4:12 pm    Naslov sporočila:   Odgovori s citatom

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 Smile Z razlago mislim - program je preprost.

lp primož
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Maj 07, 2010 4:33 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
plesec
Član
Član



Pridružen-a: Sre 16 Sep 2009 20:21
Prispevkov: 135
Aktiv.: 0.70
Kraj: Medvode

PrispevekObjavljeno: Pet Maj 07, 2010 4:53 pm    Naslov sporočila:   Odgovori s citatom

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ž



fluxmeter_20100507_1.zip
 Opis:

Download
 Ime datoteke:  fluxmeter_20100507_1.zip
 Velikost datoteke:  14.83 KB
 Downloadano:  6 krat

Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Maj 07, 2010 5:30 pm    Naslov sporočila:   Odgovori s citatom

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 Sad .

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
plesec
Član
Član



Pridružen-a: Sre 16 Sep 2009 20:21
Prispevkov: 135
Aktiv.: 0.70
Kraj: Medvode

PrispevekObjavljeno: Sob Maj 08, 2010 5:43 pm    Naslov sporočila:   Odgovori s citatom

Silvo hvala. Res je bil problem z SREG.
Tudi z internim pullupom deluje brez problema.

lp primož
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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