Servus,
nachdem mich Google nicht weiter gebracht hat und ich auch nich mehr
weiter weiß, hier mal die Frage an alle.
Ich habe einen Atmega 328P der mit Atmel Studio 6 und AVRISP mkII
programmiert wird. Wenn ich nun allerdings über die Serielle
Schnittstelle was schicken will, erscheint bei mir auf dem PC nur
"unsichtbare" Zeichen (soll heißen: im Monitor kommt etwas an, es ist
aber so zu sagen, weiße Schrift auf weißem Hintergrund). Zum empfangen
nutze ich einen Parallel Programmer oder eine Bluetooth-Verbindung (lief
vorher bei einem Arduino ohne Probleme).
Habe es jetzt schon mit verschiedenen Monitoren versucht (Arduino,
CoolTerm, Q Serial, Tera Term).
Vielleicht hat ja jemand eine Idee woran es liegen könnte.
Gruß Alex
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | #define F_CPU 8000000UL // Systemtakt in Hz
|
5 |
|
6 | #define BAUD 9600UL // Baudrate
|
7 |
|
8 | #define TEILER ((F_CPU+BAUD*8)/(BAUD*16)-1) // Runden
|
9 | #define BAUD_REAL (F_CPU/(16*(TEILER+1))) // Reale Baudrate
|
10 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille
|
11 |
|
12 | #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
|
13 | #error Systematischer Fehler der Baudrate grösser 1%!
|
14 | #endif
|
15 |
|
16 | void usart_init(void);
|
17 | void usart_transmit(unsigned char c);
|
18 | void usart_write (char* s);
|
19 |
|
20 | int main(){
|
21 |
|
22 | usart_init();
|
23 | while(1){
|
24 |
|
25 | usart_write("Hallo Welt\n");
|
26 | _delay_ms(1000);
|
27 | }
|
28 | }
|
29 |
|
30 | // USART initialisieren
|
31 | void usart_init(void){
|
32 | // Teiler der Baudrate in Register schreiben
|
33 | UBRR0H = TEILER >> 8;
|
34 | UBRR0L = TEILER & 0xFF;
|
35 |
|
36 | // Sender einschalten
|
37 | UCSR0B |= (1<<TXEN0);
|
38 | // Asynschron, 8 Datenbit, Kein Paritätsbit, 1 Stoppbit = 8N1
|
39 | UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
|
40 | }
|
41 |
|
42 | // Ein Zeichen senden
|
43 | void usart_transmit(unsigned char c){
|
44 | // Warten bis UDR0 leer ist
|
45 | while (!(UCSR0A & (1<<UDRE0)));
|
46 |
|
47 | // Zeichen in Puffer schreiben
|
48 | UDR0 = c;
|
49 | }
|
50 |
|
51 | // Eine Zeichenkette senden
|
52 | void usart_write (char* s)
|
53 | {
|
54 | // s ist ein Zeiger auf eine Zeichenkette
|
55 | // *s ist der Inhalt (also das Zeichen an der Stelle)
|
56 | // solang der Zeiger auf die Zeichenkette nicht auf \0 zeigt
|
57 | while (*s)
|
58 | {
|
59 | usart_transmit(*s);
|
60 | s++; // Zeiger um 1 erhöhen
|
61 | }
|
62 | }
|