GRBL-Signalumsetzer zu ULN2003 in Atmel Studio

Hallo Community,

bin blutiger Anfänger was das Programmieren von Microcontrollern angeht und hoffe auf eure Hilfe. Mein Quellcode funktioniert leider nicht so wie er sollte.

Es geht darum, eine positive Flanke auf einem Mikrocontroller einzulesen und einen Zähler bei jeder positiven Flanke zu erhöhen. Das sollte eigentlich ja nicht allzu schwer sein. Leider bin ich am verzweifeln und finde meine Fehler im Programm nicht.
Hintergrund ist die Signalumsetzung von einer externen GRBL-Steuerung (XYZ) für Schrittmotoren. Die Steuerung gibt pro Achse jeweils ein Drehrichtungssignal und ein Schrittsignal aus. Diese Signale müssen für den Schrittmotorentreiber ULN2003 gewandelt werden (Patternausgabe).

Bisher will ich mich noch nicht auf die Drehrichtung konzentrieren. Dies ist sollte dann nur noch eine kleine Erweiterung des dann fertigen Quellcodes sein.

Der verwendete Controller ist ein ATtiny48-PU.
Die Programmierung ist teilweise untypisch programmiert. Bitte seht mir dies nach.
Der Programmcode ist unten beigefügt. Programmiert wird mit Atmel Studio.

Ich hoffe auf eure Unterstützung und Hinweise.

Viele Grüße kleiner_kaktus

Main.cpp:

/*
* PE.cpp
*
* Created: 20.02.2020 01:13:05
* Author : Jan
*/

#include <avr/io.h>
#include <util/delay.h>
#include "ULN2003_Driver.h"


// +++++++++++++++++++++++++++++++++++++++++++++++++++ DEFINITIONS +++++++++++++++++++++++++++++++++++++++++++++++++++

//Frequency CPU
# define F_CPU 16.000;

// Verzögerung
//#define delay _delay_ms(100)

//Setzen und Rücksetzen von Ausgängen


/*
#define XI2_On PORTB |= (1<<PORTB1)
#define XI2_Off PORTB &= ~(1<<PORTB1)

#define XI3_On PORTB |= (1<<PORTB2)
#define XI3_Off PORTB &= ~(1<<PORTB2)

#define XI4_On PORTB |= (1<<PORTB3)
#define XI4_Off PORTB &= ~(1<<PORTB3)
*/

int main(void)
{
	// +++++++++++++++++++++++++++++++++++++++++++++++++++ SETUP +++++++++++++++++++++++++++++++++++++++++++++++++++
	
	initPortsDataDirection();


	// +++++++++++++++++++++++++++++++++++++++++++ Variablendeklaration +++++++++++++++++++++++++++++++++++++++++++

	//X-Achse

	bool bXFlankenmerker = false;
	bool bXDI_Signal = false;
	
	bool bXDir = false;

	//Zähler für Schritte
	uint8_t iCountX = 1; //Zählvariable
	uint8_t iCountMax = 8; //Maximalwert Zähler


	// +++++++++++++++++++++++++++++++++++++++++++++++++++ LOOP +++++++++++++++++++++++++++++++++++++++++++++++++++
	while (1)
	{
		// ++++++++++++++++++++++++++++++++++++++++++++ X-Achse +++++++++++++++++++++++++++++++++++++++++++++++++++++++

		// >>>>>>>>>>>>> X-Step einlesen (Flanke X)

		bXDI_Signal = (PINB & (1<<PINB5));

		if ((bXDI_Signal == true) && (bXFlankenmerker == false))
		{
			iCountX++;
			bXFlankenmerker = true;
		} 
		else if (bXDI_Signal == false)
		{
			bXFlankenmerker = false;
		}


		//Grenzen Zähler festlegen
		if (iCountX > iCountMax)
		{
			iCountX = 1;
		}

		if (iCountX <=0)
		{
			iCountX = 1;
		}

		// Zustände
		switch (iCountX)
		{
			case 1: XI1_On(); XI2_Off(); XI3_Off(); XI4_Off(); break; //1000
			case 2: XI1_On(); XI2_On(); XI3_Off(); XI4_Off(); break; //1100
			case 3: XI1_Off(); XI2_On(); XI3_Off(); XI4_Off(); break; //0100
			case 4: XI1_Off(); XI2_On(); XI3_On(); XI4_Off(); break; //0110
			case 5: XI1_Off(); XI2_Off(); XI3_On(); XI4_Off(); break; //0010
			case 6: XI1_Off(); XI2_Off(); XI3_On(); XI4_On(); break; //0011
			case 7: XI1_Off(); XI2_Off(); XI3_Off(); XI4_On(); break; //0001
			case 8: XI1_On(); XI2_Off(); XI3_Off(); XI4_On(); break; //1001
			default: XI1_Off(); XI2_Off(); XI3_Off(); XI4_Off(); break; //0000
		}
	}
}

ULN2003_Driver.h

/*
* ULN2003_Driver.h
*
* Created: 29.02.2020 10:00:20
*  Author: Jan
*/


#ifndef ULN2003_DRIVER_H_
#define ULN2003_DRIVER_H_


// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DataDirectionsRegister setzen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void initPortsDataDirection()
{
	// Ein-/ Ausgänge definieren --> Data Direction Register (1 - Ausgang, 0-Eingang)
	//DDRB = 0b00001111;
	//DDRC = 0b00001111;
	//DDRD = 0b00001111;

	// OUTPUTS B
	DDRB |= (1<<DDB0);
	DDRB |= (1<<DDB1);
	DDRB |= (1<<DDB2);
	DDRB |= (1<<DDB3);

	//INPUTS B
	DDRB &= ~(1<<DDB4);
	DDRB &= ~(1<<DDB5);

}

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funktionen X-Achse ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Ausgänge IN 1 bis IN4

void XI1_On(){PORTB |= (1<<PORTB0);}
void XI1_Off(){PORTB &= ~(1<<PORTB0);}

void XI2_On(){PORTB |= (1<<PORTB1);}
void XI2_Off(){PORTB &= ~(1<<PORTB1);}

void XI3_On(){PORTB |= (1<<PORTB2);}
void XI3_Off(){PORTB &= ~(1<<PORTB2);}

void XI4_On(){PORTB |= (1<<PORTB3);}
void XI4_Off(){PORTB &= ~(1<<PORTB3);}

#endif /* ULN2003_DRIVER_H_ */