Forum: Mikrocontroller und Digitale Elektronik Atmega644 und ADC


von Apo (Gast)


Angehängte Dateien:

Lesenswert?

Moin, ich versuch gerade, mit meinem neuen Photowiderstand das Licht zu 
messen und erst mal die Staerke auszugeben... dazu moechte ich den 
internen ADC des atmega644 verwenden.

Habe also an PA0 VCC ueber den Widerstand angeschlossen und noch ein LCD 
an Port D gehaengt, um die Daten anzuzeigen. Im Anhang ist mein Code, 
der ADC Teil wurde groesstenteils aus dem AVR-GCC Tutorial geklaut.
Funktioniert aber leider nicht, der ausgelesene Wert ist immer 0.
Weiss einer, wo mein Fehler liegt?

Gruss, Apo

von Johannes M. (johnny-m)


Lesenswert?

Apo wrote:
> Weiss einer, wo mein Fehler liegt?
Wenn an dem Analog-Eingang nur der Fotowiderstand hängt, dann weiß 
ich, wo der Fehler liegt. Du musst einen Spannungsteiler mit dem 
Fotowiderstand bauen oder den Fotowiderstand mit einem konstanten Strom 
versorgen und die Spannung über dem Fotowiderstand messen...

von Johannes M. (johnny-m)


Lesenswert?

BTW: Ich glaube, Du hast auch falsche Vorstellungen davon, wie lange der 
ADC für eine Wandlung (bzw. in Deinem Fall für 4 Wandlungen) braucht... 
Bei den Einstellungen dauert eine Wandlung schon gut 100µs, der 
Timer-Interrupt kommt bei der Konfiguration aber alle 160µs...

von Apo (Gast)


Lesenswert?

Hm, wie bau ich so 'nen Spannungsteiler?
http://de.wikipedia.org/wiki/Bild:Spannungsteiler.svg
Muss ich da PA0 zwischen R1 und R2 haengen?

von Apo (Gast)


Lesenswert?

Der Interrupt sollte alle 0.2s kommen...

von Johannes M. (johnny-m)


Lesenswert?

Apo wrote:
> Muss ich da PA0 zwischen R1 und R2 haengen?
Zum Beispiel. Und dran denken, dass bei der Methode die Ausnutzung des 
Referenzspannungsbereiches bei Verwendung von VCC ziemlich suboptimal 
ist.

von Johannes M. (johnny-m)


Lesenswert?

Apo wrote:
> Der Interrupt sollte alle 0.2s kommen...
OK, mit der Einstellung wie im Programm
1
#define HZ 5
2
#define COMP 8000000/256/HZ
und nem Prescaler von 256 (den ich vorher übersehen hatte) kommt ca. 
alle 40 ms ein Interrupt
Das macht eben 41,12ms zwischen zwei Interrupts...

Allerdings könnte es Probleme geben mit der "8000000". Schreib lieber 
"8000000UL", dann merkt der Compiler auch definitiv, dass er das nicht 
in 16-Bit-int rechnen darf...

von Apo (Gast)


Lesenswert?

8000000/256/5 = 6250

Timer1 hat also bei 6250 sein Compare Match. 6250*256 (Prescaler) = 1,6M
8MHz/1.6MHz = 5Hz
Zufrieden?

PA0 haengt jetzt zwischen dem Photoresi und 30kOhm. Mit dem Multimeter 
laesst sich der Spannungsunterschied locker messen, der MC laesst sich 
aber immer noch nicht beeindrucken...

von Johannes M. (johnny-m)


Lesenswert?

Apo wrote:
> 8000000/256/5 = 6250
>
> Timer1 hat also bei 6250 sein Compare Match. 6250*256 (Prescaler) = 1,6M
> 8MHz/1.6MHz = 5Hz
> Zufrieden?
Hast zwar recht, ich hab da nicht richtig hingeschaut, aber den Ton 
kannste Dir sparen! Viel Spaß noch!

von Apo (Gast)


Lesenswert?

Brauchst nicht gleich eingeschnappt zu sein, das war kein Stueck boese 
gemeint... aber von mir aus, irgendwie werd ich's schon schaffen. Danke 
fuer den Tipp mit dem Spannungsteiler.

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.