Forum: Mikrocontroller und Digitale Elektronik MCP2200 falsche Ausgabe


von Steph M. (stephh)


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

von Uwe S. (de0508)


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

: Bearbeitet durch User
von Steph M. (stephh)


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

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.