allez001 Postat Iunie 27, 2016 Partajează Postat Iunie 27, 2016 (editat) Salut..... inca de la inceput vreau sa spun ca sunt incepator intr-ale microcontrollerelor. Mi-am propus sa folosesc MikroC PRO iar ca programator folosesc Pickit 3. Primul proiect mi-a iesit " LED BLINK ".... numai ca acum mi-am propus sa am 2 LED-uri care sa clipeasca sI nu stiu cum sa fac. void ini_sys () { TRISIO0_bit = 0 ; TRISIO1_bit = 0 ; TRISIO2_bit = 0 ;}void init_ports(void) { TRISIO = 1; // set as output}void main() { init_ports(); #define PIN5 GPIO.F2 #define PIN6 GPIO.F1 #define ON 1 #define OFF 0 while(1) { #define freq_Hz 2 #define time 1000000 / 2 PIN5 = ON; delay_ms( time / freq_Hz ); // ( delay_us(1000) = 1 milisecunda ) PIN5 = OFF; delay_ms( time / freq_Hz ); PIN6 = 1 ; /// AICI TREABA NU MERGE ///// delay_ms(700); PIN6 = 0 ; delay_ms(300) ; } } LED din GP1... nu respecta delay-ul de 700 ms, se aprinde foarte scurt dar pe frecventa lui GP2, pe langa faptul ca se aprinde slab. Chiar daca nu pun delay pe GP1 ci doar < GPIO.F1 = 1 > ...... LED-ul sta aprins dar slab Multumesc ! Editat Iunie 27, 2016 de allez001 Link spre comentariu
Liviu M Postat Iunie 27, 2016 Partajează Postat Iunie 27, 2016 void init_ports(void) {TRISIO = 1; // set as output} 1 inseamna intrare. Probabil ca nu e de aici e (m-as fi asteptat ca TRISIO = 1 sa faca GPIO0 intrare), da' asa, ca idee, ar fi bine sa fii consecvent intre cod si comentarii. LED-urile le-ai montat cu rezistente de limitare a curentului, da? Link spre comentariu
Liviu M Postat Iunie 27, 2016 Partajează Postat Iunie 27, 2016 12F675 are comparator/ADC. Astea trebuie dezactivate pentru a putea folosi pinii in mod digital. CMCON = 0x07; //deactivezi comparatorulANSEL = 0x00; //deactivezi ADC Link spre comentariu
Mircea Postat Iunie 27, 2016 Partajează Postat Iunie 27, 2016 (editat) Pe langa ce spune Liviu (ADC, comp), eu ma intreb de unde ai incropit programul. Cand ON e ON, cand e 1. Gresit nu este dar e ca si cum ai raspunde pe strada trecatorilor si cu DA si cu YES. Primele 6 linii de program definesc I/O dar in mod contradictoriu. Caci primele 4 ii spun lui TRISIO sa se incarce cu xxx000, iar linia 6 ii zice 000001. Din fericire, GP0 nu e folosit in program.GP3 sau 4 e MCLR, deci numai intrare, nu-l poti defini cu 0 ca iesire. Oricum, chiar daca tu il incarci cu 0, tot intrare va fi considerat de PIC. Vezi ca Mikroe au o carte ( http://learn.mikroe.com/ebooks/piccprogramming/front-matter/introduction/ Gratuita) despre C. Citeste-o! Ciudata si definirea lui delay_ms(time/freq). Time e 1000000/2 = 500000. Iar freq = 2. Delay_ms() este deci 250000 de ms!!! De fapt, ce vrei tu sa obtii ca temporizari? Editat Iunie 27, 2016 de thunderer Link spre comentariu
puriu Postat Iunie 28, 2016 Partajează Postat Iunie 28, 2016 Eu recomand intotdeauna incepatorilor sa porneasca cu programarea in .asm. Asa se invata mai repede si arhitectura MC, si rigoarea necesara programarii sale. Link spre comentariu
allez001 Postat Iunie 28, 2016 Autor Partajează Postat Iunie 28, 2016 (editat) @Liviu M: Da , am pus rezistente de 100R pt fiecare LED. Nu functioneaza nici cu ADC si comparatorul dezactivat. Pe langa ce spune Liviu (ADC, comp), eu ma intreb de unde ai incropit programul. Cand ON e ON, cand e 1. Gresit nu este dar e ca si cum ai raspunde pe strada trecatorilor si cu DA si cu YES. M-am gandit in acel moment ca imi este mai usor asa, am vazut undeva pe net nu mai stiu exact pe unde si mi s-a parut mai sugestiv pt mine desi stiu ca 1 este ON so 0 este OFF. Ciudata si definirea lui delay_ms(time/freq). Time e 1000000/2 = 500000. Iar freq = 2. Delay_ms() este deci 250000 de ms!!! Acolo este o greseluta trebuie delay_us() -> Time = 1000000 microsecunde adica 1ms/2 => 500 ms activ respectiv 500 ms stins. // adica 1 Hz cu duty cycle 50% si 500ms / freq_Hz care are valoarea 2 => 2 Hz pe osciloscop Multumesc pentru carte.... @ puriu De ce am preferat #C ? C-ul mi se pare mai logic si mai familiar pt ca stiu putin PHP . ASM-ul imi este complet strain. Editat Iunie 28, 2016 de allez001 Link spre comentariu
Mircea Postat Iunie 28, 2016 Partajează Postat Iunie 28, 2016 (editat) Conecteaza o rezistenta de 1-2k la LED-uri, nu de 100 ohmi ca omori iesirea PIC-ului.Nu stiu ce te astepti tu sa obtii, caci nu vrei sa descrii. E normal ca PIN 6 sa depinda de PIN 5, caci instructiunile sunt executate una dupa alta. Pe durata unui Delay_xs() PIC-ul nu face nimic altceva decat intarzierea. Deci, se clipoceste PIN 5 (o secventa ON-OFF) si apoi PIN 6 (tot una ON-OFF). Apoi iar PIN 5, samd. Asta voiai tu?Ia inverseaza PIN 5 cu PIN 6 in programul tau (simplu inlocuiesti pe 5 cu 6), cum se comporta? PS: sunt de acord cu organizarea intuitiva a programului (de ex: ON, OFF, PIN 5...) dar nu cred ca esti inca destul de ordonat sa le folosesti. @Puriu, nu spuneti gresit cu invatatul arhitecturii (citit Datasheet-ul), dar ASM-ul nu e solutia ideala cand esti nul. Asa cum zice Liviu, daca comentariile nu sunt consistente cu programul... pai de ce sa fim surprinsi ca nu merge. Eu mereu insist pe organizarea riguroasa a programului si pe definirea in program a tuturor registrilor (fie ca-i folosim, fie ca nu). Nu trebuie lucrat cu valorile standard, aici greseste help-ul Mikroe.LE: allez001, mars01 a scris un tutorial superb la sub-forumul PIC. Primul topic sticky, de citit. Editat Iunie 28, 2016 de thunderer Link spre comentariu
Vizitator Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 //***************************// Simulare girofar politie *// LEDA = LED albastru *// LEDR = LED rosu *//***************************FLASH1() { unsigned short LEDA; for(LEDA=0; LEDA<4; LEDA++) // numar<4 => LED-ul va trece dintr-o // stare in cealalta de 4 ori { GPIO.F0 = 1; delay_ms(50); GPIO.F0 = 0; delay_ms(50); } }FLASH2() { unsigned short LEDR; for(LEDR=0; LEDR<4; LEDR++) { GPIO.F1 = 1; delay_ms(50); GPIO.F1 = 0; delay_ms(50); } } void main() { ANSEL = 0; CMCON = 7; TRISIO = 0; GPIO = 0; for(;;) { FLASH1(); FLASH2(); delay_ms(10); } } Link spre comentariu
puriu Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 Cand este necesar un cod compact, rapid si foarte precis (comunicatii seriale, etc.), programarea in limbaj de asamblare este inevitabila. Textul programului trebuie sa fie foarte clar si bogat comentat. Pentru ca este vorba de un PIC12F675, dau mai jos un exemplu de program pentru un cardiograf cu acest microcontroler, cuplat prin interfata seriala la un PC. Cardiograf.txt Link spre comentariu
allez001 Postat Iunie 29, 2016 Autor Partajează Postat Iunie 29, 2016 (editat) ideea era sa functioneze amandoua LED-urile in acelasi timp cu timpu diferiti.... dar e ok Editat Iunie 29, 2016 de allez001 Link spre comentariu
Vizitator Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 (editat) void init_ports() {TRISIO = 0; ANSEL = 0;CMCON = 7;}void main() {init_ports();while(1) {GPIO = 3; // 3 = GP0=H si GP1=H H=high = 1 logicdelay_ms(200);GPIO = 0; // toate iesirile sun in LOW = 0 logicdelay_ms(1000);}} Editat Iunie 29, 2016 de Vizitator Link spre comentariu
Liviu M Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 @va_cristi: sunt convins ca programelele tale functioneaza, dar... :)Dar e greu de urmarit.Incearca sa citesti cate ceva despre "coding style", te va ajuta sa scrii cod mai " citibil".Scriu greu acum ca sunt pe drumuri, asa ca dau doar un exemplu - cu litere mari (numai litere mari, adica) se scriu "definitiile" (#define ON 1) sau constantele (const...), nu numele functiilor. Link spre comentariu
Vizitator Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 (editat) off topic Multumesc Liviu M de sfat. Daca eram programator poate as fi stiut cate ceva. Am invatat doar sa modifica codurile de pe net, pentru PIC-uri, si mai recent Arduino. Asta inseamna ca unui programator ii va veni sa cand vede codurile scrise de mine Stii, cum ar fi sa scriu asa cum vorbesc Moldovenii, sau Ardelenii! Cam asa scriu codurile, in alt dialect . Editat Iunie 29, 2016 de Vizitator Link spre comentariu
Liviu M Postat Iunie 29, 2016 Partajează Postat Iunie 29, 2016 E, nu o lua chiar asa de in serios. In cazul programelelor noastre nu e chir asa grav, ca-s micute. Probleme apar la programele mai mari. Da' e bine sa stii ca exista si asa ceva. Link spre comentariu
allez001 Postat Iunie 30, 2016 Autor Partajează Postat Iunie 30, 2016 multumesc tuturor pentru ajutor 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