mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD-Wandler läuft nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bjarne S. (bjarne_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
ich möchte einen AD-Wandler am Mega32 verwenden.

So habe ich den Ad-Wandler angeschlossen wenn ich AVCC als Referenz 
verwenden möchte.

AVCC an +5V
GND an GND
AREF mit Kondensator an GND

An PA0 (ADC0) habe ich eine Spannung von 0,6V - 2V.

Mein C-Code bis jetzt:

define  F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "Lcd-routines.h"
#include <stdlib.h>

int main(void)
{
  
  void ADC_Init(void){

    ADMUX = (1<<REFS0);            //AVcc als Referenz
    ADCSRA = (1<<ADPS2) | (1<<ADPS1);    //Frequenzvorteiler
    ADCSRA |= (1<<ADEN);          //ADC Aktivieren
    //Dummy readaot
    ADCSRA |= (1<<ADSC);
    while (ADCSRA & (1<<ADSC)){}
    (void) ADCW;
  }
  uint16_t ADC_Read( uint8_t channel ){

    //Kanal wählen
    ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
    ADCSRA |= (1<<ADSC); //Eine Wandllung sigel conversion
    while (ADCSRA & (1<<ADSC)){} //Auf Abschluss warten
    return ADCW;
  }
        DDRA = 0b00000000;
  PORTA = 0b00000000;
  DDRC = 0b11111111;
  
  lcd_init();

  char out0[16];
  char out1[16];
  uint16_t infrarot;
  uint16_t test=120;

    while (1) 
    {
    lcd_clear();
    lcd_string("Testausgabe");
    itoa(test,out0,10);
    lcd_setcursor(0,2);
    lcd_string(out0);
    _delay_ms(1000);
    lcd_clear(),
    
              
    infrarot=ADC_Read(0);
    itoa(infrarot,out1,10);
    lcd_setcursor(0,0);
    lcd_string("Abstand");
    lcd_setcursor(0,2);
    lcd_string(out1);
                                                       
    _delay_ms(1000);
    lcd_clear();  
    
    }
}

Bei der Testausgabe funktioniert alles. Und bei der infrarot Ausgabe 
erhalte ich eine 0. Sieht einer den Fehler?


Liebe Grüße

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal die Spannung an AREF gemessen?

Autor: Thomas E. (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit

Bjarne S. schrieb:
> //Kanal wählen
>     ADMUX =

überschreibst du

> ADMUX = (1<<REFS0);

die Einstellung von Uref.

Autor: Bjarne S. (bjarne_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay danke.
Ich werde das morgen mal probieren.

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.