Hallo. Ich bin ein vollkommener noob wenn es um hardware geht. Lerne das alles gerade in einem kurs. nun meine Frage. Also ich möchte ein kleines Thermometer basteln: sprich; themperatursensor => AT mega8 liest wert aus => gibt ihn auf dem LCD aus. Nun meine Probleme: 1. Ist schon ma die 10bit vom ADC (also mehr als ein byte) ein problem für mich. Wie kann ich diesen wert in einen Dezimalwert umwandeln?? also z.B. aus den 1024 möglichkeiten 256 machen(das es in ein register passt) also das ich 4 ADC stufen in eine zusammenmach. => ich hab eine Dezimalzahl, die ich auf einem LCD ausgeben kann. IUch finde die 10bit nämlich sehr störend, und blick damit garnicht durch. Könnt ihr mir helfen: 1. das zu verstehen wie ich das mache? 2. Vllt eine kleine "einfache" routine als Beispiel reinstellen(schön mit kommentaren), mit der man genau das verwirklichen kann? also das ich quasi meinet wegen die zahl habe 0b00000011 00101101 die 2 register dann in der roputine angebe, und er mir im register r20 z.B. den Dezimalwert ausgibt. Ich finde mehr als 8 bit äußerst umständlich, und komme als Jugendlicher nicht so wirklich damit zurecht. Schon ma danke im vorraus Daniel
Hallo Daniel, der Atmega hat einen Modus für den ADC in dem er nur die 8 höher Signifikanten Bits vom ADC zur Verfügung stellt. Dann brauchst du nicht umrechnen/Bits schieben. Hierzu findest du bestimmt eswas in diesem Forum. Gruß Stefan
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC ADLAR 0 Das Ergebnis wird in den Registern ADCH/ADCL rechtsbündig ausgerichtet. Die 8 niederwertigsten Bits des Ergebnisses werden in ADCL abgelegt. Die verbleibenden 2 Bits des Ergebnisses werden im Register ADCH in den Bits 0 und 1 abgelegt. 1 Das Ergebnis wird in den Registern ADCH/ADCL linksbündig ausgerichtet. Die 8 höchstwertigen Bits des Ergebnisses werden in ADCH abgelegt. Die verbleibenden 2 niederwertigen Bits werden im Register ADCL in den Bits 6 und 7 abgelegt.
MarioT hat es ja schon gut erklärt, wie man ganz einfach die 8Bit bekommt. Setze also ADLAR auf 1 und nimm dir dann die 8 höchstwertigen Bits aus ADCH. Die beiden letzten Bit kann man in der Regel weglassen, wenn einem die 8Bit Genauigkeit ausreichen. In einem Temperaturbereich über 128°C hättest du immernoch 0,5°C Genauigkeit. Temperaturbereich weiter eingrenzen -> höhere Genauigkeit. Des Weiteren ist das mit dem Umrechnen bei Temperatursensoren immer so ein Ding. Ich bevorzuge da Sensoren wie DS18S20, die ihre Daten direkt in Bits und Bytes ausspucken.
daniel schrieb:
> umständlich, und komme als Jugendlicher nicht so wirklich damit zurecht.
Nichts desto trotz solltest du aber trotzdem den Umgang mit 16 Bit
Zahlen lernen. So schwer ist das nicht. Anstelle von einem Register, ist
die Zahl dann eben über 2 Register verteilt. Möchte man mit der Zahl als
ganzes rechnen, dann muss man die Berechnung so vornehmen, dass beide
Register betroffen sind.Das geht dann meistens nicht mehr mit einem
Befehl, sondern eine Abfolge von Befehlen, die beide Register mit
einschliesst, erledigt das gewünschte.
Im Grunde hast du das schon in der Grundschule gelernt.
Als erstes musstest du das 'Kleine Ein mal Eins' auswendig lernen. Das
sind deine Grundbestandteile, das was dein µC auch mitbringt. Die
einzelne 'Stelle' in deiner Grundschulrechnerei ist das was für den µC
ein Register ist. Und mit dem Kleinen Ein mal Eins und zusätzlichen
'Vorschriften' hast du dann in der Grundschule gelernt, wie man Zahlen
behandelt, die zu grosß für das Kleine Ein Mal Eins sind.
12 * 23
Diese Berechnung kannst du nicht mehr auswendig rechnen. Sie ist zu groß
für deinen Grundvorrat. Aber du rechnest
12 * 23
---------
24
36
---------
276
Du hast nur Dinge benutzt, die dein Grundvorrat hergibt ( 2 * 2 ist 4, 2
* 1 ist 2, 3 * 3 = 6, 3 * 1 = 3, und dann natürlich noch die Additionen
der einzelnen Ziffern). Alles zusammengenommen, hast du nur mit dem
Kleinen Ein Mal Eins und einer Vorschrift etwas berechnet.
also ich danke euch für eure zahlreichen antworten, die sehr hilfreich wahren. Das mit dem Ein mal eins war ein gutes beispiel auch wenn ich darüber in der 9 klasse etwas hinweg bin ;-) also Danke an alle
daniel schrieb: > also ich danke euch für eure zahlreichen antworten, die sehr hilfreich > wahren. Das mit dem Ein mal eins war ein gutes beispiel auch wenn ich > darüber in der 9 klasse etwas hinweg bin ;-) Genau das ist der springende Punkt: Wir alle haben viele Dinge gelernt. Wir sind es uns nur nicht bewusst. Geht es dann darum, das ganze etwas zu formalisieren, heißt es dann oft: Das ist zu schwierig für mich. Einen nicht unerheblichen Anteil von 'Programmierproblemen', die angeblich so waaaaaahnsinnig schwer sind, lösen wir ohne Probleme jeden Tag im Alltag ohne auch nur mit der Wimper zu zucken (und ich rede jetzt nicht von Problemen aus dem Bereich KI. Nein, ganz normale Matheprobleme. 25% von 100 .... äh keine Ahnung. In Prozentrechnung war ich schon immer schwach Du hast 100 Lippenstifte und gibst der Kathi jeden 25-ten. Wieviele gibst du ihr? (kurzes Nachzählen an den Fingern) Na das ist einfach: 4 Bingo!
>also ich danke euch für eure zahlreichen antworten, die sehr hilfreich >wahren. Das mit dem Ein mal eins war ein gutes beispiel auch wenn ich >darüber in der 9 klasse etwas hinweg bin ;-) Es gibt viele, die die Ähnlichkeit vom normalen Rechnen und dem Rechnen mit dem AVR nicht verstehen. Man kann damit auch viel Code sparen. > 25% von 100 .... äh keine Ahnung. In Prozentrechnung war ich schon > immer schwach 25% von 100 ist irgenwo zwischen 24 und 26? Wie teilt man eine 24Bit Zahl durch 256. vieleicht vorher noch aus dem RAM laden.
Florian Schütte schrieb:
> 25% von 100 sind 4???????????
LOL
Ich hab das Beispiel jetzt so oft umgeändert, dass mir dieser Unsinn gar
nicht aufgefallen ist.
MarioT schrieb:
> 25% von 100 ist irgenwo zwischen 24 und 26?
:-) Eine zeitlang hatte ich diese Sig
für sehr große Werte von 1 gilt: 1 + 1 = 3
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.