/*
* CCD.c
*
* Created: 15.03.2016 20:35:14
*  Author: Dieter
*/
#define SH    PIND2  //
#define C1	  PIND3  //
#define C2    PIND4  //
#define RS    PIND5  //
#define BT    PIND6  //


#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	
	DDRD  = 0b01111100;
	// take all to LOW
	PORTD = 0b00000000;
	
	
	while(1)
	{
		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		PORTD |=  (1 << C1);
		PORTD &= ~(1 << C2);
		__asm__("nop\n\t");
		PORTD |=  (1 << SH);			// Shift Pulse an
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");

		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << SH);			// Shift Pulse aus
		__asm__("nop\n\t");				
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		PORTD |=  (1 << C2);
		PORTD &= ~(1 << C1);
		__asm__("nop\n\t");
		__asm__("nop\n\t");				
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");

		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");				// 1. Dummy-Messung
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD |=  (1 << BT);
		PORTD &= ~(1 << RS);
		PORTD |=  (1 << C2);
		PORTD &= ~(1 << C1);
		__asm__("nop\n\t");
		__asm__("nop\n\t");				// 2. Dummy-Messung
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		PORTD &= ~(1 << BT);
		PORTD |=  (1 << RS);
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");
		__asm__("nop\n\t");

		
		for (uint16_t i=0; i<1046; i++)
		{
			PORTD |=  (1 << BT);
			PORTD &= ~(1 << RS);
			PORTD |=  (1 << C1);
			PORTD &= ~(1 << C2);
			__asm__("nop\n\t");
			__asm__("nop\n\t");				// Ab hier kann ausgelesen werden
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			PORTD &= ~(1 << BT);
			PORTD |=  (1 << RS);
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			PORTD |=  (1 << BT);
			PORTD &= ~(1 << RS);
			PORTD |=  (1 << C2);
			PORTD &= ~(1 << C1);
			__asm__("nop\n\t");
			__asm__("nop\n\t");				// Ab hier kann ausgelesen werden
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			__asm__("nop\n\t");
			PORTD &= ~(1 << BT);
			PORTD |=  (1 << RS);
			//			__asm__("nop\n\t");
			//			__asm__("nop\n\t");
			//			__asm__("nop\n\t");
			//			__asm__("nop\n\t");
		}
	}
}