Hallo!
Also vorweg muß ich sagen, daß ich noch nicht sehr erfahren bin mit den
ATMEGAs..Ich verwende das STK500.
Mein ursprüngliches Programm habe ich nun auf das wesentliche Problem
reduziert.
Ich möchte ein Signal erzeugen, das man per serieller Schnittstelle
abändern kann.
Ich denke, daß ich hier einen grundlegenden Fehler gemacht habe, nur
welchen?? Ich bin schon seit Tagen damit beschäftigt!
Nach dem Start ist auf dem Oszilloskop das Rechtecksignal zu sehen wie
es sein soll.
Sobald ich nun ein Zeichen sende, hält der Controller den Pegel
(beliebig high/low). Er scheint irgendwo hängen zu bleiben.. Nur wo,
warum?
Ich habe dann mal geguckt was passiert wenn ich die LEDs so ansteuer:
1 | PORTC=UDR0; //Bitkombination darstellen
|
hier gibt es kein Problem. Die LEDs werden je nach empfangenem Zeichen
angesteuert.
Wo ist nun mein Fehler???
Würde mich sehr freuen, denn so langsam wird es frustrierend :-)
1 | #define F_CPU 10000000UL //Takt in Hertz
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/delay.h>
|
5 | #include <avr/interrupt.h>
|
6 |
|
7 | volatile unsigned char data;
|
8 | #define myBRR0 64 //9600 bps 10MHz
|
9 | void Uart0Init(void);
|
10 |
|
11 |
|
12 | int main()
|
13 | {
|
14 | DDRC = 0xFF; // Port C komplett Ausgang
|
15 | Uart0Init(); //UART initialisieren
|
16 | PORTC=0x00;
|
17 |
|
18 | while(1)
|
19 | {
|
20 | data=UDR0; //Wertzuweisung
|
21 | PORTC=~PORTC; //toggle
|
22 | _delay_us(data); //warte
|
23 |
|
24 | } // end while(1)
|
25 | } //end main
|
26 |
|
27 |
|
28 |
|
29 | //Routinen
|
30 |
|
31 | void Uart0Init(void) //UART-Initialisierung
|
32 | {
|
33 | UBRR0H = (unsigned char)(myBRR0 >> 8);
|
34 | UBRR0L = (unsigned char)myBRR0;
|
35 | UCSR0B = (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
|
36 | UCSR0C = (3<<UCSZ00); // 8-Bit Charaktersize
|
37 | }
|