Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Din ce scrie in manualul de la picc, ar trebui sa poti programa OSCCAL in cod. Incearca sa modifici main() ca mai jos void main(void){ OSCCAL = 0x34FF; // ce era deja in main}Poate ai noroc si merge. LE Referitor la programator, ar trebui sa mearga fix ca un pickit2. Daca nu poti citi ce scrie in pic (nu merge nici cand picul e programat cu programul care altfel functioneaza?), inseamna ca ai si alte probleme. LLE Am comparat cele doua cuvinte de configuarere (programul asta si cel care merge) si am ajuns la concluzia ca difera doar MCLR (pus pe disable in programul care merge si in ultimul meu __CONFIG) si la BOR, pus pe disable in programul care merge si activ la mine. Asa ca daca scrii __CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);, cuvatul de configurare ar trebui sa fie acelasi 0184 si la programul care merge si la cel care nu. Daca tot nu merge... Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 LE Referitor la programator, ar trebui sa mearga fix ca un pickit2. Daca nu poti citi ce scrie in pic (nu merge nici cand picul e programat cu programul care altfel functioneaza?), inseamna ca ai si alte probleme.da, cand dau read (la pic) afiseaza o porcarie, dau un shot imediatsi modific codul imediatLE: am uploadat.deci am scris picul cu b657i-1.hex. am si testat, clipeste un led legat intre pinii 7 si 8. i am dat read si inafara de primele 2 spatii de memorie arata numai 0000. are toane programatorul ori eu gresesc ceva grav.imediat testez si codul Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Vezi ca l-am mai modificat o data. Hm, interesant, cumva cumva reusim sa protejam picul la citire. Ce zice el (si reiese si din CONFIG WORD-ul pe care-l afiseaza - 0084) e ca picul e protejat la citire (bitul 8 e zero), asa ca e normal ca pickit2-ul sa nu-l poata citi. Intrebarea e, de ce e picul protejat la citire, ca atunci cand scrii in el, CONFIG WORD-ul e corect (bitii 7 si 8 sunt 1). Vorbim aici despre variabila UNPROTECT din __CONFIG. N-am deloc idee ce se intampla acolo. :( Incearca te rog inca o data cu __CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO & 0x0FFF);LE Si dupa ce-l modifici, mai pune te rog un screen-shet cu fereastra programatorului dupa programare. Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 #include <htc.h> //se ocupa el de pic el de fisierul necesar picului tau in functie de ce alegi in mplab#define _XTAL_FREQ 4000000 //4 MHz clock; schimba daca ai alta frecventa. Ai nevoie de asta pentru functia __delay_ms();/* Configuration bit definitions */#define CONFIG_ADDR 0x2007 /* Protection of data block */#define CPD 0x3EFF /* data protect on */ #define UNPROTECT 0x3FFF /* data protect off *//* Protection of program code */#define PROTECT 0x3F7F /* code protection on */#define UNPROTECT 0x3FFF /* code protection off *//* Brown out detection enable */#define BOREN 0x3FFF /* brown out reset enabled */#define BORDIS 0x3FBF /* brown out reset disabled *//* Master clear reset */#define MCLREN 0x3FFF /* master clear reset function enabled */#define MCLRDIS 0x3FDF /* master clear reset function disabled *//* Power up timer enable */#define PWRTDIS 0x3FFF /* power up timer disabled */#define PWRTEN 0x3FEF /* power up timer enabled *//* Watchdog timer enable */#define WDTEN 0x3FFF /* watchdog timer enabled */#define WDTDIS 0x3FF7 /* watchdog timer disabled *//* Oscillator configurations */#define RCCLK 0x3FFF /* GP4 = clock out signal/GP5 = RC osc */#define RCIO 0x3FFE /* GP4 = IO/GP5 = RC osc */#define INTCLK 0x3FFD /* internal osc/GP4 = clock out signal/GP5 = IO */#define INTIO 0x3FFC /* internal osc/GP4 = IO//GP5 = IO */#define EC 0x3FFB /* external clock */#define HS 0x3FFA /* high speed crystal/resonator */#define XT 0x3FF9 /* crystal/resonator */#define LP 0x3FF8 /* low power crystal/resonator */__CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);void main(void){ OSCCAL = 0x34FF; TRISIO4=1; // Alternativ poti folosi TRISIO ca sa modifici toti bitii odata TRISIO5=0; // TRISIO = 0b010000; while(1){ // comutam GPIO5 la infinit, cu pauze de 0,5 secunde intre comutari GPIO5=1; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); GPIO5=0; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); }} nimic, e mort! nu face nimic... ma uit pe data sheet acum, la pagina 21-22 LE: imediat vine print screenu Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Mai incearca, te rog, si ultimul CONFIG (ultimul meu post) si incearca sa citesti picul. Dupa asta te las in pace. Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 Mai incearca, te rog, si ultimul CONFIG (ultimul meu post) si incearca sa citesti picul. Dupa asta te las in pace.da asta am facut, am dat build acum il pun pe pic. nu trebuie sa ma rogi, eu te rog pe tine Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Screen shot cu fereastra de la programator, dupa ce scrii programul in pic. Vreau sa vad ce zice despre CONFIG. Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 am incercat sa arat tot ce fac. observi este hexul de la 5 si 17. excat acela facut in screen shotu cu programu...LE: dau un refrest si vad vizualizat de 4 ori la uploaduri. avem spectatori Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Hm, se pare ca mi-am gasit de lucru deseara. Sper sa-mi fac niste timp sa ma joc si eu putin, ca e interesant ce se intampla. Iti arata 0084 la configuration word de fiecare data (ar trebui sa-ti arate 0184), desi toate define-urile mie mi se par corecte. Din pacate acum trebuie sa te las sa te chinui singur mai departe.Inceara sa te prinzi de ce nu merge numai cu si are nevoie de toate define-urile alea pe care le-ai adaugat de mana (in principiu e treaba de C, nu de microcontrolere). Succes! Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 Hm, se pare ca mi-am gasit de lucru deseara. Sper sa-mi fac niste timp sa ma joc si eu putin, ca e interesant ce se intampla. Iti arata 0084 la configuration word de fiecare data (ar trebui sa-ti arate 0184), desi toate define-urile mie mi se par corecte. Din pacate acum trebuie sa te las sa te chinui singur mai departe.Inceara sa te prinzi de ce nu merge numai cu si are nevoie de toate define-urile alea pe care le-ai adaugat de mana (in principiu e treaba de C, nu de microcontrolere). Succes!nici o problema! merci mult! mai umblu, insa iau o pauza ca sa ma deconectez pentru ca ma doare capul putin. Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 La mine varianta #include <htc.h> //se ocupa el de pic el de fisierul necesar picului tau in functie de ce alegi in mplab#define _XTAL_FREQ 4000000 //4 MHz clock; schimba daca ai alta frecventa. Ai nevoie de asta pentru functia __delay_ms();__CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);void main(void){ TRIS4=1; // Alternativ poti folosi TRISIO ca sa modifici toti bitii odata TRIS5=0; // TRISIO = 0b010000; while(1){ // comutam GPIO5 la infinit, cu pauze de 0,5 secunde intre comutari GPIO5=1; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); GPIO5=0; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); }}se compileaza fara probleme. Poti te rog sa urci pe site fisierul pic12f6x.h de la tine din include? Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 ...\HI-TECH Software\PICC\9.82\includeIar asta primesc cand compilez cu codul postat de tine: Build E:\Projects pic\LED1 for device 12F629Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.82\bin\picc.exeMake: The target "E:\Projects pic\main.p1" is out of date.Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.82\bin\picc.exe" --pass1 "E:\Projects pic\main.c" -q --chip=12F629 -P --runtime=default,+clear,+init,-keep,+osccal,-download,-resetbits,-stackcall,+clib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -D__DEBUG=1 --rom=default --ram=default --double=24 --float=24 --addrqual=ignore -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" Error [192] E:\Projects pic\main.c; 9.1 undefined identifier "TRIS4"Error [192] E:\Projects pic\main.c; 10.1 undefined identifier "TRIS5"********** Build failed! **********in primul post am scris ce compilator am Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Hm, desi avem acelasi compiler, cele doua versiuni ale noastre arata/se comporta total diferit. De vina s-ar putea sa fie noul ide (mplabx) pe care il are microchip pe teava. Codul pentru tine ar trebui sa fie: #include <htc.h> //se ocupa el de pic el de fisierul necesar picului tau in functie de ce alegi in mplab#define _XTAL_FREQ 4000000 //4 MHz clock; schimba daca ai alta frecventa. Ai nevoie de asta pentru functia __delay_ms();__CONFIG(CPD_OFF & CP_OFF & BOREN_OFF & MCLRE_OFF & PWRTE_OFF & WDTE_OFF & FOSC_INTRCIO);void main(void){ TRISIO4=1; // Alternativ poti folosi TRISIO ca sa modifici toti bitii odata TRISIO5=0; // TRISIO = 0b010000; while(1){ // comutam GPIO5 la infinit, cu pauze de 0,5 secunde intre comutari GPIO5=1; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); GPIO5=0; __delay_ms(250); // nu stiu ce ia __delay_ms() ca argument; daca e unsigned char, pot max. 255 __delay_ms(250); }}Altfel, codul e functional. L-am scris intr-un 12f675 (ca n-am 12f629) si am modificat MCLR_ON in __CONFIG() ca altfel nu-mi mergea ICD2 (si extern am legat, in plus fata de circuitul tau, o rezistenta intre VDD si MCLR si o rezistenta intre pinul 2 al picului si led) si ledul palpaie fericit. De rezistenta intre MCLR si VDD n-ai avea nevoie, ca de-aia am facut MCLR_OFF in __CONFIG. De citit datele din pic iarasi pot. Acum, daca folosim variabilele corecte, poate merge si la tine. Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 da se compileaza programul ala. i am dat build si l am pus pe pic. configuration la softul de programat a fost 0194.nu se aprinde ledul... modific GPIO5 cu GPIO0 pentru pinul 7? poate o fi stricat pinul 2 sau ceva:-??zilele astea imi cumpar alt pic, poate e el de vina... si imi iau si unu 16f84 ca sa am multe tutoriale la indemana Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 In cazul in care vrei sa folosesti alt pin, trebuie sa:- reconfigurezi registrul TRISIO a. i. pinul dorit sa aiba directia care trebuie (0 inseamna iesire, 1 inseamna intrare).- sa configurezi eventualele intrari analogice in digitale (12f629 are si un comparator. GPIO0..GPIO2 sunt, dupa reset, intrari/iesiri analogice). Asa ca trebuie sa schimbi si CMCON. Cred ca CMCON = 0x07 e o valoare tocmai buna (vezi in data sheet capitolul despre comparator).LE Cu noul cod reusesti sa citesti picul?LLE Cred totusi ca incercarile astea au fost instructive. Cred ca te-ai prins cam pe unde sa te uiti cand iti trebuie cate ceva. Cu __CONFIG, de exemplu, a fost suficient sa ma uit in fisierul .h care trebuie ca sa gasesc definitiile corecte si sa le folosesc. Cam la fel trebuie facut cam cu toate "problemele" - solutiile sunt in documentatii, trebuie numai corect cautate.Mult succes in continuare! Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum