Ich möchte gerne in C den Werte eines Potentiometers das an den beiden Analogeingängen angeschlossen ist auslesen und als Zeitkonstante für ein _delay_ms() verwenden. In BASCOM gibt es dazu ja den Befehl getadc(). Wie funktioniert das in C? Das Delay soll in dem Programm zwischen 0 und 500 liegen.
Gast
#1501103
Du wirfst ne Blick ins Tutorial http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29 und findest dort ne Beispielfunktion. Dann baust du die in dein Programm ein, und wunderst dich, dass die delay-Zeiten nicht passen. Dann schaust du in der avr-libc-Doku nach und findest heraus, dass _delay_ms() auf keinen Fall mit Variablen als Parameter aufgerufen werden sollte. Und was du dann machst, musst du dir jetzt aber selber ausdenken....
Ich habe dazu folgendes gefunden:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Aufruf mit Warte(xx); Damit sollte das Problem mit der Variable in _delay() gelöst sein. Jedoch weiß ich immer noch nicht wie ich den Wert des Potis auslese.
Manfred W. schrieb: > Ich möchte gerne in C den Werte eines Potentiometers das an den beiden > Analogeingängen angeschlossen ist auslesen Wie soll das gehen mit 2 Eingängen, ein Poti hat doch 3 Anschlüsse? Ein Tip: Du brauchst nur einen Analogeingang, VCC und GND. Peter
Ja, schon klar. Meine Formulierung war falsch. Der eine Anschluss liegt an VCC. Der andere an GND. Und der mittlere am AVR Anlalogeingang. Ok, ich habe mal dieses Beispiel hergenommen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Mir ist nur nicht ganz klar, was das ganze macht bzw. in welche Variable ich nun den Wert eingelesen bekomme.
Korrektur: Poti Anschluss: 1 ... liegt auf VCC 2 ... liegt auf ADC6 3 ... liegt auf PD2 (INT0)
Manfred W. schrieb: > Mir ist nur nicht ganz klar, was das ganze macht Hast Du das gerade gepostete Beispiel durchgelesen? Steht doch in den Kommentaren drin. > bzw. in welche Variable ich nun den Wert eingelesen bekomme. Erstmal in keine. Der Wert ist Deine Funktionsantwort. Wenn Du dann
1 | |
2 | |
machst, dann ist "kristallkugel" die von Dir gewünschte Variable.
damit hab ichs schon versucht. Warte(adcval); Funktioniert aber nicht Entspricht ReadChannel(0) einen Analogeingang am AVR? Wenn ja, welcher? Ich verwende einen ATMEGA8-AU. Muß ich dazu das Programm anpassen?
Gast
#1501301
1 | |
1 | |
würde dann je nach Poti Einstellung von 0...1024ms warten. Bitte versuch erst einmal mit Hilfe vom Datenblatt und dem Codebeispiel aus dem Tutorial zu verstehen was du da machst. Es macht keinen Sinn Hals über Kopf ein Mikrocontrollerprogramm zu schreiben und per try and error ans laufen zu kriegen. Du solltest viell. in kleineren Schritten arbeiten. technikus
ok, jetzt hab ichs! Danke! Was jetzt noch etwas unschön ist, das sich die Werte nicht linear verändern. Erst wenn ich das Poti fast ans Ende drehe wird die Geschwindigkeit viel schneller. Im unteren Bereich tut sich fast gar nichts.
Gast
#1501322
Du hast aber nicht zufällig ein logarithmisches Poti erwischt ?
Gast
#1501323
Hi >Was jetzt noch etwas unschön ist, das sich die Werte nicht linear >verändern. >Erst wenn ich das Poti fast ans Ende drehe wird die Geschwindigkeit viel >schneller. >Im unteren Bereich tut sich fast gar nichts. Ist das ein lineares Poti? Noch was: >3 ... liegt auf PD2 (INT0) Was soll das?? MfG Spess
Manfred W. schrieb: > Was jetzt noch etwas unschön ist, das sich die Werte nicht linear > verändern. Das liegt an Deiner Aufgabenstellung (0..500ms). Der Unterschied 0/1ms dürfte deutlich merkbarer sein als der zwischen 499/500ms. Peter
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.