i have an dmx receiver which works not correctly.
The data which i get from the receiver i want put out on a lcd.
the first 3 Bytes are exactly, but the 4th Byte and the following Bytes aren't on the channels which i send from an extern Dmx Transmitter.
This is my code:
Code: Select all
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "math.h"
#include "stdlib.h"
#include "string.h"
void waitBreakEnd(void);
#pragma interrupt_handler dmx_receiver_ISR
//#define FRAMING_ERROR 0x20 // Flag to check for parity error
int dmxcount;
BYTE master;
BYTE bRxData;
BYTE bRxData1;
BYTE bRxData2;
BYTE ch0, ch1, ch2, ch3, ch4, ch5, ch6;
void channels (WORD Data)
{
if(dmxcount == 0) //look for start code
{
if(Data == 0x00)
{
ch0 = Data;
dmxcount++;
return;
}
}
else if(dmxcount == 1) //channel 1 (master)
{
ch1 = Data;
dmxcount++;
master = Data;
}
else if(dmxcount == 2) // red
{
ch2 = Data;
dmxcount++;
pwmred_WritePulseWidth(Data * master);
}
else if(dmxcount == 3) // green
{
ch3 = Data;
dmxcount++;
pwmgreen_WritePulseWidth(Data * master);
}
else if(dmxcount == 4) // blue
{
ch4 = Data;
dmxcount++;
pwmblue_WritePulseWidth(Data * master);
}
else if(dmxcount == 5) // orange
{
ch5 = Data;
dmxcount++;
pwmorange_WritePulseWidth(Data * master);
}
else if(dmxcount == 6) // white
{
ch6 = Data;
dmxcount++;
pwmwhite_WritePulseWidth(Data * master);
}
//--------- hier kommt dann strobe
}
void waitBreakEnd(void)
{
while(!(PRT0DR & 0x40)){}
}
void dmx_receiver_ISR (void)
{
static BYTE bRxStatus = 0;
static WORD bRxData = 0;
bRxStatus = dmx_receiver_bReadRxStatus(); //read receiver status
if(bRxStatus & dmx_receiver_RX_FRAMING_ERROR) //check for start of dmx packet
{
dmxcount = 0;
dmx_receiver_Stop();
waitBreakEnd();
bRxData = dmx_receiver_bReadRxData(); //read receiver data
dmx_receiver_Start(dmx_receiver_PARITY_NONE);
return;
}
bRxData = dmx_receiver_bReadRxData(); //read receiver data
channels(bRxData);
}
void main()
{
char intRet0[8];
char intRet1[8];
char intRet2[8];
char intRet3[8];
char intRet4[8];
char intRet5[8];
int test = 0;
LCD_1_Start();
LCD_1_Init();
// LCD_1_PrCString("Dmxreceiver");
M8C_EnableGInt;
dmx_receiver_EnableInt(); //enable Rx interrupt
dmx_receiver_Start(dmx_receiver_PARITY_NONE); //start receiver with no parity check
pwmred_Start();
pwmgreen_Start();
pwmblue_Start();
pwmorange_Start();
pwmwhite_Start();
// pwmred_WritePeriod(65535);
// pwmgreen_WritePeriod(65535);
// pwmblue_WritePeriod(65535);
// pwmorange_WritePeriod(65535);
// pwmwhite_WritePeriod(65535);
PRT0DR &= ~0x20;
while (1)
{
// LCD_1_Position(0,0);
// LCD_1_PrCString("Ch0");
// LCD_1_Position(1,0);
// itoa(intRet0, (int)ch0, 10);
// LCD_1_PrString(intRet0);
LCD_1_Position(0,0);
LCD_1_PrCString("Mas");
LCD_1_Position(1,0);
itoa(intRet1, (int)ch1, 10);
LCD_1_PrString(intRet1);
LCD_1_Position(0,3);
LCD_1_PrCString("rot");
LCD_1_Position(1,3);
itoa(intRet2, (int)ch2, 10);
LCD_1_PrString(intRet2);
LCD_1_Position(0,6);
LCD_1_PrCString("gre");
LCD_1_Position(1,6);
itoa(intRet3, (int)ch3, 10);
LCD_1_PrString(intRet3);
LCD_1_Position(0,9);
LCD_1_PrCString("blu");
LCD_1_Position(1,9);
itoa(intRet4, (int)ch4, 10);
LCD_1_PrString(intRet4);
LCD_1_Position(0,12);
LCD_1_PrCString("ora");
LCD_1_Position(1,12);
itoa(intRet5, (int)ch5, 10);
LCD_1_PrString(intRet5);
}
}
pfiff