Vai al contenuto
PLC Forum


Scrittura Eeprom


sjpagan

Messaggi consigliati

Ciao a tutti, Sono subito a chiedere aiuto, mi sono impantanato sulla scrittura di una Eeprom, allego il codice cosi mi spiego meglio

' * Test configuration:

' MCU: PIC16F876

' Dev.Board: EasyPIC3

' Oscillator: HT, 4.000 MHz

' Ext. Modules: None

' SW: mikroBasic v5.0 or higher

program prova2

dim dad,dad1,dad2 as byte

TRISB = %00000000 'CONFIGURAZIONE OUTPUT LED

TRISC = %11110000 ' CONFIGURAZIONE OUTPUT LED + PULSANTI

TRISA = %11111111

main:

x:

if PORTA = 0 then

goto x

else

dad = Eeprom_Read($00)

if dad = 0 then

Eeprom_Write($00,1)

dad1=Eeprom_read($00)

end if

if dad = 1 then

Eeprom_Write($00,0)

dad2=Eeprom_read($00)

end if

end if

goto x

end.

il problema è questo quando porta0 (con il debugger per prova la metto io a 1) diventa 1 legge nell'Eeprom loc.00 con dad se dad = 0 mette la locazione a 1, dad1 e dad2 sono solo per leggere la locazione, e ripete il ciclo, ripetendo il ciclo dad diventa 1 perchè legge la loc. di memoria che è diventata 1 e quindi dad diventa 1, a questo punto dovrebbe scrivere nella loc. di memoria 0 con il secondo IF ma mi si pianta e con il debugger vedo che scorre sempre nella memoria è non esce dal ciclo, non sò spiegarmi il perchè.

Qualche anima buona saprebbe dirmi perchè è come posso fare per uscire da questo empasse.

In effetti mi servirebbe che quando PORT0 sia 1 la locazione di memoria della Eeprom diventasse 0 se è 1 oppure 1 se è 0.

ringrazio in anticipo salute a tutti SjPagan In lacrime wallbash.gif

Link al commento
Condividi su altri siti


io controllerei due cose

se c'è ed è disbailitato il watchdog.

altro dubbio sei sicuro che puoi mettere eeprom_read subito dopo la eeprom_write. Quando scrivi in eeprom c'è un tempo min di attesa (qualche ms) prima di fare nuovi accessi,

Link al commento
Condividi su altri siti

Ciao accacca, grazie per avermi risposto, il watchdog non è abilitato, il dubbio che mi hai fatto venire e proprio l'attesa dalla scrittura alla lettura, ho controllato ed in effetti c'è un tempo di attesa per la scrittura e la relativa lettura, quindi appena dopo Eeprom_Write(), tutt'è due, ho inserito un delay_ms(30).

Per il primo write, non ci sono problemi perchè anche precedentemente non dava blocco, mentre per il secondo è sempre la stessa cosa.

Ho inserito il delay_ms() anche dopo la lettura ma è la stessa cosa.

nella finestra del debugger, scorrendo con F8 quando si posiziona sulla riga del secondo Eeprom_Write(0,1), andando avanti, in fondo alla finestra compare una linea gialla con questi dati

PC=0.0000xx Time=xxx,xx ms dove le X sono scorrevoli ed il tempo incrementa sempre

Si pianta li è non va avanti con il debugger, fosse un bug del programma.

cosa mi consigli?

Ti ringrazio per una futura risposta a rileggerci SjPag. wallbash.gif

Modificato: da sjpagan
Link al commento
Condividi su altri siti

purtroppo non uso pic e non conosco i sistemi di sviluppo possiamo scambaire qualche idea nella speranza che intervenga uno dei guru su pic.

se ho ben capito non esegue correttamente il secondo write sulal eprom fammi sapere senza che io scriva cose fantasiose che sarebbero poi puntualmente smentite. Puoi dare qualche dettaglio sulla eeprom

vedi che scorre sempre nella memoria puoi capire dagli indirizzi in che zona del progrmma gira. Aiutati con il map file del compialtore per capire dove sono messe le procedure

Link al commento
Condividi su altri siti

Domani farò un'altra prova, con la versione che usavo prima "mplab ide " usare il wdt era semplice ma ora con questo nuovo assemblatore le cose cambiano un pò.

Una volta attivato vedrò cosa cambia.

Ho un'altro piccolo dubbio, potrebbe essere la configurazione dei bit che da problemi?

magari non viene caricata correttamente...

Tu ne sai qualcosa su come fare e cosa attivare di preciso?

Grazie e a presto senzasperanza.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...