Newsgroup: it.hobby.elettronica.digitale
Titolo: Cominciano i problemi ;-)

Lo sapevo... ho appena iniziato e gia' ho problemi. Me l'aspettavo.
Spero che qualcuno mi possa dare una mano.
In fondo al messaggio allego un po' di codice. Le righe prima di ORG
0x00 sono scopiazzate.
Sotto vi dico cosa intendevo fare riga per riga:
- azzerare il registro con GPIO (è necessario o va a zero da solo
all'accensione?)
- disattivare i comparatori del 12F675
- passare al banco di memoria 1
- attivare le porte 2 e 4 come uscite e lasciare il resto come input
- impostare tutte le porte come digitali
- ritornare al banco 0
- portare a livello alto le porte 2 e 4
Cosa succede? Compilo senza errori. Programmo senza errori.
Quando però clicco su "Device Power" non si accende nessuno dei LED
collegati al PIC. Se ora clicco su "2.5kHz Osc" si accende il LED D3
(mi pare, ma non sono sicuro che D2 lampeggi per un brevissimo
istante). A questo punto, anche se disattivo "2.5kHz Osc" il LED resta
acceso.
Perche' non succede quello che volevo succedesse (D2 e D4 si
accendono, il resto no)?
Non è possibili vedere cosa succede nei registri del PIC durante lo
svolgimento del programma, vero?
Grazie per la pazienza
Boiler
====== Codice ==========
        PROCESSOR       12F675
        RADIX           DEC
        INCLUDE         "P12F675.INC"
        ERRORLEVEL      -302
        ;Setup of PIC configuration flags
        ;XT oscillator
        ;Disable watch dog timer
        ;Enable power up timer
        ;Disable code protect
        __CONFIG        0x3FF1
        ;Reset Vector
        ;Start point at CPU reset
        ORG     0x00
	clrf	GPIO
        movlw   H'0007'
        movwf   CMCON
        bsf     STATUS,RP0		;bank 1
        movlw   B'00101011'
        movwf   TRISIO
	clrf	ANSEL
        bcf     STATUS,RP0		;bank 0
	bsf	GPIO,2
	bsf	GPIO,4
	END

 Lo sapevo... ho appena iniziato e gia' ho problemi.
Prima cosa la configuration word non e' quella adatta per un 12F675 ma, a
quanto vedo, per un 16F84 con quarzo esterno. La prima domanda e' quindi:
come vuoi usare il 12F675? Con quarzo ext o con oscillatore interno? Il pin
mclr (GP3) vuoi che svolga la funzione di reset esterno o di normale pin
I/O?
Nell'ipotesi di voler usare il pic nel modo piu' elementare, senza quarzi
esterni ma con tutti i 6 pin usabili come ingressi/uscite, nessuna
protezione della memoria, wdt disattivo la _CONFIG deve essere
xx000110000100B. I 2 bit xx sono chiamati bandgap calibration bits e
andrebbero letti prima di programmare il pic la prima volta e impostati
sempre in quel modo, non so bene a cosa servano ma non avendo fatto questa
operazione li metto semplicemente a 0.
L'impostazione dei registri all'accensione dipenda da registro a registro,
il GPIO non viene inizializzato per cui contiene valori casuali. L'ANSEL non
serve azzerarlo. Il programma non puo' semplicemente finire con l'END
perche' il micro prosegue comunque, o si mette un loop senza fine (ad
esempio GOTO $) che salta a se stesso o un'istruzione SLEEP (che ferma tutto
ma mantiene attive le linee di I/O nell'ultimo stato in cui erano).
         PROCESSOR       12F675
         RADIX           DEC
         INCLUDE         "P12F675.INC"
         ;Setup of PIC configuration flags
         ;oscillatore interno (GP4/GP5=I/O)
         ;Disable watch dog timer
         ;Enable power up timer
         ;Disable code protect
         __CONFIG  00000110000100B
         ORG     0
         clrf    GPIO
         movlw   7
         movwf   CMCON
         bsf     STATUS,RP0 ;bank 1
         movlw   00101011B
         movwf   TRISIO
         bcf     STATUS,RP0 ;bank 0
         bsf     GPIO,2
         bsf     GPIO,4
         goto    $
         END

 Lo sapevo... ho appena iniziato e gia' ho problemi. Me l'aspettavo.
