Forum: Compiler & IDEs Serielles Echo liefert nicht alle Tasten korrekt zurück


von SkySurfer (Gast)


Lesenswert?

Hi,

ich hab einen ATMega 8 mit einem FT232 mit dem PC verbunden.
Und wollte zum testen ein serielles Echos schreiben:

echo.c:
1
#include "serialIO.h"
2
3
#define FOSC 1200000
4
#define BAUD 9600
5
#define UBRR FOSC/16/BAUD-1
6
7
8
void main(void)
9
{
10
  USART_Init(UBRR) ;
11
  
12
  
13
  while(1)
14
  {
15
    USART_Transmit(USART_Receive());
16
  }
17
}

serialIO.c:
1
#include "serialIO.h"
2
3
void USART_Init(unsigned int ubrr)
4
{
5
  // Calc speed
6
  //unsigned int ubrr = freq / 16 / baud - 1;  
7
8
  // Set Baudrate 
9
  UBRRH = (unsigned char) (ubrr>>8);
10
  UBRRL = (unsigned char) ubrr;
11
  
12
  // Enable RX and TX
13
  UCSRB = (1<<RXEN)|(1<<TXEN);
14
  // Set 8n1
15
  UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
16
}
17
18
void USART_Transmit(char data)
19
{
20
  // Wait for empty transmit buffer
21
  while(!(UCSRA & (1<<UDRE)) );
22
23
  // Set data
24
  UDR = data;
25
}
26
27
char USART_Receive(void)
28
{
29
  // Wait for data to be received
30
  while(!(UCSRA & (1<<RXC)) );
31
32
  // Get Data and return
33
  return UDR;
34
}

Jedoch wird aus einem s  ein c  machmal werden die Buchstaben auch als 
Großbuchstaben ausgegeben. Woran könnte das liegen ?

Gruß SkySurfer

von Ralf (Gast)


Lesenswert?

Es könnte an deiner Quarzfrequenz liegen, 12MHz ist kein Baudratenquarz. 
Daher hast du evtl. zu große Toleranzen in den Bitzeiten (mehr als 3% 
Abweichung sind glaub ich nicht erlaubt). Probier es mal mit einem 
11,0592 MHz Quarz. Musst halt die Software entsprechend anpassen.

Ralf

von M80 (Gast)


Lesenswert?

Fehler --> 0,159999%

von M80 (Gast)


Lesenswert?

>#define UBRR FOSC/16/BAUD-1

#define UBRR FOSC/(16*BAUD)-1

von M80 (Gast)


Lesenswert?

bei -> #define FOSC 1200000 eine Null mehr, sonst sind es nur 1,2MHz

von Jörg X. (Gast)


Lesenswert?

@M80:
schlaumeier ;)
> #define UBRR FOSC/16/BAUD-1
und
> #define UBRR FOSC/(16*BAUD)-1
ist das Gleiche, solange die Divisionen von links nach rechts 
abgearbeitet werden, was normalerweise der Fall ist.
scnr

-- Jörg

von M80 (Gast)


Lesenswert?

Eiferbibsch ja sowas auch.

von SkySurfer (Gast)


Lesenswert?

Mit der Richtigen Frequenz funktioniert das gleich viel besser, nur noch 
Umlaute werden falsch dargestellt, könnte das an der Terminaleinstellung 
liegen?

Ich hab in der Main noch :
1
  USART_Receive(); // für einfacheres Programmieren
2
3
  USART_Transmit('H');
4
  USART_Transmit('a');
5
  USART_Transmit('l');
6
  USART_Transmit('l');
7
  USART_Transmit('o');

eingefügt bekomme aber immer noch die Zeichenkette : Tœeo  wobei das 2. 
Zeichen abhängig von der Eingabe ist mit der man das erste UART_Receive 
beendet.

von M80 (Gast)


Lesenswert?

Welches Terminalprogramm hast Du?

von SkySurfer (Gast)


Lesenswert?

HyperTerminal

von M80 (Gast)


Lesenswert?

Benutze dieses Programm -> http://www.docklight.de/index_de.htm
damit hast du mehr Möglichkeiten.

von Simon K. (simon) Benutzerseite


Lesenswert?

HTerm ist auch ziemlich gut, auch wenn du am Anfang mit dem Funktionen 
überhäuft wirst ;)

http://www.der-hammer.info/terminal/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.