Vai al contenuto
PLC Forum


Dividere in due una variabile a 10 bit - L'ADC dà 10 bit, la EEprom ha celle da 8


Messaggi consigliati

Inserito:

Vi espongo il problema che devo risolvere: In un pic 12F675 ho l'ADC che mi legge un valore che va da 0 a 1024. Vorrei memorizzarlo nella eeprom interna, ma questa accetta solo 8 bit per cella, pari ad un valore da 0 a 255. dovrei quindi spezzare la variabile in 8 + 2 bit, e poi memorizzare ogni pezzo n una cella di memoria diversa, per poi ricomporre il tutto. Come faccio praticamente a spezzare la suddetta variabile?

P.S. Programmo in mikrobasic.

Grazie

Ciao

Adriano


Inserita:

posso suggerirti come fare ma non il codice perchè uso C.

questa sarebbe la routine che ho scritto:

permette di scrivere 1 word usando 2 bytes della eeprom interna

void write_word(BYTE startaddress, long int data)
{
   write_eeprom(startaddress,*(&data));
   write_eeprom(startaddress+1,*(&data+1));
}
in pratica memorizza su startaddress il primo byte di data, che sarebbe *(&data) (l'* e la & sono ad uso puntatori) e poi memorizza nell'indirizzo successivo a startaddress il secondo byte di data ovvero *(&data+1) stessa cosa per la lettura:
long int read_word(BYTE startaddress)
{
   long int output;
   *(&output)=read_eeprom(startaddress);
   *(&output+1)=read_eeprom(startaddress+1);
   return output;
}

i passi da seguire sostanzialmente sono questi:

per la scrittura (supponendo X il byte di partenza nella eeprom e con Y la variabile da memorizzare):

- scrivi su X il byte Y(1)

- scrivi su X+1 il byte Y(2)

per la lettura (stesse supposizioni ma usando Z come variabile di output)

- leggi il byte X contenente Y(1) e mettilo in Z(1)

- leggi il byte X+1 contenente Y(2) e mettilo in Z(2)

- ritorna il valore Z come word (intero lungo per quanto riguarda il C)

spero d'essere stato d'aiuto unsure.gif

Inserita:

Salve

Per chi usa l'assembler la risposta è la seguente:

;***** SubRoutine Write Eeprom ************************************

WriteEeprom

go_bank3

btfsc EECON1,WR

goto $-1

go_bank0

movf eeprom_adr,w

go_bank2

movwf EEADR

go_bank0

movf eeprom_data,w

go_bank2

movwf EEDATA

go_bank3

bcf EECON1,EEPGD

bsf EECON1,WREN

bcf INTCON,GIE

movlw 0x55

movwf EECON2

movlw 0xAA

movwf EECON2

bsf EECON1,WR

bsf INTCON,GIE

bcf EECON1,WREN

go_bank0

return

*******************************

Due Variabili di appoggio

eeprom_adr

eeprom_data

*******************************

La lettura della analogica restituisce già due variabili separate:

ADRESH

ADRESL

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