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…
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
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.
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
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.
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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.