free_fiber Postat Octombrie 2, 2007 Partajează Postat Octombrie 2, 2007 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
d2134 Postat Octombrie 2, 2007 Partajează Postat Octombrie 2, 2007 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
free_fiber Postat Octombrie 2, 2007 Autor Partajează Postat Octombrie 2, 2007 6 si 5 e o eroare de scriere de tastatura... in timp ce scriam postul, scuze... 5 e iesirea (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
d2134 Postat Octombrie 2, 2007 Partajează Postat Octombrie 2, 2007 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
free_fiber Postat Octombrie 2, 2007 Autor Partajează Postat Octombrie 2, 2007 mersi mult d2134, mai fac maine teste sa vad ce reusesc Link spre comentariu
TECH_FUN Postat Octombrie 2, 2007 Partajează Postat Octombrie 2, 2007 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
Liviu M Postat Octombrie 4, 2007 Partajează Postat Octombrie 4, 2007 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
free_fiber Postat Octombrie 16, 2007 Autor Partajează Postat Octombrie 16, 2007 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
XAN77 Postat Octombrie 16, 2007 Partajează Postat Octombrie 16, 2007 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
free_fiber Postat Octombrie 16, 2007 Autor Partajează Postat Octombrie 16, 2007 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
XAN77 Postat Octombrie 16, 2007 Partajează Postat Octombrie 16, 2007 parerea ta :smt003 contactul prin sarma nu e constant "1" chiar daca stai tu nemiscat :smt003 e parerea ta ca ai stat nemiscat . Link spre comentariu
sofian Postat Octombrie 16, 2007 Partajează Postat Octombrie 16, 2007 cred ca nu ai probleme cu programarea :tonqe: la tine electronica este problema Link spre comentariu
Abram Burel Postat Octombrie 16, 2007 Partajează Postat Octombrie 16, 2007 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
XAN77 Postat Octombrie 16, 2007 Partajează Postat Octombrie 16, 2007 dupa cum ziceam, in proteus merge exact cum vrea omul (adica simulata), punerea in practica e clar ca nu e cum trebuie .... Link spre comentariu
free_fiber Postat Octombrie 16, 2007 Autor Partajează Postat Octombrie 16, 2007 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
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