Hallo

Ich bin im Moment zu faul dein Timersetup nachzuprüfen, weil ich die Bedeutung der einzelnen Bits im TCCR1B-Register nicht auswendig kenne. Hier wäre es sehr hilfreich, wenn du dazu ein paar Kommentare einfügen würdest...

Was mir aber sofort aufgefallen ist: Du setzt bzw. prüfst die Pins der Ports nicht richtig. Die Basis bildet die Definitionen in der entsprechenden io.h-Datei, für den Mega32 auf dem M32 befinden sich die in der Datei iom32.h im avr-Pfad. Hier der entsprechende Abschnitt für Port C/D:
Code:
/* PORTC */
#define PC7     7
#define PC6     6
#define PC5     5
#define PC4     4
#define PC3     3
#define PC2     2
#define PC1     1
#define PC0     0

/* DDRC */
#define DDC7    7
#define DDC6    6
#define DDC5    5
#define DDC4    4
#define DDC3    3
#define DDC2    2
#define DDC1    1
#define DDC0    0

/* PINC */
#define PINC7   7
#define PINC6   6
#define PINC5   5
#define PINC4   4
#define PINC3   3
#define PINC2   2
#define PINC1   1
#define PINC0   0

/*
   PD7 = OC2
   PD6 = ICP
   PD5 = OC1A
   PD4 = OC1B
   PD3 = INT1
   PD2 = INT0
   PD1 = TXD
   PD0 = RXD
 */

/* PORTD */
#define PD7     7
#define PD6     6
#define PD5     5
#define PD4     4
#define PD3     3
#define PD2     2
#define PD1     1
#define PD0     0
Wenn du auf einen bestimmten Pin eines Ports mit DDRx, PORTx oder PINx zugreifen willst, musst du dazu die Wertigkeit des Pins verwenden und nicht seine Nummer! PC3 ist z.B. das dritte Bit (Zählung startet bei 0!) mit dem Wert 2^3 oder 8. Um diesen Pin einzulesen muss die Abfrage deshalb so aussehen:

if(PINC & 8)...

Deshalb verwendet man hier die Bitschieberei um das richtige Bit anzusprechen. (1<<PC3) schreibt die 1 ganz rechts in das Byte und schiebt es dann 3 mal nach links. Das ergibt genau die 8:

if(PINC & (1<<PC3))...

Das gilt dann auch hier:

PORTD ^= (1<<PD5);

DDRD |= (1<<PD5); //PD5 als Ausgang
DDRC &=~ (1<<PC3); //PC3 als Eingang

Hier habe ich das kapiert:
https://www.roboternetz.de/phpBB2/ze...=295604#295604

Vielleicht löst das dann schon dein Problem.

Gruß

mic