Probleme beim senden eines DMX Signals

Gast #2030725
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:
1
#define F_CPU = 16000000
2

3
#include <avr/io.h>
4

5
void initBaud(int load)
6
{  
7
  UCSRB = (1<<TXEN);  
8
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
9
  UBRRH = 0;
10
  UBRRL = load;
11

12
}
13

14
int main()
15
{
16
  unsigned char daten[256];
17
  int x;
18

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

22

23
  while(1)
24
  {
25
    initBaud(15); //baudrate: 62500
26
    UDR = 0;
27
    while(!(UCSRA & (1<<UDRE)));
28
    initBaud(3); //baudrate: 250k
29
    UDR = 0;
30
    while(!(UCSRA & (1<<UDRE)));
31
    for(x = 0; x < 256; x++)
32
    {
33
      UDR = daten[x];
34
      while(!(UCSRA & (1<<UDRE)));
35
    }
36
  }  
37
}

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

Vielen Dank
Florian
Gast #2030765
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.
Angehängte Dateien:
Gast #2030813
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.
Angehängte Dateien:
Gast #2030914
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.