Autor Tema: codigo en lenguaje "C" para transmitir protocolo DMX  (Leído 4030 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
codigo en lenguaje "C" para transmitir protocolo DMX
« en: 12 de Agosto de 2017, 13:45:17 »
hola amigos, estoy queriendo hacer en c, la forma de enviar la trama dmx, el tema es que consigo cosas en asembler y ya que sabia poco se me olvido bastante el asembler, pero ando bastante bien (creo ) con el C, si alguien me da una mano le doy las gracias, el tema es hacer una mini consolita de prueba de 8 canales solamente para probar luces dmx sin tener que usar la consola grande, gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #1 en: 12 de Agosto de 2017, 14:46:06 »
que parte del ASM no entendes ?

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #2 en: 12 de Agosto de 2017, 15:36:37 »
no es que no lo entiendo en realidad como estoy con lenguaje C ya me olvide del asembler, y en realidad vi poco , ya que donde nos enseñaron programacion, saltamos muy rapido al lenguaje C, tengo el como transmitir en asembler pero quisiera pasarlo a C y asi lograr mas cosas. adjunto lo  que tengo en asembler , es una consola de 6 canales dmx, fijos, y lo que quiero hacerla en C para poder mover los canales y ampliarlos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #3 en: 12 de Agosto de 2017, 16:17:45 »
Lo que veo es que hay muchas macros que deben estar definidas en picmacro.h
Encima los nombres no ayudan a que sea simple de identificar que es lo que hace.

Para mi pienso que deberias buscar un codigo DMX en C el cual seria mucho mas simple de realizar.

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #4 en: 12 de Agosto de 2017, 16:40:08 »
exacto es lo que estoy haciendo, no logro encontrar nada, ni siquiera en la pagina de microchip, el ejemplo que hay ahi es en asembler, por eso lo que busco seria en c y no encuentro nada

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #5 en: 12 de Agosto de 2017, 17:28:05 »
exacto es lo que estoy haciendo, no logro encontrar nada, ni siquiera en la pagina de microchip, el ejemplo que hay ahi es en asembler, por eso lo que busco seria en c y no encuentro nada

https://github.com/ibexuk/C_Communications_DMX_PIC18_TX
https://github.com/ibexuk/C_Communications_DMX_PIC18_RX

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #6 en: 12 de Agosto de 2017, 18:56:08 »
Muchas Gracias tsk, ya lo bajo y me lo pongo a analizar e implementar y les aviso que ocurrio, gracias nuevamente

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #7 en: 12 de Agosto de 2017, 20:08:59 »
 

Si te vas a micros ARM, en vez de PIC, tienes la ventaja de tener el compilador de C gratuito, e igualmente tienes muchos proyectos DMX de código abierto, puedes buscar para STM32, Kinetis, Atmel SAM o Raspberry.

Yo cuando busco algún código de ejemplo para añadir a mis proyectos, siempre uso en Google la palabra clave "Github", la mayoría de proyectos open source se suben y gestionan en Github.

Hace poco me abrí un Github para dar actualizaciones, manuales y demás, de mis productos, a los clientes, y va de fábula. Todo gratis, y cuando tengo que colgar algo pesado, lo subo a MEGA y pongo el enlace en el Github del proyecto.

Sobre este caso en concreto, si te vas a un 32 bits, tienes la ventaja de poder usar DMA, que viene muy bien cuando se trata de manejar comunicaciones, para que la gestión de datos funcione sola, mientras la CPU se dedica a otras tareas.
« Última modificación: 12 de Agosto de 2017, 20:12:11 por planeta9999 »

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #8 en: 12 de Agosto de 2017, 20:14:14 »
dale, muchas gracias por tanta info, planeta9999, lo voy a tener encuenta, en donde nos juntamos, que lo llamamos "curso", estan ya viendo pic 32 stm32, que en la empresa elemon dieron una catedra creo que ayer viernes o el jueves, yo estoy alejado un poco de ellos por un accidente que tuve en diciembre pasado pero espero en 20 dias unirme nuevamente al grupo y comento lo que me ayudaron ustedes, gracias nuevamente

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #9 en: 14 de Agosto de 2017, 03:35:59 »
Cuando yo queria estudiar lenguaje C y me meti en el mundo de DMX512 controladores de luces, habia en Internet muchos projectos sobre DMX512, en lenguaje C y CX, Assembler fue la base de programar este Protocologo.

Aqui te pongo un Ejemplo del Sr. Manuel Castro
 Ojo yo no lo he probado y el  lenguaje C no es lo mio.
 





Código: [Seleccionar]
//***************************************************
// NOMBRE: Test_DMX.c               *
// Fecha: 10/05/2010            *
// Version: 1.0 *
// PIC: 18F452     *
// Autor: Manuel Castro              *
//***************************************************

//***************************************************
// Notas : *
//***************************************************
#include <18F452.h>
#fuses HS, NOWDT, NOPROTECT
#use delay(clock=20000000)
#include <dmx.h>

// Declaracion de funciones
void InicializaTX (void); // Inicializa Pines y el TMR0 para la transmision de tramas
void InicializaSerial (void); // Inicializa Puerto Serial para la transmision

void Tx_DMX (void); // Envia datos DMX
void Tx_BREAK (void); // Envio de Break
void Tx_MAB (void); // Envio de Mark After Break
void Tx_START (void); // Envio de Start
void Tx_DATA (void); // Envio de Datos

// Declaracion de VARIABLES
unsigned int16 Contador; //
unsigned int8 TxBuffer[Canales_DMX]; //
unsigned int16 canal; //
unsigned int8 brillo = 0; //

// Programa Principal
void main(void){
// Configuro el Timmer y configuro los pines para una correcta trama DMX
InicializaTX();
// Configuro el puerto serial a 9 bit y alta velocidad con un baud de 250K, desabilito la recepcion.
InicializaSerial();
// Lleno de Ceros (0) el arreglo que se envia como dato DMX
for (canal=0;canal<Canales_DMX;canal++){ TxBuffer[canal] = 0; }
// y mando la trama para colocar todo lo que este conectado a Cero
Tx_DMX();

do{
// Desde aqui ya estoy jugando con el equipo que tengo, en el cual
// prendo el color rojo de forma progresiva 0% ~ 100%
for (brillo=0;brillo<255;brillo++){
TxBuffer[Eq_052 + C_rojo] = brillo;
Tx_DMX();
}
// y luego lo apago 100% ~ 0%
for (brillo=254;brillo!=255;brillo--){
TxBuffer[Eq_052 + C_rojo] = brillo;
Tx_DMX();
}
// asi igual con el verde
for (brillo=0;brillo<255;brillo++){
TxBuffer[Eq_052 + C_verde] = brillo;
Tx_DMX();
}
for (brillo=254;brillo!=255;brillo--){
TxBuffer[Eq_052 + C_verde] = brillo;
Tx_DMX();
}
// y el azul
for (brillo=0;brillo<255;brillo++){
TxBuffer[Eq_052 + C_azul] = brillo;
Tx_DMX();
}
for (brillo=254;brillo!=255;brillo--){
TxBuffer[Eq_052 + C_azul] = brillo;
Tx_DMX();
}
}while (true);
}

// Tx_DMX
void Tx_DMX(void){
Tx_BREAK(); // Envio Break
Tx_MAB(); // Envio MAB
Tx_START(); // Envio Start
Tx_DATA(); // Envio los Datos
output_toggle(PIN_D5); // Cambio el estado de un Led para ver la actividad
}

// InicializaTX
void InicializaTX(void){
T0CON = 0b11000000; // Habilito TMR0, 8-bit, prescaler 1:2
TMR0L=us_100; // Cargo el timer para 100us
TMR0IF=0; // Limpio Flag de Interrupcion
Contador=0; // inicializo Contador
configura_pin_BREAK=0; // Configura el pin BREAK
salida_BREAK=0; //
}

// SetupSerial
void InicializaSerial(void){
TRISC7=1; // UART RX pin RC7
TRISC6=1; // UART TX pin RC6
TXSTA=0b01100101; // Habilito TX, modo 9-bit, modo de alta velocidad, 9º bit =1
RCSTA=0b10000000; // Habilito Puerto Serie, Deshabilito la Recepcion
BRGH=1; //
SPBRG=4; // 250k baud (Fosc=20MHz)
}

// envia BREAK
void Tx_BREAK(void){
TMR0L=us_100; // Cargo el timer para BREAK de 100us
TMR0IF=0; // Inicializa TMR0
configura_pin_BREAK=0; //
salida_BREAK=0; // Genere la condicion de break
while(!TMR0IF); // Hasta que se cumplan los 100us
}

// envia MAB
void Tx_MAB(void){
configura_pin_BREAK=1 ; //
TMR0L=us_13 ; //
TMR0IF=0; //
while(!TMR0IF); //
}

// envia START
void Tx_START(void){
TXREG=0 ; //
}

// Envia los Datos
void Tx_DATA(void){
Contador=0;
while(Contador<Canales_DMX){ // Hace hasta completar la totalidad de los canales
if(TXIF==1){ // Ve si el Buffer de Transmision esta disponible
TXREG=TxBuffer[Contador]; // Coloca los datos a ser enviados
Contador++; // Incrementa el contador
}
}
}



Si te interesa los Incluide, te lo envio via E-mail

Saludos



Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #10 en: 14 de Agosto de 2017, 09:03:42 »
hola stk500, si me interesan los includ, voy a implementar todo lo que pueda, todavia no vi el que me mandastes, pero con este serian tres codigos, lo que mi lentitud implica que no encontre donde se pone el dato a transmitir, gracias

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4917
Re:codigo en lenguaje "C" para transmitir protocolo DMX
« Respuesta #11 en: 14 de Agosto de 2017, 12:00:17 »
enviame tu e-mail por privado