marius_3004 Postat Aprilie 17, 2012 Partajează Postat Aprilie 17, 2012 Se poate programa un pic sa faca ceva de genul:daca pe intrari are conectate switchuri si pe iesiri leduri,daca se apasa switchul corespunzator A0 sa se aprinda ledul de pe B0:daca se apasa switchul de pe A1 se aprinde ledul corespunzator B1:daca se apasa si se mentine switchul A0 si apoi A1,deci ambele apasate sa se aprinde ledul de pe portul B3 (sau sa nu fie nici un led aprins)? MultumescEditat: nume subiect Link spre comentariu
francezu Postat Aprilie 18, 2012 Partajează Postat Aprilie 18, 2012 Da se poate. Despre ce PIC discutam? Ce limbaj de programare? Link spre comentariu
marius_3004 Postat Aprilie 18, 2012 Autor Partajează Postat Aprilie 18, 2012 Momentan am Pic16f628A si Pic16LF877A.Limbajul de programare...... .Pana acum am reusit doar sa ma joc cu niste leduri utilizand JAl (dupa cartea lui V. Surducan). Link spre comentariu
francezu Postat Aprilie 18, 2012 Partajează Postat Aprilie 18, 2012 Nu cunosc limbajul JAL. Mai jos ai un exemplu pentru PIC16F628A scris in mikroBasic. program led_switch_v1symbol LED1=RA0_bit ' port asociat LED1symbol LED2=RA1_bit ' ------"----- LED2symbol LED3=RA2_bit ' ------"----- LED3symbol B1=RB0_bit ' ------"----- buton 1symbol B2=RB1_bit ' ------"----- buton 2symbol apasat=0 ' nivel logic buton apasatsymbol aprins=1 ' -----"----- led aprinssymbol stins=0 ' -----"----- led stins sub procedure Init_Main() PORTA=0 ' initializeaza PORTB=0 ' iesirile pe 0 CMCON=7 ' dezactiveaza comparatoare NOT_RBPU_bit=0 ' activeaza rezistentele "pull-up" pe PORTB TRISA=0 ' configureaza TRISB=3 ' intrari/iesiriend submain: Init_Main() ' initializare controlerwhile true if (B1=apasat) and (B2=apasat) then ' daca sunt apasate ambele butoane LED3=aprins LED1=stins LED2=stins ' aprinde LED3, stinge restul de led-uri else ' altfel LED3=stins ' stinge LED3 if B1=apasat then ' daca butonul 1 este apasat LED1=aprins ' aprinde LED1 else ' altfel LED1=stins ' stinge LED1 if B2=apasat then ' daca butonul 2 este apasat LED2=aprins ' aprinde LED2 else ' altfel LED2=stins ' stinge LED2 end if end if end ifwend end. http://dl.dropbox.com/u/64192367/led_switch.bmp http://dl.dropbox.com/u/64192367/led_switch_v1.hex Link spre comentariu
marius_3004 Postat Aprilie 18, 2012 Autor Partajează Postat Aprilie 18, 2012 Raman dator,incerc sa vad daca ma dumiresc ce e cu mikroBasic.Daca nu pricep o sa mai intreb daca nu te deranjeaza. Link spre comentariu
marius_3004 Postat Aprilie 18, 2012 Autor Partajează Postat Aprilie 18, 2012 Am testat hex dat de tine pe Real pic simulator si e ok.Am descarcat mikrobasic si am modificat pinii de intrare pe portul A0:A1iar ledurile pe pinii B0-------B5(am pus 5 leduri).Ordinea de aprindere e B1-apasat-Led1:Led3 =aprins B2-apasat-Ld2:Led4=aprins B1:B2-apasate-Led5 aprins.Merge,dar cateodata cand opresc simulatorul raman aprinse doua leduri.Nu stiu daca face si real asa,dar intrebarea e nu cumva e din cauza rezistentelor pull-up care vad ca sunt la Pic16f628a doar pe portulB?Real ar ajuta sa pun niste rezistente intre pinii portului A si masa?Daca nu merge nici o problema,pot pune butoanele pe portulB,sunt doar curios .Sa nu uit,cum introduc o temporizare de ex. intre apasarea simultana a celor doua butoane si aprinderea Led3(in exemplul tau)?Scuze daca iti vine sa ma ,dar ..... Maine testez hex-urile pe placa de testare sa vad cum functioneaza. Link spre comentariu
francezu Postat Aprilie 18, 2012 Partajează Postat Aprilie 18, 2012 Să o luăm pe rând: 1. Nu am folosit Real Pic Simulator şi nu ştiu cum se comportă la oprire; poate face pauză pe execuţia programului, poate face reset la procesor...nu ştiu. 2. Microcontroler-ul ales are întradevăr rezistenţe pull-up doar pe PORTB. Pentru a pune butoane pe PORTA aceste rezistenţe trebuiesc puse extern, între intrare şi VDD (la masă vin butoanele). 3. De obicei pentru întârzieri in mikroBasic se foloseşte funcţia Delay_ms() -vezi în Help. În timpul execuţiei acestei funcţii procesorul nu mai face altceva, rămâne deci "blocat" in această funcţie pe intreaga perioadă de întârziere. În cazul de faţă nu ar fi cea mai fericită alegere, iată de ce: -presupunem că vreau ca LED3 să se aprindă la 5 secunde de la apăsarea simultană a celor două butoane; dacă fac aşa if (B1=apasat) and (B2=apasat) then Delay_ms(5000) LED3=aprinsend iftotul este ok atât timp cât stau liniştit şi astept ca led-ul să se aprindă după cele 5 secunde, dar -dacă mă răzgândesc şi eliberez cele două butoane pentru a aprinde spre ex. LED1, nu o să meargă, decât după cele 5 secunde. De rezolvat, se rezolvă împărţind intârzierea totală in unele mai mici de valori egale(care se contorizează pentru a însuma intârzierea dorită); cât de mici ? păi depinde de cât de des vrem să "citim" starea butoanelor şi să mai facem şi altceva decât să "stăm" degeaba. Postează codul modificat de tine şi adaug eu întârzierea pentru LED5. Link spre comentariu
marius_3004 Postat Aprilie 19, 2012 Autor Partajează Postat Aprilie 19, 2012 ' Declarations section ' program led_switch_v1symbol LED1=RB0_bit ' port asociat LED1symbol LED2=RB1_bit ' ------"----- LED2symbol LED3=RB2_bit ' ------"----- LED3symbol LED4=RB3_bit ' ------"----- LED4symbol LED5=RB4_bit ' ------"----- LED5symbol B1=RA0_bit ' ------"----- buton 1symbol B2=RA1_bit ' ------"----- buton 2symbol apasat=0 ' nivel logic buton apasatsymbol aprins=1 ' -----"----- led aprinssymbol stins=0 ' -----"----- led stinssub procedure Init_Main() PORTA=0 ' initializeaza PORTB=0 ' iesirile pe 0 CMCON=7 ' dezactiveaza comparatoare NOT_RBPU_bit=0 ' activeaza rezistentele "pull-up" pe PORTB TRISB=0 ' configureaza TRISA=3 ' intrari/iesiriend submain: Init_Main() ' initializare controlerwhile true if (B1=apasat) and (B2=apasat) then ' daca sunt apasate ambele butoane LED5=aprins LED1=stins LED2=stins LED3=stins LED4=stins ' aprinde LED5, stinge restul de led-uri else ' altfel LED5=stins LED1=stins LED2=stins LED3=stins LED4=stins ' stinge LED if B1=apasat then ' daca butonul 1 este apasat LED1=aprins LED3=aprins ' aprinde LED1 else ' altfel LED1=stins LED3=stins ' stinge LED1 if B2=apasat then ' daca butonul 2 este apasa LED2=aprins LED4=aprins ' aprinde LED2 else ' altfel LED2=stins LED4=stins ' stinge LED2 end if end if end ifwendend.main:' Main program end.acesta e codul , functioneaza.Acum iar intrebari : Daca folosesc portul a ca intrare mai trebuie activate rezistentele pe portul B?(mai pe romaneste linia aia mai e necesara?) Intarzierea se poate aplica si la eliberarea butonului?adica apesi butonul, se aprinde,ridici se stinge dupa un timp stabilit. Se poate face in asa fel incat la o apasare a unui buton sa se aprinda un led si sa ramana aprins apoi dupa o perioada sa se aprinda altul si sa se stinga primul?in JAl am reusit, aici ....incerc in dupa masa asta. si ar mai fi dar nu vreau sa te inebunesc prea mult dintr-o data:)) Multumesc . Link spre comentariu
Liviu M Postat Aprilie 19, 2012 Partajează Postat Aprilie 19, 2012 in JAl am reusit, aici ....Daca ai reusit in JAL, ar trebui sa reusesti in orice alt limbaj, cu conditia sa inveti limbajul respectiv si particularitatile compilerului folosit. Asa ca spor la documentat. Link spre comentariu
marius_3004 Postat Aprilie 19, 2012 Autor Partajează Postat Aprilie 19, 2012 in JAl am reusit, aici ....Daca ai reusit in JAL, ar trebui sa reusesti in orice alt limbaj, cu conditia sa inveti limbajul respectiv si particularitatile compilerului folosit. Asa ca spor la documentat. Unii,,e''destepti,altii mai putin.....,oricum nu cu Maria Ta conversam.Daca scria cel care m-a ajutat, toata stima,dar se mai baga in seama si altii... Link spre comentariu
Vizitator titusache Postat Aprilie 19, 2012 Partajează Postat Aprilie 19, 2012 am urmatoarea problema. am un montaj cu un pic care are 42 pini,capsula ssop, lcd,eeprom 24c256, iar pe cablaj are 9 puncte de conectare denumite tx,rx,gnd,prg de la 1 la 6.ma intereseaza ce tip este, fiindca la microchip nu am gasit decat la 40 sau 44 pini in capsula ssop. Link spre comentariu
Liviu M Postat Aprilie 19, 2012 Partajează Postat Aprilie 19, 2012 Unii,Te basici degeaba, chiar nu aveam intentii "rele". Te incurajam sa incerci sa-l faci singur. Atata timp cat stii deja sa faci in jal, n-ar trebui sa-ti fie greu sa te prinzi cum merge in basic. Cat timp ai scris rautati, puteai invata cateva comenzi in basic. PS E forum public. 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