Sari la conținut
ELFORUM - Forumul electronistilor

Intrebare programare pic


marius_3004

Postări Recomandate

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
  • Răspunsuri 11
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • marius_3004

    6

  • francezu

    3

  • Liviu M

    2

Top autori în acest subiect

Momentan am Pic16f628A si Pic16LF877A.Limbajul de programare...... :jytuiyu .Pana acum am reusit doar sa ma joc cu niste leduri utilizand JAl (dupa cartea lui V. Surducan).

Link spre comentariu

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

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 :jytuiyu .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 :bataie ,dar ..... Maine testez hex-urile pe placa de testare sa vad cum functioneaza.

Link spre comentariu

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 if
totul 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

' 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

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

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări