Guten morgen! Ich suche nach einer Möglichkeit, mit einem Drehpotentiometer 4 Ports eines uControllers (Atmel ATmega8) zu schalten. Das Potentiometer schaltet also je nach Drehstellung einen der 4 Ports auf HIGH. Ist dies überhaupt möglich? Wenn ja, hättet ihr vielleicht ein kleines Codebeispiel, ich steige durch die ADC-Materie noch nicht wirklich durch ;) Laut dem ADC-Tutorial muss man ja noch etwas "Hühnerfutter" um das Poti schalten, muss das wirklich sein? (Die "Auflösung" liegt ja nur bei 4 Stufen, deshalb ist die Genauigkeit ja eigentlich nicht so relevant) mfG, Daniel Fröder
Daniel F. schrieb: > Guten morgen! oha! Daniel F. schrieb: > Das Potentiometer schaltet also je nach Drehstellung einen der > 4 Ports auf HIGH. > Ist dies überhaupt möglich? Ja das ist trivialst. Daniel F. schrieb: > Wenn ja, hättet ihr vielleicht ein kleines > Codebeispiel, ich steige durch die ADC-Materie noch nicht wirklich durch > ;) Schau dir mal das AVR Tutorial an und mach es durch. Es dauert nicht lange ist aber gut - wenn man C Programmieren kann. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Daniel F. schrieb: > Laut dem ADC-Tutorial muss man ja noch etwas "Hühnerfutter" um das Poti > schalten, muss das wirklich sein? (Die "Auflösung" liegt ja nur bei 4 > Stufen, deshalb ist die Genauigkeit ja eigentlich nicht so relevant) Das Hühnerfutter besteht hauptsächlich aus höchstens einem Widerstand pro Poti - wenn überhaupt. Einfach als Spannungsteiler verschalten. Fertig. Was nötig ist sind die Abblockkondensatoren (100nF) für jeden AVR so wie ein Kondensator für die ADC Referenzsspannung. That's it!
Daniel F. schrieb: > Laut dem ADC-Tutorial muss man ja noch etwas "Hühnerfutter" um das Poti > schalten, muss das wirklich sein? Das ist für Messung mit dem Komparator. An den ADC kannst du das Poti einfach so anschliessen. Eine Seite an +, die andere an GND, die Mitte an den ADC. Refenzspannung auf Vcc. ADLAR-Bit setzen, das Highbyte einlesen und die oberen 4 Bits auswerten, wobei dir für deine 4 Schaltzustände auch nur die oberen 2 Bits reichen. mfg.
Ginge das eigentlich auch mit Bascom? Das kann ich nämlichhalbwegs :) @Thomas Eckmann: Was meinst du ADLAR-Bit und wie fragt man die oberen Bits ab? Tut mir leid, wenn die Frage etwas dumm ist, aber ich bin ein blutiger Anfänger
Daniel F. schrieb: > Ginge das eigentlich auch mit Bascom? Ja. Definitiv. So etwas ähnliches habe ich damit in meiner Anfangsphase auch gemacht. Hier mal was um die grauen Zellen anzuregen: Initialisierung (Ports definieren, Start ADC, e.t.c) Beginn Hauptschleife ADC Auslesen und in Variable übergeben Alle LEDs ausschalten Variable auf Wert prüfen und mit if...else...endifs oder select...cases die gewünschte LED einschalten. Ende Hauptschleife
Daniel F. schrieb: > Ginge das eigentlich auch mit Bascom? Ach du Scheiße! Ja geht. Daniel F. schrieb: > Was meinst du ADLAR-Bit ADMUX – ADC Multiplexer Selection Register Bit 5 – ADLAR: ADC Left Adjust Result Das Ergebnis der Wandlung ist 10 Bit groß und landet in 2 Registern. Die unteren 8 Bits in Register ADCL die beiden oberen in ADCH. Durch Setzen des ADLAR-Bits wird das Ergebnis ausgegeben, indem die oberen 8 Bits in ADCH, die unteren beiden in ADCL landen. Wenn man jetzt nur das ADCH verwendet, hat man praktisch einen 8-Bit-Wandler. Von dem Ergebnis nimmt man dann für deine Anwendung nur die beiden oberen Bits und wertet entsprechend aus. mfg.
aber ganz so einfach wie es dargestelt ist es auch nicht angenommen 8 Bit in 4 Abstufungen wären 0-63 = Stufe 1; 64-128 = Stufe 2;.... wenn jetzt ein Wert gemessen wird der sich immer um die 63-65 bewegt wird immer zw. Stufe 1 und 2 umgeschaltet. Hier muss man also schon etwas programmieren damit das nicht passiert, also nur auf Änderungen >5 reagieren damit man auch sicher sein kann es wurde am Poti gedreht und es kein rauschen ist, man mittelt mehrere Werte oder programmiert tote Zonen dazwischen. z.B. 0-60 = Stufe 1; 61-70 keine Änderung des vorherigen Wertes; 70-120 Stufe 2;..... einfach ausprobieren, dann kommt man von selber drauf.
Thomas O. schrieb: > wenn jetzt ein Wert gemessen wird der sich immer um die 63-65 bewegt Theoretisch ja. Praktisch ohne Bedeutung. mfg.
Vielen Dank für Eure Antworten! Ich werde das ganze heute oder morgen mal testen ;)
Hallo! Ich habe das ganze mal getestet, funktioniert auch vom Prinzip her gut. Ich habe den 10-Bit ADC in 4 Teile geteilt (~256). Aber obwohl ich ein lineares Poti benutze, sind von den 270 Grad des Potis etwa 180° schon größer als 770, also sind die 1023 nicht regelmässig auf das Potentiometer verteilt :( wisst Ihr, wie man das korrigieren kann, dass die 270° in gleichmässige, 4 Teile geteilt werden? Gruß, Daniel Fröder
Hi, das klingt nach einem logarytmischen Poti. Kannst ja mal den Widerstand am Schleifer messen und kontrollieren ob sich der linear verändert oder nicht Gruß Kalle
Du hattest recht, der Widerstandsverlauf war logarithmisch, jetzt gehts! Wenn ich nun aber 4 LEDs anschliesse, leuchten manchmal 2 LEDs auf einmal. Ich hatte den Verdacht, das das am Rauschen des Potis liegen könnte, aber nachdem ich die Zahlenbstände der if-Abfragen um 5 höher wie die letzte gemacht habe, war der Effekt immer noch da :S Wisst Ihr da eine Lösung?
Mittelwert bilden über x Messungen ... Ringpuffer oder gleitender Mittelwert
Hi Klar wissen wir woran es liegt... wie schon des öferen an Zeile 23 Gruß oldmax
Wie kann man das in Bascom lösen? Ich stehe da irgendwie grade auf dem Schlauch :(
>aber nachdem ich die Zahlenbstände der if-Abfragen um 5 höher >wie die letzte gemacht habe, war der Effekt immer noch da :S Etwas diffus ausgedrückt... Eine Hysterese sollte diesen Effekt wirkungsvoll verhindern. Du musst dazu die Umschaltschwellen für eine Änderung des ADC-Wertes in Richtung "runter" etwas niedriger legen (der Wert dieser Abweichung ist die Hysterese) als die Umschaltschwellen für eine Änderung in Richtung "rauf". Um das per Software zu realisieren musst Du bei jedem neu eingelesenen ADC-Wert prüfen, ob er niedriger oder höher als sein Vorgänger ist, und dementsprechend die Umschaltschwellen setzen. Wenn die Hysterese größer ist als die Amplitude der rauschbedingten ADC-Schwankungen tritt der Effekt nicht mehr auf. Einen geeigneten Hysteresewert würde ich einfach durch Ausprobieren bestimmen. Programmierbeispiel: IF (ADCValue>ADCValueOld) THEN { State = 0 IF (ADCValue>Threshold1+HYST) THEN State = 1 IF (ADCValue>Threshold2+HYST) THEN State = 2 IF (ADCValue>Threshold3+HYST) THEN State = 3 } ELSE { State = 0 IF (ADCValue>Threshold1-HYST) THEN State = 1 IF (ADCValue>Threshold2-HYST) THEN State = 2 IF (ADCValue>Threshold3-HYST) THEN State = 3 }
die leuchten bestimmt nicht beide gleichzeitig sondern abwechselnd, also genau das Problem das ich oben beschrieben habe. Da das Auge aber sehr träge ist sieht es so aus als ob beide gleichzeitig leuchten.
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.