Das sind drei Dateien, durch ##### getrennt!!! //##demo_dmx_in.c################################################ #include "lib_dmx_in.h" int main(void) { cli(); DDRD = 0xFF; // Port B Ausgang init_DMX(); sei(); for(;;) { get_dips(); if (DmxField[0] >= 127) //enable LED if 1st DMX val is >127 { PORTD = 0xFF; //LED ON } else { PORTD = 0x00; //LED OFF } } } //##lib_dmx_in.c################################################ #include "lib_dmx_in.h" // ********************* local definitions ********************* enum {IDLE, BREAK, STARTB, STARTADR}; //DMX states uint8_t gDmxState; uint8_t *gDmxPnt; uint16_t DmxCount; // *************** DMX Reception Initialisation **************** void init_DMX(void) { #ifdef USE_DIP DDRC= 0; //set up DIPs PORTC= 0xFF; DDRE &= ~((1<<2)|(1<<1)); PORTE |= (1<<2)|(1<<1); #endif DDRD |= (1<<2); PORTD &= ~(1<<2); //enable reception UBRRH = 0; UBRRL = ((F_OSC/4000)-1); //250kbaud, 8N2 UCSRC |= (1< enable and wait for break { gDmxState= IDLE; UCSRB |= (1<= (DmxField +DMX_CHANNELS)) //all ch received? { gDmxState= IDLE; } else gDmxPnt= DmxPnt; } } //##lib_dmx_in.h################################################ #include #include #include //#define USE_DIP (256) //use DIPs? #define DMX_CHANNELS (2) //use at least 2ch #define F_OSC (8000) //oscillator freq. in kHz (typical 8MHz or 16MHz) volatile uint8_t DmxField[DMX_CHANNELS]; //array of DMX vals (raw) volatile uint16_t DmxAddress; //start address extern void init_DMX(void); extern void get_dips(void); ############################################################## Hallo zusammen, Ich möchte einen MH mit DMX steuern, die Hardware funktioniert soweit, nur beim Programm klemmt es noch trotz intensiver Fehlersuche und umwälzen von Tutorials und Foren... zunächst zu meiner Hardware: AVR: Butterfly(Atmega169) -->OK! Programmschnittstelle: ISP-Programmieradapter -->OK! DMX: kommerzieller DMX-Controller + RS485-Wandler -->OK! Nun zur Software: Code (im Anhang) stammt von "Henne's Sites" [[http://www.hoelscher-hi.de/hendrik/light/ressources.htm]] ... verwende seine Demo (PORTD an wenn DMX >127). Ich bin den Quellcode durchgegangen und habe alle Variablen auf Atm169 angepasst und PortD getestet. Leider funktioniert immer noch nichts. Unsicher bin ich mir noch bei der Oszillatorfrequenz und dem einstellen der Startadresse. Nun meine Frage: Wie kann ich die OSz.freq.-Einstellungen überprüfen (AVRStudio und AVRProg)??? Außerdem stimmt das mit der Startadresse (Die Dip-Schalter verwende ich nicht; welche Adresse ist auch erstmal egal)????? Vllt könnt ihr mir Tipps geben! Danke gruß mark-169 PS: Das Prog besteht aus drei Dateien, habe sie im Anhang untereinander geschrieben. demo_dmx_in.c --> Demo-Prog, schalten des Ports durch DMX-Signal lib_dmx_in.c --> eigentliches Prog zum Auswerten des DMX lib_dmx_in.h --> naja erklärt sich von selbst...variablen und co.