Sari la conținut
ELFORUM - Forumul electronistilor

PIC18F14K22 - problema generare hex


Mihai Popa

Postări Recomandate

Buna ziua.

 

Am de facut un mic proiect: vreau sa citesc RomCod-ul pentru niste senzori DS18B20. Am sctis un mic cod in MikroBasic Pro, ultima varianta de pe site. Pe LCD este afisat 0000000000000000.

Am simulat schema in Proteus si acelasi comportament. Apoi, in Proteus, am incarcat fisierul .coff si surpriza: pe LCD imi afiseaza RomCod-ul senzorului.

 

V-ati mai intalnit cu problema aceasta?

MCU folosit: PIC18F14K22, programator Pickit2

 

Va multumesc pentru orice idee.

Test with DS18B20.zip

Schema test.zip

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

Top autori în acest subiect

  • Mihai Popa

    5

  • ventzel

    4

Top autori în acest subiect

Nu stiu sigur in Mikrobasic cum ii da in MIkroc rutina de 1wire ii implementata gresit. Delayu de timeslot de 15+45us ii facut cu un numar fix de cicluri masina fara sa tina cont de frecventa aleasa a controllerului. Posibil si in cazu asta sa fie la fel. Imi mergea cu programu compilat pe <16Mhz da pe 32MHz si 64Mhz nu. Fa o proba la 8 si 16Mhz cu o rezistenta de pull-up de 2k2 intre Dq si Vdd si cu alimentare conectata pe Vdd.

Editat de ventzel
Link spre comentariu

Multumesc de raspuns, insa problema mea este ca in simulator nu merge decat daca incarc fisierul .coff; daca incarc fisierul .hex nu functioneaza.

Am incercat la mai multe frecvente (4, 8, 16 MHz) si rezultatul este acelasi: cu .coff merge si cu .hex nu merge.

 

Alte idei?

Link spre comentariu

Config word difera la incarcarea .coff si .hex, cel putin asta observ la mine folosind direct fisierele care le-ai postat. Picu merge in fiecare caz la frecventa diferita. O comunicatie cu .coff incarcat dureaza 15ms si pentru .hex ai 55ms. Pe .hex obtin 0xFF nu 0. Leaga osciloscopu din Isis  pe senzor si uitat-te si la Debug>PIC18cpu>Config memory in fiecare caz. N-am idee de unde ii da asta ii diferenta.  

Am impresia ca in cazu din .hex picu merge pe INT OSC la 1Mhz cat ii default dupa reset.

Editat de ventzel
Link spre comentariu

Salut.

Am modificat oscilatorul pe HS si i-am montat un quartz de 8MHz si acum merge corect, cel putin cat am apucat sa testez.

O sa il tin sub observatie.

 

Totusi nu inteleg care este treaba cu oscilatorul si libraria pentru OneWire pe acest MCU.

Aceeasi librarie am folosit-o pe alte controllere, cu oscilator intern setat si nu am avut probleme.

 

Multumesc.

Link spre comentariu

Din ce am vazut si in config aveai setat oscilatoru pe INT OSC. Dupa reset PIC-ul porneste la 1MHz si pentru a selecta alta frecventa disponibila trebuie modificata valoarea in registru OSCCON.

 

Cu libraria nu stiu daca ii problema in Mikrobasic. Am crezut in prima faza ca ai aceeasi problema care am intalnit-o pe Mikroc unde aveam comportamentu descris, adica imi mergea perfect la 16Mhz si la 64Mhz nu. Fa totusi o proba: cu oscilatoru HS la 8Mhz cupleaza PLL si seteaza cpu clk la 32Mhz pentru proiect. Daca iti merge corect la Read ROM si Read scratchpad fara sa-ti dea erori de comunicatie si checksum pe o perioada de cel putin o zi, nu-i nici o problema cu libraria.

Editat de ventzel
Link spre comentariu

Salut.

 

O sa fac si testul acesta.

Ideea este de ce cu .coff, cu oscilator intern setat merge si cu .hex, cu aceleasi setari nu.

 

Edit: Eu vorbesc de .coff in simulare.

Editat de Mihai Popa
Link spre comentariu

.coff nu cred ca contine setarile de config word definite in proiect.

Arata cam asa luat direct din simulator:

 00300000: 2700 1F1F 8800 0005 00300008: C003 E003 4003

Config1H=0x27=0b0010 0111 deci ai oscilatoru setat pe 0111 = External RC oscillator. In cazu asta iti ia frecventa setata in Proteus care era la 4Mhz.

Daca incarci .hex o sa ai configu din proiect si pe Config1H=0x28=0b0010 1000, deci oscilatoru ii 1000 = Internal RC oscillator. Frecventa la care lucreaza PIC-ul nu mai ii luata din setarile din Proteus ca ii controlata direct de setarile facute in program.Daca te uiti in cazu asta si la Simulatio log in Isis o sa apara la rulare o linie de genu: "[PIC18] Clocking xxxxxx specified in schematic component is ignored ....."

Ca sa functioneze pe INTOSC cu frecventa de 4Mhz trebuie sa inceputu programului sa dai  la OSCON valoarea 0b01010000.

http://ww1.microchip.com/downloads/en/DeviceDoc/41365E.pdf  pagina 17.

 

Link spre comentariu

Salut.

 

Am facut modificarea pentru quartz de 8MHz si 4xPLL Enable pentru frecventa de 32Mhz.

Are cateva ore de functionare corecta.

In simulare am setat si registrul OSCCAL=0x50 (0b01010000) si functioneaza corect.

Zilele urmatoare o sa incerc sa ii scot quartul si sa il trec pe oscilator intern sa vad cum se comporta; mai mult ca sigur o sa mearga...

 

Multumesc de ajutor.

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