Hallo.
Hab mich hier schon durchs Forum gelesen und versteh auch eigentlich das
Prinzip, einen Kapazitiven Sensor mittels µC auszuwerten.
Cap (Kupferplatte) entladen.
Timer starten
Cap aufladen (über Pullup)
warten bis Cap aufgeladen ist und dann die Zeit stoppen
Soweit so gut, nur klappt das nicht.
Hier ist mal mein Quellcode:
1 | int main() {
|
2 |
|
3 | uint16_t timer = 0;
|
4 | uint8_t timer_l,timer_h,i;
|
5 |
|
6 | init_uart();
|
7 | init_timer();
|
8 |
|
9 | _delay_ms(100);
|
10 |
|
11 | while(1)
|
12 | {
|
13 | timer = 0;
|
14 | DDRD |= (1<<PD7); //Ausgang
|
15 | PORTD &= ~(1<<PD7); //Low
|
16 | _delay_ms(100);
|
17 | TCNT1 = 0;
|
18 | DDRD &= ~(1<<PD7); //Eingang
|
19 | PORTD &= ~( 1 << PD7 ); //Pullup aus
|
20 | while ( !(PIND & (1 << PD7)) ) ; //bis PD7 = 1
|
21 | timer_h = TCNT1H;
|
22 | while (!(UCSRA & (1<<UDRE)))
|
23 | {}
|
24 | UDR = timer_h;
|
25 | timer_l = TCNT1L
|
26 | while (!(UCSRA & (1<<UDRE)))
|
27 | {}
|
28 | UDR = timer_l;
|
29 | }
|
30 | return 0;
|
31 | }
|
Beschaltung ist ganz simpel:
Sensor Platte an der einen Seite an Pin PD7 und parallel dazu ein
260KOhm Widerstand an VCC. Andere Seite der Platte an Masse.
Ich lass mir halt die Werte über den UART schicken und die Schwanken
ständig, ob ich die Platte berühre oder nicht. Man kann also kein Muster
erkennen...
Hat jemand eine Idee was ich falsch mache ?