|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Iztok Član
Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 22.18 Kraj: LJ
|
Objavljeno: Pet Dec 17, 2004 9:32 pm Naslov sporočila: PIC branje analognih vhodov |
|
|
Pozdravljeni
Napisal sem program za 16F877A pri kateri naj bi bral 4 analogne vhode. Ko sem testiral z enim samim vhodom je stvar delovala brez problemov, ko pa sem program razširil tako, da program bere vsaj dva ali vse štiri vhode hkrati pa se dogaja, da vhodi vplivajo drug na drugega, tako da npr. na AN0 spremenim vhodno napetost in se to pozna na vrednosti AN2, čeprav se napetost na tem drugemu ni spremenila. Poiskusil sem tudi z 300mS zakasnitvijo pa ni razlike.
Če program deluje z enim vhodom (izključenim call RdAN1) kot je v tem primeru je v redu, če pa vklopim še izvajanje (call RdAN1) pa se dogaja prej opisano.
Mi lahko svetujete kaj bi lahko bil vzrok? |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14567 Aktiv.: 64.97 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Dec 17, 2004 10:07 pm Naslov sporočila: |
|
|
Iztok pozdravljen,
Sedaj nimam datasheta za omenjen pic pred sabo (sem namreč še v službi ) Sumem, da je ravno problem v tem, da AD blok še ni pripravljen. Branje bi moral izvesti nekako takole:
- določiš željene pine, ki jih boš uporabil kot analogne.
xx- izbereš kanal katerega želiš merit
- vklopiš AD modul
- počakaš da se modul pripravi (to zna biti tvoj problem) poglej v datashet, če se še prav spomnim je tam en izračun za minimalni "acquisition time"
- izvedeš meritev
- počakaš, da je meritev končana (kontrola brisanja bita "GO")
- prebereš rezultat
- ciklus se ponovi pri branju naslednje AD vrednosti tam kjer sem označil "xx" _________________ lp
Silvo |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6570 Aktiv.: 29.30 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Pet Dec 17, 2004 10:07 pm Naslov sporočila: |
|
|
Nekoliko izven konteksta teme, vendar vseeno, lahko podaš vsaj en razlog s kakšnim namenom je koda vključena kot slika?
Lp, Frenki |
|
Nazaj na vrh |
|
|
Iztok Član
Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 22.18 Kraj: LJ
|
Objavljeno: Pet Dec 17, 2004 10:33 pm Naslov sporočila: |
|
|
Silvo,
- pini so določeni v ADCON1 kot '01000010'
- kanal je izbran v ADCON0 kot '10000001' in '10010001'
- vklop AD modula je narejen z: bsf ADCON0,2
- čakanje na pripravljenost modula so zanke wa0 in wa2
... itd ...... vsaj mislim tako .... gotovo sem kaj spregledal ampak je moje znanje še "prekratko". Najbolj pa me jezi, ker mi na en sam kanal dela BP.
Frenki, razlog je res samo eden: pri izvedbi z copy/paste načinom zadeva izgleda takole, kar pa je vsaj zame precej bolj nepregledno (brez tabulatorskih zamikov in barv). Upam da zato ni kaj narobe.
Koda: |
;********************************************************************
; Start
....................
Bank1
movlw b'01000010' ;Definiramo A/D vhode in pretvorbo
movwf ADCON1 ;kot digitalne in analogne
....................
;********************************************************************
; Glavna zanka
....................
call RdAN0
; call RdAN2
....................
;********************************************************************
RdAN0
movlw b'10000001' ;F-OSC/64, / Ch.0 (AN0) / A/D vklop
movwf ADCON0 ;01...... ..000... .......1
bsf ADCON0,2 ;Vklop branja
; pausems .300 ;Testna kasnitev
wa0 btfsc ADCON0,2 ;\ Zanka - čakanje
goto wa0 ;/ na branje
movf ADRESH,W ;\ Vpis rezultata
movwf AnIn0H ;/ v register AnIn0H
return
;********************************************************************
RdAN2
movlw b'10010001' ;F-OSC/64, / Ch.2 (AN2) / A/D vklop
movwf ADCON0 ;01...... ..010... .......1
bsf ADCON0,2 ;Vklop branja
; pausems .300 ;Testna kasnitev
wa2 btfsc ADCON0,2 ;\ Zanka - čakanje
goto wa2 ;/ na branje
movf ADRESH,W ;\ Vpis rezultata
movwf AnIn2H ;/ v register AnIn2H
return
;********************************************************************
|
LP Iztok |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14567 Aktiv.: 64.97 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Dec 17, 2004 10:43 pm Naslov sporočila: |
|
|
Iztok
Imaš tudi gumb "code" ki je namenjen ravno temu. Tvoj post sem "popravil"
Glede AD konverzije:
Torej pavzi sta načeloma dve - prva ko modul vključiš, druga pa potem ko čakaš, da je konverzija končana. Ko bo konverzija končana poskusi AD izključit ter nato ponovi vse od začetka... izbira kanala ->vklop modula ->pavza.... _________________ lp
Silvo
Nazadnje urejal/a Silvo Pet Dec 17, 2004 10:48 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
Umnik Član
Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.27 Kraj: Novo mesto
|
Objavljeno: Pet Dec 17, 2004 10:47 pm Naslov sporočila: |
|
|
Tako kot je rekel Silvo: Verjetno je težava Acquisitoin Time (lahko rečemo tudi Sampling Time).
Če bi tisto pavzo 300ms dal pred ukaz bsf ADCON0,2 (se pravi vrstico višje) bi moralo zagotovo delat. Drugače pa za ta čas obstaja enačba navedena v datasheetu v poglavju o A/D pretvorbi. Težava je mislim da v polnjenju kondenzatorja (sampling?), mi seveda malo (nekaj 10uS) počakamo, da se le ta napolni. |
|
Nazaj na vrh |
|
|
Iztok Član
Pridružen-a: Pet 08 Okt 2004 0:55 Prispevkov: 4974 Aktiv.: 22.18 Kraj: LJ
|
Objavljeno: Pet Dec 17, 2004 10:47 pm Naslov sporočila: |
|
|
Silvo, zdaj RAZUMEM Code ni enako Quote
Imata prav glede pavze pred branjem analognih inputov!
Zadostuje že 1ms. Jaz pa sem vztrajno rinil pavzo za bsf ADCON0,2, da bi se napetost na kondenzatorju medtem stabilizirala potem pa bi se šele začelo branje podatka. Nisem pa vedel, da je začetek stabilizacije kondenzatorja že narejeno s tem, da je port selektiran v ukazu ADCON0 = b'10000001'.
Najlepša hvala obema. Se ob priliki oddolžim. |
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Feb 12, 2009 9:49 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 24.91
|
Objavljeno: Čet Feb 12, 2009 10:58 pm Naslov sporočila: |
|
|
Kaj pa je vpisano v ADCON0 ?
Kaj imas vpisano v TRIS registru ?
Po cem sklepas da 0110b ali 0111b v ADCON1 ne izkljuci analognih vhodov ?
Po cem sklepas da 1111b v ADCON1 izkljuci vse analogne vhode ? _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Feb 12, 2009 11:32 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 24.91
|
Objavljeno: Pet Feb 13, 2009 12:02 am Naslov sporočila: |
|
|
ADCON0 (med drugim) izbira kanal na vhodnem multiplekserju.
ADCON1 (med drugim) izbira ali je digitalni del prikljucen na pin ali ne.
Ti moras torej dolociti pin kot vhod (to si ze naredil), dolociti kateri pini so odklopljeni od digitalnega I/O dela ter izbrati Vref+ in Vref-, izbrati kanal za konverzijo in sele nato pognati konverzijo ter poslati rezultat. Vse to je sicer v datasheetu nasteto v pravilnem vrstnem redu (stran 185 od 332, levo), a imam obcutek, da si ti vse skupaj samo povrsno preletel. Ko bos ze ravno tam, preberi celo poglavje do kocna, ker so naprej se zelo pomembne reci, za katere imam tudi obcutek, da ne ves da obstajajo.
Popravi program tako, kot je pravilno in potem porocaj, ce se vedno stvari ne delujejo tako, kot pise v datasheetu
Aja pa debugiranje programov, ki jih ne moremo videti, je zelo tezko pocetje. Malo manj sparanja pri podatkih v bodoce ... saj gre zate _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Sob Feb 14, 2009 1:15 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
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: 112 dni
Powered by phpBB © 2001, 2005 phpBB Group
|