Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepator cu 16F690 (initializare PORT)


BLK

Postări Recomandate

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
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • BLK

    2

  • Abram Burel

    1

Top autori în acest subiect

Vizitator 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 spre comentariu

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

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

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