Hallo,
herzlichen Dank schon mal für die schnellen Antworten.
@Valen:
R11 ist bei mir eine Spule.
Asuro Doku: Für R11 wird statt dem 100Ohm-Wiederstand eine Induktivität mit 10μH eingebaut
@radbruch:
Init(); ist in der main funktion vorhanden.
Zwischen Pin20 (AVCC) und GND habe ich 4,2V gemessen (mit eingebautem microcontroller)
Zwischen Pin5 und GND habe ich 4,9V gemessen (mit eingebautem microcontroller)
Ich habe meine PollSwitch Funktion verändert so das der Wert für i ausgegeben wird und in der Main Funktion werden die Rückgabewerte der PollSwitchfunktion ausgegeben sofern ein Taster gedrückt wird.
Ergebnis am Terminal:
Messung 1:
Taster |
i |
PollSwitch() |
kein Taster |
1023 |
- |
K1 |
793 |
19 |
K2 |
952 |
5 |
K3/K4/K5/K6 einzeln |
- |
- |
K1 + K2 |
762 |
22 |
K1 + K3 |
779 |
20 |
K1 + k6 |
787 |
20 |
k2 + k3 |
871 |
11 |
Während mein Programm läuft habe ich noch eine Messung mit einem Multimeter gemacht:
Messung mit eingebautem Microcontroller zwischen Pin27 und GND(Pin8 ). Es werden der reihe nach die folgenden Taster gedrückt:
Taster |
Messwert |
kein Taster |
4,88V |
K1 |
(schwankt) 2,4V bis 1,0V |
K2 |
(schwankt) 2,9V bis 1,2V |
K3 |
4,35V |
K4 |
4,60V |
K5 |
4,73V |
K6 |
4,80V |
was hier auffällt ist, bei den Tastern zu denen die PollSwitch funktion werte zurück liefert, schwanken die gemessenen Spannungswerte so das man kaum einen Wert ablesen kann.
Bei den Tastern zu denen die PollSwitch funktion nichts zurück liefert kann ein konstanter Wert gemessen werden.
Meine veränderte PollSwitch Funktion um die i Werte anzuzeigen:
Code:
/* function to read out switches */
unsigned char PollSwitch (void)
{
unsigned int i;
DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
Sleep(10);
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF)));// wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
i = ADCL + (ADCH << 8);
SerPrint("i: [ ");
PrintInt(i);
SerPrint(" ]");
SerPrint("\r\n");
SWITCH_OFF;
//return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 65.0 + 0.5));
return ((10240000L/(long)i-10000L)*65L+5000L)/10000;
}
Meine Main Funktion:
Code:
#include "print.c"
#include "asuro.h"
int main(void)
{
unsigned char t1, t2;
Init();
SerWrite("\r\nTastsensor Test\r\n",19);
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 && t2 && t1 == t2) /* irgendeine Taste gedrueckt */
{
SerPrint("PollSwitch: [ ");
PrintInt(t1); /* Tastenwert senden */
SerPrint(" ] ");
SerPrint("\r\n"); /* Zeilenvorschub */
Sleep(1000); /* halbe Sekunde warten */
}
}
}
Ich hoffe das meine weiteren Informationen hilfreich sind.
Vielen Dank und beste Grüsse
Thomas
- - - Aktualisiert - - -
Mein Wiederstand R12 12kOhm (braun, rot, schwarz, rot, braun) liegt nicht im Toleranzbereich. Der Farbcode stimmt, aber ich messe 8,9kOhm anstatt 12kOhm. Hat könnte das eine Fehlerquelle sein?
Grüsse Thomas
Lesezeichen