12 Bit ADC 128D818 an AtMega328

Gast #4934724
Lesenswert?

Hallo,
ich versuche zurzeit einen 12Bit I2C ADV (ADC128D818 von TI)an einem 
AtMega328 zum Laufen zu bekommen. Nach einigen Schwierigkeiten mit der 
I2C Kommunikation funktioniert diese nun. Leider habe ich nun einige 
Probleme bei der Konvertierung der beiden 8Bit Werte in einen 16 Bit 
Wert und danach in einen Spannungswert. Ich empfange zwei 8 Bit werte 
"val1 und val2)welche ich als uint8_t deklariert habe.
Bei val1 setzte ich die oberen 4 Bits auf Null. Anschließend setzte ich 
die 2 8Bit werte durch schieben zu einem 16 Bit Wert zusammen. 
Anschließende Ausgabe sieht aber nicht wie gewünscht aus. Wenn die 
oberen Bits null sind werden diese "abgeschnitten" und damit stimmt der 
Wert nicht. ich hoffe mir kann hier jemand helfen. Bin nicht sooo der 
Software Mensch.
1
uint8_t val1, val2;;
2
int Sekunde, Minute, Stunde, Tag, Monat, Jahr;
3
uint16_t Messwert;
4
float Messwert_mV;
5
...
6
ret = i2c_start(0b00111010);      
7
i2c_write(0b00100001)
8
i2c_rep_start(0b00111011); 
9
val1 = i2c_readAck();
10
val2 = i2c_readNak();
11
val1 &= ~((1 << 7) | (1<<6)| (1<<5)| (1<<4) );
12
Messwert = ((val1<<8)|val2);
13
itoa(Messwert, uart_string, 10); 
14
lcd_clear();
15
lcd_home();
16
lcd_string(uart_string);
17
Messwert_mV = (Messwert*2.56/4095.0*1000.0);
18
lcd_setcursor( 0, 2 );
19
itoa(Messwert_mV, uart_string, 10); 
20
lcd_string(uart_string);
21
i2c_stop();

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren