www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit ADC des ATmega48


Autor: Paul H. (powl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe hier zwei fast neue ATmega48, leider haben sie beide eins 
gemeinsam. Der ADC scheint zu spinnen oder ich habe einen groben, 
unerkannten Fehler gemacht. Auf jedenfall treibt mich diese 
ADC-Geschichte zum Wahnsinn.

Der AVR läuft mit 8Mhz internem Takt an 5V. Auf dem Bild ist der Aufbau 
auf Steckboard zu sehen, links ist ein Max232, rechts die gelben 
Kabelchen sind für ISP und nicht angeschlossen. Ich habe AREF einfach 
mit ADC0 verbunden wodurch ich auf einen Wert von 1023 kommen sollte. 
Stattdessen schwankt der Wert:

795, 768, 794, 772, 725, 754, 794, 740, 786, 779, 744, 794, 760, 761, 
792.. sehr heftig also und völlig unbegründet im Bereich um die 800. 
Wenn ich ADC0 mit GND verbinde gurkt der Wert irgendwo bei 90...100 rum.

Was ist hier passiert? Die 5V Spannungsversorgung sollte stabil genug 
sein, kommt direkt aus meinem Labornetzteil. 10000µF Elkos draustecken 
bringt nichts, lauter kleine 100nF Kerkos dazu auch nichts.

Ich messe gerade an AREF 4.17V, habe jedoch die 1.1V interne Referenz 
angeschaltet. Was ist hier passiert?
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

#define BAUD 38400UL

volatile uint16_t adc_akku;
volatile uint16_t adc_lights;


void uart_putc(uint8_t chr)
{
  loop_until_bit_is_set(UCSR0A, UDRE0);

  UDR0 = chr;
}

void uart_puts(char string[])
{
  uint8_t i = 0;

  while(string[i])
  {
    uart_putc(string[i]);
    i++;
  }
}

int main()
{
  // ADC aktivieren
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
  ADMUX = (1 << REFS1) | (1 << REFS0);


  // UART initialisieren
  uint16_t ubrr = F_CPU / (16 * BAUD) - 1;

  UBRR0H = (uint8_t) (ubrr >> 8);
  UBRR0L = (uint8_t) (ubrr);

  UCSR0B = (0 << TXCIE0) | (1 << TXEN0);
  UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);


  while(1)
  {
    ADCSRA |= (1 << ADSC);
    loop_until_bit_is_set(ADCSRA, ADIF);

    char temp[5];
    itoa(ADC, temp, 10);
    uart_puts(temp);
    uart_puts("\n");

    _delay_ms(1000);
  }
}

Ich sollte mir nochmal gut überlegen ob ich mich mit sowas später im 
Beruf rumschlagen möchte.

lg PoWl

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast AREF und AVCC vertauscht.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
omg... ich laufe rot an.. ok, dankeschön!

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das passiert schon mal im Gedränge auf dem Damenklo....
;-)

MfG Paul

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das passiert schon mal im Gedränge auf dem Damenklo....

Deshalb hing in meinem Ausbildungsbetrieb am Damenklo ein Bild mit 
vielen Hühnern drauf, sowie der Überschrift "Nicht drängeln, Mädels"

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.