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   107 / 1210
(#) vicsys válasza nagy_david1 hozzászólására (») Ápr 9, 2011 /
 
Azt nem tudom, hogy milyen compilert használsz, de gyanítom, hogy ccs c-t.
Csatolok egy példát PWM-re, ami hardveres. Egyébként a compiler sugójában is találsz leírást és gyári minta progikat. Ez is onnan van. (Elvileg a Te gépeden is megtalálod)

EX_PWM.C
    
(#) icserny válasza nagy_david1 hozzászólására (») Ápr 10, 2011 / 1
 
Idézet:
„Arra vagyok kíváncsi, hogy kapcsolódik a C nyelv ehez a pwm perifériához a kódban.”

A PWM frekvenciáját a Timer2 szabályozza, az üzemmódot és a kitöltési tényezőt pedig a CCP1 egység. A regiszterek beállítása pl. így néz ki
  1. /*
  2.  * Mintapélda a PWM regiszterek beállításához
  3.  * Fosc = 8000000 Hz
  4.  * PWM frekvencia = 4000.00 Hz
  5.  * Kitöltési tényező = 25 %
  6.  * Felbontás: 10 bites
  7.  * Timer2 előosztó:  1:4
  8.  * A PWM kimeneti láb adatáramlási irányát is
  9.  * be kell állítani!
  10.  * További részletekért lásd: http://www.micro-examples.com/
  11.  * A kódot csak saját felelősségedre használd!
  12.  */
  13. PR2 = 0b01111100 ;
  14. T2CON = 0b00000101 ;
  15. CCPR1L = 0b00011111 ;
  16. CCP1CON = 0b00001100 ;


Komplett mintapélda és PWM kalkulátor is van az alábbi címen. Bővebben: Link
(#) icserny válasza gianni89 hozzászólására (») Ápr 10, 2011 /
 
Csatold be a hex kódot, amivel próbálkozol!
(#) icserny válasza icserny hozzászólására (») Ápr 10, 2011 /
 
A mellékelt HEX állomány bootloader nélkül, PICkit2-vel beégetve hibátlanul fut nálam. Ez a korábban említett Helló világ! program. Ha ez sem megy nálad, akkor baj van a hardverrel.
(#) gianni89 válasza icserny hozzászólására (») Ápr 10, 2011 /
 
Meg se mozdul.
Olyan lehet, hogy csak az USB romlik el a PIC-en? Mert az LCD és a keypad megy rendesen. Azért becsatolom a hex-et és buherálom még egy kicsit a hardvert hátha megjavul.

projekt.hex
    
(#) nagy_david1 válasza icserny hozzászólására (») Ápr 10, 2011 /
 
Köszönöm szépen. Ez így már sokkal világosabb és érthetőbb. Az oldalt is köszi.
Bocsánat ha kissé érthetetlen vagyok de, hogyan lehetne megoldani azt akkor, hogy egy C-ben megírt program módosítsa a PWM paramétereit. Pl. futtatok egy olyan programot C-ben ami X időközönként más-más paraméterekre módosítaná a PWM jelem. A C részével megbírkoznék csak azt nem tudom hogyan tudnám fűzni ezekhez a parancsokhoz amiket mellékeltél. Nem tudom érthető-e a kérdésem.
(#) vicsys válasza nagy_david1 hozzászólására (») Ápr 10, 2011 /
 
Ott van a csatolt programban. A switch-case részt nézd át. Nyomógombbal lehet választani az értéket, ahol a timer2 értéket állítja. A kitöltést a az analóg rész beolvasása adja.
(#) nagy_david1 válasza vicsys hozzászólására (») Ápr 10, 2011 /
 
Köszi. Ez most egy ideig nekem jó háziolvasmány lesz.
(#) watt válasza gianni89 hozzászólására (») Ápr 10, 2011 /
 
Tölts fel rá egy bootloadert, ha az se megy, akkor keress a kapcsolásban hibát, végső esetben tönre ment a PIC!
(#) bkati hozzászólása Ápr 10, 2011 /
 
Ó, hogy a jó mindenit a C18-as fordítónak. Deklaráltam pár változót, mondjuk

  1. unsigned char a, b, c, d, e;


Utána ezeket egy függvényben akartam módosítani, és átadtam az első változó címét:

  1. fuggveny(&a);


A függvényben utána egy ciklussal módosítottam a változókat:

  1. void fuggveny(unsigned char &valtozo) {
  2. for (i = 0; i < 5; i++) {
  3.   valtozo[i] = valami;
  4. }

Legnagyobb meglepetésemre négy változó módosult, egy nem. Fél óráig szenvedtem, mire rájöttem, hogy az unsigned char a, b, c, d, e; nem egymás utáni memóriahelyre rakja a változókat, hanem a fordító tetszése szerint.
Meg lehet oldani, hogy ezek a változók szépen sorban szerepeljenek a memóriában? Vagy inkább csináljak egy uniont? Lehet olyan uniont, hogy karaktertömbként és bájtonkénti változókként is látszik?
(#) Hp41C válasza bkati hozzászólására (») Ápr 10, 2011 /
 
Szia!

Használj tömböt, az elemei egymás utáni címeken lesznek.
int a[4];
A string karakter tömb, a tömb neve egyben a memória területére mutató pointer -ként is használható.
char message[255];
A byte -onkénti olvasása megoldható a (byte)message[x] vagy a (byte)(*(message + x)) alakban is...
(#) bkati válasza Hp41C hozzászólására (») Ápr 10, 2011 /
 
Ezt tudom, de azért használok változókat, mert 16 db van, és a nevükkel sokkal könnyebb kezelni őket, mint egy tömb egy elemére hivatkozni. Tehát a "kutya=1; macska=0;" egyszerűbb, mint a tömb[5]=1; tömb[12]=0;
(#) gianni89 válasza bkati hozzászólására (») Ápr 10, 2011 /
 
A kód elején definiálj egy nevet a tömb egyes elemeihez és meg van oldva. Pl:
  1. #define kutya tomb[5]


Így ha átírod a kutya értékét akkor az a tomb 5-dik eleme lesz
(#) icserny válasza gianni89 hozzászólására (») Ápr 10, 2011 /
 
Idézet:
„Olyan lehet, hogy csak az USB romlik el a PIC-en?”
Elvileg lehetséges, pl. ha a VUSB, D+, D- kivezetések valamelyike túlfeszültséget kap. Mellesleg megmérhetnéd, hogy a VUSB lábon mekkora feszültség van. Ha nagyon eltér 3,3 V-tól, akkor az USB nem tud kommunikálni a PC-vel.
(#) gianni89 válasza icserny hozzászólására (») Ápr 10, 2011 /
 
3.45 V van rajta. Az szerintem annyira nem vészes. De azt tervezem, hogy holnap veszek egy új PIC-et mert már nem tudok mást kitalálni...
(#) icserny válasza gianni89 hozzászólására (») Ápr 10, 2011 /
 
Idézet:
„3.45 V van rajta.”
Az jó.
A korábbi beírásodhoz csatolt HEX állomány viszont nem úgy linkelted, ahogy ajánlottam, s érdekes módon a 0x02A-0x82A közötti terület üresem maradt. Vagy nem jó linker állományt használtál, vagy rossz linker opciót (pl. /uMHCP_BOOTLOADER) adtál meg. De ez nem vigasz, ha a tőlem kapott HEX állománnyal sem sikerült éltre kelteni az áramkört.

Egyébként más gépen, vagy más USB porton próbáltad már?
(#) gianni89 válasza icserny hozzászólására (») Ápr 10, 2011 /
 
Próbáltam több porton linux illetve windows alatt és egy egylapos gépen is, de semmi.
Most kipróbáltam egy másikon PC-n is az általad küldött HEX-el de ott se reagál.
(#) dudzsi hozzászólása Ápr 11, 2011 /
 
Sziasztok!
A megtudja nézni valaki a kis programomat, jó e az elgondolásom vagy tulbonyolizáltam. A feladata annyi lenne hogy a PORTC 0 és 1 lábán felváltva van magas jel. kb. 1kHz-nek kell lennie. Ami még csinálnia kell majd egy A/D mérés. De az késöbbi dolog. Proteusba müködik. Elöre is köszi

proba.HEX
    
(#) icserny válasza dudzsi hozzászólására (») Ápr 11, 2011 /
 
我不认为任何人会费心的十六进制代码解码。Kb. ilyen volt a kérdésfeltevésed...
Miért nem a forráskódot csatoltad be?
(#) dudzsi válasza icserny hozzászólására (») Ápr 11, 2011 /
 
Jaj. De h..e vagyok.

proba.asm
    
(#) dudzsi válasza dudzsi hozzászólására (») Ápr 11, 2011 /
 
Vagy inkább igy?

proba2.asm
    
(#) gianni89 válasza gianni89 hozzászólására (») Ápr 12, 2011 /
 
El se hiszem de működik. Vettem egy új PIC-et és ezzel megy. Köszi szépen mindenkinek aki segített
(#) icserny válasza gianni89 hozzászólására (») Ápr 12, 2011 /
 
Csak azt tudom elképzelni, hogy a régi PIC USB bemenete valamelyik összedugásnál kapott a PC-től egy nagy sztatikus töltésből eredő pofontot, és kimúlt. A PIC többi része attól akár kifogástalan is maradhatott.
(#) gianni89 válasza icserny hozzászólására (») Ápr 12, 2011 /
 
Értem. Ezt el lehet valahogy kerülni vagy kivédeni? Nem igazán szeretném, hogy a mostani is így tönkremenjen!
(#) icserny válasza gianni89 hozzászólására (») Ápr 12, 2011 /
 
Az áramköröd földjét kell elsőként közösíteni a PC földjével. Egy normális USB kábelnél ez általában teljesülni szokott, főleg ha a PIC oldalon a csatlakozó fém házát nem felejted el földre kötni.

Mindamellett tökéletes védelem nincs, láttam már USB pen drive-ot is egy bedugástól tönkremenni.
(#) gianni89 válasza icserny hozzászólására (») Ápr 12, 2011 /
 
Akkor ezért van az h a csatlakozókban (mind a kábelen mind a nyákoson) előrébb vannak az áramot hozó érintkezők.
Idézet:

a PIC oldalon a csatlakozó fém házát nem felejted el földre kötni.”

Csak, hogy biztos legyek: ez azt jelenti, hogy a nyákos csatlakozót a nyákba fogó "karmait" kössem össze az USB 4. lábával? Nem akarom megint elrontani
(#) icserny válasza gianni89 hozzászólására (») Ápr 12, 2011 /
 
Idézet:
„a nyákos csatlakozót a nyákba fogó "karmait" kössem össze az USB 4. lábával?”
Igen.
(#) gianni89 válasza icserny hozzászólására (») Ápr 12, 2011 /
 
Okés. Köszi még egyszer mindent!
(#) gianni89 válasza icserny hozzászólására (») Ápr 12, 2011 /
 
Na akkor még kérdés
Az mitől van, hogy bedugom és működik és egyszer csak a windows nyomja az a hangot h lecsatlakozott az usb? Attól félek, hogy ettől fog tönkre menni megint a PIC.
(#) icserny válasza gianni89 hozzászólására (») Ápr 12, 2011 /
 
Ezer oka lehet:
- áramköri hiba (beleértve a bizonytalan érintkezést, rövidzárlatot is)
- szoftver hiba (time out, polling módban az USB kérelem kiszolgálásának elmulasztása, bekapcsolva felejtett watchdog, vagy egyéb reset).
Következő: »»   107 / 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