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 

Obnašanje Porta A na AVR-jih

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Ned Sep 14, 2008 12:26 pm    Naslov sporočila:  Obnašanje Porta A na AVR-jih Odgovori s citatom

I/O Porte uporabljam samo kot I/O porte, no morda včasih za interrupt, no in seveda rxd/txd za komunikacijo.
Te dni pa sem naletel na vsaj zame nenavadno obnašanje porta A.

En pin porta A vežem s tipko na maso, in z led diodo in preduporom na plus.
Tako ima port dvojno funkcijo, prikazuje z ledico neko stanje, in odtipavam tipko, s katero krmilim program. To počnem tako:

Koda:
do
...
  Debounce Tipka , 0 , Tipkasr , Sub     'vsebuje config pin = input
  Config Ledica = Output                      ' pretaknem spet na output 
  Ledica = Cetrtsek.2                           ' in dam spet signal na ledico
  ' Tipka le isti pin, kot je ledica port recimo  pina.0 in porta.0
...
loop


Ker v programu uporabljam tudi Timer0, me je presenetilo, to, da zadeva popolnoma v redu dela, če delam to na pinu port-a B, če pa delam na pinu porta A pa opažam, da močno zavre delo timerja 0.
Verjetno tako, da nekaj časa onemogoči interrupte.

Ker mi je zadeva popolnoma nejasna, sprašujem, ali morda kdo od vas ve, kaj je na tem.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten 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: Ned Sep 14, 2008 12:51 pm    Naslov sporočila:   Odgovori s citatom

Še en primer, zakaj nisem pristaš raznih Bas* Doubt PortA nima nobene veze z TO
Prav tako na delovanje časovnika ne sme vplivati noben interupt. A je možno program videti tudi v assemblerski kodi. Potem bi lahko točno analizirali nastalo težavo.

PS.

Sedaj sedaj nimam časa (grem v službo) Bom jutri teh nekaj vrstic za test napisal v assemblerju.

_________________
lp
Silvo
Nazaj na vrh
Odsoten 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: Tor Sep 16, 2008 11:46 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:


PS.

Sedaj sedaj nimam časa (grem v službo) Bom jutri teh nekaj vrstic za test napisal v assemblerju.


Zdaleje sem se spomnil - ravno sem dal 2313 na testno ploščo.

Evo na hitro napisano.

Vilko, lahko poskusiš. Vzel sem 3 led diode vezane preko upora na +. Ena je na RA0 druga je na RD2 tretja je na RD4. Tipka1 med RD3 ter RA0 Tipka2 med RD3 ter RDRD4.
Vezava kot si jo omenil ti (En pin porta A vežem s tipko na maso, in z led diodo in preduporom na plus.) Kajti, če je pin definiran kot izhod ter je na njem visoko stanje boš v trenutku ko tipko stisneš naredil kratek stik. Rešitev je, da daš tudi s tipko upor - v tem primeru se bo led dioda prižgala - oziroma storiš kot sem to storil sam. Ko pin na katerem je led definiram kot vhod takrat pin, ki je skupni konec tipke definiram kot nizek izhod. Preverem stanje skupni pin definiram kot vhod ter pine na katerih so led diode kot izhod.

Kaj napisano počne.
Ena ledica intervalno utripa. (test Timer0 prekinitve)
Z tipkama pa se lahko vključuje/izključuje led dioda ki je vezana na isti pin kot tpka.

Koda:

;------------------------------------
;testni program pin kot vhod/izhod
;Timer0 prekinitev
;------------------------------------
.include "tn2313def.inc"

.def TipkaA=r2
.def TipkaD=r3


.org 0x0
   rjmp GlProg
.org 0x06
   rjmp T0Prek
.org 0x13


GlProg:
   ldi r16,low(RAMEND)
   out SPL,r16

   sbi DDRA,0            ;port RA0 izhod
   ldi r16,0b10100
   out DDRD,r16         ;port RD4,RD2 izhod
   sbi PORTD,4            ;prižgem led na RD4
   cbi PORTA,0            ;prižgem led na RA0
   ldi r16,0b10
   out TIMSK,r16         ;vklop owerflow prekinitve
   ldi r16,0b11
   out TCCR0B,r16   ;preddelilnik 1/64
   sei                     ;vklop prekinitev



Zanka:
   sbrc TipkaA,0      ;je tipka na RA0 stisnjena?
   rjmp Tipka2         ;ne preverjam tipko na RD7
   sbis Porta,0      ;led na RA0 Izključen? (visoko stanje na pinu)
   rjmp LedA_off      ;ne
   cbi PORTA,0         ;da zato ga vključim
   rjmp Konec
LedA_off:
   sbi PORTA,0
Konec:
   sbrs TipkaA,0   ;čakam, da se tipka spusti
   rjmp PC-1
   rjmp Zanka      ;nazaj na zanko

Tipka2:
   sbrc TipkaD,4
   rjmp Zanka
   sbis PORTD,4
   rjmp LedD_off
   cbi PORTD,4
   rjmp Konec2
LedD_off:
   sbi PORTD,4
Konec2:
   sbrs TipkaD,4
   rjmp PC-1
   rjmp Zanka


;--------------------------------
;timer0 overflow prekinitev
;--------------------------------
T0Prek:

