Forum: Mikrocontroller und Digitale Elektronik DMX-Receiver mit xmega - UART empfängt nur Müll


von DmxXmega (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte einen DMX-Empfänger mit einem XMega realisieren. Ich benutze 
dafür das Atmel Xplained A1 Eval-Board, auf dem ein ATXmega128-A1 läuft.

Die DMX-Daten werden mit dem SN75176 von RS-232 zu TTL "konvertiert". Da 
der  SN75176 5V braucht, kann ich den nicht über den µC versorgen, das 
mache ich extern. Der Ausgang des ICs geht an den PIN2 von PORTC - der 
Eingangsport von USARTC0.
Allerdings empfange ich nur Bytes mit eher zufälligem Inhalt.
DMX enthält 2 Stopp-Bits. Das kann man zwar nicht einstellen, wird aber 
laut Datenblatt vom µC ignoriert.

Mit einem älteren ATMega klappt alles wunderbar.
Programm ist angehängt, wäre toll, wenn mir jemand helfen könnte.
Danke!

von Max D. (max_d)


Lesenswert?

also:
1. DMX/RS485 != RS232 (ist sonst etwas verwirrend)
2. Wie stabil ist deine Versorgung ?
3. Läuft dein Xmega auch wirklich mit 32 MHz ?
4. Wie stabil sind die ?
5. Wie ist das Gefälle in den Logikpegeln 5V->3,3V realisiert ?

von DmxXmega (Gast)


Lesenswert?

Versorgung kommt von einem STK500 mit stabilen 4,93V. Ein Oszilloskop 
hab ich leider gerade nicht da, um den Takt zu überprüfen.
Bei der letzten Frage bin ich mir eben nicht sicher. Brauche ich da 
zwingend einen anderen IC oder einen Widerstand? Bei LVTTL ist V_IH doch 
größer gleich 2V oder?

von DmxXmega (Gast)


Lesenswert?

Ich habe eine eigentlich sehr wichtige Sache ganz vergessen. Und zwar 
empfange ich nie alle 512 Kanäle, obwohl alle gesendet werden. Wenn ich 
beim Frame-Error das Programm anhalte, ist der ChannelCounter nicht bei 
512, sondern immer viel weiter davor (z.B. schon bei 6 oder auch bei 
300).

von Max D. (max_d)


Lesenswert?

Der Empfänger setzt seinen Ausgang auf 5V wenn er High sagen will. Der 
Avr hat interne Body-Dioden die versuchen das auf 3,3 V zu begrenzen. 
Das wird vmtl. dein prob sein. Da fließt viel Strom und destabilisiert 
das ganze. Bau da mal einen Spannugnsteiler aus zwei Widerständen (oder 
als Test einfach nur ein Poti das man richtig dreht) ein. Du wirst sehen 
da wird gleich einiges viel schöner ^^

von Thorsten S. (thosch)


Lesenswert?

die Port-Pins vom Xmega sind NICHT 5V-kompatibel!
Der maximale High-Pegel ist die Betriebsspannung des Xmega.
Beim Xplained Board also das Maximum von 3,3V.
ich würde statt des Dinos SN75176 einen RS485-Receiver mit 3,3V 
Versorgung nehmen, das vermeidet das Problem im Ansatz. Außerdem sind 
die modernen Receiver viel stromsparender.

von Thorsten S. (thosch)


Lesenswert?

passende Teile wären z.B.
SN65HVD11D (TI)
LTC1480 (Linear)

von Choose (Gast)


Lesenswert?

Meiner Erfahrung nach ist der XMega 128xx völlig ungeeignet (vor allem 
mit dem internen Quarz betrieben) die 250 KBaud exakt zu erzeugen. Die 
Uarts sind auch völlig ungeeigent, einen sauberen Break zu erzeugen. 
Diese lassen sich, einmal gestartet, weder auf eine ander Baudrate 
umschalten, noch anhalten (ohne HW Reset).

Dazu noch die 5V Unverträglichtkeit....Adios baba Atmel!


Ich bin aufs Discovery umgestiegen und schon laufen gleichzeitig 4 DMX 
Kanäle ohne Probleme. Auch im Empfangsmodus.

SG

von DmxXmega (Gast)


Lesenswert?

Danke euch! Ich werde mich wieder melden, wenn ich die entsprechenden 
Teile besorgt habe.

von Thosch (Gast)


Lesenswert?

Choose schrieb:
> Meiner Erfahrung nach ist der XMega 128xx völlig ungeeignet (vor allem
> mit dem internen Quarz betrieben) die 250 KBaud exakt zu erzeugen. Die
> Uarts sind auch völlig ungeeigent, einen sauberen Break zu erzeugen.

Es gibt KEINEN internen Quarz!
Der Xmega A1 hat einen internen RC-Oszillator, der laut Datenblatt mit 
einer Genauigkeit von +/- 1,5% über den vollen Temperatur und 
Betriebsspannungsbereich läuft.

Dazu muß man aber die in der Signature-Row gespeicherten "Oscillator 
Calibration Bytes" nach dem Prozessorstart laden.

Der interne 32,768kHz Oszillator ist auf +/- 0,5% spezifiziert, dieser 
kann als Referenz für die "run time calibration" dienen und den 32MHz 
Oszillator auf seine Genauigkeit stabilisieren. Ebenso ein extern 
angeschlossener 32kHz Quarz (der evtl für die RTC-Funktion eh vorhanden 
sein könnte) Auf dem Xplained-Board ist er drauf.

Schau mal im Datenblatt und im A1-Manual unter "oscillator calibration" 
nach.

Unkalibriert reicht die Genauigkeit des internen Oszillators nicht als 
Baudrate Generator. Wenigstens die Werkskalibrierung muß aus der 
Signature-Row geladen werden.

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.