www.mikrocontroller.net

Forum: Compiler & IDEs AD Wandlung funktioniert nicht


Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: OldBug (Gast)
Datum:

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

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

Autor: Gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht direkt, aber wozu gibt es Datenblätter? :)

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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.