Forum: Mikrocontroller und Digitale Elektronik themperatursensor an mega8


von daniel (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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

von MarioT (Gast)


Lesenswert?

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.

von Florian S. (der_picknicker)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von daniel (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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!

von Florian S. (der_picknicker)


Lesenswert?

25% von 100 sind 4???????????

von MarioT (Gast)


Lesenswert?

>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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.