Atmega1284 ADC

Gast #4261406
Lesenswert?
• ▲
▼
Hallo liebe Community,

ich habe ein Problem, mit mehreren ADCs an einem atmega1284, der fest in 
eine Schaltung integriert ist. Die ADC-Kanäle sind ADC5-7.
Da ich noch nicht sehr viel Erfahrung mit dem ADC habe, bitte ich hier 
um Hilfe.
Das Problem ist, das die Werte entweder gar nicht stimmen oder die 
einzelnen Kanäle sich gegenseitig beeinflussen.

Hier erstmal der Quell-Code mit dem ich es versucht habe:

#define F_CPU 20000000UL
#define BaudRate 9600UL
#include <avr/io.h>


void uart_init (void){
  uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU/(16*BaudRate)-1);
  UBRR0H = (uint8_t)(ubrr >> 8);
  UBRR0L = (uint8_t)(ubrr);

  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}

int main(void)
{
  uart_init();
  int x=0;


  DDRA=0b00000000; //Eingänge setzen
  ADCSRA=0b10000111;//Register setzen
  ADMUX=0b01000101;//Register setzen
    while( 1 ) {
      while (!(UCSR0A & (1<<RXC0)));
      x=UDR0;

      ADMUX=0b01000101;
      ADCSRA |= (1<<ADSC);            // eine Wandlung "single 
conversion"
      while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung 
warten
      }
      x=ADC;//Wert auslesen
      while ( !( UCSR0A & (1<<UDRE0)) );//senden
      UDR0 = x;


      ADMUX=0b01000110;
      ADCSRA |= (1<<ADSC);            // eine Wandlung "single 
conversion"
      while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung 
warten
      }
      x=ADC;//Wert auslesen
      while ( !( UCSR0A & (1<<UDRE0)) );//senden
      UDR0 = x;

    }

}

Die Uartverbindung klappt, denn das Programm wartet erstmal auf 
irgendein Zeichen und wenn ich das gesendet habe, kommen auch zwei Werte 
zurück.

Ich wüsste nun gern, ob mein Programm falsch ist oder ob der AVR kaputt 
ist oder was es noch sein könnte.

Schonmal danke für eure Antworten.
Angehängte Dateien:
#4261437
Lesenswert?
• ▲
▼
Keine Lösung, aber ein Hinweis:
Kaputt ist der AVR sicher nicht. Auch das Programm dürfte stimmen.

Ich selbst habe ein ähnliches Problem bei einem atmega8.

Beim abwechselnden Messen auf Kanal 7 und 6 kommen falsche 
Messergebnisse heraus, anscheind hängt das mit dem MUX-Schalter 
zusammen.

Einzelkanalmessungen ohne Schalten des MUX ergeben ein völlig plausibles 
Resultat.

Atmel gibt auch den Hinweis, nach dem Schalten des MUX das jeweils erste 
Messergebnis zu verwerfen und nur die folgenden zu verwenden.

Leider hat das nicht geholfen: Ich lese jetzt abwechselnd mit je einer 
Folge von 256 Messungen und Mittelwertbildung, wie im Tutorial, und 
trotzdem bekomme ich das typisch falsche Ergebnis.

Eine andre Ursache könnte ein Übersprechen von Nachbarleitungen her 
sein. Eventuell das Messen im sleep-mode durchführen, wie im Datenblatt 
beschrieben, könnte da helfen, nur kam ich da noch nicht dazu. (Ich 
messe derzeit nur per Kanal 6)
Gast #4261571
Lesenswert?
• ▲
▼
Allerdings liefert das Programm auch dann keine plausiblen Messwerte, 
wenn ich nur einen Kanal benutze.

Außerdem weiß ich nicht genau welchen Referenz ich nehmen muss, könntest 
du mir das anhand des Schaltplans sagen?
Gast #4261596
Lesenswert?
• ▲
▼
Hi

>Außerdem weiß ich nicht genau welchen Referenz ich nehmen muss, könntest
>du mir das anhand des Schaltplans sagen?

Welche Spannungen misst du denn an Line_L/C/R?

>Allerdings liefert das Programm auch dann keine plausiblen Messwerte,
>wenn ich nur einen Kanal benutze.

Was ist denn für dich plausibel?

MfG Spess
Gast #4261690
Lesenswert?
• ▲
▼
Hi

>Und wie lese ich den ganzen adc aus?

Du liest ja den ganzen ADC-Wert aus. Aber

      UDR0 = x;

überträgt nur acht Bit.

>wären plausible Messwerte
>z.B. bei weißen Untergrund 255/1024 und bei schwarzem Untergrund 0.

Aber nicht unter realen Bedingungen.

Nochmal: Was misst du an den ADC-Eingängen?

MfG Spess
Gast #4261821
Lesenswert?
• ▲
▼
Vielen Dank an alle die etwas geschrieben haben.

Es funktioniert nun.
Das Hauptproblem war das UDR0 nur 8bit überträgt und nicht 16bit.
Auch die beeinflussung der Kanäle ist nun weg.

Noch mal Danke an alle!!!
Gast #4261835
Lesenswert?
• ▲
▼
MGS:GZ schrieb:

> ich habe ein Problem, mit mehreren ADCs an einem atmega1284, der fest in
> eine Schaltung integriert ist. Die ADC-Kanäle sind ADC5-7.
> Da ich noch nicht sehr viel Erfahrung mit dem ADC habe, bitte ich hier
> um Hilfe.
> Das Problem ist, das die Werte entweder gar nicht stimmen oder die
> einzelnen Kanäle sich gegenseitig beeinflussen.

Es gibt genau drei mögliche Gründe für diese Probleme:

1) Programmierfehler. Abhilfe: selbige beheben.
2) Zu hohe Samplerate. Abhilfe: selbige reduzieren.
3) Zu hohe Quellimpedanzen. Abhilfe: selbige reduzieren.

Zu allen drei Problemkreisen bietet das Datenblatt eigentlich alle 
nötigen Informationen. Hast du es gelesen?
#4262024
Lesenswert?
• ▲
▼
spess53 schrieb:
> Was ist denn für dich plausibel?

Ergebnisse die in den möglichen Toleranzbereich passen und das zu 
erwartende Verhalten zeigen.

 Wenn aber an einem Kanal 1,3V gemessen werden und am andren 1,57 V und 
die ausgegebenen  Werte im Verhältnis 1:1,3 stehen ist das nicht 
erklärlich.
Auch am Verhalten, wie Streuung der Messwerte lässt sich Einiges 
erkennen. Die unteren zwei bit zeigen halt die übliche Streuung.

 Ich hab halt, wegen der Ähnlichkeit meines Problems gehofft, 
irgendeinen Hinweis zu bekommen von Jemandem, der Ähnliches mit dem 
atmega8 erlebt hat.

Inzwischen habe ich das Problem umgangen, nicht gelöst. Ich arbeite nur 
mit Kanal6. Was Kanal 7 direkt messen sollte lässt sich am Signal 6 
daran erkennen, dass es nahezu auf Null geht.

Da das Problem (für mich) nicht mehr existiert, verabschiede ich mich 
mit einem  Danke und wünsche noch eine schöne Zeit.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.