www.mikrocontroller.net

Forum: Compiler & IDEs Casten von uint16_t zu uint8_t


Autor: Matthias Henze (klaus2000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich möchte aus dem internen ADC vom ATMEGA16 (10 Bit breit),
welchen ich in eine uint16_t gelesen habe,
mit Informationsverlust in ein uint8_t lesen.
uint16_t test;
uint8_t result;

uint16_t ReadChannel(uint8_t mux)

test = ReadChannel(1);

result = (uint8_t) test >> 2;

Kann dies leider im Augenblick nicht testen?!

Die Unterschiede "zwischen" zwei Werten soll somit bei
4 liegen.


Leider kann ich mich nicht besonders artikulieren,
falls einer nicht genau verstanden hat was ich möchte,
bitte nachfragen

Danke
Matthias

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann den ADC auch so einstellen, dass das Ergebnis linksbündig in 
die ACDH/L-Register geschrieben wird. Dann kann man ADCH auslesen, ADCL 
verwerfen, und erhält sofort den 8bit-Wert.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, so wie Du es oben schreibst, müsste es gehen. Aber Du machst es Dir 
unnötig kompliziert, wie Uwe schon sagt. Setz das ADLAR-Bit im 
ADMUX-Register und lies nur das High-Byte aus (direkt in eine 
8-Bit-Variable).

Autor: carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. schrieb:
> Ja, so wie Du es oben schreibst, müsste es gehen. Aber Du machst es Dir
> unnötig kompliziert, wie Uwe schon sagt. Setz das ADLAR-Bit im
> ADMUX-Register und lies nur das High-Byte aus (direkt in eine
> 8-Bit-Variable).

Hallo,

ich bin ein absoluter Anfänger und hab ein Frage. Ich hab soweit alles 
versatanden mit "Das Ergebnis linksbündig schreiben und ADCH 
auslesen"... was ich noch nicht verstanden habe ist folgendes: Wenn ich 
den 10 Bit Wert (ADC) auslese kann ich mit folgender Formel:
Vin = ADC * (Vref/1024)
bestimmen ob das Ergebnis richtig ist. Wie ist es nun im Falle wo ich 
nur den High Byte benutze? ändert sich da was in der Formel (Da ich 
quasi mit einer 8Bit Auflösung umsetze)?

Danke
Carlos

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was glaubst du wo 1024 her kommt ?

>> 8Bit Auflösung

ist dann ?

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd N schrieb:
> Was glaubst du wo 1024 her kommt ?
>
>>> 8Bit Auflösung
>
> ist dann ?

Danke für die Antwort Bernd N

dann sind es wohl 256 [ Vin = ADC * (Vref/256) ]. jetzt kommt aber meine 
nächste Frage: Wie beeinflusst diese Maßnahme meinen Ergebnis jetzt 
abgesehen vom Quantisierungsfehler? wohlwissend, dass bei meiner Messung 
8Bits ausreichend sind.

Zum Testeb hab ich mir vorgenommen einen Poti am ADC-Eingang 
einzuschalten und dann die Messwerte vergleichen...

Danke
Carlos

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da würde ich noch Klammern setzten:

result = (uint8_t) (test >> 2);

Zuerst rechts schieben und erst dann auf 8 Bit casten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn er nach über 3 Jahren die Klammern noch nicht richtig hat, dann 
wird das wohl nichts mehr.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stell dir vor, der rätselt jetzt schon drei Jahre rum.
Warum soll man ihn  nicht wenigstens jetzt erlösen?

Oder jemand schreibt das ab und wundert sich...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hehehe Hab völlig übersehen, dass hier wieder mal ein Uralt-Thread 
ausgegraben wurde!

Ich liebe Aerchologie...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.