loresilmi Inserito: 18 luglio 2010 Segnala Inserito: 18 luglio 2010 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 funzionaperfettamente. Ora volevo salvare, con comando a pulsante, i dati che in un certomomento 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 iniziowendDove sbaglio ? Grato a chiunque possa darmi una mano.loresilmi
Livio Orsini Inserita: 19 luglio 2010 Segnala Inserita: 19 luglio 2010 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.
loresilmi Inserita: 19 luglio 2010 Autore Segnala Inserita: 19 luglio 2010 Gentilissimo Livio Orsini, grazie per la cortese e rapidissima risposta al mio quesitoanche perchè come hai detto sei in ferie.Purtroppo non è la sintassi della scrittura su eeprom il problema. Se nel programmaelimino il while true e if porta.0 = 1 e connessi , la eeprom viene scritta correttamente solo che viene scritta ogni volta che ricevo una frasedal 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 tornarein 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 ovveromi legge la posizione memorizzata su eeprom. Perchè il secondo pulsante si ed ilprimo no ? La costruzione sintattica è la stessa.Lieto di averti conosciutoloresilmi
accacca Inserita: 20 luglio 2010 Segnala Inserita: 20 luglio 2010 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 scritturaProva a scrivere così eeprom_write($00+i, (out))Delay_ms(10) ;
loresilmi Inserita: 20 luglio 2010 Autore Segnala Inserita: 20 luglio 2010 Grazie Accaacca, ciò che dici è vero ma non cambia nulla.La eeprom viene scrittase non uso i tasti. Ho pensato ad un difetto della porta.0. ho spostato i tasti suporta.1 per la scrittura e porta.2 per la lettura. Il risultato è che adesso scrive alpigiare del tasto 1 e non legge al pigiare del tasto 2. Un buco nero! Come avretecapito 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. Parequasi 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 0x07ADCON1 = ADCON1 or 0x0FTRISA.0 = 1trisa.1 = 1trisa.2 = 1PORTA = 0TRISB = 0PORTB = 0TRISC.7 = 1 ''INPUT RXTRISC.6 = 0 ''out TXPORTC = 0Grazie per la cortesialoresilmi
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora