Vizitator iusmar Postat Mai 19, 2012 Partajează Postat Mai 19, 2012 Salutari baieti si bine v-am gasit.Am un PIC16F876A-I/SP si vreau sa fac un programel care sa-mi numere pana la 32 si sa-mi afiseze pe un afisor cu 7 segmente numarul in baza 10 si pe 5 LED-uri acelasi numar in baza 2.Am motat PIC-ul pe placa, oscilatorul, condensatorii, afisoarele si LED-urile. Mai raman de facut conexiunile si programarea. Aici m-am blocat. Se poate putin ajutor? Link spre comentariu
10vid Postat Mai 19, 2012 Partajează Postat Mai 19, 2012 Si o varianta mai simpla. binar32.zip Link spre comentariu
10vid Postat Mai 19, 2012 Partajează Postat Mai 19, 2012 Una mai simpla fara tranzistori. binar32.zip Link spre comentariu
Vizitator iusmar Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Multumesc foarte mult. Apreciez efortul. O intrebare: in varianta cu tranzistori, care este rolul lor in curcuit? Link spre comentariu
yo9hnf Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Multumesc foarte mult. Apreciez efortul. O intrebare: in varianta cu tranzistori, care este rolul lor in curcuit? Portul uC poate furniza decat cativa mA (trecut in datasheet). Daca tu vrei sa comanzi un LED de putere, sau 10 LEDuri, sau orice altceva care consuma un curent mai mare decat curentul maxim furnizat de port, atunci trebuie sa folosesti tranzistori de comanda (driveri). Link spre comentariu
Vizitator iusmar Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Am scris asta:void main() { TRISC = 0; for (;;) { PORTC = 0x00; delay_ms (500); PORTC = 0xFF; delay_ms (500); }}in mikroC for PIC si cu Pik Kit am descarcat hex-ul pe placa. Teoretic un consumator conectat la 5V (sau masa) si poarta C ar trebui sa se stinga si sa se aprinda la fiecare jumate de secunda. Un LED legat in acest fel merge, dar afisorul imi sta aprins. Afisorul are anodul comun, in mijloc, conectat la 5V, iar catodurile la poarta. Link spre comentariu
yo9hnf Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Daca cu anodul conectat la 5V, pui cate un electrod (de catog) pe rand la masa, se aprinde segmenul respectiv ? - cu rezistentele de rigoare in catod. Link spre comentariu
Vizitator iusmar Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Da, segmentul se aprinde. (n-am incercat decat cu doua, a mers si am sudat si celelalte doua fara sa le mai verific individual). Deci "eroarea" mea se manifesta pentru segmentele a,b,c,d ( formeaza C in oglinda) ca doar astea-s sudate deocamdata.E bai mare daca nu am rezistoare? Segmentele-s verde luminos. (daca verific cu 5V direct din USB se aprind portocalii si parca vor sa se faca rosii daca le-as lasa sub tensiune, dar banuiesc ca se ard) Link spre comentariu
Vizitator iusmar Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Individual, fiecare segment functioneaza, palpaie. Dar daca am deja doi segmenti conectati la poarta, nu mai palpaie ci stau aprinsil; dar cu LED-uri merge. Care sa fie motivul? Link spre comentariu
10vid Postat Mai 20, 2012 Partajează Postat Mai 20, 2012 Pune rezistente, ca poate de aia se blocheaza, de la curentul prea mare, de ordinul sutelor de miliamperi. Link spre comentariu
Drk_alien Postat Mai 21, 2012 Partajează Postat Mai 21, 2012 Salutare.Blocarea ta apare din cauza portului pe care l-ai setat ca fiind 0xFF (adica 11111111) sau 0x00, asta insemnand ca tu pe acele iesiri vei scoate 5v pe fiecare pin din poarta,astfel tie ti se pare ca afisorul s-a blocat pe toate ledurile aprinse sau pe toate ledurile stinse.incearca sa faci asa:PORTC=0xAC; Acum configuratia ledurilor din afisor s-a schimbat.Acum gandeste-te la un program care sa contina un "FOR" care sa iti numere pana la 32.fii foarte atent la program.Daca ceva nu merge bine verifica din nou programul pas cu pas.numai bine si spor.si bun venit intre noi!!! Link spre comentariu
Vizitator iusmar Postat Mai 21, 2012 Partajează Postat Mai 21, 2012 O sa incerc sa montez niste rezistori si o sa vad daca/cum merge. Drk_alien, uita-te ca imi functioneaza cu LED-uri, in schimb afisorul se blocheaza pe aprins daca-s conectati cel putin doi segmenti. Conexiunile is bune, nu se scurtcircuiteaza. Link spre comentariu
Vizitator iusmar Postat Mai 21, 2012 Partajează Postat Mai 21, 2012 Am pus rezistori de 460 si merge bine. Atat e bai ca nu-i place ceva, nu-mi stinge toti segmentii care trebuie, cand ii dau sa-mi afiseze un numar; de exemplu pentru 1 ( 0x9F ) se aprinde bine, dar pentru 2 ( 0x25 ) lasa aprins si segmentul din stanga sus... Deocamdata-s multumit, mai ma chinui cu el la sfarsitul saptamanii cand o sa conectez anodul la o alta poarta, nu direct la 5V din alimentare. Poate am gresit la transformari.. Link spre comentariu
Eugen_B Postat Mai 21, 2012 Partajează Postat Mai 21, 2012 Presupun ca segmentele sunt conectate la pini in felul urmator: _+--RB6--+_| |RB1 RB5_| |_+--RB0--+_| |RB2 RB4_| |_+--RB3--+si ca 1 inseamna segment aprins, poti sa faci in felul urmator: declari: const unsigned char lut[10]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B}; si ca sa afisezi pe un digit o cifra faci: PORTB = lut[c]; unde c este cifra dorita; Ca sa afisezi pe cele 2 digit-uri, si numararea pe led poti sa faci asa: const unsigned char lut[10]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};unsigned char nr,dg1,dg2;int contor;void main(void){ nr = 0; dg1 = 0; dg2 = 0; contor = 27777; while(1){ //aici se face afisarea numarului pe cei 2 digiti + leduri //se repeta mereu pentru ca ledurile si digiti sunt multiplexati //si vor parea aprinsi toti 3 din cauza persistentei vederii PORTB = 0xFC; //selectare primul digit PORTC = lut[dg1];//afisare primul digit PORTB = 0xF3; //selectare al doilea digit PORTC = lut[dg2];//afisare al doilea digit PORTB = 0xCF; //selectare leduri PORTC = nr; //avansarea numarului poate fi facuta prin asteptare if(contor!=0)contor--; else{ nr++; if(nr==32)nr = 0; dg1 = nr/10; dg2 = nr%10; contor =27777;// presupunere : 1s / ( 36 instructiuni pt tot while x 1uS pe instructiune @ 4Mhz ) = 27777 pentru ~ 1 s } //sau mai elegant prin intrerupere la un timer }} Tie ti se aprind segmente din digit care nu doresti pentru ca pui direct numarul codat in baza 2 pe intrarile afisajului (presupun ca asta faci).Trebuie sa selectezi tu pentru fiecare cifra ce segmente sa aprinzi , nu merge asa direct. 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