Fórum témák
» Több friss téma |
Sziasztok!
Írtam egy egyszerű LED-villogtató programot. Legalábbis annak terveztem, de nem működik. MPLAB fejlesztőkörnyezetet használtam, HI-TECH fordítóval dolgoztam. Egy 12F675-ös PIC-cel csinálnám. A define-os részt egy késleltetéses mintafüggvényből másoltam ki (a HI-TECH fordító (9.81) samples mappájában található main.c-ből). Szerintetek miért nem működik? Rámértem mindegyik lábára a PIC-nek, de mindegyiken (kivéve a Vdd-t és a Vpp-t, össze vannak kötve egy 10k-s ellenállással) 0V-ot mérek. A GP2 lábra tettem egy LED-et és egy ellenállást sorban (jól is van méretezve az ellenállás, 5V-tal kipróbáltam).
Ilyenkor mindig töltsd fel a kódot, amivel próbálkozol.
Az is érdekes még, hogy MPLAB-ban debuggoltam (MPLAB SIM-mel), és a GPIO port (ami 6 bites: 0...5) alsó 4 bitjét nem lehet változtatni (a mellékelt kódban csak a GP2-t konfigoltam kimenetnek, de a többire is igaz). Ez lehet attól, hogy a GP3 csak bemenet lehet? Vagy mi lehet a gond? Próbáltam egyébként a GP5-re kötni a LED-et és azt billegtetni, de az se működött.
A HTC-hez nem értek, de:
1. A programban nem állítottad be a konfigurációs biteket. (belső oszcillátor, oszcillátor lábak I/O lábként funkcionáljanak, Watchdog legyen letiltva) Idézet: „alsó 4 bitjét nem lehet változtatni” 2. Nem állítottad digitálisra a kimeneteket (ANSEL regiszter beállításával, lásd adatlap!) 3. Le kell tiltani az analóg komparátort (CMCON=7 vagy ilyesmi, lásd adatlap, az I/O port inicializálásánál!)
Konfiurációs biteket az MPLAB-ban állítottam be. Ezt elfelejtettem leírni. A többit pedig megnézem akkor az adatlapban. Köszi a segítséget!
Egyébként azért használom a HTC-t, mert ez volt az első, amit megtaláltam és ingyenes. Tudsz esetleg ajánlani egy másik ingyenes fordítót? Mondjuk amit Te használsz?
Esetleg a gyári(microchip) Hi-Tech C?
A konfigot mindig a programban állítsd be! Az is lehet, hogy bele sem fordítódik a hex-be!
Az MPLAB telepítésekor felajánlotta, hogy telepíti a HI-TECH fordítót, gondolom Te is erre gondolsz. A konfigurációs biteket az MPLAB-ban állítom be, sokkal kényelmesebb, mint programból.
Kijavítottam a kódomat icserny meglátásai alapján, de még mindig nem működik. Most már letettem a villogásról (egyelőre), annak is örülnék, ha kigyulladna az a nyamvadt LED Szerintetek mi hibádzik még a programomban?
Azt elfelejtettem leírni, hogy direkt állítottam fix 1-esre mindegyik I/O-lábat, de mindegyiken 0V-ot mérek...
Most esett le, hogy az én általam megírt programba tegyem bele a configot, ne MPLAB-ból, ugye? De egyébként jó az beállítás, amit az előző hozzászólásomhoz mellékeltem? Vagy a Power-Up-Timert érdemes bekapcsolni, míg stabil lesz a táp?
A BODEN-t kapcsold ki a PWRT-t be.
Az ADCON0-ba tegyél 0-t Igen a forrásába tegyed a konfigot. HTC-ben nem tudom hogy kell szintaktikailag, de egyrészt még most térj át Hi-Tech-re, másrészt ha nem hallgatsz ránk, akkor nézd meg a helpben, hogy kell, de később sem fogunk tudni segíteni, ha ennél a fordítónál maradsz.
Az adatlap olvasas lehet hogy segitene. Meg kellene nezni, hogy az egyes labakhoz milyen periferiak csatlakoznak, es be kell allitani a Te altalad kivant modba.
Én ezt telepítettem:
HI-TECH C Compiler for PIC10-12-16 MCUs V9.81 Ez nem jó? Ha nem, akkor melyiket telepítsem és használjam? Csak hogy tudjatok segíteni, ha elakadtam
Jót használsz, én vagyok a hülye!
Szintaktika ez:
Persze neked a 675-höz tartozó kapcsolókat kell használnod!
Rajta vagyok az ügyön, olvasgatom, de most először programozok uC-t, nem tudom még, hogy mi mindent kell beállítani. Köszi a segítséget!
Semmi gond, csodálkoztam, hogy kétféle HITECH lenne?!
A CONFIG makró hasában lévő dolgok az adatlapból derülnek ki? Vagy az adott PIC h-fájljaiból (amit a HITECH mappájából lehet kikeresni)? Épp ezeket keresem amúgy...
Csatoltam, amiben benne van.
Ezt a fájlt mindig megtalálod a PIC-edhez a Hi-Tech telepedett könyvtárában az include könyvtárban.
Ez nem az enyémhez való szerintem. Én egy ilyet találtam az include mappában (csatolom). Mások a define elnevezések. Érdekes
És a CONFIG-on belül mindegy a sorrend? És lehet egy CONFIG-on belül is az összeset beállítani, ugye?
#include
__CONFIG(FOSC_INTRCCLK & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF); #ifndef _XTAL_FREQ // Unless already defined assume 4MHz system frequency // This definition is required to calibrate __delay_us() and __delay_ms() #define _XTAL_FREQ 4000000 #endif void main() { // Initialize CMCON = 0x07; // Comparator Off ADCON0 = 0x00; // A/D Off ANSEL = 0x00; // Digital I/O TRISIO = 0x08; // GP3: Input, Other All: Output GPIO = 0x37; // Init Value on the I/O Port // Főciklus while(1) { GP2 = 1 - GP2; // Toggle GP2 __delay_ms(500); // Wait ---> f = 1Hz } } Ez a jelenlegi kódom. Még mindig nem működik Megmértem a lábakat, és meglepetésemre mindegyik I/O lábon 0V van, kivéve a GP4-et, amin valamiért 2.4V. Érdekes...
GP4-re rájöttem, rosszul konfigoltam az órajelet... ott jött ki az órajel, és gondolom a műszerem az átlagot mutatta... Ráadásul a LED meg folyamatosan világított, ami ugye 4 MHz-nél nem meglepő, hiszen a LED-es meg a szemünk is integráló (átlagol), és ezért világított folyamatosan a LED.
Most vettem észre, hogy a legutóbb belinkelt programnál az első sort rosszul másoltam át, így néz ki: #include
A fórum vágja le a kisebb és nagyobb jelek közötti részt. Valójában ott van az, csak nem látszik. Bár nem egészen értem, hogy miért van ez. Illetve azt értem, hogy miért, hanem hogy miért így van megoldva, amikor lehetne sokkal jobban is...
Vagy csatold a fájlt, vagy használd a Kód gombot! Utólag is lehet javítani, ha elrontottál valamit!
És azt hogyan tudom használni? A kód gombot kell a kód előtt és után megnyomni? Help!
És van ötletek, hogy miért nem működik a programom? Még mindig hiányzik valami? Vagy rosszul állítok be valamit?
Csatold a c fájlt!
Kijelölöd a forrást és ráböksz a kód gombra, de igazán van lehetőséged kipróbálni, írtam, hogy lehet módosítani a hozzászólást egy ideig! Az off gomb is így működik. De inkább csatold a fájlt!
Okés, csatolom. Erre nem is gondoltam, pedig korábban is módosítottam a hozzászólásom, csak tegnap annyira fáradt voltam már este, hogy ez eszembe se jutott... És az off gomb mire való?
Na, akkor küldöm.
No, akkor csatoltam ami működik. Ha nem fordulna le neked, akkor hivatkozz a linkelt header fájlra közvetlenül a forrásban.
Köszi a segítséget, most már legalább elkezdett villogni az a fránya LED... Én a 8.70-es MPLAB-ot használom. A PIC általam említett h-fájljában lévő define-okat nem ismerhette, vagy nem tudom én mit, de amit küldtél c-fájlt, az majdnem teljesen jó volt. Csak a h-fájlodat kellett beincludolni.
Annyi kérdésem volna még, hogy elég érdekesen működik ez a uC... Programozás után kb. 3-4-szer bekapcsolnia tápfeszültségét (Vdd, 5V), mire elindul benne a program, addig fel se villan a LED. Már ez is érdekes. De van még valami: ha lecsatlakoztatom a számítógépről az LPT csatlakozót, egyáltalán nem villog a LED. Csináltam olyat is, hogy villogtattam, közben kihúztam az LPT csatlakozót (továbbra is villogott a LED), majd kikapcsoltam a tápot és vissza, és ekkor már nem kezdett el villogni. Pedig a uC Vdd lábán 5V-ot mértem, tehát a tápot megkapta. Fogalmam sincs, hogy miért csinálja. Elvileg úgy kéne működnie programozó kábel nélkül is, hogy amint megkapja a tápfeszültséget a uC, jön egy Power-on-reset, oszcillátor beáll, inicializál, és a 0x00 címről indít a programmemóriában (Flash). De nem ezt csinálja valamiért. Elég bugos...
Az MCLR láb, fel van húzva 5V-ra egy 10k-s ellenállással?
|
Bejelentkezés
Hirdetés |