;branje tipk na pinih RA0 ter RD4 kateri
;so istočano izhodi

   cbi DDRA,0      ;RA0 je vhod
   cbi DDRD,4      ;RB0 je vhod
   cbi PORTD,3      ;nizko stanje skupnega pina za tipke
   sbi DDRD,3         ;skupni pin vklučim kot izhod
   nop
   nop               ;počakam da se stanje na pinih stabilizira
   in TipkaA,Pina
   in TipkaD,Pind

   cbi DDRD,3      ;izklop skupnega pina tipk
   sbi DDRA,0      ;vrnem pine kot izhode
   sbi DDRD,4      ;

;utripanje ledice na portu RB2
   dec r17
   breq Naprej
   reti
Naprej:
   sbic PORTD,2
   rjmp PinOff
   sbi PORTD,2
   reti
PinOff:
   cbi PORTD,2
   reti
 



vilko.zip
 Opis:

Download
 Ime datoteke:  vilko.zip
 Velikost datoteke:  6.33 KB
 Downloadano:  2 krat


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



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Tor Sep 16, 2008 11:56 pm    Naslov sporočila:  tipka/ledica Odgovori s citatom

[quote="Silvo"]
Silvo je napisal/a:


[size=10]PS.
Vezava kot si jo omenil ti (En pin porta A vežem s tipko na maso, in z led diodo in preduporom na plus.) Kajti, če je pin definiran kot izhod ter je na njem visoko stanje boš v trenutku ko tipko stisneš naredil kratek stik.
[/code]


To je res, a očitno take kratkočasne kratke stike, saj tipke ne držiš pretežno dol, mikroprocesor dopušča. Bom pa res dal drugič tipki zaporedno upor, da ga ne izzivam preveč.

Kaj si mi hotel povedat, ne razumem preveč. Ker sem imel pin porta b prost, sedaj uporabljam za tipko/ledico portb in dela kot treba, ne zavira interruptov in timerja.

Kolikor sem skušal razumeti assemblerske ukaze, ki si jih pripel, si ravnotako uporabil timer in testiraš pritisk na tipko. Kaj si dosegel? Ti timer teče v redu ne glede na katerem portu imaš tipko/ledico?

Mimogrede, imam nek disassembler, ki ga pa ne znam uporabljati, nič mi ne naredi. Imaš kak namig, kak disassembler in assembler uporabiti? Jaz sem pri 8051 si često pomagal, da sem razumel, kako to dela, da sem del program disassembliral in potem študiral listo assemblerskih ukazov. A imel sem orodje, ki sem ga znal uporabiti. Pri avr-u ga nimam.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten 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: Sre Sep 17, 2008 12:14 am    Naslov sporočila:   Odgovori s citatom

Citiram:
Kaj si mi hotel povedat, ne razumem preveč.


Zgoraj si omenil:

Citiram:
če delam to na pinu port-a B, če pa delam na pinu porta A pa opažam, da močno zavre delo timerja 0...]


Hotel sem ti povedati, da timer nima nobene veze z pini ter neovirano teče ne glede na to, kaj se dogaja s pini - so vhodi izhodi nizki visoki... Delovanje timerja ponazarja utripajoča led.
V tvojem primeru očitno "nekaj" uporablja timer?

Branje tipk je v assemblerji možno izvesti na x načinov. V gornjem primeru se ob prekinitvi T0 izvaja branje tipk rezultat se shrane v dva registra. Stanje pa se preverja izven prekinitvene rutine.

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



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sre Sep 17, 2008 8:39 am    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:

V tvojem primeru očitno "nekaj" uporablja timer?


Ali pa onemogoča prekinitve, in potem timerinterrupt nima moči.
Debounce je ukaz, ki poleg tega, da preverja spremembo stanja pina iz 1 na 0, tudi zadrži delovanje toliko časa, da odskakovanje tipke mine, načeloma 25ms, a ta zakanistvena zanka bi se morala v obeh slučajih odvijati v glavnem programu brez tega, da zavre delo interrupt rutine.

Kot že rečeno: Jaz če ne morem skozi zid, grem okoli njega. In to sem storil.

Če te prav razumem, si ti to isto naredil v assemblerju na pinu porta a, tako utripanje ledice, kot odtipavanje tipke na istem pinu porta A in nisi opazil zakasnitve timerja. Potem je stvar definitivno skrita nekje v bascomu.

Hvala.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten 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: Sre Sep 17, 2008 1:22 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Če te prav razumem, si ti to isto naredil v assemblerju na pinu porta a, tako utripanje ledice, kot odtipavanje tipke na istem pinu porta A in nisi opazil zakasnitve timerja. Potem je stvar definitivno skrita nekje v bascomu.


Stvar je definitvno skrita v višjenivojskem jeziku. Dvomim sicer, da bi avtor za zakasnitev za tako enostavno (nepomembno) stvar, katero spišeš dve assemblerski vrstici uporabil kak hardwerski timer ter s tem onemogočil "velik kos" vgrajene periferije za kako drugo pomembnejšo rabo. Še manj pa, da bi izključeval morebitno vključene prekinitve. Malo sumim, da tisti kratek stik v tvoji varianti povzroča reset procesorja. (poskusi tisto izvesti drugače - z uporom oz kot sem to sam opisal zgoraj)
Vsekakor pa bi bilo zanimivo videt assemblersko kodo.

_________________
lp
Silvo
Nazaj na vrh
Odsoten 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 -> AVR, LPC900, x51 Č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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group