Hallo
Ich probiere mich grade an der Kommunikation zwischen PC und usart des
Atemga8 nur will der leider nicht so wie Ich es gerne hätte.
Ich habe die Schaltung fast so wie in den Tutorials von
mikrocontroller.net
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART)
nur habe ich ein SUB-D9-Male für den direkten anschluss an den PC ohne
gekreuztes Kabel
entsprechend pin 2 und 3 , 7 und 8 getauscht
und ich habe ein st232cn anstelle eines MAX232
und mein Code sieht so aus
1 | #include <avr/io.h>
|
2 | #define F_CPU 1000000 /* evtl. bereits via Compilerparameter definiert */
|
3 | #define BAUD 2400
|
4 | #include <util/setbaud.h>
|
5 |
|
6 | void uart_init(void)
|
7 | {
|
8 | UBRRH = UBRRH_VALUE;
|
9 | UBRRL = UBRRL_VALUE;
|
10 | /* evtl. verkuerzt falls Register aufeinanderfolgen (vgl. Datenblatt)
|
11 | UBRR = UBRR_VALUE;
|
12 | */
|
13 | #if USE_2X
|
14 | /* U2X-Modus erforderlich */
|
15 | UCSRA |= (1 << U2X);
|
16 | #else
|
17 | /* U2X-Modus nicht erforderlich */
|
18 | UCSRA &= ~(1 << U2X);
|
19 | #endif
|
20 |
|
21 | // hier weitere Initialisierungen (TX und/oder RX aktivieren, Modus setzen
|
22 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
23 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
|
24 |
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | int uart_putc(unsigned char c)
|
34 | {
|
35 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
36 | {
|
37 | }
|
38 |
|
39 | UDR = c; /* sende Zeichen */
|
40 | return 0;
|
41 | }
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | uint8_t uart_getc(void)
|
48 | {
|
49 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
|
50 | ;
|
51 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 | int main(void)
|
57 |
|
58 | {
|
59 | uint8_t buffer;
|
60 | uart_init();
|
61 |
|
62 | while(true)
|
63 | {
|
64 | buffer = uart_getc();
|
65 | uart_putc(buffer);
|
66 | }
|
67 |
|
68 |
|
69 | }
|
mein putty sagt leider nichts (com1 mit 2400er baudrate)
wo könnte der Fehle sein?
(Mod: Tippfehler im Topic korrigiert, Codeformatierung aktiviert)