//----------------------------------------------------------------------------------------------------------------------
// Titel :
// Prozessor : ATmega2561 mit 16 MHz
// Funktion : Ausgabe der Eingangsspannung und visuelle Darstellung der Schaltzustände, an den Port A0 und Port A1,
// durch LED-Anzeigen auf dem Display
// Schaltung : ISP Programmieradapter an PC oder Laptop und an die ISP Schnittstelle auf dem Mikrocontroller
// anschließen
// Sprache : C
// Datum : 02.12.07
// Version : 3.0 AD- Wandler & Komparator
// Autor : Sven Zöllner, Christian Schmidt
//----------------------------------------------------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//----------------------------------------------------------------------------------------------------------------------
#define LCD_DDR DDRB
#include
#include
#include
#include
//----------------------------------------------------------------------------------------------------------------------
int main()
{
// int sample,i,value; // Variablen definitionn
// int adclow;
// int adchigh;
int pos;
char wert[1] = " ";
char t_wert[20];
// Display initialisieren ANFANG-------------------------------------------------------------------------------
LCD_Init();
delay_ms(100);
LCD_Cls(white);
Orientation = Portrait180;
LCD_Rect (5, 5, 126, 80, 1, black);
LCD_Print ("Eingangsspannung:",8,8,1,1,2,blue ,white);
LCD_Print ("Port A0",23,51,1,1,1,black,white);
LCD_Print ("Port A1",23,65,1,1,1,black,white);
LCD_Circle (15,54,5,0,0,black); // LED-Anzeige 1 einfacher Rahmen
LCD_Circle (15,54,4,1,1,red); // LED-Anzeige 1 AUS
LCD_Circle (15,68,5,0,0,black); // LED-Anzeige 2 einfacher Rahmen
LCD_Circle (15,68,4,1,1,red); // LED-Anzeige 2 AUS
// Display initialisieren ENDE--------------------------------------------------------------------------------------
uint16_t adcval;
DDRA = 0xFF;
// AD- Wandler & Komparator initialisieren ANFANG-------------------------------------------------------------------
init ();
while (1)
{
wdt_reset ();
if (ACSR&0x20)
{
PORTA |= (1<
PORTB |= (1<
LCD_Circle (15,54,4,1,1,green);
adcval = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */
itoa(adcval,wert,10); // schreibt den int Wert in ASCI um
LCD_Print( wert,8,28,1,1,2,black ,white);
if (adcval < 10)
{
pos = 15;
}
else
{
pos = 15+5;
}
if (adcval > 47)
{
LCD_Circle (15,68,4,1,1,green);
PORTA |= (1<
}
else
{
LCD_Circle (15,68,4,1,1,red);
PORTA &= ~(1<
}
LCD_Print(" Volt ",pos,28,1,1,2,black ,white); // Ausgabe "Volt" auf dem Display Pos. x=15 y=28
delay_ms(0);
}
else
{
PORTA &= ~(1<
PORTB &= ~(1<
LCD_Circle (15,54,4,1,1,red);
strcpy (t_wert, "unter 25 V ");
LCD_Print (t_wert,10,28,1,1,2,black ,white);
}
}
}
|