www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme beim senden eines DMX Signals


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche ein DMX-Signal zu erzeugen.
Da ich es mit dem Timer nicht geschafft habe, versuche ich es nun mit 
der USART-Schnittstelle des ATMega8.
Nun ist mein Problem, dass es nicht wirklich Funktioniert.

Laut einigen Beiträgen in verschiedenen Foren reicht es, wenn ich für 
das Break-Signal die Baudrate auf 62500 Baud stelle.

Nun funktioniert diese Methode entweder bei mir nicht, oder ich mache 
irgendetwas falsch.

Hier mein Code:
#define F_CPU = 16000000

#include <avr/io.h>

void initBaud(int load)
{  
  UCSRB = (1<<TXEN);  
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
  UBRRH = 0;
  UBRRL = load;

}

int main()
{
  unsigned char daten[256];
  int x;

  for(x = 0; x < 256; x++)
    daten[x] = 255;


  while(1)
  {
    initBaud(15); //baudrate: 62500
    UDR = 0;
    while(!(UCSRA & (1<<UDRE)));
    initBaud(3); //baudrate: 250k
    UDR = 0;
    while(!(UCSRA & (1<<UDRE)));
    for(x = 0; x < 256; x++)
    {
      UDR = daten[x];
      while(!(UCSRA & (1<<UDRE)));
    }
  }  
}


Wäre nett, falls mit jemand helfen könnte.

Vielen Dank
Florian

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kommt irgendwas über den UART raus oder garnix? Oszi?
Schaltung korrekt?

Dachte eigentlich den FE erreicht man damit, dass man den UART Pin eine 
bestimmte Zeit lange direkt schaltet, aber mit der SW für Sender habe 
ich mich noch nicht genau befasst!

Gruss

Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke schon einmal für die Antwort, daran hatte ich noch garnicht 
gedacht, ich werds mal versuchen manuell zu schalten.

Als Anhang habe ich noch einen Abschnitt vom Signal angeähngt, welcher 
mir ein wenig merkwürdig vorkommt.

Autor: manateemoo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du wartest nach dem Senden des Breaks auf UDRE bevor du die baudrate 
wieder auf 250kBaud umschaltest.
Du musst aber noch zusätzlich warten bis das byte wirklich raus ist 
(TXC)

Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also...
Das Gerät reagiert leider immernoch nicht auf das Signal.
Jedoch schonmal vielen Dank, denn durch die Abfrage von TXC der Fehler 
mit dem langen High-Signal weg.

Ich hänge die neuen Signale einfach mal an.

Reset ist ungefähr 144µs
Dann das Mark ca. 32µs

Danke nocheinmal.

Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist meine Schaltung. Die habe ich ganz vergessen zu posten.

Autor: manateemoo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim XLR sind pin 2 und 3 vertauscht.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das hab ich bei der Verkabelung schon geändert, hatte ich nur 
vergessen anzugeben :/
Außerdem habe ich anstatt den MAX485 einen SN75179 verwendet.

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Resetbeschaltung??

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die habe ich weggelassen, da ich Sie vergessen habe.
Aber der Reset findet ja momentan scheinbar trotzdem statt, da die 
zeitlichen Details ja scheinbar stimmen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>    UDR = 0;
>    while(!(UCSRA & (1<<UDRE)));
>    initBaud(3); //baudrate: 250k

Typischer Fehler. Mit der Prüfung von UDRE wartest du nicht die 
Übertragung eines Bytes ab, sondern nur die Verfügbarkeit des 
TX-Puffers.

Ersetze UDRE durch TXC.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.