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
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"
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.