catalin004 Postat Iunie 15, 2017 Partajează Postat Iunie 15, 2017 Salutare...daca ma poate ajuta cineva cu un programel, care sa porneste si sa opresc de la acelasi buton un led....in momentul in care tin apasat butonul sa nu treaca intermitent dintr-o stare in alta...adica sa se opreasca doar dupace ridic degetul si reapas pe el...mutumesc Link spre comentariu
Elison Postat Iunie 16, 2017 Partajează Postat Iunie 16, 2017 PIC 17F73 sau PIC 16F73? Link spre comentariu
catalin004 Postat Iunie 16, 2017 Autor Partajează Postat Iunie 16, 2017 16F73 - scuze Link spre comentariu
Marius Rotundu Postat Octombrie 29, 2017 Partajează Postat Octombrie 29, 2017 (editat) Pentru a fi mai usor inteles si de modificat de catre utilizatorii incepatori, l-am scris asa: sbit LED at PORTB.B1; sbit BUTON at PORTB.B0; bit x; void main(){ PORTB=0; TRISB=0b00000001; do{ if(!BUTON){ x=~x; while(!BUTON){} } LED=x; }while(1); } HEX: :020000000328D3 :1000060083120313860101308316860083120618B5 :1000160011280130A006061811280E2820181528C8 :0A00260086101628861409281728F2 :02400E001B0095 :00000001FF Editat Octombrie 29, 2017 de Marius Rotundu Link spre comentariu
modoran Postat Octombrie 29, 2017 Partajează Postat Octombrie 29, 2017 Nu-i chiar asa de simplu, trebuie implementat debouncing fie in soft ( de preferat ), fie cu circuite suplimentare. Link spre comentariu
Marius Rotundu Postat Octombrie 29, 2017 Partajează Postat Octombrie 29, 2017 Ma indoiesc ca va folosi un buton pe intrare, de aia nu am bagat debounce. Si sunt multe de comentat, codul se vrea un start pentru cerintele initiale si desigur, poate fi dezvoltat dupa cerinte.. Link spre comentariu
catalin004 Postat Octombrie 30, 2017 Autor Partajează Postat Octombrie 30, 2017 Am rezolvat de mult cu butonul on off....insa intradevar am bagat debounce, cu delay de 200ms....cam mic cred, insa intr-un programel nu influenteaza timpul de lucru...multumesc frumos Link spre comentariu
Bandi Szasz Postat Octombrie 30, 2017 Partajează Postat Octombrie 30, 2017 (editat) Eu folosesc debounce de 10-15ms si este suficient, nu am avut probleme cu detectari false. Daca folosesti mikroC for Pic ai librarie gata facuta pt buton cu debounce cu tot, in plus ai si un exemplu pe a ignora butonul pana nu i se da drumul inatai dupa o apasare, este exact ce iti trebuie. Se mai poate face debounce si cu timer0 si fara delay ca sa poti executa instructiuni cat timp se face debounce la buton, dar asta putin mai complex. Editat Octombrie 30, 2017 de Bandi Szasz Link spre comentariu
catalin004 Postat August 3, 2020 Autor Partajează Postat August 3, 2020 Salutare...am si eu nevoie de un mic ajutor...nu am mai lucrat de mult cu PIC...as vrea sa anulez efectul de tranzitie dintre ON si OFF la apasarea unui switch (buton de pe o telecomanda) multumesc #define pompa_dir TRISA.F5 //pompa pe iesirea RC1 #define pompa PORTA.F5 #define radio1_dir TRISA.F4 //buton start pompa #define radio1 PORTA.F4 void start_pompa() { static unsigned char old_state = ON; if (!radio1 && old_state == ON) { pompa = ON; old_state = OFF; delay_ms(200); } if (!radio1 && old_state == OFF) { pompa = OFF; old_state = ON; delay_ms(200); } } Link spre comentariu
catalin004 Postat August 4, 2020 Autor Partajează Postat August 4, 2020 Microcontrolerul folosit este 16F876A...se pare ca nu reusesc sa fac porturile A sa lucreze ca intrari/iesiri digitale. Pe RA0 am un senzor de temperatura (LM35), iar apoi (RA1..RA5) cateva taste...am incercat sa le pun ca iesiri pe niste relee, insa nu vrea sa le comande... Link spre comentariu
kit Postat August 4, 2020 Partajează Postat August 4, 2020 Acum 33 minute, catalin004 a spus: Microcontrolerul folosit este 16F876A...se pare ca nu reusesc sa fac porturile A sa lucreze ca intrari/iesiri digitale. Pe RA0 am un senzor de temperatura (LM35), iar apoi (RA1..RA5) cateva taste...am incercat sa le pun ca iesiri pe niste relee, insa nu vrea sa le comande... Vezi registrul ADCON1, probabil setarea este 0b??001110, ?? = cum vrei sa citesti si ca de repede sa faca conversia. Ultimul bit (la mine pus pe zero) indica referinta de tensiune. Mai multe in datasheet. Apoi, bineinteles, TRISA, LATA, PORTA. Spor! 1 Link spre comentariu
catalin004 Postat August 4, 2020 Autor Partajează Postat August 4, 2020 Acum 15 minute, kit a spus: Vezi registrul ADCON1, probabil setarea este 0b??001110, ?? = cum vrei sa citesti si ca de repede sa faca conversia. Ultimul bit (la mine pus pe zero) indica referinta de tensiune. Mai multe in datasheet. Apoi, bineinteles, TRISA, LATA, PORTA. Spor! Am doar ADCON1=0x06; intrari/iesiri le am declarate (mai sus este programelul doar pt un buton)...am incercat sa le folosesc si ca butoane si ca iesire pentru LED... Ca butoane nu le vedea deloc...ca iesiri face urmatoarea chestie: imi aprinde iesirea RA3 de exemplu, apoi o stinge si aprinde pe RA4 (eu din cod ii spun sa le aprinda pe ambele am un delay de 200ms ) Link spre comentariu
catalin004 Postat August 4, 2020 Autor Partajează Postat August 4, 2020 Conform tabelului de la PIC-ul respectiv, as avea ADCON1 = 0000 011x; (adica toti pinii ca digitall, cu exceptia lui RA0), este corect? Ca eu asa am hard, un senzor pe RA0 iar pe restul de RA (fara pinii de oscilator) butoane... Link spre comentariu
kit Postat August 4, 2020 Partajează Postat August 4, 2020 Acum 2 ore, catalin004 a spus: Am doar ADCON1=0x06; intrari/iesiri le am declarate (mai sus este programelul doar pt un buton)...am incercat sa le folosesc si ca butoane si ca iesire pentru LED... Ca butoane nu le vedea deloc...ca iesiri face urmatoarea chestie: imi aprinde iesirea RA3 de exemplu, apoi o stinge si aprinde pe RA4 (eu din cod ii spun sa le aprinda pe ambele am un delay de 200ms ) Acum 1 oră, catalin004 a spus: Conform tabelului de la PIC-ul respectiv, as avea ADCON1 = 0000 011x; (adica toti pinii ca digitall, cu exceptia lui RA0), este corect? Ca eu asa am hard, un senzor pe RA0 iar pe restul de RA (fara pinii de oscilator) butoane... Cf datasheet, asa se trec toti pinii pe digital, inclusiv RA0. Pentru ca doar RA0 sa fie analogic, pt TMP35, trebuie in ANCON1 1110. Mai trebuie verificat daca comparatorul este off, CMCON:CM2:CM0 = 111. In mod normal la POR comparatorul este off. La pag. 41 este un exemplu de initializare pentru toti pinii pe digital. La pag. 43 sunt tablele 4-1 si 4-2 care arata care sunt functiunile pinilor PORTA si registrii care ii influenteaza. N-am lucrat cu picul asta, dar daca este suportat de MCC din MPLABX atunci este mult mai usor de initializat un pic folosind aceasta unealta. Ar fi ajutat daca ai fi postat codul de initializare... Cu unealta ce lucrezi pentru a face programarea? MPLAB, altceva... Ca mi se pare ciudata folosirea PORTA.Fx, nu de alta... Spor! 1 Link spre comentariu
catalin004 Postat August 5, 2020 Autor Partajează Postat August 5, 2020 (editat) Mediul de programare este MikroC...am pus 0x0E si face la fel #define light_dir TRISC.F1 //iluminat LCD pe iesirea RC1 #define light PORTC.F1 #define lamp_dir TRISB.F0 //lampa panou pe iesirea RB0 #define lamp PORTB.F0 #define relay1_dir TRISB.F2 //stalp 1 pe iesirea RB2 #define relay1 PORTB.F2 #define relay2_dir TRISB.F1 //stalp 2 pe iesirea RB1 #define relay2 PORTB.F1 #define relay3_dir TRISA.F3 //stalp 3 pe iesirea RB3 #define relay3 PORTA.F3 #define pompa_relay_dir TRISA.F5 //pompa pe iesirea RA5 #define pompa_relay PORTA.F5 #define RCT1_dir TRISA.F4 //buton telecomanda C #define RCT1 PORTA.F4 #define RCT2_dir TRISB.F4 //buton telecomanda D #define RCT2 PORTB.F4 #define RCT3_dir TRISB.F5 //buton telecomanda B #define RCT3 PORTB.F5 #define RCT4_dir TRISC.F2 //buton telecomanda A #define RCT4 PORTC.F2 #define buton1_dir TRISB.F3 //buton start pompa #define buton1 PORTB.F3 #include "LCD_config.h" #include "temp.h" #include "hardware.h" void main() { //TRISA.F0 = 1; //ADC input to RA00 ADCON1=0x06; //ADC reference to 5V Vdd light_dir = OUTPUT; lamp_dir = OUTPUT; pompa_relay_dir = OUTPUT; relay1_dir = OUTPUT; relay2_dir = OUTPUT; relay3_dir = OUTPUT; RCT1_dir = INPUT; RCT2_dir = INPUT; RCT3_dir = INPUT; RCT3_dir = INPUT; buton1_dir = INPUT; light = ON; lamp = OFF; pompa_relay = OFF; relay1 = OFF; relay2 = OFF; relay3 = OFF; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); LCD_Cmd(_LCD_Cursor_OFF); LCD_Out(1,5, "Temp ="); InitTimer0(); Editat August 5, 2020 de catalin004 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