Newsgroup: it.hobby.elettronica.digitale
Titolo: Eeprom pic

Ho un nuovo problema con i pic.
Sto cercando di usare la Eeprom del 16f84a (a 20 Mhz) sia in lettura che
in scrittura. Il programma in origine viene eseguito correttamente ma se
nel listato inserisco le due subroutine della Eeprom mi si inceppa il pic
o comunque non funziona correttamente.Attenzione sto parlando solo di
inserire le sub nel programma e non di richiamarle e eseguirle (ecco la
cosa strana!).
Ho provato sia a metterle per ultime nel listato che per prime ma non mi
cambia nulla.Se le elimino, invece, mi funziona tutto di nuovo.
La cosa che non capisco è perchè mi diano dei problemi, ammesso che ci
siano degli errori, anche se non vengono richiamate.Se volete darci uno
sguardo mi farebbe molto piacere, io ci sto uscendo scemo tutto il
pomeriggio.
Grazie.
scrivi	
	movlw	0		;locazione di memoria
	movwf	EEADR
	movf	num1,0		; dato
	movwf	EEDATA
 
        bsf	STATUS,RP0
	bsf	EECON1,WREN
	movlw	55h
	movwf	EECON2
	movlw	170
	movwf	EECON2
	bsf	EECON1,WR
attendi	btfsc	EECON1,WR
	goto	attendi
	bcf	STATUS,RP0
	return
leggi
	movlw	0		;locazione di memoria
	movwf	EEADR
	movwf	num1
	bsf	STATUS,RP0
	bsf	EECON1,RD
	bcf	STATUS,RP0
	movf	EEDATA,0
	return
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Sto cercando di usare la Eeprom del 16f84a (a 20 Mhz)
[CUT]
Ma il massimo per il 16F84 non e' 10MHz?

> Ma il massimo per il 16F84 non e' 10MHz?
No, il pic che tengo io è PIC16F84A-20/P.
Quel 20 è la frequenza massima del quarzo.In effetti se guardi sul data
sheet alla tabella della selezione oscillatore c'è anche 20 Mhz
(impostazione ad HS).
Gaetà


 (impostazione ad HS).
Ah, ok! Mi ero sbagliato. Grazie dell'informazione :-)


Ci sono altre funzioni che richiami nel tuo programma? E poi se non ricordo
male ogni label non va indicata come
NomeLabel:
??
Nel listato che hai postato non vedo i due punti, che opzioni usi per il
compilatore?
Hai attivato la visualizzazione degli errori?

 Hai attivato la visualizzazione degli errori?
Di funzioni particolari non ne uso, a parte una tabella per la gestione di
4 display a sette segmenti.
I due punti al nome della label....mi č nuova, almeno con gli st6 non si
usava e guardando altri esempi scritti per pic non ne vedo traccia.
L'Mpasm ce l'ho settato tutto su default.
Con IcProg uso solo il PWRT. Niente WD o CP.
Quando compilo mi si generano otto messaggi di questo genere relativo a
ogni volta che vado a toccare il STATUS,RP0 per cambiare banco ma li
sopprimo mettendo nel listato errorlevel -302.Non penso sia essenziale.
Register in operand not in bank 0.  Ensure that bank bits are correct.
Cavolo mi sto impallando!
Gaetą


Novità....siccome sono sicuro che le sub sono scritte correttamente ho
diviso il programma in due blocchi e ho caricato nel pic prima solo il
primo blocco.Testato...funziona tutto.Poi ho caricato solo il secondo
blocco e mi va una meraviglia, funziona anche la lettura/scrittura Eeprom.
Se invece carico entrambe i blocchi il pic mi va in panne.
Ma non è che ho problemi di locazioni di memoria? Le 1024 word di memoria
programma non sono tutte su un unico banco?
Con IcProg vedo che arrivo alla locazione 012Eh, praticamente occupo solo
302 word.
Aiutatemi non mi ci raccapezzo più!
Gaetà


ciao
 sei sicuro di aver selezionato i banchi  di  memoria ram correttamente
prima di  effettuare una qualsiasi operazione su  un dato registro ??

 Cavolo mi sto impallando!
Ci posso scommettere quello che vuoi, quando troverai l'inghippo ti morderai
le mani e ti chiederai come hai fatto a non pensarci prima!

 prima di  effettuare una qualsiasi operazione su  un dato registro ??
Banchi di memoria ram?Faccio così, penso di non sbagliare, correggimi
eventualmente.Grazie
ORG 0CH
riservo 26 variabili(di 68 disponibili)
ORG 00H
da qua in poi programma principale, subroutine varie e infine tabella.


Praticamente ho sostituito la tabella per l'assegnazione dei
segmenti-display con una routine vera e propria:
Al posto di questo:
segmenti
	addwf	PCL,1   ; W contiene la cifra da visualizzare
	retlw	183	;cifra 0
	retlw	18	;cifra 1
	retlw	103	;cifra 2
	retlw	118	;cifra 3
	retlw	210	;cifra 4
	retlw	244	;cifra 5
	retlw	245	;cifra 6
	retlw	22	;cifra 7
	retlw	247	;cifra 8
	retlw	246	;cifra 9
ho messo questo:
segmenti
 
	movwf	numero    ;W contiene la cifra da visualizzare
	movf	numero,0
	xorlw	0
	btfss	STATUS,Z
	goto	cifra1
	movlw	183
	return
cifra1  ........
Mi sa che mi è sfuggito qualcosa con la gestione delle tabelle.Per caso
quello che con gli ST6 era il .block 64-$%64?
Sono gradite illuminazioni.
Gaetà
