mihaipadawan Postat August 16, 2011 Partajează Postat August 16, 2011 salut tuturor!Vreau sa incep sa programez pe microcontrollere ,in limbaj C, si pentru ca am deja un pic 12F629, vreau sa fac ceva pe el.Am instalat MPLAB IDE v8.76, am instalat si compiler dde la hi tech (arhiva downloadata de pe siteu microchip se numeste "compiller hi tech c compiler for 10 12 16 mcus" , installerul s.n. "picc-9.82-win", iar cand selectez in MPLAB toolsitecontents aleg "HI-TECH ANSI C Compiler").Am tot incercat de cateva zile sa programez picul astfel incat sa se aprinda niste leduri dar nu am reusit. M-am uitat pe putinele tutoriale pentru limbaj C pe care le-am gasit pe internet si avand in vedere ca toate sunt facute pentru 16F84 respectiv 16F877 , plus versiunile diferite de compilator folosite (precizez ca in multe tutoriale am vazut folosinduse librarii care nici nu exista in folderul "include" al compilatorului pe care am zis ca il am ) , nu m-au ajutat cu nimic!Asadar, daca are cineva timp, nu vreau azi sau maine, ci in viitoru apropriat, sa faca pentru proiectul meu de incepator un program in C. Vreau decat sa se aprinda succesiv cele 5 leduri, si sa pot intelege codul (sa vad libraria, cum se definesc pinii, cum se face delay`u etc). Este suficient sa uploadati codul si hex`ul (vreau si fisierul hex pentru cazul in care nu functioneaza microcontrollerul cu hex`ul creat de compilatorul meu si sa pot indentifica problema).Multumesc anticipat!raman interconectat! Link spre comentariu
Th3_uN1Qu3 Postat August 16, 2011 Partajează Postat August 16, 2011 Daca vrei sa faci ceva mai complicat decat clipocit leduri pe viitor, eu zic sa te apuci sa inveti ASM. Picul este extrem de limitat ca memorie si e cam greu de programat in C... pana la urma tot la assembler ajungi pentru chestiile critice. Daca stii ceva engleza uite aici niste tutoriale foarte bine explicate despre programarea picurilor. Si in ASM si in C. http://www.gooligum.com.au/tutorials.html Link spre comentariu
mihaipadawan Postat August 17, 2011 Autor Partajează Postat August 17, 2011 Daca vrei sa faci ceva mai complicat decat clipocit leduri pe viitor, eu zic sa te apuci sa inveti ASM. Picul este extrem de limitat ca memorie si e cam greu de programat in C... pana la urma tot la assembler ajungi pentru chestiile critice.Daca stii ceva engleza uite aici niste tutoriale foarte bine explicate despre programarea picurilor. Si in ASM si in C. http://www.gooligum.com.au/tutorials.htmlAm mai auzit. Insa, avand in vedere ca mai stiu C de la scoala, si ca compilatoarelea de C sunt din ce in ce mai bune, ramane sa il invat. Ms pt sfat! Link spre comentariu
10vid Postat August 17, 2011 Partajează Postat August 17, 2011 Incepe intai cu legarea LED-urilor la 5v. Foloseste o rezistenta. Link spre comentariu
Th3_uN1Qu3 Postat August 17, 2011 Partajează Postat August 17, 2011 Merg legate in ambele moduri, doar ca pinii trebuie comandati invers. Sunt de acord la partea cu rezistentele. Link spre comentariu
Liviu M Postat August 17, 2011 Partajează Postat August 17, 2011 Ca sa vezi cum "vorbeste" compiatorul hi-tech cu picurile, trebuie sa te uiti in fisierele Program Files/HI-TECH Software/PICC/9.80/include/picXXX.h (in cazul tau pic12f6x.h), in care sunt date denumirile folosite de compilator pentru accesarea resurselor hardware.De exemplu, pentru intrari/iesiri sunt urmatoarele definitii: /* GPIO Bits */volatile bit GPIO0 @ (unsigned)&GPIO*8+0;volatile bit GPIO1 @ (unsigned)&GPIO*8+1;volatile bit GPIO2 @ (unsigned)&GPIO*8+2;volatile bit GPIO3 @ (unsigned)&GPIO*8+3;volatile bit GPIO4 @ (unsigned)&GPIO*8+4;volatile bit GPIO5 @ (unsigned)&GPIO*8+5;Dupa ce ai aflat unde sa te uiti ca sa stii cum vorbesti cu picul, mai ai sa afli ce trebuie sa-i spui. Pentru asta trebuie sa vezi in Data-Sheet cum se configureaza picul pentru functiile pe care le vrei de la el, pentru ca porturile sunt in general multiplexate, acelasi pin avand mai multe functii (pentru a oferi cat mai multe facilitati la un numar de pini cat mai mic).Dupa ce stii ce cum trebuie configurat picul ca sa faca ce vrei, nu-ti ramane decat sa folosesti definitiile din fisierul .h ca sa accesezi hardul.De ex. ca sa faci GP4 intrare si GP5 iesire (am ales special GP4 si GP5, ca sper sa fie numai digitali, altfel trebuie umblat si la CMCON/ADCON), programezi TRIS4 = 1 (intrare), TRIS5=0 (iesire). In C ar fi:#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();void main(void){ TRIS4=1; TRIS5=0;// Alternativ poti folosi TRISIO ca sa modifici toti bitii odata// 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); }}Sunt sanse sa-i trebuiasca alta forma de XTAL_FREQ, da' se vaita el si corectezi.PS Sper sa nu dea prea multe erori, n-am cum sa testez acum. Link spre comentariu
mihaipadawan Postat August 17, 2011 Autor Partajează Postat August 17, 2011 multumesc!!!acum transcriu in ide!LE:Executing: "...HI-TECH Software\PICC\9.82\bin\picc.exe" --pass1 "...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; 6.1 undefined identifier "TRIS4"Error [192] E:\Projects pic\main.c; 7.1 undefined identifier "TRIS5"Error [192] E:\Projects pic\main.c; 12.31 undefined identifier "_XTAL_FREQ"LE2: am gasit in fisierul de care ai zis volatile bit TRISIO0 @ ((unsigned)&TRISIO*8)+0;volatile bit TRISIO1 @ ((unsigned)&TRISIO*8)+1;volatile bit TRISIO2 @ ((unsigned)&TRISIO*8)+2;volatile bit TRISIO3 @ ((unsigned)&TRISIO*8)+3;volatile bit TRISIO4 @ ((unsigned)&TRISIO*8)+4;volatile bit TRISIO5 @ ((unsigned)&TRISIO*8)+5;asa ca am inlocuit TRIS4/5 cu TRISIO4/5 si nu mai da eroarea, si am modificat _XTAL_FREQ si merge sa ii dea build.urmeaza sa pun hexu pe pic sa vad daca merge.LE3: primesc o erroare la burn. am uploadat cateva screenuriraman interconectat! (chiar daca apar offline, eu sunt aici si dau refreshuri!) Link spre comentariu
Liviu M Postat August 17, 2011 Partajează Postat August 17, 2011 multumesc!!! asa ca am inlocuit TRIS4/5 cu TRISIO4/5 si nu mai da eroarea, si am modificat _XTAL_FREQ si merge sa ii dea build. Super, ai facut exact ce (cred eu ca) trebuie. urmeaza sa pun hexu pe pic sa vad daca merge. LE3: primesc o erroare la burn. am uploadat cateva screenuriSorry, n-am idee cum e cu pickit2, nu l-am folosit niciodata, poate te poate ajuta altcineva. Remarci -ai pierdut valoarea care era in osccal. Nu e foarte grav decat daca te intereseaza o rezolutie buna a ceasului intern. Nu cred ca e cazul in exemplul anterior. - cum alimentezi circuitul cu pic? Are alimentator separat? Daca nu, incearca sa bifezi Vdd in prima poza, poate ajuta (icd2-ul pe care il folosesc are o optiune asemanatoare, care specifica daca alimentarea circuitului de programat se face din icd2 sau extern). LE Nu omite sfatul lui 10vid referitor la rezistentele de limitare a curentului prin led. Link spre comentariu
mihaipadawan Postat August 17, 2011 Autor Partajează Postat August 17, 2011 Sorry, n-am idee cum e cu pickit2, nu l-am folosit niciodata, poate te poate ajuta altcineva. Remarci -ai pierdut valoarea care era in osccal. Nu e foarte grav decat daca te intereseaza o rezolutie buna a ceasului intern. Nu cred ca e cazul in exemplul anterior. - cum alimentezi circuitul cu pic? Are alimentator separat? Daca nu, incearca sa bifezi Vdd in prima poza, poate ajuta (icd2-ul pe care il folosesc are o optiune asemanatoare, care specifica daca alimentarea circuitului de programat se face din icd2 sau extern). LE Nu omite sfatul lui 10vid referitor la rezistentele de limitare a curentului prin led. Folosesc asa ceva: viewtopic.php?f=11&t=81630,luat exact de la noxxys. leg asa pin programator - pin pic 1 - 4 4 - 7 5 - 6 Alimentarea o fac de la usb, am taiat un cablu usb care nu imi mai trebuia si leg firu rosu de VDD si firu negru de VSS. Am masurat, tensiunea exacta la usb e cat trebuie, 5.01 V (practic nu?, si daca nu aveti cablu usb e 5 lei unu ieftin, mai bine dacat sa cumperi baterii) Iar referitor la rezistente, o sa pun una singura intre leduri si vss, nu stiu de cat, o sa calculez. E bine, nu? Link spre comentariu
Liviu M Postat August 17, 2011 Partajează Postat August 17, 2011 Referitor la conectarea programatorului - in Data Sheet, la pagina 96, ai conexiunile necesare. Tot la microcip pe site, gasesti manualul de utilizare al pickit2 (ce folosesti tu e o clona a acestuia); la pagina 9 ai semnificatia pinilor in conector. Coroborezi cele 2 informatii si vezi cum trebuie legat. Alimentarea din USB ar trebui sa fie suficienta. Daca si celelalte semnale sunt bine legate, ar trebui sa mearga. Poti eventual sa verifici ca masa e la iesirea programatorului masa circuitului de programat sunt conectate (scurcircuitate). Ar trebui sa fie aceeasi (a USB-ului), da' un test nu strica niciodata. Rezistentele pentru led-uri... teoretic cred ca merge si cu una singura, practic mi se pare ca nu merita "economia". Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 Nu e de la conectare, caci imi recunoaste picu si vrea sa il scrie. Numai ca ma atentioneaza ca programul nu e facut cum trbeuie. Codul e scris bine, problema vine de la "memory areas" (am uploadat mai sus). Am cautat eroarea pe google, insa nu a aparut nimic relevant pana acum... Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Si nu scrie deloc sau dupa ce-l scrie nu merge?Daca nu merge dupa ce-l scrie, mai trebuie umblat putin la configurare (cel putin la partea de oscilator).Daca te uiti in fisierul .h, la sfarsit, o sa vezi cum trebuie sa arate cuvantul de configurare pentru oscilator intern si GPIO4&5 folosite ce I/O. /* 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 */In momentul de fata, ultimul byte din cuvantul de configurare fiind F, ai watchdogul activ si oscilator RC intre GPIO4 & GPIO5.Ca sa reconfigurezi cipul, in codul sursa poti folosi directiva __CONFIG() inainte de functia main(); in cazul tau as face ceva de genul__CONFIG(UNPROTECT & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO)Daca e de la programarea efectiva (scrierea in cip), atunci n-am idee care-i problema. Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 programul este scris, dar nu e scris bine. am testat cu alt fisier hex care , tot la fel, beculeste un led.nu sunt sigur, dar cred ca warringu ala spune ca nu e setata dimensiunea memoriei bine...vezi ,de exemplu, cum spatiile de memorie nefolosite pentru program, se scriu cu 3FFF? ei bine ultimele (si nu doar ultimu unde ar trebuii din cate am inteles sa fie valoarea oscilatorulu intern) au alte valori, sa fia sta din cauza ca nu a fost data locatia end din download/file.php?id=2626&mode=view cum trebuie? Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 De ce crezi ca nu e scris bine? Da eroare la verificare? Nu functioneaza?Daca nu functioneaza, ai testat si cu __CONFIG() ala de mai sus?Care warning? Ala galben din prima poza? Ala se refera exact la __CONFIG(). Link spre comentariu
mihaipadawan Postat August 18, 2011 Autor Partajează Postat August 18, 2011 De ce crezi ca nu e scris bine? Da eroare la verificare? Nu functioneaza?Daca nu functioneaza, ai testat si cu __CONFIG() ala de mai sus?Care warning? Ala galben din prima poza? Ala se refera exact la __CONFIG().Testez imediat.LE: am uploadat. nu stiu ce sa le fac la erorile alea... n am nici cea mai mica idee ce inseamna atributele puse acolo :-snu e valabil codu in versiunea asta ? 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