Buenas Amigos, acudo a uds para ver quien me puede colaborar con la inserción de un PWM por software en un proyecto que estoy realizando.
Les cuento el proyecto q realizo es la integración de una tarjeta de adquisición y Matlab, a través de procesamiento de señales en matlab diseñe un sistema de control lumínico, por ahora el pic solo prende y apaga las luces del recinto controlado dependiendo del carácter que le envié matlab, ahora a través de unas señas que haré frente a una cámara matlab detectara un patrón y modificara la intensidad de las luces.
Estuve leyendo y la mejor solución es realizar un PWM por software, pero la verdad no entiendo mucho la programación de los pic solo básico, quisiera saber si alguien podría colaborarme en esto, es algo así como urgente!
Este es el Codigo en ccs que llevo hasta ahora
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,NOLVP
#use delay(clock=20000000) // Frecuencia máxima de trabajo 20 Mhz
#use fast_io(A)
#use standard_io(B)
#use standard_io(D)
#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_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 el nivel mas alto?
OUTPUT_HIGH(PIN_B1);
sal1=1; //si, entonces se prenden las luces del salon 1
}
if(datoIN == 'b')
{ // ¿lo que llegó fué el caracter b = hay movimiento en el salon 1 y esta en el nivel 2?
}
if(datoIN == 'c')
{ // ¿lo que llegó fué el caracter c = hay movimiento en el salon 1 y esta en el nivel 3?
}
if(datoIN == 'd')
{ // ¿lo que llegó fué el caracter d = hay movimiento en el salon 1 y esta en el nivel 4?
}
if(datoIN == 'g')
{ //¿lo que llegó fué el caracter g = no hay movimiento en el salon 1?
OUTPUT_LOW(PIN_B1);
sal1=2;
//si, entonces se apagaran las luces del salon 1
}
if (sal1==1) // Pregunto por variable del salon
{
OUTPUT_HIGH(PIN_B2); // Prende Led Indicador
}
else
{
OUTPUT_LOW(PIN_B2); // Prende Led Indicador
}
}
}
}while (TRUE); // bucle infinito.
}
el caracter a prende las luces , el caracter g apaga las luces y los caracteres b,c,d son las señas para el control de intensidad.
Lo que necesito es implementar el pwm en estos caracteres sobre el pin B0, les agradesco su ayuda!!!
Adjunto el circuito