Mihai Popa Postat Mai 12, 2014 Partajează Postat Mai 12, 2014 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
ventzel Postat Mai 12, 2014 Partajează Postat Mai 12, 2014 (editat) 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 Mai 12, 2014 de ventzel Link spre comentariu
Mihai Popa Postat Mai 12, 2014 Autor Partajează Postat Mai 12, 2014 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
ventzel Postat Mai 12, 2014 Partajează Postat Mai 12, 2014 (editat) 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 Mai 12, 2014 de ventzel Link spre comentariu
Mihai Popa Postat Mai 13, 2014 Autor Partajează Postat Mai 13, 2014 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
ventzel Postat Mai 13, 2014 Partajează Postat Mai 13, 2014 (editat) 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 Mai 13, 2014 de ventzel Link spre comentariu
Mihai Popa Postat Mai 13, 2014 Autor Partajează Postat Mai 13, 2014 (editat) 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 Mai 13, 2014 de Mihai Popa Link spre comentariu
ventzel Postat Mai 13, 2014 Partajează Postat Mai 13, 2014 .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
Mihai Popa Postat Mai 13, 2014 Autor Partajează Postat Mai 13, 2014 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
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