Hallo, habe ein kleines Problem bei meiner Schaltung möchte ich mit einem Atmega32 (SLAVE) einen mit dem Analogdigitalwandler einen Messwert ermitteln und über den I2C Bus ausgeben. Der Messeingang ist in diesem Fall PA0. Laut Datenblatt hat dieser Eingang einen 10 bit Wandlungsergebnis. Nun kann ich ja mit dem I2C Bus nur 8 Bit übertragen. Ich könnte auch erst ADDH und dann ADDL übertragen und die Werte dann später zusammenfügen, was aber extrem umständlich wäre. Also kann ich irgendwie aus der 10 bit zahl eine 8 bit Zahl machen? Oder gibt es eine andere Möglichkeit?
Massfan schrieb: > Also kann ich > irgendwie aus der 10 bit zahl eine 8 bit Zahl machen? Jap. Den 10bit-Wert durch 4 teilen oder eleganter einfach das Ergebnis links ausgerichtet geben lassen (ADLAR-Bit) und nur das High-Byte abfragen (ADCH). :-)
Aber ein ADMUX-REgister und dort ein ADLAR-Bit, ADC Left Adjust Result. Such mal im Datenblatt, da wirst du es im Abschnitt "ADC: ADMUX – ADC Multiplexer Selection Register" finden.
Ich wußte es, aber ich wusste den richtigen Namen nicht mehr also ADDH und ADDL! ;)
Also wenn ich das richtig verstehe, setzt ich ADLAR = 1 dann werden quasi nur die "weniger wertigen" Bits verschenkt?
Massfan schrieb: > Ich könnte auch erst ADDH und dann ADDL übertragen und die Werte dann > später zusammenfügen, was aber extrem umständlich wäre. Nö, überhaupt nicht. Alle seriellen Busse machen das so (UART, CAN, Ethernet, USB, ...). Peter
Peter Dannegger schrieb: > Alle seriellen Busse machen das so (UART, CAN, Ethernet, USB, ...). Sollte heißen: Alle Byte-orientierten seiellen Busse machen das so. SPI z.B. kann auch längere Worte übertragen... ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.