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 

PIC branje analognih vhodov

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Iztok
Član
Član



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 22.40
Kraj: LJ

PrispevekObjavljeno: Pet Dec 17, 2004 9:32 pm    Naslov sporočila:  PIC branje analognih vhodov Odgovori s citatom

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



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

PrispevekObjavljeno: Pet Dec 17, 2004 10:07 pm    Naslov sporočila:   Odgovori s citatom

Iztok pozdravljen,

Sedaj nimam datasheta za omenjen pic pred sabo (sem namreč še v službi Confused ) 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
frenki
Moderator
Moderator



Pridružen-a: Ned 23 Feb 2003 21:26
Prispevkov: 6540
Aktiv.: 29.45
Kraj: Ljubljana (JN76GB)

PrispevekObjavljeno: Pet Dec 17, 2004 10:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Iztok
Član
Član



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 22.40
Kraj: LJ

PrispevekObjavljeno: Pet Dec 17, 2004 10:33 pm    Naslov sporočila:   Odgovori s citatom

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 Think .... gotovo sem kaj spregledal ampak je moje znanje še "prekratko". Najbolj pa me jezi, ker mi na en sam kanal dela BP. Brick wall


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

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



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

PrispevekObjavljeno: Pet Dec 17, 2004 10:43 pm    Naslov sporočila:   Odgovori s citatom

Iztok

Imaš tudi gumb "code" ki je namenjen ravno temu. Tvoj post sem "popravil" Wink

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



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.31
Kraj: Novo mesto

PrispevekObjavljeno: Pet Dec 17, 2004 10:47 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 08 Okt 2004 0:55
Prispevkov: 4974
Aktiv.: 22.40
Kraj: LJ

PrispevekObjavljeno: Pet Dec 17, 2004 10:47 pm    Naslov sporočila:   Odgovori s citatom

Silvo, zdaj RAZUMEM Exclamation Code ni enako Quote Idea



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. Wink
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Feb 12, 2009 9:49 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.15

PrispevekObjavljeno: Čet Feb 12, 2009 10:58 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Feb 12, 2009 11:32 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.15

PrispevekObjavljeno: Pet Feb 13, 2009 12:02 am    Naslov sporočila:   Odgovori s citatom

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 Smile

Aja pa debugiranje programov, ki jih ne moremo videti, je zelo tezko pocetje. Malo manj sparanja pri podatkih v bodoce ... saj gre zate Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sob Feb 14, 2009 1:15 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
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 -> Osnove programiranja PIC-a v Assembler-ju Č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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group