Kommunikation CP2102

OP #2720335
Lesenswert?

Hallo zusammen,
ich verwende einen ATMega Controller in kombination mit dem CP2102 als 
USB/UART Brücke um mit dem PC zu kommunizieren. Nun habe ich leider das 
Problem das die Daten sich auf dem Weg zum Controller, bzw. auch anderst 
herum, also vom Controller zum PC verändern und nicht mehr ausgewertet 
werden können. Ich verwende den "Serial Monitor V 1.3.1" als Terminal 
Programm am Pc und der Code auf dem Controller sieht wie folgt aus:
1
/*
2
 * Mein_erstes_Projekt.c
3
 *
4
 * Created: 15.06.2012 16:00:24
5
 *  Author: Eisvogel
6
 */ 
7

8
#define F_CPU 10000000UL
9

10
#define FOSC 10000000
11
#define BAUD 9600
12
#define MYUBRR FOSC/16/BAUD-1 
13

14
#include <avr/io.h>
15

16
unsigned char USART_Receive(void);
17
void USART_Transmit( unsigned char data );
18
void USART_Init( unsigned int ubrr);
19
void USART_Flush(void);
20

21
int main(void)
22
{
23
  //USART initialisieren
24
  USART_Init(MYUBRR);
25
  //Ungültige Daten löschen
26
  USART_Flush();
27
    
28
  DDRB = (1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5);
29

30
  unsigned char Daten;
31
  
32
    while(1)
33
    {
34
    USART_Transmit(Daten = USART_Receive());
35
  }    
36
}
37

38

39
void USART_Init( unsigned int ubrr)
40
{
41
  UBRR0H = (unsigned char)(ubrr>>8); // Set baud rate in high- and low-register
42
  UBRR0L = (unsigned char)ubrr;
43
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); // Set frame format: 8data, 1stop bit
44
  UCSR0B = (1<<RXEN0)|(1<<TXEN0); // Enable receiver and transmitter
45
}
46

47
void USART_Transmit( unsigned char data )
48
{
49
  /* Wait for empty transmit buffer */
50
  while ( !( UCSR0A & (1<<UDRE0)) )
51
  ;
52
  /* Put data into buffer, sends the data */
53
  UDR0 = data;
54
}
55

56
unsigned char USART_Receive(void)
57
{
58
  /* Wait for data to be received */
59
  while ( !(UCSR0A & (1<<RXC0)) );
60
  /* Get and return received data from buffer */
61
  return UDR0;
62
}
63

64
void USART_Flush(void) // Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
65
{
66
  unsigned char dummy;
67
  while (UCSR0A & (1<<RXC0))
68
  dummy = UDR0;
69
}

Als empfangene Daten kommt entweder ein Übertragungsfehler oder ein 
Fragezeichen je nach dem was für ein Programm man verwendet. Vlt kennt 
sich jemand mit dem Baustein aus und kann mir weiter helfen.
OP #2720392
Lesenswert?

Ich denke nicht das ich irgend eine Fuse ausgeschalten habe, kenne mich 
mit den dingern nicht so aus und spiele desshalb auch nicht rum mit den 
Dingern. Das einzige was ich eingestellt habe ist der Quarz wie in dem 
Bild zu sehen ist. Laut Datenblatt soll der Controller ohne Probleme mit 
10MHz bei 3,3V funktionieren.
Angehängte Dateien:
Gast #2720444
Lesenswert?

Es gibt nur einen internen RC Oszillator!
Man kann ihn abgleichen sodass der UART funktioniert
Wenn sich dann aber die Temperatur oder die Betriebsspannung verändert 
ist dies aber evtl hinfällig und es funktioniert nicht mehr ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren