#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "uart.h"
#include <stdio.h>
volatile u08 UART_Ready;
volatile u08 UART_ReceivedChar;
u08 UART_RxChar;
u08* pUART_Buffer;

prog_char UART_pszEndOfLine[3] = {0x0d,0x0a,0};



/************************************************** *********************************
Schrittmotoransteuerung Poti und Display
************************************************** **********************************

Johannes Glaser
Mainstraße 52
97334 Nordheim
jojo.glaser@web.de
ICQ: 348-870-813
09381 4141
************************************************** **********************************/

#include <avr/io.h>
#include <inttypes.h>


//################################################## #################################
//############### Vatiablen setzen und initialisieren ###############################
//################################################## #################################

//Serielles Netzwerk Seriell
//Sender
unsigned char SeriellerPort_Hi ;
unsigned char SeriellerPort_Lo ;
unsigned char SeriellerPort_Reset ;

unsigned char SenderBitRegister[21] ;
unsigned char SenderBitRegisterZaehler ;

unsigned short SenderImpulslaenge = 1;
unsigned short SenderImpulslaengeZaehler ;

//Empfänger
unsigned char SeriellerPin_Hi ;
unsigned char SeriellerPin_Hi_Merker ;
unsigned char SeriellerPin_Lo ;
unsigned char SeriellerPin_Lo_Merker ;
unsigned char SeriellerPin_Reset ;
unsigned char SeriellerPin_Reset_Merker ;

unsigned char EmpfaengerRegister[51] ;
unsigned char EmpfaengerRegisterZaehler ;

unsigned short SeriellerPin_Hi_Zaehler ;
unsigned short SeriellerPin_Lo_Zaehler ;
unsigned short SeriellerPin_Reset_Zaehler ;
unsigned short SeriellerPin_Prell_Zeit = 2;

unsigned char EmpfaengerRiegelReset ;

//Port Variablen
unsigned char Pin_SeriellerPort_Hi ; //Ausgang
unsigned char Pin_SeriellerPort_Lo ; //Ausgang
unsigned char Pin_SeriellerPort_Reset ; //Ausgang

unsigned char Pin_SeriellerPin_Hi ; //Eingang
unsigned char Pin_SeriellerPin_Lo ; //Eingang
unsigned char Pin_SeriellerPin_Reset ; //Eingang


//Serielle Datenübertragung über 2 Pins für Temperatur
unsigned char Pin_Serielle_Bit ;
unsigned char Pin_Serielle_Bit_Merker ;
unsigned char Pin_Serielle_Setzen ;
unsigned char Pin_Serielle_Setzen_Merker ;

unsigned char Pin_Serielle_Bit2 ;
unsigned char Pin_Serielle_Setzen2 ;

unsigned char BitEmpfangen ;
unsigned short BitAdresse[11] = {0,1,2,4,8,16,32,64,128,256,512};

unsigned short TemperaturTmp ;
unsigned short TemperaturTmp1 ;
unsigned short TemperaturTmp2 ;
unsigned short Temperatur ;

unsigned short Temperatur_Abfrage_Zeit = 10;
unsigned short Temperatur_Abfrage_Zaehler ;


//Fertigliste wenn alle Seriellen daten gesendet und empfangen sind alle 1
unsigned short FertigSender = 1;
unsigned short FertigEmpfaenger = 1;
unsigned short FertigTemperatur = 1;


//Empfaenger Daten
unsigned short TemperaturEmpfangen ;
unsigned short AuszugWert ;
unsigned char SystemStatus ;
unsigned char Teilingsfaktor ;
unsigned char Hellichkeit ;
unsigned char Auszug ;
unsigned char LAN_nicht_Verbunden ;
unsigned char Nullpunkt_festlegen ;
unsigned char Temp_Ausgleich_EIN ;
unsigned char Temp_Ausgleich_AUS ;
unsigned char Joistik_EIN ;
unsigned char Joistik_AUS ;

unsigned char FreieEmpfaengerFunktion_1 ;
unsigned char FreieEmpfaengerFunktion_2 ;
unsigned char FreieEmpfaengerFunktion_3 ;
unsigned char SicherheitsBitsEmpfaenger ;

//Sender Daten
unsigned short Temperatur ;
unsigned short PotiWert ;
unsigned char SicherheitsBits2 ;


//Podi Abfrage
unsigned short ad_wert_zero ;

unsigned short ad_wert_up_max = 980;
unsigned short ad_wert_up_min ;

unsigned short ad_wert_down_max ;
unsigned short ad_wert_down_min = 670;

unsigned short ad_wert_up_diff ;
unsigned short ad_wert_down_diff ;

