Forum: Mikrocontroller und Digitale Elektronik Atmega8 ADC in ascii


von Philipp H. (finno1990)


Lesenswert?

Hallo, ich beschäftige mich gerade mit der AD Wandlung von 2 
Phototransistoren die mir ihren Wert über den UART an mein Hyperterminal 
senden.
Zeichen über den UART senden geht wunderbar.

Folgendens Problem. ich möchte die 10 Bit ADC gewandelten Wert an über 
meinen Uart senden. Den ADC gewandelten Wert möchte ich in ASCII 
umwandeln und weiß leider nich wie ich das hinbekommen kann.

ldi R16, (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1)
out ADCSRA, R16

ADC für linken Phototrans.:
ldi R16, (1 << REFS0)|(1 << MUX0)|(1 << MUX1)|(1 << ADLAR);
out ADMUX, R16

ADC für rechten Phototrans.:
ldi R16, (1 << REFS0)|(1 << MUX1)|(1 << ADLAR);
out ADMUX, R16

sbi ADCSRA, ADSC ; start conversion

in R16, ADCH; gewandelter Wert in R16

sbi ADCSRA, ADSC; eine neue Wandlung gestartet werden…

von Karl H. (kbuchegg)


Lesenswert?

Dann studier mal das
AVR-Tutorial

Zufällig enthält genau der Abschnitt über den ADC den Teil, der dir 
Probleme bereitet: Code, der eine Zahl in Textform umwandelt und auf der 
UART ausgibt.

AVR-Tutorial: ADC

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Möchtest du das hexadezimale Ergebnis in ASCII senden oder eine 
Dezimalzahl?
Für die hexadezimale Zahl kannst du jedes Nibble (Halbbyte) in ASCII 
dadurch umwandeln, das du einfach für die Ziffern 0 bis 9 den Wert 0x30 
dazu addierst, für A-F addierst du (0x41 - 0X0A) = 0x37 dazu.

von Philipp H. (finno1990)


Lesenswert?

Ja das Tutorial hab ich mir auch schon angesehen. Mir ist leider unklar 
warum sie Das in ein 24 Bit breites Akkuregister bilden.
Möchte ja nur den Aktuellen Wert welcher mir mein Transisor liefert in 
eine lesbare Dez umwandeln.
Mit fällt es schwer dabei ein 10 bit register ADCH und ADCL an meinen 
UART zu geben. Er kann mir nur ein Register mit 8 bit senden

von Karl H. (kbuchegg)


Lesenswert?

Philipp Holder schrieb:
> Ja das Tutorial hab ich mir auch schon angesehen. Mir ist leider unklar
> warum sie Das in ein 24 Bit breites Akkuregister bilden.

Weil dort 256 ADC Ergebnisse aufsummiert werden um daraus den Mittelwert 
zu bilden.

> Möchte ja nur den Aktuellen Wert welcher mir mein Transisor liefert in
> eine lesbare Dez umwandeln.

Ja. Der Code ist da ja drinnen.
Studieren und verstehen, wie das Prinzip funktioniert.
Im Abschnitt über das LCD müsste es einen ähnlichen Code geben, der 
zeigt wie man eine Zahl in Registern in 'Textform' aufbereitet um den 
Text auszugeben. Dort wird halt aufs LCD geschrieben, hier auf den UART. 
Aber das Prinzip "Umwandlung einer Zahl in Textform" ist da wie dort 
dasselbe. Und dieses Prinzip gilt es zu verstehen.

Programmieren besteht nicht darin, dass man sich im Web immer nur 
Programm runterlädt, die 100% genau das tun, was man will.

von Philipp H. (finno1990)


Lesenswert?

Natürlich da geb ich dir völlig recht.
Ist auch nicht meine absicht das prinzip copy paste.
Möchte mir anreize holen meinm  Problem lösen zu können.
Bin an diesem Problem schon sehr lange dran

von M. K. (sylaina)


Lesenswert?

Philipp Holder schrieb:
> Er kann mir nur ein Register mit 8 bit senden

UART kann immer nur 8 Bit Wortlänge senden, nicht mehr. Da dein ADC-Wert 
10 bit groß ist musst du zwei mal senden und an der Empfangsstelle alles 
wieder sinnvoll zusammen fügen ;)

von Karl H. (kbuchegg)


Lesenswert?

Michael Köhler schrieb:
> Philipp Holder schrieb:
>> Er kann mir nur ein Register mit 8 bit senden
>
> UART kann immer nur 8 Bit Wortlänge senden, nicht mehr. Da dein ADC-Wert
> 10 bit groß ist musst du zwei mal senden und an der Empfangsstelle alles
> wieder sinnvoll zusammen fügen ;)

Er will es als Text ausgeben, was ja durchaus auch vernünftig ist.
Und die Techniken dazu (gibt ja mehrere) muss man eben auch mal lernen. 
Ohne grundlegende Algorithmen kommt man in der Programmierung nun mal 
nicht weit.

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.