Myhayxx Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 (editat) Buna seara! tot incerc de ceva vreme sa construiesc un program pentru PIC16F877A care sa faca conversia de la binar in zecimal. Stiu ca exista integrat care stie sa faca asa ceva insa eu am nevoie ca iesirea de zecimal sa stea doar 300 ms activa dupa care sa se opreasca. am pus un link: https://www.youtube.com/watch?v=5Y_idcjd_PE&feature=youtu.be cu integratul dedicat insa cum ziceam iesirea trebuie sa fie activa doar 300 ms. am reusit eu ceva cu un cod scris de mine insa functioneaza doar daca folosesc intrarile binare crescator de la 0001; 0010; 0011... la 1111 daca incerc pe sarite nu se intampla nimic. As fi recunoscator daca m-ar ajuta cineva cu scrierea programului. codul incercat de mine: char stare ; void main() { ADCON1 = 0x07; TRISA = 0; TRISB = 0xFF; TRISC = 0; TRISD = 0; TRISE = 0; PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; INTCON = 0; while (1) { if (PORTB.B0) stare = 1 ; Delay_ms(10) ; if (PORTB.B0 && stare) { PORTC.B0 = 1 ; Delay_ms(300) ; PORTC.B0 = 0 ; Delay_ms(300) ; while (1) { if (PORTB.B1) stare = 1 ; Delay_ms(10) ; if (PORTB.B1 && stare) { PORTC.B1 = 1 ; Delay_ms(300) ; PORTC.B1 = 0 ; Delay_ms(300) ; while (1) { if (PORTB.B0 && PORTB.B1) stare = 1 ; Delay_ms(10) ; if (PORTB.B0 && PORTB.B1 && stare) { PORTC.B2 = 1 ; Delay_ms(300) ; PORTC.B2 = 0 ; Delay_ms(300) ; . . . . . . . while (1) { if (PORTB.B0 && PORTB.B1 && PORTB.B2 && PORTB.B3 ) stare = 1 ; Delay_ms(10) ; if (PORTB.B0 && PORTB.B1 &&PORTB.B2 && PORTB.B3 stare) { PORTD.B7 = 1 ; Delay_ms(300) ; PORTD.B7 = 0 ; Delay_ms(300) ; break; }}}}}}} Editat Octombrie 26, 2015 de Myhayxx Link spre comentariu
core Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 (editat) wow. codul e doar: val = PORTB & 0x0f; if ( val < 8 ) { PORTC = 1 << val; PORTD = 0; } else { PORTC = 0; PORTD = 1 << (val - 8); } Delay_ms(300); Editat Octombrie 26, 2015 de core Link spre comentariu
Myhayxx Postat Octombrie 26, 2015 Autor Partajează Postat Octombrie 26, 2015 (editat) functioneaza insa la fel ca cel din exemplu. eu as avea nevoie ca iesirea sa stea activa doar 300ms insa ea ramane permanent activa. Editat Octombrie 26, 2015 de Myhayxx Link spre comentariu
Bandi Szasz Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 (editat) Este un "unsigned char val;" declarat la inceputul lui void main(); Editat Octombrie 26, 2015 de bandi12 Link spre comentariu
core Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 (editat) void main(){unsigned char val;ADCON1 = 0x07;TRISB = 0xff;TRISC = 0;TRISD = 0;while (1){ val = PORTB & 0x0f; if ( val < 8 ) { PORTC = 1 << val; PORTD = 0; } else { PORTC = 0; PORTD = 1 << (val - 8); } Delay_ms(300);}} nu am incercat sa vad daca merge sau nu, dar aproximativ asa arata Editat Octombrie 26, 2015 de core Link spre comentariu
Myhayxx Postat Octombrie 26, 2015 Autor Partajează Postat Octombrie 26, 2015 asa am compilat insa cum ziceam nu functioneaza cum as avea nevoie. Link spre comentariu
core Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 pai explica ce nu functioneaza cum vrei, cu exceptia delay-ului, care intarzie raspunsul sistemului, ar trebui sa fie ca in filmulet. Link spre comentariu
Myhayxx Postat Octombrie 26, 2015 Autor Partajează Postat Octombrie 26, 2015 (editat) dupa ce se face activa o iesire aceasta sa stea doar 300 ms activa dupa care sa se dezactiveze. adica sa lucreze in impulsuri. nu ar trebui sa fie ca in filmulet. cand am 0001 se activeaza iesirea sta activa 300ms dupa care se dezactiveaza. sper ca m-am facut inteles.. Editat Octombrie 26, 2015 de Myhayxx Link spre comentariu
Liviu M Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 Mai pune un PORTC = 0; PORTD=0; dupa delay(300). Link spre comentariu
core Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 incearca sa pui PORTC = PORTD = 0; dupa delay Link spre comentariu
Myhayxx Postat Octombrie 26, 2015 Autor Partajează Postat Octombrie 26, 2015 (editat) am incercat si nu merge. Editat Octombrie 26, 2015 de Myhayxx Link spre comentariu
core Postat Octombrie 26, 2015 Partajează Postat Octombrie 26, 2015 (editat) iti trebuie o variabila de backup sa detectezi schimbarea, altfel iti reproceseaza intrarea void main(){unsigned char val, bck;ADCON1 = 0x07;TRISB = 0xff;TRISC = 0;TRISD = 0;bck = 0;while (1){ val = PORTB & 0x0f; if ( val == bck ) continue; bck = val; if ( val < 8 ) { PORTC = 1 << val; PORTD = 0; } else { PORTC = 0; PORTD = 1 << (val - 8); } Delay_ms(300); PORTC = PORTD = 0;}} Editat Octombrie 26, 2015 de core Link spre comentariu
Myhayxx Postat Octombrie 26, 2015 Autor Partajează Postat Octombrie 26, 2015 (editat) da functioneaza. multumesc mult de ajutor Editat Octombrie 26, 2015 de Myhayxx 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