Forum: Compiler & IDEs DMXmit atmega32


von Marco G. (mgrueger)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche die DMX Lib von Hendrik Hölscher auf meinem atmega32
zum laufen zu kriegen. Bis jetzt komme ich aber nur bis zum break.
Könnte mal jemand über den Quelltext schauen und mir sagen was da
schief ist?

Vielen Dank.

Marco

von Stefan B. (Gast)


Lesenswert?

Ich sehe nur diese komische Stelle:

> #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
> #define F_CPU 8000000UL  // Systemtakt in Hz - Definition als unsigned long 
beachten

Aber das wirkt sich bei mir nicht auf die Kompilierung aus. Die 
funktioniert  klaglos; auch über das break hinaus.

von Marco G. (mgrueger)


Lesenswert?

Hallo,
mein Problem ist, das ich in der ISR(USART_RX_vect) nur das break 
erkenne den Rest der Daten aber nicht richtig auswerte. Ich komme also 
nicht an die Stelle "else if (DmxState == STARTB)".

von Christoph S. (mixer) Benutzerseite


Lesenswert?

Hallo,

mit was für einem Takt läuft denn dein Mega32?

MFG

von holger (Gast)


Lesenswert?

#define BAUD 25000UL      // Baudrate


Ich glaub da fehlt ne Null.

von Marco G. (mgrueger)


Lesenswert?

Hallo,
Mein Takt ist 8Mhz, mit der geänderten Baudrate gehts auch nicht weiter.

von Stefan B. (Gast)


Lesenswert?

Wie testest du, AVR Simulation oder angeschlossene DMX Hardware?

von Marco G. (mgrueger)


Lesenswert?

Ich habs erst mit dem AVR Studio im Debugger laufen lassen und nachdem 
es da gut aus mittels USB Interface und udmx.exe. Meine Schaltungen hab 
ich von http://plischka.at/DMX-512.html. Ein RGB-LED Par läßt sich 
einwandfrei ansteuern nur mein selbstgebauter reciver halt nicht.

von Stefan B. (Gast)


Lesenswert?

Mist ich sehe den Bug auch nicht. Von der Programmlogik her können drei 
Dinge passieren:

1. Du bekommst im Zustand BREAK beim nächsten Byte einen FE. Dann 
bleibst du in BREAK

2. Du bekommst im Zustand BREAK beim nächsten Byte keinen FE. Das 
empfangene Byte ist gleich 0, dann geht es nach STARTB. Das scheint 
nicht der Fall zu sein.

3. Du bekommst im Zustand BREAK beim nächsten Byte keinen FE. Das 
empfangene Byte ist ungleich 0, dann geht es nach IDLE. Das scheint 
nicht der Fall zu sein.

Du sagst du steckst in BREAK fest. Also wieso bekommst du einen FE? 
Baudratenberechnung (mit dem korrekten 250000UL) habe ich geprüft. 
Stimmt. Frameformat (1 Start, 8 Data, 2 Stop, No Parity) habe ich 
geprüft. Stimmt.

von Marco G. (Gast)


Lesenswert?

Erst einmal vielen Dank für Eure Hilfe!
Ich habe es zwar immer noch nicht zum laufen,
aber ich denke ich sollte noch einmal die Schaltung
vornehmen. das Programm sollte es ja eigentlich tun.

von Henne (Gast)


Lesenswert?

lass mal eine LED blinken und schau ob die erwartete Frequenz rauskommt.

Wenn nicht -> fuses falsch. (Dann hängst du auch im break ;-)


VG,
Hendrik

von Henne (Gast)


Lesenswert?

--> DAS IST NICHT MEINE LIB. <--

Lokale Variablen werden eh in Registern gehalten.
Du setzt die FSM absichtlich vor Erreichen der Startadrsse auf IDLE. Das 
kann nicht funktionieren.

Nimm doch erst mal meine Lib und schau nach welcher Änderung sie Dir um 
die Ohren fliegt. Effizienter ist das eh nicht... (sonst hätte ich es 
vor 1,5 Jahren mal übernommen.)

Hendrik

von Marco G. (mgrueger)


Lesenswert?

Hallo Hendrik,

ich habe ja auch geschrieben "ich versuche", das es nicht Deine Lib ist 
und das Du es nicht so geschrieben hast ist mir klar. Wenn ich Dir zu 
nahe getreten bin bitte ich vielmals um Entschuldigung. Ich versuche nur 
zu lernen, ich hoffe Du nimmst esmir nicht übel.

Danke für Deine Arbeit und Deinen Hinweis.

Marco

von Henne (Gast)


Lesenswert?

Ich nehm keinem was übel ;-)

von Marco G. (mgrueger)


Lesenswert?

Hallo,
es waren tatsächlich die Fuse Bits so was blödes. Wieder was gelernt.
Vielen Dank an alle die geholfen haben.

Marco

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.