Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   403 / 1319
(#) delmur82 válasza vilmosd hozzászólására (») Jan 28, 2009 /
 
Köszi! Világos.
Még csak annyi hogy mivel nekem 2 érzékelőm lessz, két Analóg bemenetre van szükségem. Hogy váltogatok a két bemenet között hogy melyikről olvasson?
Attól függ hogy az ADCON0(CHS2:CHS0) biteket hogyan állítom be? Ezt minden váltásnál át kell állítani?

Csak kiváncsiságból miért nem lehet olyan variációt beállítani hogy a referencia fesz. -ek a tápról, és csak 2 analóg bemenet. Miért csak hármat lehet?
(#) watt válasza gtk hozzászólására (») Jan 28, 2009 /
 
Megbocsátjuk, ha ideírod, hogy hány bites a config szó, és a 0044 szerint bitenként hogy néz ki a konfig!
(#) watt hozzászólása Jan 28, 2009 /
 
Icserny jóvoltából ráterelődött a figyelmem egy égetőáramkörre(LVP programozónak indult). Nem akarom két helyen tárgyalni a kérdést, de úgy néz ki, nem csak a PICKit2 topicba való a téma, ill. inkább nem oda, mivel nem csak a PK2 felprogramozására jó, hanem bármilyen PIC-et felprogramoz, amihez találni megfelelő égető programot.
A rajz rémesen egyszerű:
Kép: Hivatkozás
Kipróbáltam és még tesztelem, de eddig hiba nélkül működik. Az égetési folyamatot leírtam a PICKit2 topicban. Ha lesz időm, és nem találok, vagy találtok benne hibát, hamarosan írok róla egy cikket is.

(#) skeletornb válasza watt hozzászólására (») Jan 28, 2009 /
 
Nem rossz. Ahogy nézem az elv hasonló az Oshon-hoz és a WPB-hez. Gondolom a programkompatibilitás megvan.
(#) vilmosd válasza delmur82 hozzászólására (») Jan 28, 2009 /
 
Hali
Na valami ilyen szekvenciaval lehet megoldani a csatornak kozti valtast:
  1. ;CH0
  2.         bsf     ADCON0,GO       ; A/D Conversion start
  3. Wait0   btfss   PIR1,ADIF       ; Wait to end of conversion
  4.         goto    Wait0
  5.         movlw   B'01000101'     ; Fosc/8, A/D enable
  6.         movwf   ADCON0          ; 1. chanel (AN1) select
  7.         .
  8.         .
  9.         .
  10.  
  11. ;CH1
  12.         bsf     ADCON0,GO       ; A/D Conversion start
  13. Wait1   btfss   PIR1,ADIF       ; Wait to end of conversion
  14.         goto    Wait1
  15.         movlw   B'01000001'     ; Fosc/8, A/D enable
  16.         movwf   ADCON0          ; 0. chanel (AN0) select
  17.         .
  18.         .
  19.         .

A lenyeg: ha csinaltal egy konverziot utana rogton at kell valtani a csatornat mert a mintavetelezo kapacitas feltoltesehez ido kell.
A masik kerdesedre: lehet ugy is hasznalni de mindenfelekepp elhasznal 3 bemenetet. Ha 16F684-690-et hasznalsz ott minden analog csatornat kulon tudnal valasztani.
Udv Vili
(#) watt válasza skeletornb hozzászólására (») Jan 28, 2009 /
 
Igen. Kipróbáltam a WPB-vel és a WINPIC800-al, de 100%. hogy megy az oshon 16F-es és 18F-es programjával is. A PGD és PGC mindegyik program beállításánál nem invertált. A többi vonal nem számít, mivel kézzel van kapcsolva.
(#) delmur82 válasza vilmosd hozzászólására (») Jan 28, 2009 /
 
Köszi!

Teljesen fullos a válasz.
Most már meg kell vennem a PIC - et.
(#) vilmosd válasza delmur82 hozzászólására (») Jan 28, 2009 /
 
Hali
Majd elfeledtem :
Minden AD konverzio utan be kell szurni az int bit torleset
bcf PIR1,ADIF mert ez nem megy automatikusan.
Udv Vili
(#) trudnai válasza watt hozzászólására (») Jan 28, 2009 /
 
Idézet:
„WOrd alatt csak egy byte hosszu adat van: 0044”


Ooo, hat 0044 elfer 1 byte-on, nem ertem mi a problemad
(#) watt válasza trudnai hozzászólására (») Jan 29, 2009 /
 
Micsoda megközelítéseket ismersz fel! Valóban...
(#) delmur82 válasza vilmosd hozzászólására (») Jan 29, 2009 /
 
Köszi!

Még lenne egy olyan hogy a két szenzor mennyire fog azonos jeleket adni. Szóval mi van ha A/D konvertálás után leszz kis eltérés a két érték között? Mondjuk az egyik digitális 700 a másik pedig 701. Nem rángatózhat állandóan a motor. Hagyjak neki egy határt hogy mondjuk ha 690 és 710 között mozog a két szenzor értéke akkor még egyenlőnek tekinthető?
(#) trudnai válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Idézet:
„Még lenne egy olyan hogy a két szenzor mennyire fog azonos jeleket adni. Szóval mi van ha A/D konvertálás után leszz kis eltérés a két érték között? Mondjuk az egyik digitális 700 a másik pedig 701. Nem rángatózhat állandóan a motor. Hagyjak neki egy határt hogy mondjuk ha 690 és 710 között mozog a két szenzor értéke akkor még egyenlőnek tekinthető?”


Digitalis filtert kell beepiteni...
(#) watt válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Az a megoldás, hogy több mérést csinálsz és átlagolod, akkor nem fog annyira ugrálni az érték. Egyébként sem kell folyamatosan beavatkoznod, elég másodpercenként, vagy még ritkábban, és akkor nem fog ugrálni össze vissza. Közben a mérés is pontosabb lesz.
A beavatkozás mértékét pedig az eltéréssel arányosan kell megtenni, akkor gyorsan rááll és finoman rajta marad. Ez még nem PID, de már jobb az ON-OFF szabályzónál.
(#) bbalazs_ válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Gondolom, hogy a ket szenzor egy-egy feszoszto resze lesz. Az ellenallasok szornak, megpedig elegge, ugyhogy valoszunuleg kompenzacio szukseges, ez lehet egy kis potmeter vagy fixen bekotott plusz ellenallas a megfelelo oldalon. A masik dolog, hogy valoszinuleg a ket fotoellenallas sem lesz tokeletesen egyforma meg valoszinuleg a karakterisztikajuk sem.
(mas lesz az elteres gyengebb es mas eros fenyben).
Az egyik megoldas, hogy ugyanazt a szenzort hasznalod mindket oldalra valami mechanikus vagy fenyveto cuccal - ez azonban szerintem csak ujabb problemakat szul.
Mindenkeppen kell hagyni nemi mozgasteret, hogy milyen tartomanyon belul vegye elteronek a ket erteket. Elegendoen nagy belso EEPROM eseten tablazattal elvileg minden egyes ertekhez rendelhetsz szabalyozo erteket, szoval a karakterisztika es az eltero ertek kikuszobolheto, az oregedesi valtozas azonban igy sem.

Latom, napkovetot epitesz, ez egytengelyes vagy kettengelyes lesz? Tehat kell valami fokuszpontba gyujto dolog vagy csak forduljon a nap fele siman?

Az erzekelo mindket esetben elegge egyszeru, ket fotoellenallas egymas melle es kozejuk egy fekete lap fuggolegesen. Ha kettengelyes, akkor ugyanezt a MASIK mozgathato tengelyre, de vizszintesen. A beallas sorrendje: 1:odafordul, 2:odabolint vagy odaemel.
(#) delmur82 hozzászólása Jan 29, 2009 /
 
Köszönöm a válaszokat.
Nekem csak az elektronikát kéne megépítenem. Egy ismerősöm épít forgató mechanikát és neki kéne szabályzás hozzá. Úgyhogy elkezdtem vizsgálgatni hogyan tudnám megcsinálni és mivel mostanában tanulgatok PIc - ezni kapóra jön hogy kicsit tanuljak A/D konvertálni meg ilyesmi.
Viszont bármelyik megoldást választom mindnél 10 bites értékkel kell dolgoznom mert ugye a digitális érték az (ADRESH:ADRESL) regiszterpárban tárolódik le . Kicsit megzavar a 10 bit. Hogyan adok össze pl. két 10 bites értéket, és az eredményt hogyan tárolom el majd hogyan osztom egy számmal? Ilyen programozástechnikai dolgok érdekelnének.
(#) watt válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Két 8 bites regisztert kell 16 bitesnek értelmezni és velük a műveleteket elvégezni, kezelni az átviteleket.
Sok ilyen jellegű rutint lehet találni a microchip oldalán, érdemes nézelődni. Ez nem PIC kérdés, inkább bináris matematika. Mindegyik gép így csinálja.
(#) icserny válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Idézet:
„Hogyan adok össze pl. két 10 bites értéket,”

Ugyanúgy, mint papíron ceruzával! Helyiértékenként, s azután az átvitelt (ami itt a STATUS regiszter C bitjében keletkezik) hozzáadod a magasabb helyiérték összegéhez. Természetesen "jobbraigazított" eredményt kérj az ADC-től!

Az átlagolás menete:


Kezdéshez kinullázod az összeget tároló rekeszeket. (Mondjuk SUMH:SUML)

Azután ciklikusan mérsz, majd:
1. SUML = ADRESL + SUML
2. Ha STATUS.C=1 akkor SUMH=SUMH+1
3. SUMH=ADRESH+SUMH

Ha lejárt a ciklus, akkor már csak be kell osztani...

Idézet:
„majd hogyan osztom egy számmal?”

Ha jót akarsz magadnak, akkor ne 10 mérést átlagolj, hanem kettő hatványa legyen a mintavételek száma. Így 2^n db. minta esetén n bitnyi jobbraléptetéssel megúszható az osztás.
Speciálisan pl. 256 minta átlagolásánál elhagyod az alsó bájtot...
(#) Bob_bá hozzászólása Jan 29, 2009 /
 
Sziasztok!

Találkozott már valaki olyannal, hogy ha végzek egy AD converziót, akkor meghülyül, az egész PIC, olyan mintha folyamatosan újra indulna, de közbe nem, viszont tévesen érzékeli a bemeneteket a konverziók után, holott az ad átalakítás megfelelően véghez megy. Ez egy 16f917 lenne. Ha kikapcsolom az a converziós részt, akkor minden megfelelően működik. Még sosem találkoztam ilyen hibával, pedig már használtam párszor PIC-et és Ad-t is. Van valakinek valami tippe?

Üdv
Robi
(#) watt válasza Bob_bá hozzászólására (») Jan 29, 2009 /
 
Nem okoz megszakítást az A/D amit nem kezelsz le?
(#) Bob_bá válasza watt hozzászólására (») Jan 29, 2009 /
 
Sajnos nem, le van minden tiltva a tmr0-án kívül.Sőt a periféria megszakítások sincsenek engedélyezve.
Köszi a tippet!
(#) bbalazs_ válasza Bob_bá hozzászólására (») Jan 29, 2009 /
 
A pic errataja mond valamit?
Masik, ugyanolyan pic?
Masik, hasonlo pic?

Esetleg peldaprogram, ami biztosan jo?

Ha nem billented be e GO bitet, de egyebkent minden ugyanaz?

(#) Bob_bá válasza bbalazs_ hozzászólására (») Jan 29, 2009 /
 
Néztem már azt is, nincs benne semmi ilyen. A másik picre gondoltam, de sajnos nincs belőle több. Ez a projekt egyik napról a másikra kellene, egyébként többet szoktam tartani. Amint bebillentem a Go bitet, onnan kezdődik a gáz, az AD már az inicializálás során engedélyezve van.
(#) bbalazs_ válasza Bob_bá hozzászólására (») Jan 29, 2009 /
 
Probalj meg (csak kiserletkeppen) minden, erre vonatkozo utasitast egyenkent kiszedni (vagy az osszeset kikommentelni es egyenkent betenni), csak a GO bebillentes maradjon.
A konfig bitek jol allnak?

UGYE assemblyben irod, nem valami magasszintu(bb) izeben????

Az orajelet honnan veszi az AD es mekkora ez?
Kosd le vagy szakitsd meg teljesen az AD labat.

PIC feszultsege rendesen szurve, MCLR rendesen felhuzva?
(#) vilmosd válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Hali
Idézet:
„Hogyan adok össze pl. két 10 bites értéket”
Ennel az alkalmazasnal nem kell 10 bites AD-val dolgoznod. Ez nem egy precizios felhasznalas. Itt csak komparalni kell a ket beolvasott es atlagolt erteket. Ezert alkalmas a "balra igazitott" AD ertek mert csak az ADRESH-t kell hasznalnod. Igy az also ket bit nem kerul felhasznalasra. Ezert egyszerubb lesz a proggid. Mar csak az osszegzes es az osztas marad.
Javaslom hogy a csatornak olvasasat vegzd 1-2 mp-kent, mert nagyon lassu a valtozas. Termeszetesen a meghajtast is lassura kell megcsinalni mert kulonben az emlitett bologatassal fog dolgozni a mechanika. Ajanalatos vasarolni 10-15 LDR-t es ellenallasmerovel osszevalogatni.
Esetleg meg a felso agba az ellenallasok ele tehetsz egy potit kiegyenliteni a ket erzekelo kozotti kulonbseget. En beraktam mindket erzekelot 1-1 hozzaillo fekete csobe es igy kis szogvaltozasra is elegendo differenciat kapsz. A csovek hosszat ki kell kiserletezni.
Egyenlore ennyi
Udv Vili
(#) gyengus hozzászólása Jan 29, 2009 /
 
Sziasztok!

PIC12F683-al ismerkedek, Hi-Tech C fordítót használok.
Kezdésnek egy egyszerű LED villogtatót próbálok összehozni TMR0 megszakítással.
A PIC a belső oszcillátoráról megy, a LED egy 10k-s ellenálláson keresztül a GPIO2-es lábon van, áramot a PK2 ad neki, a táplábain ott a 100 nF kerámiakondi.

Sajnos villogás helyett csak annyi történik, hogy kb 2 másodperccel a táp bekapcsolása után elkezd világítani a LED. Kiváncsiságból felraktam a Hi-Tide-ot, a szimulátorában jól futott. Az adatlapot átnéztem, de csak nem látom a hibát.
Mellékelem a kódot.

Valaki legyen szíves megnézni, hol rontottam el!
Köszönöm

main.c
    
(#) delmur82 válasza watt hozzászólására (») Jan 29, 2009 /
 
Köszi!

Akkor csak sima műveletek.Ok
(#) delmur82 válasza icserny hozzászólására (») Jan 29, 2009 /
 
Köszi!

Teljesen érthető. Tök jó megoldás.
Az osztásban sokat fog segíteni.
(#) delmur82 válasza vilmosd hozzászólására (») Jan 29, 2009 /
 
Köszi a tanácsokat. Tényleg csak egy regisztert érdemes nézni. Mondjuk lehet hogy ha a konverzió digitális értéke 255- 256 körül alakul akkor érdekes a dolog. De remélem messzebb esik majd tőle.
(#) icserny válasza delmur82 hozzászólására (») Jan 29, 2009 /
 
Idézet:
„Tényleg csak egy regisztert érdemes nézni.”

Inkább átlagolj és csak a végén kerekíts! Adj esélyt a zajnak, hogy kiátlagolódjon...
(#) potyo válasza gyengus hozzászólására (») Jan 29, 2009 /
 
Nem tiltottad le a komparátort így első ránézésre. A TMR0 regiszterét meg ne piszkáld a megszakítási rutinból, hacsak nem pontos időzítést akarsz csinálni.
Következő: »»   403 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem