Analosignal mit Microkontroller auslesen

Gast #4282845
Lesenswert?
• ▲
▼
Hallo Leute,

ich habe folgendes Problem:
Ich möchte mit meiner Magnetsteuerung (s. Datenblatt im Anhang) eine 
Spannung messen, die von einer Kraftmessdose erzeugt wird. Als 
Analogeingang nehme ich den ADC5 des Microcontrollers.
Ich habe dazu ein C-Programm geschrieben (siehe Anhang). Als 
Referenzspannung für den ADC Converter habe ich die internen 2,56 V des 
Microcontrollers genommen.
Gemäß meinem Programm soll die Lampe auf dem Mirkocontroller leuchten, 
sobald eine Spannung von  >= 2,5 V an dem Analogeingang ADC5 (Komport 
Link 2 auf der Magnetsteuerung) gemessen wird.
Mein Problem ist, dass sie sofort leuchtet, sobald nur die geringste 
Spannung (z.B. Finger ranhalten) an dem Eingang anliegt.

Hat da vllt. jemand eine Idee, woran dies liegen könnte? Ich weiß auch 
nicht, an welchen Analogeingang ich die Kraftmessdose noch anschließen 
kann, da sämtliche Analogeingänge von der Magnetsteuerung belegt weden 
:/..
1
#include <avr/io.h>
2
#define F_CPU 8000000UL
3

4
void ADC_Init(void)
5
{
6
  // die Versorgungsspannung AVcc als Referenz wählen und ADC0 als Input Kanal auswählen:
7
  //ADMUX = (1<<REFS0);    
8
  // oder interne Referenzspannung als Referenz für den ADC wählen:
9
   ADMUX = (1<<REFS1) | (1<<REFS0);
10
 
11
  // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
12
  // schon auf 0, also single conversion
13
  ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) ;     // Frequenzvorteiler auf 128 stellen; TFmin = 40M TFmax= 160
14
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
15
 
16
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
17
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
18
 
19
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
20
  while (ADCSRA & (1<<ADSC) ) {         // auf Abschluss der Konvertierung warten
21
  }
22
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
23
     Wandlung nicht übernommen. */
24
  (void) ADCW;
25
}
26

27
/* ADC Einzelmessung */
28
uint16_t ADC_Read( uint8_t channel )
29
{
30
  // Kanal waehlen, ohne andere Bits zu beeinflußen
31
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
32
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
33
  while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung warten
34
  }
35
  return ADCW;                    // ADC auslesen und zurückgeben
36
}
37

38
int main( void )
39
{
40
  uint16_t adcval;
41
  ADC_Init();
42
  DDRD |= (1<<4);
43
 
44
  do {
45
    adcval = ADC_Read(5);  // Kanal ADC5 auswählen
46
  if (adcval >= 1000)
47
  {
48
    PORTD |= (1<<4);
49
  }
50
  else
51
  {
52
    PORTD &= ~(1<<4);
53
  }
54
  } while( 1 ); 
55
  }
Angehängte Dateien:
#4282929
Lesenswert?
• ▲
▼
µBeginner schrieb:

> Mein Problem ist, dass sie sofort leuchtet, sobald nur die geringste
> Spannung (z.B. Finger ranhalten) an dem Eingang anliegt.

Daraus schliesse ich, dass du zur Zeit den Eingang im Prinzip offen 
hast.

Du unterliegst einem Trugschluss. Ein offener Eingang liegt mit nichten 
auf einem 0V Potential. Ein offener Eingang ist eine Antenne, die sich 
jedes noch so kleine elektromagnetische Feld aus der Umgebung einfängt. 
Und auch dein Körper ist eine Antenne.

Um die Eingangsspannung unter kontrollierten Testbedingungen zu testen, 
musst du schon ein Potentiometer (10k) als Spannungsteiler verschalten. 
Erst dann wirst du feststellen, dass deine ADC Messung einen 
vernnünftigen Wert ergibt, der bei ca. 2V den Ausgang umschaltet. Ein 
offener Eingang, an den du mit dem Finger drann kommst, ist dazu nicht 
geeignet.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.