Hallo zusammen,
ich habe zur Übung ein eigentlich primitives Programm geschrieben.
Über die serielle Schnittstelle kann ich mit X und Y zwei Led's
einschalten
und mit x und y wieder ausschalten.
Funktioniert soweit auch, nur leider leuchten die angeschlossenen LEDs
nur ziemlich schwach, im Vergleich dazu, wie wenn man sie einfach über
einen High Pegel ansteuern würde.
Die LEDs hängen wie UART an PORTD. Verwendet wird ein Atmega8, avr-gcc
und das Pollin Evaluationsboard.
Könnte es sein, dass UART den PORTD so stark belastet, dass er die LEDs
nicht mehr richtig treiben kann?
Gruß
1 | #include <avr/io.h>
|
2 | #define F_CPU 16000000L
|
3 | #define BAUD 9600L
|
4 | #define UBRR_VAL ((F_CPU+BAUD * 8)/(BAUD*16)-1)
|
5 |
|
6 |
|
7 | char empfangen(void)
|
8 | {
|
9 | while (!(UCSRA & (1<<RXC)))
|
10 | ;
|
11 | return UDR;
|
12 | }
|
13 |
|
14 | void init_uart(void)
|
15 | {
|
16 | DDRD &= 0xE0;
|
17 | UBRRH = UBRR_VAL >> 8;
|
18 | UBRRL = UBRR_VAL & 0xFF;
|
19 | UCSRB = (1<<TXEN) | (1<<RXEN);
|
20 | }
|
21 |
|
22 | int main(void)
|
23 | {
|
24 | init_uart();
|
25 |
|
26 | while(1)
|
27 | {
|
28 | switch (empfangen())
|
29 | {
|
30 | case 'X':
|
31 | PORTD |= 0x40;
|
32 | break;
|
33 | case 'x':
|
34 | PORTD &= 0xBF;
|
35 | break;
|
36 | case 'Y':
|
37 | PORTD |= 0x20;
|
38 | break;
|
39 | case 'y':
|
40 | PORTD &= 0xDF;
|
41 | break;
|
42 | }
|
43 |
|
44 | }
|
45 | return 0;
|
46 | }
|