Forum: Mikrocontroller und Digitale Elektronik atmega 8 adc problem


von Felix S. (pepe)


Lesenswert?

hey,
vorweg ich bin blutiger anfänger in C, ich hab vorher immer nur in Basic 
programmiert und wage jetzt den umstieg ;)
Irgendwie wird bei meinem Programm der ADC nicht ausgelesen und am LCD 
ausgegeben, wenn ich in die Variable aber einen festen Wert schreibe und 
den ADC kram auskommentiere, kommt der Wert aber richtig am LCD an, also 
muss es am ADC liegen.

hier mein minimalistischer Code, ich hoffe ihr könnt mir helfen.
1
#include <avr/io.h>
2
#define F_CPU 8000000
3
#include <util/delay.h>
4
#include "lcd-routines.h"
5
#include <stdlib.h>
6
#include <inttypes.h>
7
8
9
int main (void)
10
{
11
  lcd_init();
12
  int x;
13
  DDRC = 0x00;                      // Port C als Eingang
14
  ADMUX= 0b00000000;
15
  while(1)
16
  {
17
     x=500;
18
   ADCSR= 0b1100110;                // ADC Einstellen und Starten
19
     while (bit_is_set(ADCSR,6));  // Warten bis Umwandlung von PINC0 erfolgt ist.
20
     x=ADCW;                       // Wert aus dem ADC holen
21
22
   char Buffer[5];
23
   itoa ( x, Buffer, 10);
24
   lcd_string(Buffer);
25
   _delay_ms(500);
26
   lcd_clear();
27
                             
28
  
29
  }
30
return 0;
31
}

mfg pepe

von Karl H. (kbuchegg)


Lesenswert?

Im
AVR-GCC-Tutorial
gibt es im Abschnitt "ADC" ein paar schöne fertige Funktionen um den ADC 
anzusprechen. Benutze die oder studiere sie wenigstens.


>   ADMUX= 0b00000000;
Was sagt dir der Begriff "Referenzspannung"?

von Felix S. (pepe)


Lesenswert?

>>   ADMUX= 0b00000000;
> Was sagt dir der Begriff "Referenzspannung"?

jap, aber auch wenn ich den "0b01000000" kommt nichts.

von Karl H. (kbuchegg)


Lesenswert?

Felix Schulze schrieb:
>>>   ADMUX= 0b00000000;
>> Was sagt dir der Begriff "Referenzspannung"?
>
> jap, aber auch wenn ich den "0b01000000" kommt nichts.

Gewöhn dir die Bitschreibweise ab! Da sieht man doch nix!

So was ist zb tödlich

   ADCSR= 0b1100110;

Oder siehst du auf Anhieb, dass da der ADC gar nicht eingeschaltet ist?


Schau ins
AVR-GCC-Tutorial Abschnitt ADC
Dort findest du getestete Funktionen. Die kannst du erstmal so 
übernehmen und danach studieren, wie sie funktionieren bzw. was da 
eingestellt wird.
UNd schau dir auch die Schreibweisen an und vergleiche sie mit deiner.

  ADCSRA = (1<<ADEN) | .....

ist nun mal sehr viel aussagekräftiger, als wenn man in

   ADCSR= 0b1100110;

suchen muss, ob dort das Enable Bit gesetzt ist oder nicht und dann 
feststellt: Hoppla, irgendwo ist mir da ein Bit abhanden gekommen.

Das AVR-GCC-Tutorial wurde geschrieben um Einsteigern zu helfen und sie 
mit bewährten Codeing Techniken zu versorgen. Nutze es!

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.