www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem bei ADC mit ATMega2560 und Codevision


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steh grad mal wieder auf dem Schlauch :-/
Möchte 4 Analogkanäle folgendermaßen auslesen...
AK[3] = read_adc(3);
AK[4] = read_adc(4);
AK[5] = read_adc(5);
AK[6] = read_adc(6);
Wenn ich das so mache und dann den...
AK3 Wert verstelle wird der Wert von AK[4] verändert
AK4 Wert verstelle wird der Wert von AK[5] verändert
AK5 Wert verstelle wird der Wert von AK[6] verändert
AK6 Wert verstelle wird der Wert von AK[3] verändert

Die Codevision Funktion ist folgendermaßen...
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=(adc_input & 0x07) | (ADC_VREF_TYPE & 0xff);
if (adc_input & 0x08) ADCSRB |= 0x08;
else ADCSRB &= 0xf7;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

Denke mal die wird stimmen.

Wo ist mein Fehler?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ersetze BITTE die Hex-Zahlen durch die Schreibweise

   (1<<ADEN)

sodass man nicht suchen muss, welche Bits

ADCSRA|=0x40;

hier überhaupt gesetzt werden.

auf welches Bit, wird hier
while ((ADCSRA & 0x10)==0);
gewartet?

(Jetzt bin ich mal zu faul, im Datenblatt zu suchen)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
müsste ADIF sein
while ((ADCSRA & (1<<ADIF))==0);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADCSRB |= 0x08; =

ADCSRB |= (1<<MUX5);

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sagte doch das ich den Code nicht geschrieben hatte.
Der ist von Codevision und der generiert ihn halt so.

Ist es nicht ADIF? Was soll es denn dann sein?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab jetzt mal die Abfrage

while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;

rausgenommen und durch eine Wartezeit ersetzt.

Dann stimmt das Ergebnis.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man eigentlich als Moderator einzelne Antworten löschen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Ich sagte doch das ich den Code nicht geschrieben hatte.
> Der ist von Codevision und der generiert ihn halt so.
>
> Ist es nicht ADIF? Was soll es denn dann sein?

War mein Fehler. Hab die Nibble durcheinandergeschmissen.
Es ist ADIF
(Ich werde mein Lebtag nicht verstehen, warum man da auf ADIF wartet 
anstat auf ADSC. Ist doch viel einfacher zu merken: Ich setze ADSC um 
die Wandlung zu starten und wenn sie fertig ist, fällt ADSC wieder auf 0 
zurück.


OK. Die Wandelfunktion sieht so nicht so schlecht aus (auch wenn ich den 
delay da drinnen nicht mag, aber der soll jetzt erst mal nicht das 
Problem sein)

Hilft wohl nichts. Da musst du mehr von deinem restlichen Programm 
zeigen.

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.