Jump to content
ELFORUM - Forumul electronistilor

Probleme de incepator cu 16F690 (initializare PORT)


BLK

Recommended Posts

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 to comment
  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

  • BLK

    2

  • Abram Burel

    1

Top Posters In This Topic

Guest ALEX_OKAS

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 to comment

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 to comment

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 to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines