Hallo,
ich habe ein Problem mit dem Uart, auf dem PC etwas empfangen kann ich
zwar, jedoch scheint beim AVR auf dem Pollin-Evaluations-Board nichts
anzukommen.
Wenn ich TX an RX halte, empfange ich jedes Zeichen wieder. Theoretisch
müsste alles funktionieren.
Wenn ich jedoch eine Drahtbrücke auf der IC-Fassung einsetze, empfange
ich nicht jedes Zeichen doppelt. Desweiteren kann ich nur etwas
empfangen, wenn ich einen Programmer in die ISP-Buchse eingesteckt habe.
1 | #define F_CPU 16000000UL
|
2 | #define BAUD 9600UL
|
3 | #define UBRR_BAUD ((F_CPU)/(BAUD*16UL))-1
|
4 |
|
5 | #include <avr/io.h>
|
6 | #include <util/delay.h>
|
7 | #include <stdlib.h>
|
8 | #include <avr/interrupt.h>
|
9 |
|
10 |
|
11 |
|
12 | void init_uart(void)
|
13 | {
|
14 | // Baudrate einstellen
|
15 | UBRRH = (uint8_t) (UBRR_BAUD>>8);
|
16 | UBRRL = (uint8_t) (UBRR_BAUD);
|
17 | // Aktivieren von receiver und transmitter
|
18 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
|
19 |
|
20 | // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
|
21 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
|
22 | }
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | int uart_putc(unsigned char c)
|
28 | {
|
29 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
30 | {
|
31 | }
|
32 |
|
33 | UDR = c; /* sende Zeichen */
|
34 |
|
35 | return 0;
|
36 | }
|
37 |
|
38 |
|
39 | /* puts ist unabhaengig vom Controllertyp */
|
40 |
|
41 | void uart_puts (char *s)
|
42 | {
|
43 | while (*s)
|
44 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
|
45 | uart_putc(*s);
|
46 | s++;
|
47 | }
|
48 | }
|
49 |
|
50 | uint8_t uart_getc(void)
|
51 | {
|
52 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
|
53 | ;
|
54 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
55 | }
|
56 |
|
57 |
|
58 |
|
59 | int main(void)
|
60 | {
|
61 | sei();
|
62 | //DDRD|=(1<<PD7);
|
63 | init_uart();
|
64 | uart_puts("Bereit....");
|
65 | uint8_t c =uart_getc();
|
66 | uart_puts("Etwas Empfangen!");
|
67 | return 0;
|
68 | }
|
Der Code ist zu 90% aus dem Tutorial. Das Problem ist nun, dass ich
niemals "Etwas Empfangen!" empfange.