Forum: Mikrocontroller und Digitale Elektronik 8-Bit Wert in 7-Bit umwandeln (von AVR A/D-Wandler)


von Steven (Gast)


Lesenswert?

Hallo,
wie kann ich einen 8-Bit Wert in 7-Bit umwandeln bzw. runterrechnen in 
Assembler. Der Wert kommt vom Analogeingang der ATmega8. Oder kann ich 
den A/D-Wandler direkt auf 7-Bit einstellen???

von morph (Gast)


Lesenswert?

einfach einmal right-shift machen :)

das geht in assembler ganz einfach

von stettberger (Gast)


Lesenswert?

In C waer es dieses:

(value >> 1)

von Gast (Gast)


Lesenswert?

Das shiften ist am schnellsten. Man könnte aber auch durch 2 teilen.

von Steven (Gast)


Lesenswert?

Danke für die Antworten,

hab jetzt die Bits um eine Position verschoben und bekomme auch einen 
Maximalwert von 127.
Nur leider wird, bis das Poti zu 90% aufgedreht ist, nur ein Wert von 0 
gesendet und die letzten 10% bewirken eine Änderung.

von lightninglord (Gast)


Lesenswert?

Das hört sich verdächtig nach einem logarithmischen Poti an, oder war 
die Änderung vor der Programmänderung linear, am besten mal mit einem 
Multimeter den Widerstand messen und gleichmäßig drehen, dann sieht man 
sofort on das Poti linear oder logarithmisch ist

von spess53 (Gast)


Lesenswert?

Hi

>Nur leider wird, bis das Poti zu 90% aufgedreht ist, nur ein Wert von 0
>gesendet und die letzten 10% bewirken eine Änderung.

Das Ergebnis des AD-Wandlers besteht aus 2 Werten ADCL und ADCH. Wenn du 
nur 7 Bit brauchst solltes du erstmal das ADLAR-Bit in ADMUX setzen. 
Damit wird das Ergebnis linksbündig (die oberen 8 Bit in ADCH) 
ausgegeben. Wenn du dann ADCH ausliest und 'shr' machst bekommst du dein 
Ergebnis.

MfG Spess

von Matthias L. (matze88)


Lesenswert?

ich wäre für lsr statt shr...

von Steven (Gast)


Lesenswert?

> Das hört sich verdächtig nach einem logarithmischen Poti an, oder war
> die Änderung vor der Programmänderung linear, am besten mal mit einem
> Multimeter den Widerstand messen und gleichmäßig drehen, dann sieht man
> sofort on das Poti linear oder logarithmisch ist

Die Änderung war schon vor der Programmänderung nicht linear. Hab jetzt 
mit einem Multimeter gemessen und bekomme gleichmäßige Werte beim 
Drehen.

von spess53 (Gast)


Lesenswert?

HI

>ich wäre für lsr statt shr...

Stimmt, war gedanklich in der falschen Programmiersprache.

MfG Spess

von Steven (Gast)


Lesenswert?

Hab den Fehler gefunden, hatte die Bits für Port C am Anfang des 
Programms noch auf Ausgang gesetzt. Da hängt das Poti dran :-) Vielen 
Dank!

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.