Sari la conținut
ELFORUM - Forumul electronistilor

problema rulare program pic


free_fiber

Postări Recomandate

Salutare,

 

Am o problema de care ma lovesc la rularea oricarui program incarcat in PIC. Microcontrollerul meu e un 16f628a, il programez cu ICPROG, iar programul in sine in scriu in Mikrobasic.

 

Iata un exemplu:

 

program if_curentmain:     TRISB.1=1     TRISB.5=0label:        if PORTB.1=1 then              PORTB.5=1              else PORTB.5=0              end if              goto labelend.

Generez hex-ul, in incarc in ICPROG, selectez pic16f628a, selectez IntRC I/O, debifez tot de la fuses in afara de LVP (doar cu LVP vrea programatoru meu sa mearga).

Dupa programare + verificare, scot PIC-ul in programator, il bag intr-un cablaj care are:

- o rezistenta de 8,5k intre vdd si mclr (stiu ca trebuia de 10k, dar nu cred ca de aici e buba);

- un led legat intre vcc si rb5;

- un push-button normal deschis intre vdd si rb1.

 

Eh, acu incepe distractia: bag 5v in pic, iar ledul meu incepe sa se aprinda vag, p-orma mai tare, mai incet - fara sa fac eu nimic. Daca imi plimb degetele pe langa PIC, pe PIC, ledul reactioneaza haotic. In concluzie, programul lucreaza haotic, fara rost. Care-i problema lui?

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

Top autori în acest subiect

  • free_fiber

    8

  • XAN77

    3

  • Abram Burel

    3

  • d2134

    2

Top autori în acest subiect

1. Ia vezi unde am bolduit.

 

program if_curent

 

 

main:

TRISB.1=1

TRISB.6=0

label: if PORTB.1=1 then

PORTB.5=1

else PORTB.5=0

end if

goto label

end.

 

2. LED-ul are rezistenta de balast?

3. Ai rezistenta intre RB1 si GND?

Link spre comentariu

6 si 5 e o eroare de scriere de tastatura... in timp ce scriam postul, scuze... 5 e iesirea :d (am editat primul post).2. nu am nici o rezistenta pe led ca nu se arde (ce-i aia rezistenta de balast?);3. NU. de ce ar trebui?

Link spre comentariu

Pune in serie cu LED-ul o rezisternta de circa 330 - 470 ohmi. Se numeste rezistenta de balast sau limitare si are rolul de a limita curentul prin LED. Se alege functie de tensiunea de alimentare si culoarea LED-ului, pentru cele albastre e mai mica, si trebuie sa limiteze curentul la 15 - 20 mA. Nu e vorba de ars LED-ul, e vorba ca trage prea mult curent pe port si o ia PIC-ul razna sau se arde (PIC-ul).Pune o rezistenta intre RB1 si GND, cam 1 - 10k. Are rolul de a trage la masa portul definit ca intrare. Daca nu exista, cind butonul este deschis, portul ramine flotant si, fiind de impedanta mare, citeste cind O cind 1, Probabil de asta se comporta cum ai descris.

Link spre comentariu

Are dreptate d2134, mai mult decat sigur se comporta haotic datorita lipsei rez intre rb1 si gnd, insa ar mai fi ceva: declara restul de porturi ramase libere ca iesiri daca nu intra pic-ul by-default in starea asta; intrarile lasate 'in aer' pot produce acelasi efect de functionare haotica. De altfel, rb1 cand pushul nu-i apasat este de fapt o intrare in aer.

Link spre comentariu

Bineinteles, ai citit toata documentatia de la picul tau si ai tinut cont de ce scrie referitor la LVP si in special referitor la pinul RB4/PGM, nu?

14.12 Low-Voltage ProgrammingThe LVP bit of the Configuration Word, enables the lowvoltageprogramming. This mode allows themicrocontroller to be programmed via ICSP using onlya 5V source. This mode removes the requirement ofVIHH to be placed on the MCLR pin. The LVP bit isnormally erased to ?1? which enables the low-voltageprogramming. In this mode, the RB4/PGM pin isdedicated to the programming function and ceases tobe a general purpose I/O pin. The device will enterProgramming mode when a ?1? is placed on the RB4/PGM pin. The High-Voltage Programming mode is stillavailable by placing VIHH on the MCLR pin.If Low-Voltage Programming mode is not used, theLVP bit should be programmed to a ?0? so that RB4/PGM becomes a digital I/O pin. To program the device,VIHH must be placed onto MCLR during programming.The LVP bit may only be programmed when programmingis entered with VIHH on MCLR. The LVP bitcannot be programmed when programming is enteredwith RB4/PGM.
In traducere, ca sa fii sigur ca in modul LVP picul tau functioneaza stabil, trebuie sa conectezi pinul RB4 la masa (printr-o rezistenta).
Link spre comentariu
  • 2 săptămâni mai târziu...

