PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage 2 - ADC des AtMega



Blue72
03.07.2008, 11:51
Hallo,

ich versuche mich grade an dem ADC des ATMega8, doch irgendwie scheitert es an der Berechnung (Denkfehler?) ...

Da der höchste Wert den ich messen möchte 5V ist, muss ja die Referenzspannung ebenfalls VCC betragen, so hab ich das gelesen.
Die Frequenz beträgt 16MHz. Der Scalefaktor muss 128 sein damit ich
in dem Bereich zwischen 50kHz und 200kHz bleibe (gelesen).
Die Auflösung liegt bei 10bit.

Wenn jetzt z.B. 2,0 Volt am Eingang liegen soll ein Port auf 1 geschaltet werden.

1024bit / 5V * 2.0V = 409.6 digitaler Wert (?)

D.h. wenn ich jetzt eine Abfrage starte mit:

Config Adc = Single , Prescaler = 128
Start Adc
Dim W As Word
Do

W = Getadc(1)
If W=409 then portb=&B11111111
Else PortB=&B00000000
End if

Loop
End

Würde das so funktionieren ?

Außerdem: MUSS man einen ATMega (16MHz Typ) auch mit 16MHz betreiben oder ist das nur das max. mögliche ?

So, ich hlffe ich langweile euch nicht zu sehr mit meinen fragen ;)

Blue

radbruch
03.07.2008, 12:14
Hallo Blue

Du hast dir alles richtig angelesen, grobe Fehler kann ich nicht erkennen. Einzig die Prüfung auf "if w=409" ist etwas kritisch weil der ADC ein paar Digits Messfehler aufweist. (Datenblatt Seite 248, Table 103)

Der Mega8 läuft auch mit anderen Takten, er wird z.B. mit internen 1MHz ausgeliefert:

The device is shipped with CKSEL = “0001” and SUT = “10” (1 MHz Internal RC Oscillator, slowly rising power).(Datenblatt Seite 26)

Gruß

mic

becki133
03.07.2008, 12:24
Hallo Blue
ich kann mich radbruch nur anschließen
Ich würde diese zeile

If W=409 then portb=&B11111111

auf kleiner gleich ändern .

If W<=409 then portb=&B11111111

Gruß Becki

Blue72
03.07.2008, 12:49
Hallo, vielen Dank für die Infos. Wenn ich aber <= verwende dann wird der Port aber doch auch bei z.B. 200 aktiv oder ?
Den Messfehler könnte man ja quasi mit einer Range umgehen (400-420).
Die internen 1MHz wollte ich nicht nutzen da ich gelesen habe das dieser nicht genau genug wäre wenn man den ADC nutzt.

Gruß
Jens

becki133
03.07.2008, 13:34
Hallo ,
Ich habe das kleiner gleich benutzt weil ich wollte
das er Abschaltet wenn die Spannung
unter einen bestimmten Wert fällt .

Bestimmt ist es auch möglich einen Berreich anzugeben .
Da wüßte ich aber nicht wie
habe ich bis jetzt noch nicht gebraucht .

Gruß Holger

radbruch
03.07.2008, 13:56
Hallo


Die internen 1MHz wollte ich nicht nutzen da ich gelesen habe das dieser nicht genau genug wäre wenn man den ADC nutzt.
Das war nur ein Beispiel für andere mögliche Takte. Die Ungenauigkeiten der internen Taktquellen wirken sich beim ADC meiner Meinung nach nicht aus.

Gruß

mic

oberallgeier
03.07.2008, 14:25
... Die Ungenauigkeiten der internen Taktquellen wirken sich beim ADC meiner Meinung nach nicht aus ...
Stimmt, soweit ich es beurteilen kann, wirkt sich die Taktfrequenz nicht aus, solange der Takt lang genug für eine sinnvolle Wandlung dauert - dazu im Datenblatt des µC nachlesen (für mega8 vgl. doc S 196: • 13 - 260 μs Conversion Time). Ich betreibe einen ADC am mega168 mit stark unterschiedlichen Takten. Er soll den Ausgang eines GP2D120 erfassen und nach Millimeter Entfernung umrechnen. Den Wert brauche ich nicht häufig. Hatte als Quelle 4,88 kHz mit prescaler /32, auch mit prescaler /64, hab den jetzt mit 1,22 kHz und prescaler /32, also langsame 75 Hz für die Wandlung bzw. die ISR - - - und finde, dass die Messung weder besser noch schlechter noch stabiler wird.