Buenas RedPic, ando realizando un sistema de control luminoso como una integración de matlab y una tarjeta de adquisición con un 18F4550, por medio de matlab la idea es enviar un carácter y que el pic haga la parte de control, la tarjeta realiza 3 acciones apagado y encendido de dos recintos y control luminoso de uno de los recintos, las dos primeras cosas ya están hechas pero no logro realizar la acción de la regulación de luz, el codigo que llevo es el siguiente:
#include <18F4550.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,NOLVP
#use delay(clock=20000000)
#use fast_io(A)
#use standard_io(B)
#include "usb_cdc.h" // Descripción de funciones del USB, entre comillas es porque esta trabajando sobre la misma carpeta
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
void main() {
int sal1, sal2;
unsigned char datoIN;
usb_cdc_init(); // Configuramos al puerto virtual.
usb_init(); // Inicializamos el stack USB.
set_tris_A(0xFF); // Configuro el puerto A como entradas
set_tris_B(0x00); // Configuro el puerto b salida
while(!usb_cdc_connected())
{
OUTPUT_HIGH(PIN_E0);
OUTPUT_LOW(PIN_E1);
DELAY_MS(500);
OUTPUT_HIGH(PIN_E1);
OUTPUT_LOW(PIN_E0);
}
// espera a detectar una transmisión de la PC (Set_Line_Coding).
OUTPUT_HIGH(PIN_E0);
OUTPUT_LOW(PIN_E1);
sal1=0; //Inicializo Variables alternativas
sal2=0; //Inicializo Variables alternativas
do{
usb_task();
//////////////////////////////////////////////////////
if (usb_enumerated())
{ // Espera a que el dispositivo sea enumerado por el host.
OUTPUT_LOW(PIN_E0);
OUTPUT_HIGH(PIN_E1);
if(usb_cdc_kbhit())
{ // En espera de nuevos caracteres en el buffer de recepción.
datoIN = usb_cdc_getc();
if(datoIN == 'a')
{ //¿lo que llegó fué el caracter a = hay movimiento en el salon 1 y esta en la intesidad mas alta?
OUTPUT_HIGH(PIN_B0);
sal1=1; //si, entonces se prenden las luces del salon 1
}
if(datoIN == 'b')
{ val=8;
}
if(datoIN == 'c')
{ val=7;
}
if(datoIN == 'd')
{ val=6;
}
if(datoIN == 'e')
{ val=5;
}
if(datoIN == 'f')
{ val=4;
}
if(datoIN == 'g')
{ val=3;
}
if(datoIN == 'h')
{ val=2;
}
if(datoIN == 'i')
{ //¿lo que llegó fué el caracter b = no hay movimiento en el salon 1?
OUTPUT_LOW(PIN_B0);
}
if(datoIN == 'j')
{ //¿lo que llegó fué el caracter c = = hay movimiento en el salon 2?
OUTPUT_HIGH(PIN_B1);
sal2=1; //si, entonces se prenden las luces del salon 2
}
if(datoIN == 'k')
{ //¿lo que llegó fué el caracter d = no hay movimiento en el salon 2?
OUTPUT_LOW(PIN_B1);
}
if (sal1==1 || sal2==1) // Pregunto por variable del salon
{
OUTPUT_HIGH(PIN_B2); // Prende Led Indicador
}
else
{
OUTPUT_LOW(PIN_B2); // Prende Led Indicador
}
dato=datoIN;
}
}
}while (TRUE); // bucle infinito.
}
La idea es q cuando llegue el dato
b la intensidad sea del 90%, cuando llegue
c la intensidad sea del 80%, cuando llegue
d la intensidad sea del 70%, cuando llegue
e la intensidad sea del 60%, cuando llegue
f la intensidad sea del 50%, cuando llegue
g la intensidad sea del 40%, cuando llegue
h la intensidad sea del 30%.
RedPic le escribo porq he probado muchas cosas pero no me sale lo que quiero, y esto es parte de mi tesis de grado para optar por el titulo de ingeniero en telecomunicaciones, y lo necesito, no se si ud podria colaborarme o ayudarme para poder implementarlo.
Este es el cto de manera general, los moc que utilizo el 3020 q cruzan por cero y el triac bt136
https://drive.google.com/file/d/0Bw7-Do2OdLyGbDdLVHQ1WG01anRCRlF6cFZBOFVXX05KS25v/edit?usp=sharingAgradeceria una pronta respuesta
Saludos Fabio
maverick77.fabio@gmail.com