Forum: Compiler & IDEs AD Wandlung funktioniert nicht


von Gizmo (Gast)


Lesenswert?

Hi Leute

Ich bin am verzweifeln ich bekomm irgendwie keine AD Wandlung mit dem
AT MEGA32 hin, ich möchte nur mit einem Multiplexer Kanal arbeiten
(PA0). An ADC0 liegen 5V an, ich habe eigentlich so gemacht, wie im gcc
Tutorial beschrieben. Ich weiß echt nich mehr weiter, bitte schaut euch
mal mein Code an.

#include <avr/io.h>
#include <avr/signal.h>

int main(void)
{
int x;

DDRC=0xff;  // Port C als Ausgang definieren
PORTC=0xff; // LED Reset

ADCSRA = 0b1|0|1|0|0|1|1|0;
//ADCSRA = (ADEN<<1) | (ADFR<<1) | (ADPS2<<1) | (ADPS1<<1); // AD
Konverter aktivieren

ADMUX = (ADLAR<<1); // ADLAR in ADMUX setzen für 8-Bit Abtastung

ADCSRA = (ADSC<<1); // wandlung starten

if(bit_is_set(ADCSRA,2))
{
  if(bit_is_set(ADCH,15) || bit_is_set(ADCH,14) || bit_is_set(ADCH,13)
|| bit_is_set(ADCH,12) || bit_is_set(ADCH,11) || bit_is_set(ADCH,10) ||
bit_is_set(ADCH,9) || bit_is_set(ADCH,8))
  {
    cbi(PORTC,0);
  }
  else
  {
    cbi(PORTC,7);
  }
}


  return 0;
}

von Hubert.G (Gast)


Lesenswert?

Du verwendest ADC 0 und externe Referenzspannung.
AVCC ist versorgt? Referenzspannung vorhanden?

if(bit_is_set(ADCSRA,2)) Was fragst du hier ab?
Warum verwendest du nicht den Interrupt?

von OldBug (Gast)


Lesenswert?

>ADCSRA = 0b1|0|1|0|0|1|1|0;

Das wirst Du so nirgends finden!

>ADMUX = (ADLAR<<1);

s.o.

>ich habe eigentlich so gemacht,

Tja, wenn das Wörtchen "eigentlich" nicht wäre...
Ich würde es mal so (wie es übrigens auch im Tutorial gemacht wird)
probieren:

ADCSRA = (1 << ADEN) | (1 << ADFR) | (1 << ADPS2) | (1 <<ADPS1);
ADMUX = (1 << ADLAR);
[..]

...usw, usf.

von Gizmo (Gast)


Lesenswert?

klar das habe ich auch versucht bloß wenn ich das so schreibe wie Du
dann findet der Compiler ADFR nicht.
Kann es sein das ich da noch eine Header Datei einbinden muss ?

von OldBug (Gast)


Lesenswert?

Kann es sein, daß es dieses Bit gar nicht gibt?

Ich weis es nicht, und ich kann auch grad nicht ins Datenblatt
gucken...

von Gizmo (Gast)


Lesenswert?

Ja das ist so

Ich habe gerade noch mal ins Datenblatt vom AT MEGA32 geschaut das Bit
heißt ADATE und nicht ADFR.
Kennst Du Dich mim AT Mega32 aus ?

von OldBug (Gast)


Lesenswert?

Nicht direkt, aber wozu gibt es Datenblätter? :)

Hast Du denn eine/mehrere konkrete Frage(n)?

von Jörg Wunsch (Gast)


Lesenswert?

Wenn es kein ADFR gibt, heißt das übrigens, dass der AD-Wandler im
jeweiligen AVR keinen free-running mode unterstützt.  Du wirst
den Code also notgedrungen etwas umstellen müssen.

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.