1 | do
|
2 | {
|
3 | // PD6-----1k----PAD
|
4 | // |
|
5 | // 33nF
|
6 | // |
|
7 | // PD7--
|
8 |
|
9 | // 1. definierten Zustand für die Kondensatoren herstellen. D.h. PB1 und
|
10 | // PC1 als Ausgänge schalten und auf low ziehen um alles Cs zu entladen
|
11 | // (genügend lange warten).
|
12 |
|
13 |
|
14 | DDRD |= (1<<PD6); // PD6 als Ausgang schalten
|
15 | DDRD |= (1<<PD7); // PD7 als Ausgang schalten
|
16 | PORTD &= ~(1<<PD6); // Ausgang PD6 auf LOW
|
17 | PORTD &= ~(1<<PD7); // Ausgang PD7 auf LOW
|
18 | delay_us (5);
|
19 |
|
20 | // 2. PB1 auf high und PC1 auf low schalten (aber immernoch als Eingänge)
|
21 |
|
22 | DDRD &= ~(1<<PD6); // PD6 als Eingang schalten
|
23 | DDRD &= ~(1<<PD7); // PD7 als Eingang schalten
|
24 |
|
25 | PORTD |= (1<<PD6); // Eingang PD6 mit Pull-UP, bzw. später Ausgang auf HIGH
|
26 |
|
27 | // 3. PB1 als Ausgang schalten und kurze Zeit (z.B. 5us) warten bis der
|
28 | // unbekannte Touchkondensator geladen ist.
|
29 |
|
30 | for(i=0; i<65535 && !(PORTD & (1<<PD6)); i++)
|
31 | {
|
32 | DDRD |= (1<<PD6); // PD6 als Ausgang schalten, da "PORTD |= (1<<PD6)" Ausgang auf HIGH
|
33 | delay_us (5);
|
34 |
|
35 | // 4. PB1 wieder als Eingang schalten und PC1 als Ausgang schalten. Damit
|
36 | // liegt jetzt der "Sampling Kondensator Cs" quasi parallel zum
|
37 | // Touchkondensator und es müssen sich die Ladungen so umverteilen, dass
|
38 | // beide die gleiche Spannung haben (Parallelschaltung). D.h. es wird Cs
|
39 | // leicht geladen, da dieser ja viel größer ist.
|
40 |
|
41 | DDRD &= ~(1<<PD6); // PD6 als Eingang schalten, da "PORTD |= (1<<PD6)" Eingang mit Pull-UP
|
42 | DDRD |= (1<<PD7); // PD7 als Ausgang schalten, da "PORTD &= ~(1<<PD7)" Ausgangn auf LOW
|
43 | delay_us (20); // Warten weil das Umladen Zeit braucht ???
|
44 |
|
45 | DDRD &= ~(1<<PD7); // PD7 als eingang schalten, da "PORTD &= ~(1<<PD7)" Eingang ohne Pull-UP
|
46 |
|
47 | // 5. Überprüfe ob PB1 schon als high eingelesen wird. Wenn nicht, dann
|
48 | // beginne wieder bei Punkt 3 und erhöhe einen Zähler. Wenn PB1 bereits
|
49 | // high ist, dann ist der Zählerstand ein Maß für die Anzahl der
|
50 | // Ladezyklen
|
51 |
|
52 | }
|
53 | DDRD |= (1<<PD6); // PD6 als Ausgang schalten
|
54 | DDRD |= (1<<PD7); // PD7 als Ausgang schalten
|
55 | PORTD = 0x00;
|
56 |
|
57 | printf("\n\ri:0x%X",i);
|
58 | delay_ms(1000);
|
59 |
|
60 | }
|
61 | while(1);
|