Hi Leute,
da es hier im Forum nicht sehr viel bezüglich Qtouch mittels ADC gibt,
dachte ich mir ich poste hier vielleicht einfach mal, zumindest bei mir,
funktionierenden Code. Außerdem habe ich eine Platine mit einem Rotor
geätzt (nur mit Edding per Hand schnell :) ) um das auch mal
auszuprobieren.
Da ich zur Qtouch Lib auch nicht viel gefunden habe, möchte ich hier
gerne auch meinen Code zum Rotor posten und würde mich freuen wenn mir
jemand Tipps geben kann/will wie man den Code eventuell vereinfacht oder
verkürzt.
Vielleicht hätte auch jemand Lust eine kleine Lib/Framework zu erstellen
für Qtouch mit ADC...
Hier der Code für reines Auslesen des ADC Wertes eines Qtouch Button.
Ich habe 1K als Widerstand in Reihe zum Button...
1 | for (int i=0; i<16; i++){ //16 Messungen für Mittelwertbildung
|
2 | DDRF = 0xFF; //PortF auf Ausgang setzten
|
3 | PORTF = 0b00000001; // PINF0 auf High um CS zu laden und PINF1 auf LOW um Sample & Hold Kondensator(Cs&h) entladen zu können
|
4 | delayMicroseconds(5); // kurz warten bis geladen
|
5 | ADMUX = (ADMUX & 0b11100001) | (1<<MUX0); //ADC Kanal ändern um Cs&h zu entladen
|
6 | ADCSRA |= (1<<ADSC); // ADC Cs&h entladen
|
7 | while(ADCSRA & (1<<ADSC)){ }
|
8 | adc0 = ADC; //speichern um nachher zu überprüfen
|
9 | DDRF = 0x00; //Port auf Eingang
|
10 | PORTF = 0x00; //Tristate
|
11 | ADMUX = (ADMUX & 0b11100000); //Wieder ADC0 Kanal wählen
|
12 | delayMicroseconds(5); //warten?! geht auch ohne...
|
13 | ADCSRA |= (1<<ADSC); //Messung
|
14 | while(ADCSRA & (1<<ADSC)){ }
|
15 | adc1 = ADC;
|
16 | adc2 += adc1; //Mittelwertbildung
|
17 | }
|
18 | adc2 /=16;
|
Wie man an der delayMicroseconds erkennt, habe ich das alles in der
Arduino IDE ausprobiert, funktioniert eindwandfrei...
Im Anhang eine C-Datei mit dem Code um einen Rotor (wie auf dem Bild im
Anhang) auszuwerten...
Vielleicht kann ja jemand was mit dem Code für seine Projekte anfangen.
MfG Waldemar