Hallo! Ich möchte mit einem ATMega324P testweise einfach nur kontinuierlich ein Zeichen an meinen PC senden. Es ist zusätzlich ein externer Quarz mit 14,7456MHz verbaut, ebenso ein MAX3232 um den Pegel für die Übertragung zu verstärken. Nach etlichen Versuchen hab ich es leider nicht hinbekommen. Einstellungen sollten soweit korrekt sein. Möglicherweise kann mir hier ja jemand helfen und mir den/die Fehler nennen. Die blinkende LED am Programmende soll nur dazu dienen, um zu sehen, ob das Programm richtig drauf ist. :) Bin leider ein ziemlicher Anfänger, was die Programmierung der Atmels angeht.. Hier ist mein Code:
1 | #include <avr/io.h> |
2 | #include<stdlib.h> |
3 | #include<stdio.h> |
4 | #include<util/delay.h> |
5 | #include <string.h> |
6 | |
7 | #define LED PA2
|
8 | #define set_bit(byte,bit) (byte) |= (1<<(bit))
|
9 | #define clear_bit(byte,bit) (byte) &= ~(1<<(bit))
|
10 | |
11 | #ifndef F_CPU
|
12 | #define F_CPU 14745600UL //CPU Frequency Hz
|
13 | #endif
|
14 | #define UART_BAUD_RATE 9600 //kHz
|
15 | // Hilfsmakro zur UBRR-Berechnung
|
16 | #define UART_UBRR_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
|
17 | |
18 | |
19 | int main( void ) |
20 | {
|
21 | blink(); |
22 | /* Set baud rate */
|
23 | UBRR0H = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8 ); |
24 | UBRR0L = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ); |
25 | |
26 | /* Enable receiver and transmitter */
|
27 | UCSR0B = (1<<RXEN0)|(1<<TXEN0); |
28 | |
29 | /* Set frame format: 8data, 2stop bit */
|
30 | UCSR0C = (1<<USBS0)|(3<<UCSZ00); |
31 | |
32 | UCSR0A = (0<<U2X0); |
33 | |
34 | unsigned char zeichen = 't'; |
35 | |
36 | while (1) |
37 | {
|
38 | _delay_ms(50); |
39 | //warten bis letztes Zeichen gesendet
|
40 | UDR0 = zeichen; |
41 | loop_until_bit_is_set(UCSR0A, UDRE0); |
42 | |
43 | }
|
44 | |
45 | return 0; |
46 | }
|
47 | |
48 | |
49 | |
50 | /* Blinkende LED an Pin PA2 */
|
51 | |
52 | |
53 | void blink() |
54 | {
|
55 | set_bit(DDRA,LED); |
56 | while(1) |
57 | {
|
58 | set_bit(PORTA,LED); |
59 | _delay_ms(200); |
60 | clear_bit(PORTA,LED); |
61 | _delay_ms(200); |
62 | }
|
63 | }
|
Vielen Dank!! Gruß, Sebastian