Atmega8 ADC in ascii

OP #3163568
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…
(Firma: matzetronics) #3163592
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.
OP #3163633
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
#3163640
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.
#3163685
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren