Forum: Mikrocontroller und Digitale Elektronik Frage zu ADC


von Daniel L. (daniel_l49)


Lesenswert?

Hallo zusammen!

Ich habe eine Frage zum ADC.
Ich möchte zwei Potis einlesen und die beiden Werte auf dem ADCL 
Regiester ausgebn. Funktioniert das , wenn ja, wie ????

Ich bedanke mich im voraus

Mfg Daniel

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel L. schrieb:
> Ich habe eine Frage zum ADC.

Welcher Controller? (ich unterstelle mal ATmega[xx])

> Ich möchte zwei Potis einlesen und die beiden Werte auf dem ADCL
> Regiester ausgebn.

Du kannst ADCL nur AUSLESEN .

> Funktioniert das , wenn ja, wie ????

Nein. Wenn du nur ADCL ausliest, wird das Register nie aktualisiert 
werden. Hierfür musst du auch ADCH auslesen.

Die Alternative wäre den ADC so zu konfigurieren, dass das Ergebnis 
"left adjusted" ausgegeben wird, und dann nur ADCH auszulesen.

Zitat vom ATmega8:

"When ADCL is read, the ADC Data Register is not updated until ADCH is 
read. Consequently, if the result is left adjusted and no more than 
8-bit precision is required, it is sufficient to read ADCH. Otherwise, 
ADCL must be read first, then ADCH"

von Daniel L. (daniel_l49)


Lesenswert?

danke für die schnelle antwort.
ich benutze den ATMEGA8.
ich weiss schon das ich ADCH auch auslesen muss , hab das aber vergessen 
in den Text zu schreiben.

von Eumel (Gast)


Lesenswert?

Du kannst an jedem ADC Pin (welche das sind steht im Datenblatt) messen. 
Allerdings nicht gleichzeitig, der Amtega8 hat nur einen ADC (mit 
umschaltbaren Eingängen).
Du musst also:
Spannung am Portpin 1 messen und Wert speichern.
ADC auf Portpin 2 umschalten.
Spannung an Portpin 2 messen und Wert speichern.

von Dietrich L. (dietrichl)


Lesenswert?

Daniel L. schrieb:
> ich weiss schon das ich ADCH auch auslesen muss , hab das aber vergessen
> in den Text zu schreiben.

...und der ADC muss natürlich vorher konfiguriert und gestartet 
werden...

Gruß Dietrich

von Daniel L. (daniel_l49)


Lesenswert?

Ah jetzt versteh ich :) Danke für die Antwort

von Daniel L. (daniel_l49)


Lesenswert?

Jetzt muss ich noch einmal Fragen ich weis nicht genau wie ich das 
machen soll den Kanal wechseln.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/stdio.h>
4
#include "lcd.h"
5
#define F_CPU 3686400UL
6
#include <util/delay.h>
7
8
unsigned char Adi(unsigned char z1,z2);
9
unsigned char Sub(unsigned char z1,z2);
10
unsigned char Multi(unsigned char z1,z2);
11
unsigned char Divi(unsigned char z1,z2);
12
13
int main(void)
14
{
15
  ADMUX = 0x04;
16
  ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADPS2) | (1<<ADPS0);
17
  while(!(ADCSRA & ADSC));
18
  
19
    while(1)
20
    {
21
22
       ADCSRA |= (1<<ADSC); 
23
    }
24
}
25
26
unsigned char Adi(unsigned z1,z2)
27
{
28
  unsigned char sum;
29
  z1 + z2 = sum;
30
  
31
  return(sum);
32
}
33
unsigned char Sub(unsigned z1,z2)
34
{
35
  unsigned char dif;
36
  z1 - z2 = dif;
37
  
38
  return(dif);
39
}
40
unsigned char Multi(unsigned z1,z2)
41
{
42
  unsigned char Pro;
43
  z1 * z2 =Pro ;
44
  
45
  return(Pro);
46
}
47
unsigned char Divi(unsigned z1,z2)
48
{
49
  unsigned char quo,Rest;
50
  z1 / z2 = quo;
51
  z1 % z2 = Rest;
52
  
53
  return(quo,Rest);
54
}

ich verwnde den Kanal 0 den kanal für das zweite Poti hab ich noch nicht 
definiert weil ich mir nicht ganz sicher bin wie das machen soll und ein 
interne Ref-spannung . die Wandlung ist eine Einzel andlung

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.