Salutare din nou... ma lovesc de probleme SF si am nevoie de ajutor.

 

Nu stiu sa programez in PICBASIC ! In alte limbaje de programare imi iesea mai mereu ceea ce imi doream, dar picbasicul m-a dat peste cap, chiar daca mie mi se pare extraordinar de logic codul scris.

 

Daca este vreunul din voi ingaduitor sa ma initieze si pe mine in lumea picbasic, voi fi recunoscator. Un moderator de pe aici imi zicea, in alt topic de-al meu sa incerc sa citesc si sa invat, sa nu mai fiu nevoit sa cer mura in gura. Am citit pe unde am putut (pe net, helpul programului) si tot n-am reusit sa realizez ceva.

 

Sa va dau un exemplu:

---- Un program care se vrea a fi un numarator de impulsuri ----

Daca nr. de impulsuri de pe rb2 > 7, atunci da curent pe rb6.

 

device 16f628aDIM pornit as byteDim oprit as byteDim puls as byteTRISB = %00000100           pornit = 0oprit = 0puls = 0Portb = %00000000 loop:if portb.2 = 1 then     pornit = 1    delayms 50endifif Portb.2 = 0 and pornit = 1 then     oprit = 1 endif    delayms 50endifIF pornit = 1 and oprit = 1 then     puls = puls + 1 endifpornit = 0oprit = 0If puls > 7 then portb = %01000000 else Portb = %00000000goto loop

Programul de mai sus, incarcat in 16f628a, 10k intre vdd si mclr, 10k intre rb2 si masa. Ii dau 1 sau 2 impulsuri pe rb2 si gata, da curent pe rb6.

 

Poate nu gandesc eu ca un PICman ....

Link spre comentariu

nush cum ii dai pulsurile alea, daca le dai cu o sarma fi sigur ca nu ia doar 2. Oricum eu am luat cu copy paste programul tau, lam compilat, lam bagat in proteus intrun 16F628, si face exact ce vrei tu, anume incepand cu puslsul 8 (ziceai in program if > 7) portb.6 devine high si asa ramane ca din momentu ala pulsurile sunt peste 7 . Ai grija cu verificarea in practica a ceea ce gandesti soft, ca micile imperfectiuni arata soft gresit da nu mereu e asa . Simuleaza si tu sa vezi ... Ai omis XTAL, banuiesc ca daca ai omis in realitate merge controleru la frecventa la care a calculat delayurile PICBASIC-ul, adica ce xtal ia el default daca nu-l pomenesti tu. Altfel delayu ala de 50ms sar putea sa se execute mult mai repede, oricum fa delayu ala mai mare ca in realitate sa fi sigur ca nu iti ia vreo 2-3 pulsuri cand atingi tu cu un fir etc.

Link spre comentariu

Programez PIC-ul cu icprog, setez int-rc IO la oscilator (deci programul va rula la 4mhz, cat are 16f628ul).Intr-adevar impulsurile i le dau cu o sarma... dar nu vad care e problema. Din program am gandit ca si un impuls de juma de ora sa fie interpretat ca unul singur. (adica daca tin sarma pe rb2 mai mult timp, el intra in if-ul cu pornit, dar nu in cel cu oprit)

Link spre comentariu

Ar fi totusi si o problema de programare, la o adica. Resetarea lui pornit si oprit o faci numai daca s-a intamplat "eventul" (adica pornit=1 AND oprit=1) altfel... astepti.Mutarea celor 2 instructiuni poate face diferenta. Desigur, mana nu se comporta ca un push-button, asa ca s-ar putea sa trebuiasca sa mai umbli la delay-uri :)

Link spre comentariu

Ar fi totusi si o problema de programare, la o adica. Resetarea lui pornit si oprit o faci numai daca s-a intamplat "eventul" (adica pornit=1 AND oprit=1) altfel... astepti.

Incercasem si cu cele 2 intructiuni in if-ul cu eventul si nu facea mare branza.Sa detaliez putin despre simulatorul fizic:Este un cablaj cu 2 sloturi pentru PIC legate in paralel, intr-unul din ele infig picul, in celalalt bag diverse (o rezistenta intre + si mclr, alta intre portul de intrare si masa, un led cu o rezistenta pe el intre iesire si masa si o sarma legata la + cu care dau impulsuri pe intrare - ATAT; NU STIU DACA MAI TREBUIE CEVA).
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