Hallo Forum,

ich versuche gerade meinen Feuchtigkeitssensor (http://www.hoperf.com/upload/sensor/hh10d.pdf) mit meinem RN-Control auszuwerten.
Den Frequenzausgang des Sensors habe ich mit Pin D2 (INT0) verbunden.
Der Grundgedanke ist, dass ich bei einer steigenden Flanke in der ISR von INT0 eine Variable hochzähle und die dann 1x in der Sekunde auf ein Terminal ausgebe.
Damit bekomme ich ja dann die Impulse pro Sekunde sprich die Frequenz raus.
Jetzt verwende ich dieses Programm:

Code:
/*
 * HH10D.c
 *
 * Created: 03.05.2012 20:46:19
 *  Author: Daniel
 */ 

#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <util/delay.h>
#include <stdlib.h>

int lenght = 0x00;
char data[50];
volatile int Zaehler = 0x00;
int Frequenz = 0x00;

int main(void)
{
    UART_Init();
    Port_Init();
    Timer1_Init();
    sei();
    
    while(1)
    {

    }
}

void UART_Init()
{    
    UCSRB = (1<<RXEN) | (1<<TXEN);                                                                    // Rx und Tx aktivieren
    UCSRC = (1<<URSEL)| (1<<UCSZ1) | (1<<UCSZ0);                                                    // 8 Bit Nachrichtenlänge einstellen
    
        
    UBRRH = 0x00;
    UBRRL = 0x33;                                                                                    // Baudrate auf 19200 festlegen
}

void Port_Init()
{
    DDRD = 0x00;
    
    MCUCR = (1<<ISC01);                                                                                // Interrupt auf fallende Flanke stellen
    GIMSK = (1<<INT0);                                                                                // INT0 aktivieren
}

void Timer1_Init()
{
    TCCR1B = (1<<CS12);                                                                                // Prescaler 256
    TCNT1H = 0x0B;
    TCNT1L = 0xDB;
    TIMSK |= (1<<TOIE1);                                                                            // Timer1 Overflow Interrupt aktivieren
}


void Send_UART(char data[])
{
    char Counter;
    
    lenght = strlen(data);
    
    while(Counter < lenght)
    {
        while (!(UCSRA & (1<<UDRE)));
        UDR = data[Counter];    
        Counter++;
    }
        
    Counter = 0x00;    
    while (!(UCSRA & (1<<UDRE)));
    UDR = 0x0A;    
    while (!(UCSRA & (1<<UDRE)));
    UDR = 0x0D;    
}

ISR(TIMER1_OVF_vect)
{
    cli();
    Frequenz = Zaehler;
    Zaehler = 0x00;
    TCNT1H = 0x0B;
    TCNT1L = 0xDB;
    sei();
                
    itoa(Frequenz, data, 10);      
    Send_UART(data);
}


ISR(INT0_vect)
{
    Zaehler++;
}
Allerdings stimmt die Frequenz nicht mit der Frequenz des Sensors überein (ich kontrolliere das per Oszi). Der Mikrocontroller spuckt mir immer einen Wert aus der 100-200 zu hoch ist.
Weiß einer woran das liegen könnte?

Danke für die Hilfe!