Premesso che non ho MPLAB in ufficio, perchè non cominci da un file template del pic che stai usando ?
Cerca un po', la cartella si chiama TEMPLATE, e se ci navighi un po' dovresti trovare il tuo file.
Vedrai che almeno il primo passo lo fai con le scarpe comode.
Saluti
--
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere via mail)

 xx000110000100B.
Ho fatto cosi'. Il programma funziona perfettamente.
Grazie mille per il chiarimento e per la segnalazione del loop necessario
alla fine.
So che queste domande da principiante scocciano un po' (sono sempre le
stesse). Vi prometto pero' che prima di assillarvi cerchero' di venire a
capo dei problemi da solo.
Ciao Boiler
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Premesso che non ho MPLAB in ufficio, perchè non cominci da un file template
del pic che stai usando ?
Fin'ora non avevo usato MPLAB, quindi non ho visto questi templates, ma
vado sicuramente a cercarmeli.
Grazie


vado sicuramente a cercarmeli.
se hai fatto l'installazione completa di MPLAB i templates già li hai
sul PC

 venire a capo dei problemi da solo.
Fin che sono robette semplici ;) Ho come il sentore che i prossimi saranno:
- come faccio a indicizzare la ram con un puntatore?
- come faccio a fare una tabella dati in rom?
- perche' leggendo la tabella dopo aver aggiunto qualche istruzione da
tutt'altra parte va tutto in crash mentre prima funzionava? ;)
Claudio F... e lo spettro del PCLATH

 Claudio F... e lo spettro del PCLATH
C'e' da dire che conosco (alla buona) l'assembler del MIPS R3000, quindi
se PCLATH e' la latenza per cui dopo un jump viene eseguita ancora
l'istruzione successiva, allora so cos'e' ;-)


 cos'e' ;-)
No, e' peggio. E'un registro che specifica il valore che deve assumere la
parte alta del program counter quando viene effettuata un'operazione manuale
che lo coinvolge come destinazione, o quando si esegue una CALL/GOTO. Quando
si fa una modifica manuale al program counter, ad esempio sommando un valore
a PCL, non viene gestito l'overflow sugli 8 bit, per cui quelli piu'
significativi dell'indirizzo vanno impostati "a mano" scrivendoli nel PCLATH
prima di modificare la parte bassa....
Nel caso in cui il programma non ecceda le 2048words E si usino tabelle dati
contenute entro i primi 256 bytes della rom ci si puo' dimenticare del
PCLATH (che all'accensione e' azzerato), in caso contrario (CALL/GOTO oltre
i 2k, o tabelle in punti qualsiasi) va opportunamente settato.
Claudio F

 ... SNIP ...
Capito (penso...).


Capito (penso...).
tanto se utilizzi i pic piccolini...
non ti dovrai scontrare con il problema

 non ti dovrai scontrare con il problema
Sempre che non usi delle lookup tables al di fuori dei primi 256 indirizzi
di programma.
Claudio F

di programma.
infatti 
ricordo che....
uno dei miei primi programmi su un pic 16c84 usava una tabella per la
gestione di una tastiera per pc
e...
per capire il perchè di salti strani sul programma..
sono diventato pazzo!
poi ho risolto andandomi a vedere la program memory e posizionando
l'inizio della tabella in un punto adeguato.
Cmq....
risolsi continuando ad ignorare il PCLATH
:-)

 sono diventato pazzo!
Invece io mi ci sono scontrato proprio al primo programma (dopo aver provato
l'immancabile blink led di Tanzilli naturalmente) con una tabellona di quasi
1k con valori per suonare un motivo musicale... e ho chiesto aiuto qui sul
ng... era il 21 gennaio 2001: 
http://snipurl.com/k02v
 ;)
Claudio F