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

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