El control de 8 reles yo lo puse en post anteriores.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <18F4550.h> // Definición de registros internos.
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
// Fuses utilizados:
/*
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
MCLR: Utilizamos reset por hardware.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB.
NOPBADEN: No utilizaremos el módulo de entradas análógicas del puerto B.
*/
#use delay(clock=48000000) // Frecuencia máxima de trabajo 48 Mhz.
#include "usb_cdc.h" // Descripción de funciones del USB.
#include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
// Funciones que indican el estado de la conexión usb.
void usb_conectado(void) {
output_high(PIN_A0);
output_low(PIN_A1);
}
void usb_desconectado(void) {
output_high(PIN_A1);
output_low(PIN_A0);
}
void usb_enumerado(void) {
output_high(PIN_A2);
}
// Programa principal:
void main() {
set_tris_a(0x00); // Configura al puerto A y al puerto B como salida.
set_tris_b(0x00);
// Configuraciones varias.
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// Iniciamos el USB.
usb_cdc_init(); // Funciones necesarias para iniciar el módulo USB.
usb_init(); // Funciones necesarias para iniciar el módulo USB.
while(!usb_cdc_connected()) { // Mientras el USB no esté conectado.
usb_desconectado();
}
usb_conectado();
do{
usb_task();
if (usb_enumerated()){ // Si el puerto ya fue enumerado por el host :
usb_enumerado(); // Enciende led de enumeración_OK.
if(usb_cdc_kbhit()){ // en espera de nuevo(s) caracter(es) en el buffer.
if(usb_cdc_getc()=='1'){ // ¿lo que llegó fué el caracter 1?
output_toggle(PIN_B0); // Conmuta el estado del relé 1.
}
if(usb_cdc_getc()=='2'){ // ¿lo que llegó fué el caracter 2?
output_toggle(PIN_B1); // Conmuta el estado del relé 2.
}
if(usb_cdc_getc()=='3'){ // ¿lo que llegó fué el caracter 3?
output_toggle(PIN_B2); // Conmuta el estado del relé 3.
}
if(usb_cdc_getc()=='4'){ // ¿lo que llegó fué el caracter 4?
output_toggle(PIN_B3); // Conmuta el estado del relé 4.
}
if(usb_cdc_getc()=='5'){ // ¿lo que llegó fué el caracter 5?
output_toggle(PIN_B4); // Conmuta el estado del relé 5.
}
if(usb_cdc_getc()=='6'){ // ¿lo que llegó fué el caracter 6?
output_toggle(PIN_B5); // Conmuta el estado del relé 6.
}
if(usb_cdc_getc()=='7'){ // ¿lo que llegó fué el caracter 7?
output_toggle(PIN_B6); // Conmuta el estado del relé 7.
}
if(usb_cdc_getc()=='8'){ // ¿lo que llegó fué el caracter 8?
output_toggle(PIN_B7); // Conmuta el estado del relé 8.
}
}
}
}while (TRUE); // bucle eterno
}