Hallo,
ich hoffe ihr könnt mir mal Helfen bin schon ewig bei der Fehlersuche und sehe Grad gar nichts mehr.

Ich versuche gerade das von folgender Webseite neu zu schreiben (als Übung für mich)

http://www.zabex.de/site/schaltungstechnik.html#kanmi2

Ich habe C1 mit 100nF gewählt und zwischen PB1 (bei mir PA1) und C1 einen 150Ohm Widerstand gepackt.

Ich ich nun mein Programm ablaufen lasse Meint der das C1 bereits nach einen Durchlauf High Pegel auf PA0 liefert...

Das ein Tischbein aus Weißblech einen so Großen Kondensator darstellt wage ich gerade zu bezweifeln.

Wo liegt also mein Fehler im Quellcode?

test.c:

Code:
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include "test.h"
#include "uart.h"

//screen /dev/ttyUSB0 9600 8N1

int main(void)
{
    unsigned int n;
    unsigned char str_fromint[7];
    
    uart_init();
    
    uart_puts("Hallo ich bin ein Kapazitiver Näherungssensor\r\n\r\n");
 
    while (1){
        n=0;
        
        //Entleere Kondensator
        DDRA |= (1<<PA0) | (1<<PA1); //PA0 und PA1 als Ausgang
	    PORTA = 0x00; //Alles aus
	    waitms(1); //Warten   
	    
	    while(1) {	    
	        DDRA &= ~(1<<PA1); //PA1 als Eingang
	        setportaoff(1); //PA1 kein Pullup
	        setportaon(0); //PA0 auf 5v
	        waitms(1);
	    
	        DDRA |= (1<<PA1); //PA1 Auf Ausgang
	        setportaoff(1); //PA1 auf GND
	        DDRA &= ~(1<<PA0); //PA0 als Eingang
	        waitms(1);
	    
	        if (PINA & (1<<PA0)) { //ist PA0 High?
	            itoa( n, str_fromint, 10 ); // Wandelt n in einen String um, 10 steht fuer Dezimalsystem
	            uart_puts(str_fromint); //Auf UART Ausgeben
	            uart_puts("\r\n"); //Newline ;)
	            break;
	        }
	        DDRA &= ~(1<<PA0) | ~(1<<PA1); //PA0 und PA1 als Eingang
	        n++; //Schleifendurchläufe Zählen
	    }
	}
    return 0;
  
}

/*### waitms - Programm pausieren lassen ###*/

/*Die Funktion lässt circa so viele Millisekunden verstreichen, wie angegeben werden.
Angepasst auf das RN-Control 1.4 mit 16 MHz-Quarz!
Vorsicht, Wert ist nur experimentell angenähert, nicht exakt berechnet!*/

void waitms(uint16_t ms)
{
	for(; ms>0; ms--)
	{
		uint16_t __c = 4000;
		__asm__ volatile (
			"1: sbiw %0,1" "\n\t"
			"brne 1b"
			: "=w" (__c)
			: "0" (__c)
		);
	}
}
test.h
Code:
/*### Ports setzen ###*/

//Ports auf HIGH setzen
static inline void setportaon(const uint8_t n)
{PORTA |= (1<<n);}	//set PORTA.n high

static inline void setportbon(const uint8_t n)
{PORTB |= (1<<n);}	//set PORTB.n high

static inline void setportcon(const uint8_t n)
{PORTC |= (1<<n);}	//set PORTC.n high

static inline void setportdon(const uint8_t n)
{PORTD |= (1<<n);}	//set PORTD.n high



//Ports auf LOW setzen
static inline void setportaoff(const uint8_t n)
{PORTA &= ~(1<<n);}	//set PORTA.n low

static inline void setportboff(const uint8_t n)
{PORTB &= ~(1<<n);}	//set PORTB.n low

static inline void setportcoff(const uint8_t n)
{PORTC &= ~(1<<n);}	//set PORTC.n low

static inline void setportdoff(const uint8_t n)
{PORTD &= ~(1<<n);}	//set PORTD.n low



int main(void);
void waitms(uint16_t ms);
ich danke euch