MCP2200 falsche Ausgabe

OP #3495755
Lesenswert?

Hallo Leute,

Ich sitze hier vor einem Problem. Ich habe ein Board abgeändert und 
verwende nun statt einem MAX232 einen MCP2200.

folgender Aufbau:
uC ist ein ATMEL 90PWM3B
Verbunden ist der MCP2200 mit dem 90PWM3B wie folget: RX an TXD und TX 
an RXD

Das hier ist mein C-Programm teil, welcher mit dem MAX232 auf einem 
anderen Board funktioniert. Mit meinem MCP2200 bekomme ich zwar Daten 
über die USB Leitung auf den PC, jedoch sind dies nur 0 und 80, egal was 
der 90PWM3B an den MCP sendet.
1
void Seriel_init(void)
2
{  
3
UBRRL = 51;               // 9600baud
4
UCSRC |= (1<<UCSZ1) | (1<<UCSZ0);   // 8N1
5
UCSRB |= (1<<RXEN)  | (1<<TXEN);  // UART starten
6
}
7

8
void put_char(char a)
9
{
10
  while(!(UCSRA & (1<<UDRE)))
11
  {
12
    NOP();
13
  }
14
  UDR = a;
15

16
  return;
17
}
18

19
void serial_print(char* a)
20
{
21
  while(*a)
22
  {
23
    put_char(*a);
24
    a++;
25
  }
26
  return;
27
}

Im C-Programm wurde UBRRL auf 51 gesetzt, was bei 1MHz 9600Baud bedeuten 
sollte. Der MCP2200 wurde über USB ebenfalls auf 9600Baud eingestellt. 
In der Systemsteuerung wurde die Baudrate ebenfalls auf 9600 gesetzt. 
Und H-Term steht auch auf 9600Baud. Alles natürlich mit 8n1.

Ich bin nun leider echt am Ende meiner Ideen und weis nicht wo ich da 
noch suchen soll nach meinem Fehler.

Oder ist meine Ansteuerung grundsätzlich komplett falsch und beim MCP 
funktioniert das anders, das kann ich mir aber nicht vorstellen.

MFG Stephan
#3496252
Lesenswert?

Hallo,

einen MAX232 kann man nicht 1zu 1 gegen einen MCP2200 ersetzen.

RS232 <> USB !

meine drei MCP2200 laufen mit Linux und anpassen der USB Rechte nach 
zweimaligen anstecken einwandfrei.


Wieso rechnest Du die Baudrate und die Werte für das
UBRR Register (16Bit) nicht mit dem Preprozessor aus ?

Der Wert 51 entspricht nicht 9600 Baud !

UBRR = (uint16_t)(1.0 * F_CPU /16 /Baudrate - 0.5)
UBRR = 5 und mit einen Baudratenfehler > 1% !

PS wer nicht rechnen will, schaut ins Datenblatt ! da stehen die UBRR 
Wert schon berechnet.

PS2 sonst möchte ich noch auf einen Link verweisen:
http://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html
OP #3496789
Lesenswert?

Hallo Uwe,

vielen Dank für deine Antwort. Genau das war mein Problem. Nun läufst 
einwandfrei.
Ich habe mich da wohl von einem Kommilitonen verleiten lassen, da ich 
C-Programm so bekommen habe.
Auf meine Kontrolle im Datenblatt habe ich dann auch noch den Fehler 
gemacht und für Synchronus Master Mode berechnet, denn dort würde 51 für 
9600 Baud stimmen.

Vielen Dank auch noch für den Link. Sieht sehr interessant aus.

MFG Steph

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