Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   816 / 1216
(#) Elektro.on válasza giskard hozzászólására (») Jún 21, 2016 /
 
Már bocsi. De ha azt írtam volna, hogy" Majd megirod, hogy mire jutottál?" ez kérdés lett volna. De nem ezt írtam...
Egészen egyszerűen mondtam, illetve írtam neked, hogy tudasd velünk az eredményt. Ez nem kérdes. Tudom, én már régen jártam iskolába de akkor is..
A hozzászólás módosítva: Jún 21, 2016
(#) Zsora válasza Elektro.on hozzászólására (») Jún 21, 2016 / 1
 
Idézet:
„Majd írd meg mire jutottál.”

Ez egy felszólító mondat akar lenni, és ennek megfelelően felkiáltójel kellene a végére.
(Bocsi a kukacoskodásért és a témától való eltérésért, de szeretek nyelvtani dolgokon vitázni! )


giskard:
Egyébként meg elismerésre méltó a kitartásod a probléma megoldását illetően.
Gratulálok!
A hozzászólás módosítva: Jún 21, 2016
(#) Elektro.on válasza Zsora hozzászólására (») Jún 21, 2016 /
 
Igazad van! De semmi képp nem kérdő mondat.
(#) DJozso hozzászólása Jún 21, 2016 /
 
Sziasztok! Csak egy gyors elméleti kérdésem lenne. Tapasztalataim alapján bármely PIC-nél az ADC konverzió 10 bites eredménye ingást mutat, úgy, hogy a bemeneti jel nem változik (műszerrel ez az ingás nem mérhető). Próbáltam a bemenetre kondit rakni, semmi. A tápfeszültségben sincs benne az ingás ( A ref pontok miatti ingásra gondolok). Az ingás mértéke impulzus szerű, 2-8 érték az 0-1023 érték tartományban(10 bites felbontású ADC). Ez normális, vagy valamit én csinálok rosszul...
Szoftveresen javítható a dolog, ha mondjuk 3 mérést csinálok, és abból átlagolok. De ez sok változót, így relatív nagy erőforrást igényel. Minek 4db unsigned int változó, ha egy is elég?
(#) don_peter válasza DJozso hozzászólására (») Jún 21, 2016 / 1
 
Ez jellemző sajnos a 10 bites ADC-knél.
Mindegyik projektemnél észleltem kisebb nagyobb ingást.
Pufferelek és átlagolok, ha zavar, vagy kevesebb időközzel jelenítem meg az értéket a kijelzőn.
(#) Elektro.on válasza DJozso hozzászólására (») Jún 21, 2016 / 1
 
Milyen műszerrel mérted?
Ha 5V-os tápfeszt használod referenciának akkor 5/1024=0,00488Voltos lépésak vannak.
Ezt max szkóppal tudod mérni. Ezenkívűl több helyen is említették, hogy ebben az esetben a PIC működése is megzavarhatja a referencia feszültséget.
Véleményem szerint ez annyira kicsi ingadozás, hogy egy próba panelen összedugdosott áramkör esetén egy hosszabban hagyott vezeték is okozhatja.
Átlagolni kell.
(#) eSDi válasza DJozso hozzászólására (») Jún 21, 2016 / 1
 
Üdv!

A megfelelő beállításokat kell alkalmazni az ADC-re és átlagolni kell mindenképpen. Nem tudom te milyen nyelven programozol, de nekem BASIC-ben elég 2 változó is.
FOR ciklusban veszek mintát, ezt a mintát minden egyes alkalommal hozzáadom a kimeneti változóhoz. Ezt én 60x szoktam, majd a FOR ciklus végeztével elosztom a 60-al amit ugyan abba a változóba írok vissza.
(#) cross51 válasza DJozso hozzászólására (») Jún 21, 2016 / 1
 
Relatív nagy erőforrást? Veszel egy 16 bites széles változót (nem tudom, hogy C vagy assembly) 64 darab mintát hozzá adsz ehhez a változóhoz (max 64*1023) és elosztod 64 avagy a gyorsabb 7x jobbra lépteted és kész is van.

Szerintem ehhez nem kell erőforrás.
(#) DJozso válasza don_peter hozzászólására (») Jún 21, 2016 /
 
Köszönöm a választ. Megnyugodtam, hogy ez ilyen. Marad a szoftveres pufferelés.

Idézet:
„hogy egy próba panelen összedugdosott áramkör esetén egy hosszabban hagyott vezeték is okozhatja”

Értelek, de az a baj, hogy ezt megépített nyákon is csinálja. Egyébként a 4-5mV ingás kisebb feszültségeknél (mondjuk 50-100mV) műszerrel is mérhető lenne, persze, ha a digit műszer mintavételezése épp elkapja az ingást...
De szerintem don_peter társunknak igaza lehet, ez valóban ezt tudja.
(#) Hp41C válasza cross51 hozzászólására (») Jún 21, 2016 /
 
Idézet:
„...és elosztod 64 avagy a gyorsabb 7x jobbra lépteted és kész is van.”

64 = 2^6, tehát 6 léptetés kell csak.
(#) cross51 válasza Hp41C hozzászólására (») Jún 21, 2016 /
 
Bocsánat arra gondoltam, csak hirtelen ránéztem a számológépen hogy hanyadik bit = 64-el és ott rontottam el ezt, hogy nem 0-val kezdtem a számolást .
(#) ktamas66 hozzászólása Jún 21, 2016 /
 
"A világon tíz féle ember létezik. Azok, akik értik a bináris számokat, meg azok, akik nem."
(#) cross51 válasza ktamas66 hozzászólására (») Jún 21, 2016 /
 
Igen ezt már, hallottam és akkor "sem" értettem . De értem azért ."
(#) icserny válasza ktamas66 hozzászólására (») Jún 22, 2016 /
 
Pontosabban 10-féle ember van: az egyik érti a kettes számrendszert, a másik nem...
(gyengébbek kedvéért: 10 = 2)
(#) siemenstaurus hozzászólása Jún 22, 2016 /
 
Sziasztok!
PIC18f14K5-en mit kellene beállítani előre, ha a következőket szeretném? Egyáltalán lehet együtt a kettőt?
RA = digitális in (nyomógombok)
RC = digitális out (ledek)
RB = analóg in (poti)
Gondot okozhat ha a PGD PDC lábat digit bemenetként használom? Az LVP-t azért kapcsoljuk ki nem?
A fordító lefordítja, a hardveren kimértem a dolgokat, szerintem valami alap dolgot szúrtam el vagy előlről kell az egészet átgondolnom...egyelőre csak az RC7RC6 ledek villognak bolond módon.

Ezt szeretném:
  1. #include <p18f14k50.h>
  2. #include "adc.h"
  3. #include "delays.h"             //beepitett fuggv hasznalata
  4. #pragma config LVP = OFF
  5. #pragma config WDTEN = OFF
  6. #pragma config MCLRE = OFF
  7.  
  8. main ()
  9. {
  10.         int i,j,hwpozicio,swpozicio,hwpozicio1,swpozicio1;
  11.         TRISC = 0;       // PORTC kimenet
  12.  
  13.        
  14.         hwpozicio=0;
  15.         hwpozicio1=0;
  16.         swpozicio=0;
  17.         swpozicio1=0;
  18.  
  19. while(1)
  20.         {
  21. //------------------------------------------------------------------ sönt
  22.                 ADCON0 = 0b00101001;    //AN10 analóg IN
  23.                 ADCON1 = 0b00000000;
  24.                 ADCON2 = 0b10101010;
  25.                 Delay1KTCYx(30);
  26.                 ADCON0bits.GO = 1;
  27.  
  28.                 while(BusyADC());              
  29.                 i= ReadADC();
  30.        
  31.                 hwpozicio=i/68; //1024/68=15, így hwpozicio=0 ... 15
  32.                 if(hwpozicio>swpozicio)
  33.                 {
  34.                         swpozicio=swpozicio+1;          //balra
  35.                         LATC = 0b00000001;
  36.                         Delay1KTCYx(10);
  37.                         LATC = 0b00000000;
  38.                 }
  39.                 else if(hwpozicio<swpozicio)
  40.                 {
  41.                         swpozicio=swpozicio-1;          //jobbra
  42.                         LATC = 0b00000010;
  43.                         Delay1KTCYx(10);
  44.                         LATC = 0b00000000;
  45.                 }
  46.  
  47. //------------------------------------------------------- kontroller
  48.  
  49.         if (PORTAbits.RA5 ==0 )                                 // 0
  50.                 {
  51.                         LATC = 0b10000000;
  52.                         Delay1KTCYx(10);
  53.                         LATC = 0b00000000;
  54.                 }
  55.         if (PORTAbits.RA5 ==0 && PORTAbits.RA4 ==0)     // -
  56.                 {
  57.                         LATC = 0b10000000;
  58.                 }
  59.  
  60.         if (PORTAbits.RA4 ==0 && PORTAbits.RA0 ==0)     // +
  61.                 {
  62.                         LATC = 0b01000000;
  63.                 }
  64.         if (PORTAbits.RA0 ==0)                                                  // ++
  65.                 {
  66.                         LATC = 0b01000000;
  67.                         Delay1KTCYx(10);
  68.                         LATC = 0b00000000;
  69.                 }
  70.  
  71.         else                                                                            // N
  72.                 {
  73.                         LATC= 0b00000000;
  74.                 }
  75.  
  76. //--------------------------------------------------------             
  77.         }
  78. }


Köszönöm!
(#) don_peter válasza siemenstaurus hozzászólására (») Jún 22, 2016 /
 
Amit hirtelen észre veszek és kérdezném, hogy miért teszed az ADCONx regiszter beállítását az első while() függvényen belülre?
Szerintem az nem állítódik el, így mehetne while elé a main függvénybe.
Analóg érték mérésénél, vedd figyelembe, hogy amit mérsz értéket és osztod akkor ott lebegőpontos számot fogsz kapni, tehát ha nem egész az eredmény, veszíthetsz egy értéket. (bár gondolom ez nem számít túl sokat)

LVP az az alacsony programozási módhoz kell.
Ha be van kapcsolva, akkor fel kell húzni VCC-re. (bár ez lehet fordítva van, nem tudom megnézni most az adatlapot.)
Ha ha nem használod azt a lábat, akkor érdemes felhúzni és bekapcsolni.

Független attól, hogy nem használod a többi PORT-ot azokat is állítsd kimenetre.
PGD, PGC lábakat csak programozásra használod külön, programból arra állítod amire akarod.
A hozzászólás módosítva: Jún 22, 2016
(#) don_peter válasza don_peter hozzászólására (») Jún 22, 2016 /
 
Bocsi az LVP-t hirtelen összekevertem az MCLR-el.
LVP csak az alacsony programozási módhoz kell.
Idézet:
„LVP:
Single-Supply ICSP™ Enable bit
1
= Single-Supply ICSP enabled
0
= Single-Supply ICSP disabled”
(#) Hp41C válasza siemenstaurus hozzászólására (») Jún 22, 2016 /
 
- ANSEL, ANSELH beállítása hiányzik.
- A RA0 és RA1 az adatlap szerint Vusb+0.3V a megengedett maximális szint. Be van kapcsolva az USB LDO? Kívülről adsz a Vusb -re 3.3V -ot?
- A RA0 és RA1 maximálisan csak 3.6V -os szintet kaphat.
- Ha a Low Voltage Programming lehetőséget bekapcsolva hagyod, az RC3 -at alacsony szintre kell húzni. Ha letiltod, az RC3 portbit felszabadul.

Továbbá:
  1. if (PORTAbits.RA5 ==0 )     // 0
  2. if (PORTAbits.RA5 ==0 && PORTAbits.RA4 ==0)     // -

A felső feltétel szeinti részletre bemegy akkor is ha a PORTAbits.RA4 akármilyen szintű. Az alsó feltétel szerinti részlet egyből végrehajtódik, ha PORTAbits.RA4 ==0. Jó ez így? Hasonló problémák vannak a többi elágazással is.
(#) siemenstaurus válasza Hp41C hozzászólására (») Jún 22, 2016 /
 
Igazad van. Mindent sikerült beállítani, ennél a logikánál megbukott.
Azt szerettem volna elérni, ha RA5 alacsony, akkor van valami. Ha RA5 alacsony és mellette RA4 is alacsony akkor más valami.
Egyszerre csak egy állapot áll fenn, ezért nem gondolkodtam megszakításban.

RA5 RA4 RA0
1 0 0 Led1 villog
1 1 0 Led1 egyet villan
0 1 1 Led2 egyet villan
0 0 1 Led2 villog

Gondoltam ha egyik nyomógomb nyomva van történik valami, de ha mellette egyszerre vele még egy másik is, akkor más valami.
Mi a probléma a "logikámal"?
(#) DJozso válasza cross51 hozzászólására (») Jún 23, 2016 /
 
Bocs, csak most jutottam gép közlébe... Ez mekkora ötlet?! Tényleg, hogy ez nekem nem jutott eszembe. Nem kell minden kiolvasásnak egy másik 16 bites változó. Köszi az ötletet.
(#) kissi válasza cross51 hozzászólására (») Jún 23, 2016 /
 
A következő átlagot így csak újabb 64 minta után tudod számolni, ha jól értem... !?
(#) Elektro.on válasza kissi hozzászólására (») Jún 23, 2016 /
 
Ha súlyozott átlagot számoltatsz akkor minden mérésnél kiegyenlítheted a kiugró értékeket.
Bár ez matematikailag több számítást igényel.
(#) cross51 válasza kissi hozzászólására (») Jún 23, 2016 /
 
Venni kell 64 mintát, átlag, és kész az eredmény újabb eredményhez újabb 64 minta, átlagolás és kész az új eredmény. Ha jól értettem a kérdésed.
(#) pajti2 válasza cross51 hozzászólására (») Jún 23, 2016 /
 
Ha folyamatosan akarod az új mérési eredményeket is mindig "belefésülni" az addigi adatokba, és azonnal az addigi átlagot tudni minden mérés után, valójában a 64 minta átlagolásához egy 64 elemű fifo-dnak kell majd lennie (sima tömb ügyesen kezelve körforgó írás pointerrel). Ha nincsen annyi erőforrás, akkor persze csak az marad, hogy 64 mintánként egyszer lesz "kimenet", és az új minták beérkezése során nem lesz új adat, csak a régi lebufferelve.
(#) Zsora válasza kissi hozzászólására (») Jún 23, 2016 /
 
Ha egy 64 elemes FIFO tárat használsz akkor nem kell újabb 64 mintáig várni. A legrégebbi mintát eldobod, az újat meg hozzáadod plusszba. Így mindig a legutolsó 64 mintát használod feldolgozáshoz.
(pajti2 megelőzött)
A hozzászólás módosítva: Jún 23, 2016
(#) Zsora válasza Zsora hozzászólására (») Jún 23, 2016 /
 
Még annyi hogy 64 minta kell a FIFO első feltöltéséhez, hogy mindig 64-gyel kelljen osztani.
Ehhez vagy a legelső mintával töltöd fel a FIFO-t kezdéskor, vagy csak 64 beérkező minta után kezded felhasználni őket.
(#) Elektro.on válasza Zsora hozzászólására (») Jún 23, 2016 /
 
A súlyozott átlag közel ugyan azt az eredményt adja. Nem kell hozzá fifo, és minden mérós után használható az eredmény.
Először természetesen a 64 mintából matematikai átlag. Utána aktuális átlag *63 +új minta /64.
A hozzászólás módosítva: Jún 23, 2016
(#) Zsora válasza Elektro.on hozzászólására (») Jún 23, 2016 /
 
Teljesen igazad van. Ez a megoldás ugyan kicsit lassabban reagál a változásra, de cserében sokkal kisebb az erőforrásigénye. Gyakorlatilag 4 utasítással kiszámolható a következő átlagérték: 2 léptetés (*64, /64) + 1 kivonás + 1 összeadás. Hatékony.
(#) kissi válasza Zsora hozzászólására (») Jún 23, 2016 /
 
Persze, én is így használom (szerintem a 64 elemű FIFO FSR-el címezve nem egy bonyolult, ugyanakkor nagyon hatékony dolog!), de a kérdező csökkenteni akarta az erőforrásigényt és erre kapta megoldásként a fentebb írtakat...
(#) Lamboo hozzászólása Jún 24, 2016 /
 
Sziasztok!
Van egy PIC16F1512-es PIC-em aminek az adatlapját tanulmányozva kérdések merültek fel bennem az RC3 és RC4 kimenetekkel szemben. Mint a többi kimenethez, ide is oda van írva, hogy CMOS general purpose I/O de alatta az I2C funkcióhoz azt is írja, hogy OD (Open Drain). Most akkor ezek a lábak kétfajta kimenettel rendelkeznek és csak I2C módban OD egyébként CMOS, vagy csak szimplán open drain és nem tud H szintet kiadni?

pic.png
    
Következő: »»   816 / 1216
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