Forum: Mikrocontroller und Digitale Elektronik ADC bringt keine Ergebnisse


von Martin (Gast)


Lesenswert?

Hi, ich habe folgendes Problem:
Ich hab schon öfters mit dem Internen ADC der Atmegas gearbeitet. Aber 
aktuell verzweifel ich: Auf meiner selbstgebauten Test-Platine werkelt 
ein Mega32 mit externen 8Mhz. Die Hardware funktioniert, da ich den ADC 
schonmal erfolgreich genutzt habe.
Trotzdem nochmal die externe Beschaltung: Alle AVCC und GND sind 
beschaltet, VCC/GND hat 100nF, AVCC/GND hat 100nF, AVCC/5V hat 10µH in 
Reihe. VCC beträgt etwa 5,1V und ist Sauber (mit Oszi gemessen)

Schließe ich meinen Poti an, Messe ich an PA1 mit meinem Mutlimeter 1,7V 
bis 3,0V je nach Poti-Stellung.

Ich übertrage die ADC Werte über UART an meinen PC. Es kommt aber IMMER 
nur 410 raus. Nach dem Programmieren sinkt der wert von ca. 480 langsam 
auf 410 runter. Auch das einschalten aller Pullups an PortA (was ja 1023 
als ADC Wert zu folge haben müsste) änderte daran nichts.

Hier mein Code:
1
#define F_CPU 8000000
2
#define UART_BAUD_RATE 9600
3
4
#include <stdlib.h>
5
#include <avr/io.h>
6
#include <avr/interrupt.h>
7
#include <util/delay.h>
8
9
#include "uart.h"
10
11
int main(void)
12
{
13
  ADMUX |= (1<<MUX0); //PA1
14
  ADCSRA |= (1<<ADPS1)|(1<<ADPS2);  //64 Prescaler
15
  ADCSRA |= (1<<ADEN);
16
  
17
  uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));
18
  sei();
19
  
20
  char buffer[7];
21
  uint16_t ADC_Value;
22
  
23
    while(1)
24
    {  
25
    ADCSRA |= (1<<ADSC);
26
    while (ADCSRA & (1<<ADSC))
27
    {
28
      ;   // auf Abschluss der Konvertierung warten
29
    }
30
    ADC_Value = ADCW;
31
    itoa(ADC_Value, buffer, 10);
32
    uart_puts(buffer);
33
    uart_puts("\n");
34
    _delay_ms(500);
35
    }
36
}

Ich steh total aufm schlauch, kann mir jemand helfen und weiß worans 
liegt? Ist das Programm so Ok? Ist evtl der µC hinüber?

von Karl H. (kbuchegg)


Lesenswert?

Was hast du mit ARef gemacht?
Da du im Programm die Einstellung der Referenzspannung auf 0 lässt, hast 
du damit die Referenzspannung auf 'extern vom ARef Pin kommend' 
geschaltet.

> Schließe ich meinen Poti an, Messe ich an PA1 mit meinem Mutlimeter
> 1,7V bis 3,0V je nach Poti-Stellung.

Wie ist dieses Poti verschaltet?

von Martin (Gast)


Lesenswert?

ARef hängt an Vcc, also den 5V.
Poti Pin 1 ist an Vcc, Pin 3 an GND und Pin2 (also der mittelabgriff) 
geht an PA1.

von Martin (Gast)


Lesenswert?

Schuldige wegen doppelpost, aber zum Poti noch: Ist aus einer 
RC-Fernsteuerung ausgeschlachtet inkl. Mechanik, daher der begrenzte 
Arbeitsbereich

von Martin (Gast)


Lesenswert?

Drippelpost ;)

Der ADC im Mega32 scheint hin zu sein. Hab jetzt einen anderen genommen 
und mit dem geht es.

Hat echt lange gehalten, wenn man bedenkt was der alles mitmachen 
durfte... Hat auch schonmal 12V über mehrere Minuten ab bekommen, lief 
danach aber noch super :) Tut auch jetzt noch alles, außer der ADC. 
Naja, was solls.

Danke für deine hilfe trotzdem!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.