catalin004 Postat Septembrie 1, 2017 Partajează Postat Septembrie 1, 2017 OK, ce mi-ati dat dvs merge perfect, prima varianta o stiam, insa daca tii mana pe buton acesta schimba starea la infinit din 0 in 1 si invers....proiectul meu se rezuma la un hidrofor si o pompa, care le am in aceeasi fantana, in momentul cand pornesc pompa, si merge mai mult de 10 minute, sa decupleze alimentarea hidroforului pentru o perioada de 20 de minute, apoi sa revina la normal. in cazul in care este sub 10 minute sa nu decupleze hidroforul... atasez mai jos amaratul meu de program, insa imi baga delayul de la hidrofor in comanda off a pompei, cred ca trebuie mutat mai sus sau mai jos...aici timpii i-am pus la cateva secunde sa nu stau dupa el... #define OFF 1 #define ON 0 //LCD setare porturi sbit LCD_RS at RC4_bit; sbit LCD_EN at RB2_bit; sbit LCD_D7 at RB6_bit; sbit LCD_D6 at RB5_bit; sbit LCD_D5 at RB4_bit; sbit LCD_D4 at RB3_bit; //Sfarsit LCD conect // pini catre porturi sbit LCD_RS_Direction at TRISC4_bit; sbit LCD_EN_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB6_bit; sbit LCD_D6_Direction at TRISB5_bit; sbit LCD_D5_Direction at TRISB4_bit; sbit LCD_D4_Direction at TRISB3_bit; //terminare lcd void main() { unsigned char stare_anterioara = OFF; int i=0; LCD_Init(); LCD_Cmd(_LCD_Clear); Lcd_Cmd(_LCD_Cursor_Off); //LCD_Out(1,3,"POMPA OPRITA"); //LCD_Out(2,1,"HIDROFOR PORNIT"); TRISB.F0 = 1; TRISC.F1 = 0; PORTC.F1 = 0; TRISC.F3=0; PORTC.F3=1; while(1) { if (PORTB.F0 == OFF) { stare_anterioara = OFF; if (PORTC.F1 == 0) { // LCD_Cmd(_LCD_Clear); LCD_Out(1,3,"POMPA OPRITA"); LCD_Out(2,1,"HIDROFOR PORNIT"); } } if (PORTB.F0 == ON && stare_anterioara == OFF) { delay_ms(10); if (PORTB.F0 == ON) { PORTC.F1 = !PORTC.F1; stare_anterioara = ON; } if (PORTC.F1 == 1) { LCD_Cmd(_LCD_Clear); LCD_Out(1,3,"POMPA PORNITA"); LCD_Out(2,1,"HIDROFOR PORNIT"); delay_ms(3000); PORTC.F3=0; LCD_Out(2,1,"HIDROFOR OPRIT"); delay_ms(5000); PORTC.F3=1; LCD_Out(2,1,"HIDROFOR PORNIT"); } } } } Link spre comentariu
mars01 Postat Septembrie 5, 2017 Partajează Postat Septembrie 5, 2017 Catalin, posteaza codul pe care l-ai realizat si discutam pe marginea lui. Dar posteaza-l folosind iconul "<>" din bara care apare cand scrii mesaje. Si formateaza-l in grupuri functionale ca sa fie usor de citit. De asemenea foloseste tab-uri acolo unde este cazul. Ma auto-citez. Sincer nu vreau sa pierd eu timpul cu formatarea softului tau. Fa-l citibil, cu comentarii si vorbim pe urma ... Link spre comentariu
Vizitator Iulian Udar Postat Septembrie 7, 2017 Partajează Postat Septembrie 7, 2017 Salutare! Se poate un pic de ajutor in programarea unui microcontroller din seria 12F pentru o aplicatie simpla ? daca nu am postat unde trebuia iertare. Link spre comentariu
mars01 Postat Septembrie 7, 2017 Partajează Postat Septembrie 7, 2017 Salut, Daca ai nevoie de ajutor ca sa inveti sa programezi uC-uri PIC atunci da, este topicul potrivit. Daca vrei ca altcineva sa faca acest lucru pentru tine atunci sectiunea de ElectroJob unde mai ai deja un topic, este cea potrivita. Link spre comentariu
Vizitator Iulian Udar Postat Septembrie 8, 2017 Partajează Postat Septembrie 8, 2017 Hmm... placut surprins pentru raspunsul promt. Sunt pasionat de electronica de copil ,asa ca acum la maturitate mi-am propus sa nu fiu inactiv.Cu vreo 3-4 luni in urma am inceput un proiect in domeniul auto,cu documentatie luata de pe net,componente putine ,cost redus, dar... mC este programabil.Incercarea mea de a comercializa un soft a ramas fara rezultat,asa ca m-am hotarit sa-l programez singur,numai ca termenii in engleza din datasheet sunt pentru mine invizibili si nici cu scrierea codului nu merge treaba. Este un program mai usor de invatat decit mikroC unde sunt analfabet? Link spre comentariu
florin2520 Postat Septembrie 8, 2017 Partajează Postat Septembrie 8, 2017 PicBasic Pro e ceva mai ușor, eu am început cu el, apoi am trecut la C. Link spre comentariu
mars01 Postat Septembrie 9, 2017 Partajează Postat Septembrie 9, 2017 Pentru familiarizarea cu lucrul cu uC-uri se poate folosi si FlowCode. Eu nu recomand sa inveti Basic, ramai blocat in comunitatea hobby. Daca la un moment dat vei vrea sa faci proiecte comerciale, vei vedea ca proiectele realizate in C sunt mai susceptibile de a fi vandute. Mai bine, "good old" C. Link spre comentariu
catalin004 Postat Septembrie 12, 2017 Partajează Postat Septembrie 12, 2017 (editat) Am luat-o de la inceput....am definit iesirile astfel si nu imi aprinde led-urile... #define LED1 PORTC.F1 //pompa #define LED2 PORTC.F3 //hidrofor #define OFF 0 #define ON 1 //FUNCTIE SECUNDE void Delay_secunde(unsigned char s) { char x,z; for (z=0; z<s; z++) { for (x=0; x<100;x++) delay_ms(10); }} void main() { for(;;) { delay_ms(100); LED1 = ON; Delay_secunde(1); LED2 = ON; }} Editat Septembrie 12, 2017 de catalin004 Link spre comentariu
Mircea Postat Septembrie 12, 2017 Partajează Postat Septembrie 12, 2017 (editat) Cand folosesti variabile, constante, etc, e musai sa le dai o valoare la inceputul programului. Care sunt pinii intrari, iesiri, analogici, comparatoare, etc? A scris degeaba colegul Mars01 atatea pagini de explicatii. Programele nu se fac copiind chestii pe care nu le intelegi. Vad ca ignori rugamintea din mesajul 258. E in dezavantajul tau. Editat Septembrie 12, 2017 de thunderer Link spre comentariu
catalin004 Postat Septembrie 13, 2017 Partajează Postat Septembrie 13, 2017 (editat) programul acela functie secunde este copiat dintr-o carte sspeciala de baze ale programarii....deci acolo nu au fost comentarii nici eu nu le-am pus, daca se intelege de bine daca nu nu...eu unul inteleg cum lucreaza acea functie...100ms=1sec...in fine Dupa cum se vede in primele randuri pinii de iesire sunt RC1 si RC3 ai PIC16F73. nu cred ca ar conta asta....am modificat programul si merge, il si postez mai jos...nu stiam treaba cu variabilele ca trebuie data o valoare, am studiat multe si am vazut ca nu toata luea foloseste constante direct definite sau egalate su 0 sau 1 etc.... inainte le faceam cu definire porturi, insa acum mai nou vreau sa le fac cu define ca am vazut ca este altfel....mult mai usor #define LED1_dir TRISC.F1 //iesire contactor pompa #define LED2_dir TRISC.F3 //iesire releu hidrofor #define Buton_dir TRISB.F0 //intrare buton start/stop #define LED1 PORTC.F1 //pompa #define LED2 PORTC.F3 //hidrofor #define Buton PORTB.F0 // Buton #define OFF 0 //flag oprire #define ON 1 //flag pornire //LCD setare porturi iesire sbit LCD_RS at RC4_bit; sbit LCD_EN at RB2_bit; sbit LCD_D7 at RB6_bit; sbit LCD_D6 at RB5_bit; sbit LCD_D5 at RB4_bit; sbit LCD_D4 at RB3_bit; //Sfarsit LCD conect // pini catre porturi sbit LCD_RS_Direction at TRISC4_bit; sbit LCD_EN_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB6_bit; sbit LCD_D6_Direction at TRISB5_bit; sbit LCD_D5_Direction at TRISB4_bit; sbit LCD_D4_Direction at TRISB3_bit; //terminare lcd //FUNCTIE SECUNDE void Delay_secunde(unsigned char s) { char x,z; for (z=0; z<s; z++) { for (x=0; x<100;x++) delay_ms(10); }} void main() { int i; LED1_dir = 0; //stare iesire RC1 in 0 LED2_dir = 0; //setare iesire port RC3 in 0 Buton_dir = 1; //setare port ca intrare RB0 LED1 = OFF; LED2 = ON; //stare initiala comanda hidrofor ponita while(1) { if (Buton==0) //daca se apasa butonul { delay_ms(100); LED1 = !LED1; //Pompa pornita } if (LED1==ON) { delay_ms(5000); LED2=OFF; }} } Editat Septembrie 13, 2017 de catalin004 Link spre comentariu
mars01 Postat Septembrie 13, 2017 Partajează Postat Septembrie 13, 2017 Salut Catalin, Nu est este vorba ca nu pot sa inteleg codul, ci ca nu stau sa imi pierd timpul si vreau sa vad ceva mai mult interes din partea ta. Daca pe tine nu te intereseaza sa faci un mic efort atunci de ce m-ar interesa pe mine? In principal ideea era ca sa formatezi codul. Aici este important. Cu TAB-uri, spatii si linii libere unde este cazul. Daca doar arunci "nishte text" pe pagina (copy/paste) nu stam noi sa cautam daca ai erori de sintaxa ceea ce presupune ca cineva sa stea sa iti puna codul intr-un format inteligibil. Lucru pe care il poti face si tu destul de usor. Codul se posteaza pe acest forum folosind acel buton special: <> din bara de meniu a ferestrei in care postezi. Nu doar ca se creaza o fereastra in care codul se citeste mai usor dar pe langa aceasta se si face highlight la cuvintele cheie care, mai mult, simplifica citirea si identificarea de erori in genul: nu pui punct si virgula unde trebuie, o acolada asezata unde nu trebuie s.a.m.d Cand vreau sa primesc ajutor atunci fac tot efortul ca sa arat ca ma intereseaza sa primesc ajutor (adica am prb in a intelege un subiect) si nu doar astept o gratuitate (para malaiatza in gura lu' ...). Asa ar trebui sa faci si tu cat si alte persoane interesate sa primeasca ajutor. *************************************** Mircea, nu este obligatorie initializarea variabilelor. Compilatorul are grija de acest lucru si o face automat. Uneori chiar este o problema acest lucru, in cazul particular cand resetezi controller-ul printr-o metoda software (de ex folosind un timeout al watchdog-ului sau folosind un pin iesire care controleaza pin-ul MCLR etc) si doresti ca anumite variabile sa ramana in RAM cu valoarea precedenta (fara complicatii cu accesul lent la EEPROM, daca exista). Link spre comentariu
Mircea Postat Septembrie 13, 2017 Partajează Postat Septembrie 13, 2017 De acord, dar nu mereu vrei sa porneasca de la 0 sau 255. Eu zic ca e un bun obicei sa le dai o valoare. Sa le controlezi adica. In caz de reset cum spui, este posibil sa le vrei de unde au ramas. Link spre comentariu
catalin004 Postat Septembrie 14, 2017 Partajează Postat Septembrie 14, 2017 (editat) nu stiam ce inseamna formatarea textului.....scuze...interes am ca stau toata ziua si scriu coduri...eu nu lucrez in soft, ci in electronica, iar colegul de soft ma ajuta mai rar..in limita timpului....o sa incerc o reformatare a textului #define LED1_dir TRISC.F1 //iesire contactor pompa #define LED2_dir TRISC.F3 //iesire releu hidrofor #define Buton_dir TRISB.F0 //intrare buton start/stop #define LED1 PORTC.F1 //pompa #define LED2 PORTC.F3 //hidrofor #define Buton PORTB.F0 // Buton #define OFF 0 //flag oprire #define ON 1 //flag pornire /* deci programul meu vreau sa imi controleze starea a 2 utilaje pentru apa, datorita nivelului scazut de apa din fantana La apasarea unui singur buton pompa va porni sa ude in gradina, in acest timp hidroforul are comanda sa lucreze cu baia/bucataria etc. Dupa 15 minute, apa scade sub nivelul sorbului hidroforului, si daca cineva umbla la vreo baterie de apa, acesta porneste, neavand apa de dezamorseaza, si este foarte greu de amorsat, si locul unde este montat este greu de accesat. Deci dupa 15 minute acesta sa se opreasca, daca nu se ajunge in acest timp, comanda hidroforului sa fie ON, insa repornirea sa o faca dupa alte 30 minute in mod automat(revenirea apei in fantana) Dupa circa 30 minute, apa din fantana se goleste definitiv, deci as vrea o intaziere si pentru iesirea 1 de o jumatate de ora...repornirea facandu-se doar din buton. In tot acest timp, de o jumatate de ora, daca vreau sa opresc pompa , vreau sa o fac din acelasi buton, adica cu un buton sa fac start/stop. sincer as if lucrat cu un traductor de nivel insa nu il am momentan /* //LCD setare porturi iesire sbit LCD_RS at RC4_bit; sbit LCD_EN at RB2_bit; sbit LCD_D7 at RB6_bit; sbit LCD_D6 at RB5_bit; sbit LCD_D5 at RB4_bit; sbit LCD_D4 at RB3_bit; //Sfarsit LCD conect // pini catre porturi sbit LCD_RS_Direction at TRISC4_bit; sbit LCD_EN_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB6_bit; sbit LCD_D6_Direction at TRISB5_bit; sbit LCD_D5_Direction at TRISB4_bit; sbit LCD_D4_Direction at TRISB3_bit; //terminare lcd //FUNCTIE SECUNDE void Delay_secunde(unsigned char s) { char x,z; for (z=0; z<s; z++) { for (x=0; x<100;x++) delay_ms(10); } } void main() { int i; LED1_dir = 0; //stare port iesire led 1 LED2_dir = 0; //stare port iesire led 2 Buton_dir = 1; //setare intrare buton LED1 = OFF; //initial led 1 LED2 = ON; //stare initiala comanda hidrofor ponita while(1) { if (Buton==0) //daca se apasa butonul { delay_ms(100); LED1 = !LED1; // led 1 porneste(Pompa pornita) } if (LED1==ON) //Daca ledul 1 este aprins(pompa pornita) { delay_ms(5000); //se astpeata un sfert de ora LED2=OFF; //led 2 stins(adica hidrofor decuplat) } } } Editat Septembrie 14, 2017 de catalin004 Link spre comentariu
mars01 Postat Septembrie 14, 2017 Partajează Postat Septembrie 14, 2017 (editat) Sunt ceva incertitudini in logica enuntata aici: deci programul meu vreau sa imi controleze starea a 2 utilaje pentru apa,datorita nivelului scazut de apa din fantanaLa apasarea unui singur buton pompa va porni sa ude in gradina, in acest timphidroforul are comanda sa lucreze cu baia/bucataria etc.Dupa 15 minute, apa scade sub nivelul sorbului hidroforului, si daca cineva umbla lavreo baterie de apa, acesta porneste, neavand apa de dezamorseaza, si este foarte greu deamorsat, si locul unde este montat este greu de accesat.Deci dupa 15 minute acesta sa se opreasca, daca nu se ajunge in acest timp,comanda hidroforului sa fie ON, insa repornirea sa o faca dupa alte 30 minutein mod automat(revenirea apei in fantana)Dupa circa 30 minute, apa din fantana se goleste definitiv, deci as vrea ointaziere si pentru iesirea 1 de o jumatate de ora...repornirea facandu-se doar din buton.In tot acest timp, de o jumatate de ora, daca vreau sa opresc pompa , vreau sa o fac dinacelasi buton, adica cu un buton sa fac start/stop. Nu inteleg: "Deci dupa 15 minute acesta sa se opreasca" Cine sa se opreasca? Si nu inteleg nici: " insa repornirea sa o faca dupa alte 30 minute in mod automat(revenirea apei in fantana)" Cine reporneste? Editat Septembrie 14, 2017 de mars01 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