Uart schnittstelle erscheint leer im Seriellen Monitor mit AVR

OP #3353951
Lesenswert?
• ▲
▼
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.