Forum: Mikrocontroller und Digitale Elektronik 12 Bit ADC 128D818 an AtMega328


von Mark (Gast)


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();

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.