Vai al contenuto
PLC Forum


Eeprom - tasto per scrivere su eeprom


loresilmi

Messaggi consigliati

Buona sera a tutti, Vi posto un problema che non riesco a risolvere:

Pic 16f876a. Ho scritto un programmino per leggere i dati da un gps che funziona

perfettamente. Ora volevo salvare, con comando a pulsante, i dati che in un certo

momento mi interessano, nella eeprom: Vi allego la parte di programma interessata.

Programmo con mikrobasic pro. Ho provato in diversi modi:libreria bottom, sub procedura etc. ma senza risultato.La parte di scrittura su eeprom non ne vuole sapere.La parte di lettura funziona bene.Se inverto "if porta.0 = 1 in if porta.0 = 0"

mi scrive la eeprom e se richiesto la legge.

Con un tester ho verificato la presenza di tensione al pigiare del tasto.

while true

if porta.0 = 1 then

for i = 22 to 62

eeprom_write($00+i, (out[i]))

next i

end if

porta.0 = 0

if porta.1 = 1 then

delay_ms(100)

lcd_out(2,1,"LAT: ")

for i = 22 to 32

a[i] = eeprom_read($00+i)

lcd_chr_cp(a[i])

delay_ms(50)

next i

lcd_out(1,21,"LONG: ")

for i = 34 to 45

a[i] = eeprom_read($00+i)

lcd_chr_cp(a[i])

delay_ms(50)

next i

lcd_out(1,1,"pos. del:")

for i = 57 to 62

a[i] = eeprom_read($00+i)

lcd_chr_cp(a[i])

delay_ms(50)

next i

while porta.1 = 1

wend

delay_ms(5000)

end if

goto inizio

wend

Dove sbaglio ? Grato a chiunque possa darmi una mano.

loresilmi

Link al commento
Condividi su altri siti


Non conosco microbasic, uso solo asm microchip e "C" della CSC.

Scrivere nella EEPROMP non è difficile se si fanno le cose correttamente. Purtroppo sono in vacanza e non posso allegarti la funzione di scrittura. Prova a ricercare sul webb le functions di scrittura EEPROM, potresti usarle per capire come si fa.

Propbabolmente la sub eeprom_write($00+i, (out)) non è usata correttamente, oppure manca di qualche cosa.

Link al commento
Condividi su altri siti

Gentilissimo Livio Orsini, grazie per la cortese e rapidissima risposta al mio quesito

anche perchè come hai detto sei in ferie.

Purtroppo non è la sintassi della scrittura su eeprom il problema. Se nel programma

elimino il while true e if porta.0 = 1 e connessi , la eeprom viene scritta correttamente solo che viene scritta ogni volta che ricevo una frase

dal gps con vita breve per il pic: mi sembra 1000000 di scritture.

Io sono appassionato di pesca e il giochino del gps mi servirà per poter tornare

in modo preciso su un luogo di pesca favorevole, il pulsante ha questo scopo.

Quello che forse mi inganna è che il secondo pulsante su porta.1 funziona ovvero

mi legge la posizione memorizzata su eeprom. Perchè il secondo pulsante si ed il

primo no ? La costruzione sintattica è la stessa.

Lieto di averti conosciuto

loresilmi

Link al commento
Condividi su altri siti

Controlla la doc della eeprom la scrittura richiede tempo (qualche millisecondo) non pui scrivere i dati così come lil eggi devi scrivere aspettare e poi scrivere il successivo Probabilmente c'è un registro di stato dove puoi leggere al fine scrittura

Prova a scrivere così

eeprom_write($00+i, (out))

Delay_ms(10) ;

Link al commento
Condividi su altri siti

Grazie Accaacca, ciò che dici è vero ma non cambia nulla.La eeprom viene scritta

se non uso i tasti. Ho pensato ad un difetto della porta.0. ho spostato i tasti su

porta.1 per la scrittura e porta.2 per la lettura. Il risultato è che adesso scrive al

pigiare del tasto 1 e non legge al pigiare del tasto 2. Un buco nero! Come avrete

capito sono un sub novizio nella materia.

while tru accetta al suo interno due if?

Vi allego il main del programma magari è li che ho commesso uno strafalcione. Pare

quasi che un tasto annulli l'altro.

CLEARBIT(INTCON,PEIE)

CLEARBIT(INTCON,GIE)

CLEARBIT(INTCON,RBIE)

SETBIT(RCSTA,SPEN)

CLEARBIT(RCSTA,RX9)

SETBIT(RCSTA,CREN)

CLEARBIT(TXSTA,TX9)

SETBIT(TXSTA,TXEN)

CLEARBIT(TXSTA,SYNC)

SETBIT(TXSTA,BRGH)

CLEARBIT(PIE1,RCIE)

CMCON = CMCON or 0x07

ADCON1 = ADCON1 or 0x0F

TRISA.0 = 1

trisa.1 = 1

trisa.2 = 1

PORTA = 0

TRISB = 0

PORTB = 0

TRISC.7 = 1 ''INPUT RX

TRISC.6 = 0 ''out TX

PORTC = 0

Grazie per la cortesia

loresilmi

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