Sari la conținut
ELFORUM - Forumul electronistilor

Cateva intrebari despre PIC


Vizitator Mario_b

Postări Recomandate

Vizitator Mario_b

Va salut, am si eu cateva intrebari despre programarea PIC-urilor.Recent am inceput sa programez PIC-uri.Sa zicem ca avem urmatoarea situatie: PIC 12f629 are 8 pini din care 2 sunt Vdd si Vss, restul pinilor sunt multifunctionali, pic-ul are doar un port de I/O, anume GPIO. Asa, sa zicem ca (,) configurez pinul 0 ca intrare si restul pana la 5 ca iesiri. Dar eu am nevoie sa afisez ceva din acumulator si ii dau movwf GPIO ca sa afiseze; acum e baiu --- asta nu deranjeaza pinul 0 care este setat ca intrare????Alta intrebare: cum setez din program sa folosesc un cristal de quartz (XT)pe pinii 4 si 5 care pot fi setati ca pini de I/O? Adica cum setez TRISIO (tri-state) pe pinii 4 si 5?Poate nu sunt intrebari dificile, dar m-am lovit de ele si am cautat pe net in zadar... Daca se gaseste cineva sa-mi raspunda, ii multumesc mult.

Link spre comentariu
  • Răspunsuri 34
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Abram Burel

    4

  • sofian

    2

  • CristianC

    2

  • cirip

    1

Top autori în acest subiect

1. Dacă un pin este setat pe intrare, poţi să "scrii" în el ce vrei. Valoarea înscrisă în latch-ul de ieşire se opreşte în buferul care e comandat de TRISIO. Vezi schemele din foile de catalog din secţiunea GPIO Port. Citeşte cu atenţie secţiunea. Sunt multe de învăţat de acolo (de exemplu că write este de fapt read-modify-write). Atenţie şi la GP3 care este exclusiv intrare.2. Cam la fel. Biţii de configurare care stabilesc utilizarea pinilor pentru oscilator trece buffer-ul de ieşire în 3S. Tot de pe scheme te prinzi.Concluzia: foaia de catalog citită şi privită cu atenţie e... sfântă.

Link spre comentariu
Vizitator Mario_b

Revin.Am reusit sa fac cateva programe pentru a ma familiariza cu PIC-ul.Am citit datasheetul de cateva ori, altfel e imposibil sa intelegi tot din prima trecere.Am observat o chestie: --- un program simplu care sa testeze capabilitatea I/O a unui pic astfel: daca pe GP0 setat ca input am 0 logic, pe GP1 setat ca output am tot 0 logic, iar daca pe GP0 am 1, pe GP1 am tot 1. Deci, ceva ff simplu.Am observat ca daca pe GP0 nu pun nici 0 nici 1 (deci nu e legat la nimic pinul, ledurile blink-aie cu intensitate cam 50% din nominal. in rest programu merge ok.Stiti de ce face asta???

Link spre comentariu

Picul este un circuit CMOS. Este o regula generala ca intrarile circuitelor CMOS nu se lasa in gol. Impedanta lor de intrare este mare si capteaza usor zgomot din mediul inconjurator.Ca sa nu mai apara aceasta problema, fie activezi pullup-ul intern, fie conectezi un pullup/down extern, fie conectezi o iesire de circuit de impedanta joasa (de exemplu o alta poarta sau iesire de circuit logic), care sa impiedice captarea zgomotului.Poti sa mai faci un experiment inainte sa activezi pullup-urile. Prin intermediul unei surubelnite mici sau al unui varf ascutit, atinge cu mana pinul de intrare. Cealalta mana atinge-o fie la Vcc fie la masa. Ar trebui sa constati ca ledul se aprinde sau se stinge constant.Cirip

Link spre comentariu
  • 2 săptămâni mai târziu...

Ok, si cand fac operatii de I/O ma feresc de pinii 4 si 5? Adica cum setez registrul TRISIO ptr bitul 4 si 5? Input sau Output? Intelegi ce vreau sa intreb?

Atunci cand setezi oscilator XT/HS (din bitii de configuratie) functia I/O a pinilor respectivi (4 si 5) este dezactivata. Nu e nevoie sa ai grija ce scrii in GPIO sau TRISIO.
Link spre comentariu
Vizitator Mario_b

Mai am niste intrebari: nu reusesc sa fac un LED sa blinkaie... E rusinos si ff stresant ptr mine ca nu stiu sa implementez o functie de delay. Orice program fac ledul sta mereu aprins... Deci poate o oscila el, dar nu se vede, desi am bagat o functie delay destul de lunga zic eu (folosesc un cristal, deci XT)...Poate cineva sa-mi dea un exemplu de cod sau macar doar o functie DELAY ptr PIC 12f629???Raman dator... :partyman:

Link spre comentariu
Vizitator Mario_b

Aaa, inca ceva, cine ma poate ajuta cu un C compiler mai usor, mai ales ca stiu sa programez in C ca beginner, precum si documentaita aferenta ca sa-mi dau seama si cum sa folosesc compilerul... Thx....

Link spre comentariu

Ca si compilator free cauta PIClite

 

Functie delay in asm:

 

cblock ;declar un bloc de memorie

delayL

delayH

endc

 

R_Delay:

clrf delayL

clrf delayH

 

decfsz delayL,f

goto $-1 ;sar o instructiune inapoi

 

decfsz delayH,f

goto $-3 ;sar 3 instructiuni inapoi

 

return

 

Intarzierea va fi de ~ 3*256*256 instructiuni

Link spre comentariu
Vizitator Mario_b

Mersi mult, Cristian.Va atasez un asm cu programul meu. Uitati-va si spuneti-mi unde gresesc, ca ledul nu blinkaie , doar se aprinde pe GP1 (GPIO:000010) si sta aprins.Am simulat programu cu MPLAB si merge OK, am configurat ptr oscilator XT cu MCLR intern fara WDT, doar cu Brown Out Detect.Mooor de ciuda.....PS Schimbati extensia din ZIP in ASM...

Link spre comentariu
Vizitator Mario_b

OK, mi-am refacut calculele si am vazut ca am facut o greseala stupida, nu aveam cum sa vad ledul cum blinkaie deoarece sta aprins doar 0,006sec sau ceva de genu... :weedman:

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