BLK Postat Octombrie 5, 2008 Partajează Postat Octombrie 5, 2008 Am luat un PicKit2 Starter Kit ce are in pachet o mini placa de dezvoltare cu 16F690, si desi pana acum m-am jucat un pic numai cu 16F648 (la nivel de aprins 2 leduri), am zis sa incerc cu 690 daca tot e cu placa cu tot (ca nu se potriveste la pini cu 648). Problema am rezolvat-o insa nu o inteleg. Pachetul vine si cu 12 lectii in care se fac diferite combinatii de aprindere a ledurilor. Primul program aprinde un led cam asa: BSF STATUS,RP0BCF TRISC,0BCF STATUS,RP0BSF PORTC,0GOTO $ si functioneaza de minune, insa daca adaug TRISC,1 ca iesire si setez PORTC,1 high, mi se aprinde numai PORTC,1 (pe placa) iar in simulator, am pe PORTC uneori 0x0C, alteori 0x00. Am incrcat diferite combinatii, de la CLRF TRISC si incarcat diferite valori in PORTC si rezultatele sunt ciudate atat in simulator cat si pe placa. Am cautat in datasheet si am facut initializarea cum se recomanda acolo (am pus mai jos codul) si pare ca functioneaza ok. BCF STATUS,RP0 ;Bank 0BCF STATUS,RP1 ;CLRF PORTC ;Init PORTCBSF STATUS,RP1 ;Bank 2CLRF ANSEL ;digital I/OBSF STATUS,RP0 ;Bank 1BCF STATUS,RP1 ;CLRF TRISCBCF STATUS,RP0 ;Bank 0 Ce nu inteleg este faptul ca toate programele care au venit pe CD nu fac initializarea asta (o folosesc pe cea din primul program) si totusi functioneaza, de ce daca incerc sa schimb ceva, nu mai functioneaza cum trebuie? Ma gandesc ca este din cauza faptului ca nu este setat PORTC ca Digital I/O, dar in exemplele lor de ce functioneaza? Link spre comentariu
Vizitator ALEX_OKAS Postat Octombrie 6, 2008 Partajează Postat Octombrie 6, 2008 Eu cred ca mai intai ar trebui sa te lamuresti ce face TRISC: este o instructiune care determina modul de folosire al unui anumit port sau bit al portului, adica iesire sau intrare. Mai intai el trebuie setat ca iesire si abia apoi poti sa faci bitul 1 al portului C HIGH. Daca sunt facute setarile cum trebuie nu este nici un motiv pt care nu poate functiona. Succes! Link spre comentariu
Abram Burel Postat Octombrie 7, 2008 Partajează Postat Octombrie 7, 2008 Singura explicatie este ca programul lor exploateaza un "bug" al PIC-ului.In mod normal, la pornire, ANSEL e cu "1" peste tot, ceea ce inseamna ca PORTC,0 (la fel ca PORTC,1) este intrare analogica si nu poate fi utilizat ca digital I/O.Foloseste cu incredere tehnica de programare descrisa in foaia de catalog.Ar fi totusi interesant de verificat daca, fara a seta explicit ANSEL,0 pe 1, PORTC,0 poate fi folosit ca intrare analogica. Daca nu, inseamna ca cel mai bine e sa setezi explicit valorile registrilor de control, chiar daca foaia de catalog zice ca valoarea implicita ar fi ce iti trebui tie. Eu nu am intalnit o astfel de situatie pana acum, dar ceea ce se spune in primul post ar fi un exemplu. Link spre comentariu
BLK Postat Octombrie 7, 2008 Autor Partajează Postat Octombrie 7, 2008 Am descoperit pana la urma ca de la ANSEL este problema, si eu m-am gandit ca e un bug, dar totusi ma gandeam ca cei de la Microchip fac si ei niste lectii cu cap, sa priceapa si un incepator. Pana la urma, dupa cum zice toata lumea, foaia de catalog e cea mai sigura metoda de a invata programarea unui PIC.Foaia de catalog a 690 nu am apucat inca sa o citesc, asa ca o sa raman probabil deocamdata la 648, ca pe aia am citit-o. Cand o sa ajung la ADC si alte treburi mai importante o sa incer si cu 690.Multumesc Abram Burel. 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