main.c :
Code:
#define CPU_Frequency 4000000 // 4Mhz-Quarz
#define UART_BAUD_RATE 9600 // 9600 Baud
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "funktionen.c"
#include "bitdef.h"
typedef unsigned char BYTE;
typedef unsigned short WORD;
//************************************************************************************************************************
void warten(int t) //ermöglicht Pausen
{
int h;
for (;t>0;t--)
{
for (h=70;h>0;h--) {}
}
return;
}
void uart_init()
{
outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
void uart_nachricht(char* senden) {
for (; *senden != '\0'; senden++) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR=*senden;
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 13;
}
SIGNAL (SIG_UART_RECV) {
char ch;
ch = inp (UDR); // Datenregister auslesen
/* if (inp (USR) & (1 << OR)) { // OverRun Bit gesetzt ?
// Es ist was verloren gegangen / zu lange aufs Auslesen gewartet...
uart_nachricht("UART: Overrun-Bit gesetzt! Nicht schnell genug ausgelesen!");
}
*/
char buffer[1]; buffer[0] = '\0'; buffer[1] = '\0';
buffer[0] = ch;
uart_nachricht("Daten empfangen! Char: ");
uart_nachricht(buffer);
}
int main()
{
DDRA = B00000111; // PortA Pin 0,1,2 als Ausgang, Rest als Eingang
DDRC = 0xff; // PortC als Ausgang
int x = 0; // ADC-Wert
ADCSRA = _BV(ADEN) | _BV(ADPS2);
//Aktivierung des ADC, festlegen eines Prescalers von 16 --> 4Mhz/32=125kHz
//Starten einer einzelnen Konvertierung
//Start einer Wandlung
uart_init();
uart_nachricht("Initalisierung...");
uart_nachricht("Übertragungsrate: 9600 Baud");
for (;;) { // bei 30 läuft der Motor stabil!
PORTA = B00000001; // Rote-LED an
// motor...
PORTC = B00001010;
warten(3000);
PORTC = B00001001;
warten(3000);
PORTC = B00000101;
warten(3000);
PORTC = B00000110;
warten(3000);
}
}
Lesezeichen