Vai al contenuto
PLC Forum


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


Neway

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

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

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