unsigned short ad_wert_up_Poti ;
unsigned short ad_wert_down_Poti ;

short prozent ;
short PotiProzent ;

unsigned short PotiADWert ;


//Display
//Nur Hellichkeit ändern, wenn sie sich auch endern soll.
unsigned char Hellichkeit_Merker ;

//Arrays für das Display festlegen
unsigned char messagenumber ;
unsigned char messagenumberMerker ;

unsigned char messageSystemStatus[21] ;

const char *messages[] = { "\r ",
/* 1 */ "\rLAN_nicht Verbunden ",
/* 2 */ "\rNullpunkt festlegen ",
/* 3 */ "\r Temp_Ausgleich EIN ",
/* 4 */ "\r Temp_Ausgleich AUS ",
/* 5 */ "\r Joistik EIN ",
/* 6 */ "\r Joistik AUS ",
/* 7 */ "\r Hellichkeit = 0% ",
/* 8 */ "\r Hellichkeit = 30% ",
/* 9 */ "\r Hellichkeit = 50% ",
/* 10 */ "\r Hellichkeit = 75% ",
/* 11 */ "\r Hellichkeit = 100% ",
/* 12 */ "\r System Status "
};


//Anzeigen Länge
unsigned short InfoAnzeigeLaenge = 10 ;
unsigned short InfoAnzeige_Zaehler ;

unsigned short LAN_nicht_Verbunden_Anzeigen ;
unsigned short Nullpunkt_festlegen_Anzeigen ;
unsigned short Temp_Ausgleich_EIN_Anzeigen ;
unsigned short Temp_Ausgleich_AUS_Anzeigen ;
unsigned short Joistik_EIN_Anzeigen ;
unsigned short Joistik_AUS_Anzeigen ;
unsigned short Hellichkeit_0_Anzeigen ;
unsigned short Hellichkeit_30_Anzeigen ;
unsigned short Hellichkeit_50_Anzeigen ;
unsigned short Hellichkeit_75_Anzeigen ;
unsigned short Hellichkeit_100_Anzeigen ;

unsigned short LAN_nicht_Verbunden_Merker ;
unsigned short Nullpunkt_festlegen_Merker ;
unsigned short Temp_Ausgleich_EIN_Merker ;
unsigned short Temp_Ausgleich_AUS_Merker ;
unsigned short Joistik_EIN_Merker ;
unsigned short Joistik_AUS_Merker ;
unsigned short Hellichkeit_0_Merker ;
unsigned short Hellichkeit_30_Merker ;
unsigned short Hellichkeit_50_Merker ;
unsigned short Hellichkeit_75_Merker ;
unsigned short Hellichkeit_100_Merker ;

//Hellichkeitsaufteilung
unsigned char Hellichkeit_0 ;
unsigned char Hellichkeit_30 ;
unsigned char Hellichkeit_50 ;
unsigned char Hellichkeit_75 ;
unsigned char Hellichkeit_100 ;



//################################################## #################################
//############### I/O-Ports initialisieren ##########################################
//################################################## #################################

//----------------------------------------------------------------------------------
void Init(void)
{
/*
Initialisierungsfunktion für die Hardware des AVR MEGA 8151
Hier werden alle Hardware-Komponenten in initialisiert
"in Grundstellung gebracht" 0=Eing. 1=Ausg.
*/

/*
Ein/Ausgangstabelle:
Port B 0 = 0 free
Port B 1 = 0 free
Port B 2 = 0 free
Port B 3 = 0 free
Port B 4 = 0 free
Port B 5 = 0 free
Port B 6 = 0 Pin_Serielle_Setzen
Port B 7 = 0 Pin_Serielle_Bit

Port C 0 = 0 free
Port C 1 = 0 free
Port C 2 = 0 free
Port C 3 = 0 free
Port C 4 = 0 free
Port C 5 = 0 free
Port C 6 = 0 free
Port C 7 = 0 free

Port D 0 = 0 free
Port D 1 = 1 Display
Port D 2 = 0 SeriellerPin_Bit
Port D 3 = 0 SeriellerPin_Set
Port D 4 = 0 SeriellerPin_Reset
Port D 5 = 1 SeriellerPort_Bit
Port D 6 = 1 SeriellerPort_Set
Port D 7 = 1 SeriellerPort_Reset
*/


// Ausgänge / Eingänge initialisieren
DDRB = 1; //00000001
DDRC = 0; //00000000
DDRD = 224; //11100000

//Grundstellung
PORTB = 254; //11111110
PORTC = 255; //11111111
PORTD = 001; //00000001


} // Ende der Funktion Initialisierung()
//----------------------------------------------------------------------------------