Forum: Mikrocontroller und Digitale Elektronik Atmega32 AD Wandler


von Kral (Gast)


Lesenswert?

Hallo Leute,

und zwar benutze ich den Atmega 32 und möchte eine Spannung an der 
internen Referenzspannung vergleichen.
Das heißt wenn die gemessene Spannung größer als die Referenzspannung 
ist, soll PINB0 an und ausgehen.

Nur weiß ich nur nicht wie ich dem umgewandelten Digitalwert (wo ist er 
überhaupt?) weiterarbeiten Kann.

Vielen Dank für eure Hilfe

void main(void)

{
DDRB = 1 << PINB0; // Data Direction Register output for only Pin0 on 
Port B
ADCSRA = 1<< ADEN; // enable ADC
ADCSRA = 1<< ADIE; //interrupt

ADMUX = 1<<ADLAR;   // 8bit auswahl
ADCSRA = 1 << ADPS2; =//prescaler 1Mhz/50khz und 1mhz/200khz 
(datenblatt) = zwischen 20 und 5
sei();

while(1)
{
PORTB ^= 1 << PINB0; //xor (^) to toggle only pin 0 on Port B
_delay_ms(10);

von MWS (Gast)


Lesenswert?

Kral schrieb:
> Nur weiß ich nur nicht wie ich dem umgewandelten Digitalwert (wo ist er
> überhaupt?) weiterarbeiten Kann.

Der befände sich in ADCL/ADCH, bzw. ADCW. Da wird bei diesem Code 
allerdings nichts reinkommen, denn wenn der ADC laufen würde, so würde 
der uC dann resetten, wenn er die nicht vorhandene ISR aufrufen möchte.

Da's aber mehrere Absolutzuweisungen auf ein und dasselbe Register gibt, 
werden die vorhergehenden überschrieben. Da läuft also nichts, da der 
ADC nicht enabled ist.

Es gibt zuhauf funktionierende Beispiele für den ADC, hast Du Dir denn 
kein einziges angesehen?

von holger (Gast)


Lesenswert?

>Das heißt wenn die gemessene Spannung größer als die Referenzspannung
>ist,

Na dann hast du hoffentlich einen Spannungsteiler vor dem ADC.
Die Referenzspannung stellt den höchsten Wert dar den der ADC
messen kann.

von Joachim B. (jar)


Lesenswert?

MWS schrieb:
> Es gibt zuhauf funktionierende Beispiele für den ADC, hast Du Dir denn
> kein einziges angesehen?

holger schrieb:
> Na dann hast du hoffentlich einen Spannungsteiler vor dem ADC.
> Die Referenzspannung stellt den höchsten Wert dar den der ADC
> messen kann.

ihr habt beide Recht, nur warum ADC ?

hier bei der Aufgabe wäre doch der Analogcomperator angebrachter ?

Ich habe den zwar noch nie genutzt, aber bei der Anforderung springt 
mich der Analogkomperator doch an, wozu den ADC Wert wandeln und 
vergleichen wenn ich nur > feststellen will.

https://www.google.de/search?q=atmega32+comparator&client=firefox-a&rls=org.mozilla:de:official&channel=sb&biw=1280&bih=905&source=lnms&sa=X&ei=9S4wVNWXCYXzaoGCgfAI&ved=0CAUQ_AUoAA&dpr=1

http://winavr.scienceprog.com/avr-gcc-tutorial/avr-comparator-c-programming-example.html

http://www.mschrod.de/Elektronik/AVR/Atmega%20Allgemein/Analogkomparator/Analogkomparator.htm

http://www.tschallener.net/AVR/InterrupttechnikATmega32.pdf

: Bearbeitet durch User
von MWS (Gast)


Lesenswert?

Joachim B. schrieb:
> ihr habt beide Recht, nur warum ADC ?

Vielleicht weil der TE diesen durchaus verwendbaren Ansatz gewählt hat?

Der AC kann nur die Bandgap verwenden. Die höhere Referenzspannung wird 
zwar aus der Bandgap abgeleitet, kann aber zumindest nicht intern mit 
dem AC verbunden werden.

Wenn keine unmittelbare Reaktion wie über den AC gefordert ist, dann hat 
der Weg über den ADC den Vorteil, flexibler zu sein, die Triggerschwelle 
kann per Software justiert werden.

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.