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   905 / 1203
(#) ktamas66 válasza c27 hozzászólására (») Márc 3, 2017 /
 
Ez nem a klasszikus 3 fázisú szinusz, mert csak 60 fok van a csúcsok között.
Lassítsd le a jelalakot a programban (minden ciklus tovább tartson), így pontosabban lehet látni, hogy a tüske egyszeri hiba vagy számítási anomália.
(#) Hp41C válasza c27 hozzászólására (») Márc 3, 2017 /
 
Próbáld meg a PWM ciklusához szinkronizálni a kitöltési tényező beírását.
(#) c27 válasza Hp41C hozzászólására (») Márc 3, 2017 /
 
Ez eléggé lehetetlen, 19,5kHz el megy a PWM és annyi trükközök, hogy alacsony frekvencián több jelet használok a szinusz táblázatból magasabb frekvencián kevesebbet. Van erre is egy külön programrészlet amiben ezzel bűvészkedek. Plusz a számítások ideje is változik a szorzótényezők értékének függvényében és ezzel beállni a PWM frekijének valamennyi egész számú többszörösére, hát nem igazán egyszerű.
A hiba pontszerű 200-300 usec között van.
A hozzászólás módosítva: Márc 3, 2017
(#) ktamas66 válasza c27 hozzászólására (») Márc 4, 2017 /
 
Erre való az IT. Még utóosztót is lehet állítani hozzá, hogy pl. minden 16. ciklusra adjon IT-t, és itt állítani a PWM-et. Ilyenkor viszont azt kell figyelni, hogy ne pont a számítások félállapotából számoljon új PWM-et. Itt még időt is lehet mérni, hiszen ez a megszakítás azonos időnként jelentkezik.
Nem tudom mi a PWM min./max. értéke lehet érdemes mondjuk 10-90% közé rakni, de ez a FET meghajtástól is függhet.
(#) ramok válasza Hp41C hozzászólására (») Márc 4, 2017 /
 
Szia HP41C
A kuldött fájlt lefordítottam. Eredmény: succesful, Errors: 0kB

A beégetés során nem jöttek a korábbi hibák. (No device ID és Not contain config bits.)
A próba során a kijelző alsó sora jónak tűnik, de a felső sora elég zavaros
Hamarosan próbálom a második fájlt amit küldtél.
Köszi a fárdozást. ramok


UI:
töltöttem képeket is.
A hozzászólás módosítva: Márc 4, 2017
(#) c27 válasza ktamas66 hozzászólására (») Márc 4, 2017 /
 
Két szinusz jel közötti időt a timer1-el mérem (a timer0-t használom a poti beolvasására és az lcd kijelző írására, mert azokat elég csak időnként olvasni/írni). Na szóval annyi csináltam, hogy a timer1 prescale-jét átállítottam 1:4-re és minden hülyeség megszűnt. Szóval valahol itt lesz a galiba. Ha átállítom a prescale-t akkor rövidebb időközönként frissíti a PDC-t és az interruptban is több idő van a következő frissítésig. Még azt kellene kitalálni, hogy mit kellene kezdeni.
Ez az interrupt ahol a számítások és miegymás történik kb. 43usec futásidejű. Lehet mégis csak az a baj, hogy a PWM 19,5kHz frekvenciája amely kb. 51usec összemérhető az megszakítás idejével, így csúszások lehetnek.
Mindjárt kigondolok valamit hogy lehetne a kettőt összehozni. Esetleg még azzal is lehetne trükközni, hogy mivel alapból a frekvencia függvényében változtatom a szinuszhoz felhasznált jelek számát valahogy össze lehetne kombinálni vagy akkor tényleg lesz még egy megszakítás.
Van még pár kétségem, de nekilátok hátha összejön.
(#) c27 válasza c27 hozzászólására (») Márc 4, 2017 /
 
Minél inkább gondolkodok annál kevésbé értem a hiba okát. Próbáltam számolgatni is, de ez a szinkronizálás hiány maximum olyat csinálhatna, hogy az adott frekvencia kicsit kevesebb, megnyúlik a periódusidő a csúszás miatt, de kitöltési tényező érték hibát nem okozhatna, letiltottam a pdc írása előtt a frissítést utána egyből engedélyezem. A hiba pedig egyértelműen az, hogy rossz érték kerül a PDC-be. Ez a szinkronizálás csak a periódusidő pontosságán javítana, legalább is szerintem.
(#) c27 válasza ktamas66 hozzászólására (») Márc 4, 2017 /
 
Az is érdekes, hogy csak a PWM0 PWM2 és PWM4 moduloknál jön elő a hiba, amik lényegében pont a komplementerek. Próbáltam azt is, hogy a táblázat pozitív és negatív félperiódusát megcserélem, de ugyan úgy csak a páros PWM moduloknál van a hiba. Az is látszik, hogy a hiba hossza pont a következő megszakításig tart. Mintha az adott pillanatban rosszul számolná ki a PDC értékét vagy rossz érték kerülne bele. Egyszerűen nem értem. Ha nem 255-tel vagy 254-el szorzom a táblázat értékét akkor nincs ez a hiba, ha nem 19,5kHz e PWM kapcsolási frekije hanem a negyede akkor szintén nincs ilyen hiba. Nem látom az összefüggést, pedig valószínűleg egy a hiba.
(#) pajti2 válasza c27 hozzászólására (») Márc 4, 2017 /
 
Ha a hiba ciklikusan és reprodukálhatóan fordul elő, akkor egy külön függvénnyel meg tudod határozni konstansként is, hogy mit kellene végeredményként kiszámolnod a pwm bemenetére, és ha az az érték nem egyezik az elméletivel, pld felkapcsolhatsz egy piros ledet a pic egyik kimenetén. Úgy legalább a számítási hibákat kiszűrheted.
(#) picipic válasza pajti2 hozzászólására (») Márc 4, 2017 /
 
Néhány napot kihagytam. A régi nyáklapot letakarítottam.
Két külön álló lapra újból elkészítettem a függöny projekt javított kiadását.
A PIC tápját simítani kellet (100 mF +100uF) met csak rángatta a reléket.

Most simán működik egy kivétellel:

A belsőleg felhúzott PORTB2-re jön egy föld jel. Ezt a PIC érzékeli és indul a motor.
A PORTB3-ra jönne szintén egy föld jel, ha megakad motor.
Már több, mint 5 sec. késleltetés után újra figyeli a bejövő jeleket. A PORTB3 lábon a fesz. már 4 Volt fölé megy, de földnek érzékelve elmegy a program a LEÁLLÁS részre.

Mit tegyek, hogy a PORTB3 a lábán közel 5 Volt értéknél ne érzékelje 0 állapotúnak?
(#) gazspe hozzászólása Márc 4, 2017 /
 
Sziasztok!
8 bites PIC komparátorával és feszültség referencia moduljával akarok egy 4 bites a/d-t csinálni. Első gondolatom egy if-else szerkezet végig bontva mind a 16 esetre, de elég erőforrásigényesnek tűnik. Ha jól értelmeztem, akkor az összes feltételt végig vizsgálja.
  1. if(C1OUT!){
  2. VRCON=0bxxxx0001;i=1;} //ref. fesz. növelése
  3. if else(C1OUT!){
  4. VRCON=0bxxxx0010;i=2;}

(VRCON utolsó 4 bitje a Vref bitek)
Ez a megoldás működőképes e, vagy tudtok e ajánlani egy jobb megoldást?
válaszokat előre is köszönöm.
A hozzászólás módosítva: Márc 4, 2017
(#) ktamas66 válasza gazspe hozzászólására (») Márc 4, 2017 / 1
 
(#) ktamas66 válasza c27 hozzászólására (») Márc 4, 2017 /
 
Akkor gyorsítani kell a számolást, és figyelni, hogy mindig szinkronban legyen. Lehet a táblázatba érdemes befoglalni számításokat, legfeljebb int típusú lesz, de egyszerűsödik. Meg kellene nézni a fordító a >>8 parancsot byte cserére fordítja-e, mer ha igen akkor a kisebb tologatások helyett érdemesebb lehet úgy számolni, hogy mindig egy byte-nyi eltolás jöjjön ki.
Tehát akkor más a jelalak a PWM két komplementer kimenetén?
(#) c27 válasza ktamas66 hozzászólására (») Márc 4, 2017 /
 
Most kifejezettem csak a PWM1-et működtetem (PWM0 és PWM1 komplemeterként).
A két jelalak nem egyezik meg vagyis ha a 180°-onkénti váltást nézzük akkor nem. A PWM1 megy 0-179°-ig a jelalak jónak tűnik, a PWM0 180-359° között hibás.
Annyit csináltam, hogy írtam egy feltételt, hogy amikor a kitöltési tényező eléri a maximumot külön az egyik félperiódusban külön a másikban a két led kimenetre ráküldök egy 1-est amíg a feltétel igaz, ha nem 0-t. Szóval látom hogy közvetlenül a számítás után mikor kellene maximális kitöltési tényezőnek lennie és mindkét esetben egyforma. A számítások szerintem helyesek amikor 2032-t kell kapnia a PWM1-nek megkapja amikor 0-t a PWM0-nak az is ok.
Olyan mintha a PDC beírásakor lenne valami galiba vagy néha csak úgy valami miatt a komplementer pár hibázna. Próbáltam 0 és nulla közeli értékeket beírni a PDC-be hátha nem szereti, de akkor hozta a PWM0 a maximális kitöltést.
(#) c27 válasza ktamas66 hozzászólására (») Márc 4, 2017 /
 
Még egy észrevétel:
Írtam, hogy csinálok olyat, hogy bizonyos frekvencia felett nem használom ki a 360 jelből álló szinuszt hanem fokozatosan "eldobok" belőle.
Azt még észrevettem, ha több jelet dobok el akkor van hogy kiesik 1db hiba. 41Hz alatt 3 helyen van ilyen tüske 41-50Hz között pedig 2db. (Felette nem nagyon vizsgálódtam eddig, mert ott már az egyszerűsített programrész fut ahol nincs szorzás, de 55Hz-ig ott is van 1db hibás jel. 55Hz-től pedig megszűnik.)
Elég nehéz következtetéseket levonni, olyan mintha mégis szinuszjel hiba lenne és amint kiesnek a hibás elemek minden jó lesz, de nem biztos, hogy nem ilyen jellegű a hiba.
A hibák úgy néznek ki a csúcsok közelében vannak és csak a PWM páros moduljait érintik, és mint említettem csináltam egy összehasonlítást a páros és a páratlan modulhoz tartozó a moduloknak megfelelő maximális kitöltési tényezőket vizsgálva és ott jónak tűnnek.
Számomra kezd ilyen megmagyarázhatatlan hibának tűnni, de az is érdekes, hogy a PDC frissítésének tiltása nincs hatással a hibákra.
A hozzászólás módosítva: Márc 4, 2017
(#) benjami válasza c27 hozzászólására (») Márc 4, 2017 /
 
Én megcsinálnám azt, hogy extrém módon lelassítanám a léptetés sebességét (mondjuk 1/sec-re), ekkor ugye a teljes hullám 360sec alatt fog lezajlani. Ha ekkor nem jelentkezik a hiba, akkor valami tranziens jelenség van a háttérben, ha így is jelentkezik, akkor meg jobban meg tudod állapítani hol tartasz (mondjuk egy terminálra soros porton kiküldöd az aktuális pozíciót, esetleg a PWM értékét is).
(#) pajti2 válasza picipic hozzászólására (») Márc 4, 2017 /
 
A portb3 egyáltalán digitális bemeneti üzemben van? A/D átalakítód ha van azon a lábon, ugye kikapcsoltad? Milyen egyéb spec pic funkció van még a b3-on? Nyák elkötéseket meg hasonlókat meg kellene kukucskálni.
(#) Tomi111 hozzászólása Márc 5, 2017 /
 
Üdv! Csak egy kérdésem lenne. Ha egy PIC-en beállítok az +ref bemenetre 4,5V-ot, a -ref a GND-n, akkor ha a bemenetre 5V kerül, akkor is '11111111' lesz az eredmény pl. AN0-n? Gondolom 4,5V felett mindig?
(#) picipic válasza pajti2 hozzászólására (») Márc 5, 2017 /
 
Nyilván többször átnéztem. Az még gyanús nekem, hogy lassan mászik vissza a feszültség és akkor sem éri el a kiindulási 5,03 voltot, hanem csak a 4,6-ig megy föl. Lefelé, a motor indulásakor egyből leesik 1,23-ra.

Induláskor, amíg nem hozom működébe a motort az 5,03-at simán 1-nek értékeli, de az újból visszatérő 4,6-ot már nem.

Lábak.JPG
    
(#) kissi válasza Tomi111 hozzászólására (») Márc 5, 2017 /
 
Szia!
Igen, a +Uref-nél nagyobb jeleket "levágja" !
(#) Tomi111 válasza kissi hozzászólására (») Márc 5, 2017 /
 
Köszi!
(#) Lamprologus válasza picipic hozzászólására (») Márc 5, 2017 /
 
Ha "anlóg" jel van azon a lábon, miért nem használsz analog bemenetet?
Aztán programból beolvasod az értéket, kiértékeled, és ott dontod el hogy 1 vagy nulla.
(#) Bakman válasza Lamprologus hozzászólására (») Márc 5, 2017 /
 
Azokban a kontrollerekben nincs A/D konverter.
(#) Pali79 válasza picipic hozzászólására (») Márc 5, 2017 /
 
Ha nem mutatod meg a forrást mindenki csak találgat...
(#) picipic válasza Pali79 hozzászólására (») Márc 5, 2017 /
 
Itt a PORTB,3 láb kapcsolása
(#) Firefighter1 hozzászólása Márc 5, 2017 /
 
Sziasztok!
Van arra valami megoldàs hogy egy pic 2 darab 2x16 LCD kinelzöt hajtson meg?
(#) gyoran válasza Firefighter1 hozzászólására (») Márc 5, 2017 /
 
Szerintem van. Az LCD modulokat lehet 4 bites adattal hajtani (8 bit két lépésben)
Van ezenkívül egy Chip Enable, egy Data/Instruction és egy Read/Write lába.
Ez utóbbi kettő csak bemenet, és akár párhuzamosan is használhatod a két LCD-n.
Az adatbitekt nem tudom pontosan, végig kellene olvasni az LCD doksiját, talán azt is párhuzamosan lehet kötni, ha kijelöletlen LCD modulon azok nagyimpedanciás állapotban vannak.
De így vagy úgy 14 kimenettel mindent külön tudsz kezelni. Ha a fenti két bemenetet párhuzamosan kötöd, elég 12. Ha az adatbiteket is lehet párhuzamosítani akkor 8 port elég.
A kedvencemnek (16f628) van 16 ki/bemenete, az mindenképpen elég, 2 marad is.
A hozzászólás módosítva: Márc 5, 2017
(#) benjami válasza Firefighter1 hozzászólására (») Márc 5, 2017 /
 
Ez tud két kijelzőt: Karakteres LCD driver. Az E lábakat leszámítva párhuzamosan kötheted a lábait, így csak egyetlen plusz lábat igényel a két kijelző az egyhez képest.
(#) Pali79 válasza picipic hozzászólására (») Márc 6, 2017 /
 
Forrás alatt forrásfájlra gondoltam, amiből a hex-et fordítod...
(#) Pali79 válasza Firefighter1 hozzászólására (») Márc 6, 2017 /
 
Szerintem semmi akadálya. Az LCD akkor olvassa be az adatvonalak tartalmát ha az E-t magas szintre állítod, így elméletileg akárhány LCD-t köthetsz ugyanarra az adatvonalra, csak az E-ket kell külön vezérelni. Persze ezt is csak akkor ha eltérő információt akarsz kijelezni, mert ez ugyebár nem derül ki a kérdésből. Ha csak duplikálni akarod a kijelzést akkor csak kösd párhuzamosan!
Következő: »»   905 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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