Vizitator pai Postat August 13, 2006 Partajează Postat August 13, 2006 Cel mai simplu cod.Si nu functioneaza!Unde este greseala???#include "p12f629.inc"__config _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUTorg 0 goto mainorg 4 goto intservbank0 macro bcf STATUS,RP0endmbank1 macro bsf STATUS,RP0endmmain: bank1;calibrare oscilator intern: call 0x3FF movwf OSCCAL bank1 bcf TRISIO,4 bank0 clrf GPIO bsf GPIO,4 goto finishintserv:retfiefinish:end Cand simulez(folosind PicSimulatore) observ ca executia acestui program se termina imediat dupa "call 0x3FF". De ce? Link spre comentariu
sofian Postat August 13, 2006 Partajează Postat August 13, 2006 poate asa stie simulatorulin mplab la call 0x3ff se opreste si ii dau drumul din nouda eu zic sa faci asate uiti la sfirsit in pic si vezi valoarea de calibaresi in loc de call 0x3FF pui movlw (valoare) si merge ok Link spre comentariu
Vizitator pai Postat August 13, 2006 Partajează Postat August 13, 2006 l-am si "ars" in pic si nu a functionat,desi si prin datasheetul lui o astfel de calibrare este indicata.tre' sa fie altceva.... Link spre comentariu
Abram Burel Postat August 13, 2006 Partajează Postat August 13, 2006 Să ne uităm puţin la secvenţa de iniţializare dată în foaia de catalog:bcf STATUS,RP0 ;Bank 0clrf GPIO ;Init GPIOmovlw 07h ;Set GP<2:0> tomovwf CMCON ;digital IObsf STATUS,RP0 ;Bank 1clrf ANSEL ;Digital I/Omovlw 0Ch ;Set GP<3:2> as inputsmovwf TRISIO ;and set GP<5:4,1:0> as outputsLăsăm la o parte CMCON (valorile default sunt foarte bune) şi ANSEL (nu e cazul). Aparent şi tu ai setat tot ce trebuie. Numai că primele 2 instrucţiuni la tine sunt după setarea TRISIO. Şi eu am zis prima oară că n-are importanţă. După ce am trecut prin aceeaşi dilemă am constatat că are.Deci: şterge întâi GPIO (pe Bank0) şi apoi setează TRISIO. Link spre comentariu
sofian Postat August 13, 2006 Partajează Postat August 13, 2006 clrf GPIO bsf GPIO,4 finish: goto finish ;bucla infinitasaubucla: bsf GPIO,4nopnopbcf GPIO,4goto Bucla Link spre comentariu
cirip Postat August 13, 2006 Partajează Postat August 13, 2006 Cand faci acel call 0x3ff, se presupne ca la locatia 0x3ff se afla o instructiune retlw, care intoarce valoarea de calibrare lasata acolo de producator. Daca ai sters-o, locatia e goala deci revenirea din call nu se mai face si programul o ia razna. Mplab o ia si el razna razna ptr ca sare la o zona de memorie unde nu e cod. Pune la sfarsitul programului ceva de gen: org 0x3ffretlw 0x80 si e pos sa mearga. Valoarea "intoarsa" in cazul asta va fi 0x80, dar acolo trebuie sa ai val de calibrare. Daca ai sters-o, o refaci. E un post pe tema asta. Cirip Link spre comentariu
Vizitator pai Postat August 13, 2006 Partajează Postat August 13, 2006 am gasit prin datasheet ca valoarea pentru calibrare este chiar 0x80, si am modificat programul corespunzator dar la scriere in pic primesc eroare de verificare la adresa 0x8 (folosesc ic-prog si binecunoscutul programator jdm). codul arata acum asa:#include "p12f629.inc"__config _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUTorg 0 goto mainorg 4 goto intservbank0 macro bcf STATUS,RP0endmbank1 macro bsf STATUS,RP0endmmain: bank1;calibrare oscilator intern: call 0x3FF movwf OSCCAL bank0 clrf GPIO bsf GPIO,4 bank1 bcf TRISIO,4finish: goto finishintserv:retfieorg 0x3FF retlw 0x80end banuiesc ca de vina este ultimul org...ce parere aveti? Link spre comentariu
cirip Postat August 13, 2006 Partajează Postat August 13, 2006 Nu vad legatura intre ultimul org si eroarea de programare de la adresa 8. Poate vrei sa elaborezi putin de ce crezi ca e vreo legatura.Daca timingul nu este critic, elimina complet calibrarea. Oricum, valoarea originala e pierduta. Pur si simplu elimina call 0x3FF si elimina si orgul de la coada ptr ca nu mai are obiect si testeaza. am gasit prin datasheet ca valoarea pentru calibrare este chiar 0x80Cred ca e o neintelegere. 0x80 e valoarea de reset si care "e p-acolo". Dar pentru compensarea distributiei statistice a frecventei datorata procesului de fabricatie, valoare aia trebuie alterata. Valoarea aia e ca un trimer care vine din fabrica pe mijloc. Daca vrei precizie mai mare, mai bagi surubelnita si mai dai putin stanga-dreapta.Cirip Link spre comentariu
Vizitator pai Postat August 13, 2006 Partajează Postat August 13, 2006 Daca timingul nu este critic, elimina complet calibrarea. Oricum, valoarea originala e pierduta. Pur si simplu elimina call 0x3FF si elimina si orgul de la coada ptr ca nu mai are obiect si testeaza. adica pot sa renunt la calibrare, la acele 2 instructiuni din cod? Link spre comentariu
cirip Postat August 14, 2006 Partajează Postat August 14, 2006 adica pot sa renunt la calibrare, la acele 2 instructiuni din cod?Daca timingul nu este critic, da. Oricum, la reset osccal se incarca singur cu 0x80. Link spre comentariu
Vizitator pai Postat August 14, 2006 Partajează Postat August 14, 2006 tot nu-mi merge. renuntand la cele 2 instructiuni programarea fizica se face fara probleme dar nimic nu se intampla... alte idei? Link spre comentariu
sofian Postat August 14, 2006 Partajează Postat August 14, 2006 nu are cum trebuie sa meargavezi mclr sa fie pus cu o rezistenta la +5v Link spre comentariu
Abram Burel Postat August 14, 2006 Partajează Postat August 14, 2006 Păi, de ce, că are MCLRE_ON în config?Pe mine mă intrigă eroarea aia de programare care a dispărut între timp. Dacă citeşti PIC-ul şi dezasamblezi, obţii programul tău? Link spre comentariu
cirip Postat August 14, 2006 Partajează Postat August 14, 2006 pai,Ca sa faci GP4 iesire digitala, mai trebuie sa resetezi AN3 din registrul ANSEL. Dupa reset ala aloca toti pinii ca intrari analogice.De asemenea, dupa finish: baga un goto $, ca sa opresti procesorul la adresa aia, altfel o ia in balarii.Trebuie sa pui _MCLRE_OFF ca sa nu ai nevoie de rezistenta la +5VCirip 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