Forum: Mikrocontroller und Digitale Elektronik Kapazitiver Touchsensor


von Bernhard (Gast)


Lesenswert?

Hallo
Ich versuche nun schon seit längerer Zeit einen kapazitiven Touchsensor 
mit einem Atmega8 zu bauen.
Ich habe auch schon sämtliche Beiträge durchforstet und bin nicht 
dahintergekommen wieso es bei mir nicht funtkioniert.
Mein Aufbau ist folgendermaßen:
An PC3 ist ein Widerstand und die Touchelektrode (ca 15x15mm große 
Verzinnte Fläche) in Reihe geschaltet.
Zwischen PC3 und PC2 ist ein Keramikkondensator mit 22nF.
An PB1 ist eine LED.
Mein Problem ist, dass die LED bereits nach einem Durchlauf leuchtet 
(auch Testweise bei 10uF Elko, müsste länger dauern beim Laden als ein 
Schleifendurchlauf). Vllt findet jemand einen Fehler im Code:
1
int main(void)
2
{
3
  DDRB |= (1<<PB1);
4
  DDRC |= ((1<<PC2) | (1<<PC3));
5
  PORTC &= ~((1<<PC2) | (1<<PC3));
6
  PORTB &= ~(1<<PB1);
7
  uint16_t Zaehler;
8
    while(1)
9
    {
10
  //Zähler zurück  
11
  Zaehler = 0;
12
  //Entladen
13
  DDRC |= ((1<<PC2) | (1<<PC3));
14
  PORTC &= ~((1<<PC2) | (1<<PC3));
15
  
16
  //Schleife
17
  do 
18
  {  
19
    //Touch Elektrode Laden
20
    DDRC |= (1<<PC3); //PC3 als Ausgang
21
    DDRC &= ~(1<<PC2); //PC2 als Eingang
22
    PORTC &= ~(1<<PC2); //Pullup aus
23
    PORTC |= (1<<PC3); //PC3 auf high
24
    _delay_us(10); //warten
25
    //Ladungen verteilen
26
    DDRC &= ~(1<<PC3); //PC3 als Eingang
27
    PORTC &= ~(1<<PC3); //Pullup aus
28
    DDRC |= (1<<PC2); //PC2 als Ausgang
29
    PORTC &= ~(1<<PC2); //PC2 auf low
30
    _delay_us(10); //warten
31
    //Zähler
32
    Zaehler++;
33
  } while (PORTC & (1<<PC3)); //Abfrage ob PC3 bereits high ist
34
  
35
  if (Zaehler < 2) 
36
  {
37
    PORTB ^= (1<<PB1);
38
  }
39
  }
40
}

von chris (Gast)


Lesenswert?

Bernhard schrieb:
> PORTC & (1<<PC3

Eingänge werden über das PINx Register ausgelesen, also in deinem Fall 
PINC.

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
Noch kein Account? Hier anmelden.