Sari la conținut
ELFORUM - Forumul electronistilor

Care-i greseala ??? Need help...


Vizitator pai

Postări Recomandate

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

Top autori în acest subiect

  • cirip

    10

  • sofian

    4

  • Abram Burel

    3

  • aionescu

    1

Top autori în acest subiect

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

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

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

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

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 0x80

Cred 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
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

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

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

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