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   1044 / 1210
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 / 1
 
Raktam az RA2-re "jelet" és mindig bemegy a megszakításba, a counter szépen számol... !
A hozzászólás módosítva: Szept 3, 2018
(#) Rumcájsz hozzászólása Szept 3, 2018 /
 
Sziasztok!
Keresném a mikroC compiler for PIC régi verzióját! Képen mellékelem, hát ha beugrik valakinek!
Nagy szükségem lenne rá, az újabb verziókkal nem akarok újratanulni.....
Aki tudna segiteni hogy meglegyen újra ez a program, kérem irjon rám!
Köszönöm!
(#) don_peter válasza kissi hozzászólására (») Szept 4, 2018 /
 
Értem, meg tudtad nézni, ellenőrizni a PWM jelet és a kiköltést is?
Most kicsi program módosítással elértem, hogy ki írja az adatokat, de észre vettem, hogy ADC mindig maximumot mér.
Ezt te meg tudod nézni?
Mármint, hogy ADC mennyit mér, nálad?
25%-os kitöltés mellett a 4.73v digitálisan 1023 helyett, 1.18v digitálisan 255-öt kellene mutatnia.
Nálam valamiért folyamatosan 1023-at mutat.
(#) ktamas66 válasza don_peter hozzászólására (») Szept 4, 2018 / 1
 
Mint írtuk: a felfutó él után a tápot méri, hiszen az 1kHz az 1ms, 25%-nál 250us-ig táp van kinn, ezt méri meg.
(#) don_peter válasza ktamas66 hozzászólására (») Szept 4, 2018 /
 
Mintavételezési időt kellene növelnem?
De ez a PIC ha jól látom ilyet nem tud.
Mivel tudnám ezt megoldani, vagy is hogyan, hogy a megfelelő értéket kapjam meg?
(#) don_peter válasza don_peter hozzászólására (») Szept 4, 2018 /
 
Mi van akkor, ha egy for ciklusban több mintát veszek és azokat átlagolom?
Ezzel lehet be tudnék állítani egy mintavételezési időt.
Bár megszakításba nem túl elegáns, de nem tudok hirtelen jobbat.
A hozzászólás módosítva: Szept 4, 2018
(#) ktamas66 válasza don_peter hozzászólására (») Szept 4, 2018 / 1
 
Mert milyen eredményt vársz a méréstől? Ha mérsz mondjuk 100 mintát, 25%-os kitöltésnél 25 tápot és 75 0-át fogsz mérni (+- 1 mérés bizonytalanság), ha más jönne ki árulás van a dologban.
(#) don_peter válasza ktamas66 hozzászólására (») Szept 4, 2018 /
 
Igen végül ezt választottam. 100 mintát veszek, majd osztottam 100-al, így pontos a dolog.
Köszi srácok.
(#) Hp41C válasza don_peter hozzászólására (») Szept 4, 2018 /
 
Egy alul áteresztő szűrő a PWM kimenet és az AD bemenet között.
(#) ktamas66 válasza don_peter hozzászólására (») Szept 4, 2018 /
 
Arra próbáltam célozni, hogy ez így felesleges, nem mérhetsz így mást, mint amit beállítasz.
(#) Hp41C hozzászólása Szept 4, 2018 /
 
7.5% -os áremelés várható a Microchip által gyártott régebbi típusoknál. Forrás típus listával
A hozzászólás módosítva: Szept 4, 2018
(#) don_peter hozzászólása Szept 5, 2018 /
 
Uraim, kérnék egy kis segítséget.
ADC méréssel kapcsolatos, amit most nem értek, vagy is nem teljesen értem a mértet.
A következő a jelenség:
Kitöltési tényezőt állítok egy 1KHz-es jelen, egészen 63%-os kiköltésig nincs gond, majd 64%-os kitöltés beállítása után, hirtelen megváltozik, visszaesik a mért digitális érték.
A következőket méri a program:
62% - 643
63% - 653,
64% - 9,
65% - 20,
66% - 30...stb

A % beállítására írtam egy ilyen kis rutint:
  1. // Kitöltés beállítása
  2. unsigned char PWMDuty(unsigned char duty){
  3.         float temp = 0;
  4.         temp = 255 / 100+0.5;
  5.         return (unsigned char)(temp*duty);
  6. }
Az adatlapban azt olvastam, hogy a PWM kiköltését CCPR1L 8bit-es regiszterben adhatom meg.

Az ADC-t egy PWM felfutó élre történő megszakításban mérem, ami így néz ki:
  1. void interrupt ISR(void) {
  2.  
  3.         if(INTF && INTE){
  4.                 unsigned char i = 0;
  5.                 ADC             = 0;
  6.                 //LED3  = !LED3;
  7.                 Count++;
  8.                 if(Count>500){
  9.                         for(i=0; i<100; i++) ADC += read_ADC(3);
  10.                         ADC             = ADC/100;
  11.                         LED3 = !LED3;
  12.                         Count = 0;
  13.                         a = 1;
  14.                         LED3 = 0;
  15.                         INTE = 0;
  16.                 }
  17.                 INTF    = 0;
  18.         }
  19.  
  20. }

Látható, hogy minden 501. megszakításban mérek, mert felesleges sűrűbben.
Az is látható, hogy 100mintát veszek majd azt átlagolom, így elvileg az eredménynek jónak kéne lennie végig.

Lát esetleg valaki valami hibát a programban?
Esetleg magyarázat a működésre, ha van? (ha van akkor kérnék egy lehetséges javítási tanácsot is)

Annyira rájöttem, hogy mikor 64%-ot állítok be, akkor gyakorlatilag a 63% által mért eredményt hozzá kell adnom a 64%-al mért eredményhez és akkor nagyjából ott is vagyok ahol eredetileg kellene lennie a mérésemnek. De minden olyan mérésnél, amely nagyobb mint 63%, nem akarom + hozzáadni annak mérési eredményét. Eléggé gánynak tartanám, ha csak így tudnám megoldani. Előre is köszi a türelmet és segítséget.
(#) kissi válasza don_peter hozzászólására (») Szept 5, 2018 / 1
 
Szia!

Szerintem a read_ADC fv. 16 bites számot ad vissza, amiből 100-at összeadva már nem fér el 16 biten és amennyiben ADC 16 bites, akkor túlcsordul és csak az alsó 16 bit értékét látod a 100-as osztás után !

szerk:
magy.: Visszaadott kód max. 1023 lehet, amit 100-szor összeadva több, mint 65535 !
Megoldás: az ADC ne 16 bites legyen !
A megszakításban nem jó ötlet 100 AD-t csinálni, mert "nagyon sokáig" tart !
A hozzászólás módosítva: Szept 5, 2018
(#) don_peter válasza kissi hozzászólására (») Szept 5, 2018 /
 
Köszönöm.. Ügyesen rájöttél, hogy itt lesz a kutyus elásva..
Már kész is a dolog..

ADC és megszakítás: Megszakítás minden impulzus okoz, de mérést csak minden 500. megszakítást követően mérek. Sajnos nem tudtam hirtelen jobban megoldani, de most hogy mondod, lehet csak a megszakítás gyűjteni fogja az adatot, főprogram majd osztja és kiértékeli.
A hozzászólás módosítva: Szept 5, 2018
(#) ktamas66 válasza don_peter hozzászólására (») Szept 5, 2018 / 1
 
Mivel a PR2 249-ig számol, a CCPR1L-re ne számolj ennél nagyobb értéket.
(#) kissi válasza don_peter hozzászólására (») Szept 5, 2018 /
 
Azt mondtad, hogy PWM...azt minek AD-zni ? Van egy számlálód ( counter), ami számolja, hogy megszakításnál hányszor 1-es a jel, tudod a PWM periódusidejét --> hányszor lesz közben megszakítás ( periodus)... Minden PWM 0-->1 átmenetnél Duty = counter / periodus * 100% !
A PWM szélsőértékeit kilogikázod ( ha lehet folytonos 1 vagy 0 ! ) !
(#) Hp41C válasza don_peter hozzászólására (») Szept 5, 2018 / 1
 
Idézet:
„Az adatlapban azt olvastam, hogy a PWM kiköltését CCPR1L 8bit-es regiszterben adhatom meg.”

A PWM kitöltését 10 bitre adhatod meg, a CCPR1L a felső 8 bitje, az alsó 2 bitet a CCP1CON 7. és 6. bitjén kell beállítani.
Az adatlapban az is olvasható, hogy a PWM egy ciklusa megegyezik a TMR2 regiszter átfordulási ciklusával. A TMR2 után osztójával lehet megszakítást kérni. Ha a TMR2CON 6..3 bitjein beállítanál 10 -es osztásnak megfelelő értéket 1001, akkor minden 10. PWM ciklusnál kapnál TMR2 megszakítást. Nem kellene a külső átvezetés, az INT megszakítás, csak a PIE1 TR2IE -t kell 1 -re állítani.... Máris tízszer kevesebb megszakítás kiszolgálás lesz...
Ha csak 64 AD mintát adsz össze, az eredmény elfér 16 biten.
A hozzászólás módosítva: Szept 5, 2018
(#) don_peter válasza ktamas66 hozzászólására (») Szept 5, 2018 /
 
Köszi.. Át is állítottam.

kissi: ejj, de jó ötlet ez..
De ez csak a kiköltést adja meg nem?
Mert ADC az 10bit-es.
(#) don_peter válasza Hp41C hozzászólására (») Szept 5, 2018 /
 
A PWM kitöltés aló két bitje az nem a CCP1CON 5. és 4. bit?
Biztos csak elírtad, vagy én nem értelmezek jól valamit.
(#) kissi válasza don_peter hozzászólására (») Szept 5, 2018 /
 
Igen, miért, mit szeretnél ?!
(#) don_peter válasza kissi hozzászólására (») Szept 5, 2018 /
 
Én feszültséget mérném folyamatosan, szükségem van a változás figyelésére.
(#) don_peter válasza kissi hozzászólására (») Szept 5, 2018 /
 
Egy töltőt. Már megcsináltam és annak a mintájára akarok készíteni egy kicsi költségvetésű és egyszerű fapados kapcsolást, ehhez akarom ezt a kis PIC-et felhasználni.
A hozzászólás módosítva: Szept 5, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 5, 2018 /
 
Közben visszaolvastam és láttam, hogy a PWM 12V-os lesz és azt terheled ellenállásokkal...

Az ellenállások nincsenek rajta "folyamatosan" ?! Mert ha igen, akkor minden PWM ciklus kezdetén mérj egyet, a zavarok miatt átlagold pl. 100 mérésnek az eredményét ( jobban jársz/gyorsabb, ha 128-nak ! ) ez 1kHz-es PWM mellett kb. 100ms-os frissítés, de ha "csúszó átlagolást" csinálsz, akkor sokkal gyorsabb is lehet!
szerk.: Nem láttam, hogy a múltkor mi lett a megoldás, miért nem ment jól a megszakításod !?
A hozzászólás módosítva: Szept 5, 2018
(#) don_peter válasza kissi hozzászólására (») Szept 5, 2018 /
 
Igen de nincs rajta ellenállás, csak ha én teszek oda.
Alap esetben szabadon fut a PWM.

Múltkori hiba nem a PWM miatt volt, hanem a kijelző programjával volt bibi, arra rájöttem és megoldottam a dolgot. Most szépen megy kijelzővel együtt, nincs reset.
(#) don_peter hozzászólása Szept 5, 2018 /
 
A következő kérdésem lenne a PWM kitőltésével kapcsolatba:
Kézzel megadom, a kitőltési tényezőket a regiszternek és valamiért a PWM nem indul be.
Én úgy gondoltam, hogy 0 és 100% közt lehet állítani majd a kitőltést, de úgy fest nálam 9% alatt nem hajlandó elindulni az 1KHz-es PWM jel.
Mi lehet ennek az oka?

Regiszterek: 1% kitőltés beállítása.
  1. CCPR1L = 0x02;
  2. DC1B1 = 0;
  3. DC1B0 = 1;

Valami ötlet? Fentebb a kód.
Előre is köszi.
(#) Hp41C válasza don_peter hozzászólására (») Szept 5, 2018 /
 
Valóban, sajnos elírtam.
(#) Hp41C válasza don_peter hozzászólására (») Szept 5, 2018 / 1
 
Mi lenne, ha beállítanád az MpLab szimulátort, felvennéd a CCP1 kimenetét a Logikai analizátor képére és végigfuttatnád a programodat. Rögtön kiderülne a turpisság... Pl. a 100 mért érték túlcsordulása, stb. Gyorsabban menne, mint ide beírni.
(#) don_peter válasza Hp41C hozzászólására (») Szept 5, 2018 /
 
Basszus kulcs.. Nem tudtam, hogy van szimulátor az MPLAB-ban.. Ha ezt előbb tudom..
Köszi.
(#) kissi válasza don_peter hozzászólására (») Szept 5, 2018 /
 
Én is azzal csináltam !
(#) don_peter válasza kissi hozzászólására (») Szept 6, 2018 /
 
Ez nagy arcul csapás volt..
MPLAB-ot használom az elejétől kezdve, de egyszer sem kattintottam a szimulátorára mert azt hittem ahhoz kell valami külső hardver. Bár akkor nem szimulátor lenne a neve, de akkor is ez volt bennem. Egész idáig itt volt az orrom előtt.. Kész vagyok..


Esetleg ebben segíthetnétek, hogy ez alatt mit is ért Hp41C:
Idézet:
„felvennéd a CCP1 kimenetét a Logikai analizátor képére”

Gondolom nem a sima watch ablakot, vagy de?
A hozzászólás módosítva: Szept 6, 2018
Következő: »»   1044 / 1210
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