From 9a3a59a8efa94eb9094ca868e29f97172c89ba3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=A4lz?= Date: Thu, 28 Oct 2021 18:46:29 +0000 Subject: [PATCH] DMX_Interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bisher rudimentäres DMX Interface über RasPi SPI 0. --- DMX_Interface.cpp | 21 +++++++++++++ DMX_Interface_main | Bin 0 -> 8848 bytes SPI_DMX.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++ SPI_DMX.h | 16 ++++++++++ blink.cpp | 12 +++++++ 5 files changed, 126 insertions(+) create mode 100644 DMX_Interface.cpp create mode 100644 DMX_Interface_main create mode 100644 SPI_DMX.cpp create mode 100644 SPI_DMX.h create mode 100644 blink.cpp diff --git a/DMX_Interface.cpp b/DMX_Interface.cpp new file mode 100644 index 0000000..58d4230 --- /dev/null +++ b/DMX_Interface.cpp @@ -0,0 +1,21 @@ +#include +//#include "UART.h" +#include +#include "SPI_DMX.h" + +# define measure_length(type) ((char *)(&type+1)-(char*)(&type)) + +/* demo.c: My first C program on a Linux */ +int main(void) +{ + printf("Hello! This is a test prgoram.\n"); + SPI_DMX spi1(0); + spi1.nice(); + + unsigned char message[4] = {0x55,0x66,0x55,0x66}; + //uart.TX_Bytes(message,measure_length(message)); + + spi1.TX_Bytes(message,4); + + return 0; +} diff --git a/DMX_Interface_main b/DMX_Interface_main new file mode 100644 index 0000000000000000000000000000000000000000..be9a48353223c758d0e44211227df1ceb72ef37a GIT binary patch literal 8848 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 literal 0 HcmV?d00001 diff --git a/SPI_DMX.cpp b/SPI_DMX.cpp new file mode 100644 index 0000000..84803be --- /dev/null +++ b/SPI_DMX.cpp @@ -0,0 +1,77 @@ +#include "SPI_DMX.h" + +#define SPI_FREQHz (8.0*8.0e5) +#define SPI_BYTEus ((8.0e6/SPI_FREQHz)*1.6) //weird translation factor idk +#define DMX_BITus 4 +#define BREAKus (25*DMX_BITus) +#define MABus (3*DMX_BITus) +#define STARTus (DMX_BITus) +#define STOPus (2*DMX_BITus) + +#define BY_HIGH 0x00 +#define BY_LOW 0xFF + + + +SPI_DMX::SPI_DMX(unsigned char serial_port) +{ + this->serial_port = serial_port; + for(int i = 0; i < BREAKus/SPI_BYTEus; i++) + { + this->message[i] = BY_LOW; + } + for(int i = BREAKus/SPI_BYTEus; i < (BREAKus+MABus)/SPI_BYTEus; i++) + { + this->message[i] = BY_HIGH; + } + wiringPiSPISetup(serial_port,SPI_FREQHz); + printf("%f\n",SPI_FREQHz); +} + +SPI_DMX::~SPI_DMX() +{ + +} + +void SPI_DMX::TX_Bytes(unsigned char* tx_buffer, unsigned char tx_size) +{ + //unsigned int SPIbits = (BREAKus+MABus+(size*(STARTus+8*DMX_BITus+STOPus)))/SPI_BITus; + //unsigned char message[SPIbits]; + + int messind = (BREAKus+MABus)/SPI_BYTEus; + printf("%i\n",messind); + + for(int b = 0; b < tx_size; b++) + { + for(int i = 0; i < STARTus/SPI_BYTEus; i++) + { + message[messind++] = BY_LOW; + } + for(int i = 0; i < 8; i++) + { + unsigned char txbit = tx_buffer[b]; + txbit = ~((((txbit >> i) & 0x01) ^ 0x01) * 0xFF); //NEEDS TO BE ADJUSTED IF LOGIC LEVEL IS REVERSED + for(int i = 0; i < DMX_BITus/SPI_BYTEus; i++) + { + message[messind++] = txbit; + } + } + for(int i = 0; i < STOPus/SPI_BYTEus; i++) + { + message[messind++] = BY_HIGH; + } + } + printf("%i\n",messind); + /*messind = 0; + for(int i = 0; i < 8; i++) + { + unsigned char txbit = tx_buffer[0]; + txbit = ((txbit >> i) & 0x01) * 0xFF; + for(int i = 0; i < DMX_BITus/SPI_BYTEus; i++) + { + message[messind++] = txbit; + } + printf("%u %u %f %i \n",tx_buffer[0],txbit,DMX_BITus/SPI_BYTEus,messind); + } */ + wiringPiSPIDataRW(this->serial_port, message, messind-1); +} diff --git a/SPI_DMX.h b/SPI_DMX.h new file mode 100644 index 0000000..737175b --- /dev/null +++ b/SPI_DMX.h @@ -0,0 +1,16 @@ +#include +#include + + +class SPI_DMX +{ +private: + int uart_filestream; + unsigned char serial_port; + unsigned char message[5000]; +public: + SPI_DMX(unsigned char serial_port); + ~SPI_DMX(); + void TX_Bytes(unsigned char* tx_buffer, unsigned char tx_size); + void nice() {printf("nice\n");}; +}; diff --git a/blink.cpp b/blink.cpp new file mode 100644 index 0000000..b08fba5 --- /dev/null +++ b/blink.cpp @@ -0,0 +1,12 @@ +#include +int main (void) +{ + wiringPiSetup () ; + pinMode (0, OUTPUT) ; + for (;;) + { + digitalWrite (0, HIGH) ; delay (500) ; + digitalWrite (0, LOW) ; delay (500) ; + } + return 0 ; +}