Saludos Foreros,
soy realmente nuevo en esto de la programacion de micros y me comienza a gustar mucho por todas las posibilidades que ofrece.
Al grano, basicamente estoy usando un 18f4550 para detectar los cambios en las entradas digitales y enviar el codigo de este
pin via usb, quiero usar la mayor cantidad disponible de entradas, este es el codigo en el que estoy trabajando.
#include <18F4550.h>
#include <stdlib.h>
#fuses HSPLL,MCLR, NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#include "C:\pic\usb_cdc.h" //con el cdc de mi driver
void main() {
int ant[30]; //guada el estado anterior
int act[30];//guarda el estado actual
int i;
disable_interrupts(global);
setup_adc_ports(NO_ANALOGS);
usb_cdc_init();
usb_init();
set_tris_a(0x3F);// estos creo que son todos las entradasque se pueden usar
set_tris_b(0xFF);
set_tris_c(0xC7);
set_tris_d(0xFF);
set_tris_e(0x7);
output_a(0);
output_b(0);
output_c(0);
output_d(0);
output_e(0);
for (i=0;i<30;i++) //0 en los arrays
{
ant[i] = 0;
act[i] = 0;
}
while(!usb_cdc_connected()) {}
// espera a detectar una transmisión de la PC (Set_Line_Coding)
do{
for (i=0;i<30;i++) //anterior = actual
{
ant[i] = act[i];
}
act[0]=input(pin_a0); //actual leo pin por pin, ya que lo intente con todo el puerto y me fue peor
act[1]=input(pin_a1);
act[2]=input(pin_a2);
act[3]=input(pin_a3);
act[4]=input(pin_a4);
act[5]=input(pin_a5);
act[6]=input(pin_e0);
act[7]=input(pin_e1);
act[8]=input(pin_e2);
act[9]=input(pin_c0);
act[10]=input(pin_c1);
act[11]=input(pin_c2);
act[12]=input(pin_d0);
act[13]=input(pin_d1);
act[14]=input(pin_d2);
act[15]=input(pin_d3);
act[16]=input(pin_c6);
act[17]=input(pin_c7);
act[18]=input(pin_d4);
act[19]=input(pin_d5);
act[20]=input(pin_d6);
act[21]=input(pin_d7);
act[22]=input(pin_b0);
act[23]=input(pin_b1);
act[24]=input(pin_b2);
act[25]=input(pin_b3);
act[26]=input(pin_b4);
act[27]=input(pin_b5);
act[28]=input(pin_b6);
act[29]=input(pin_b7);
for (i=0;i<30;i++)
{
if (ant[i] != act[i]) //si actual es diferente a anterior imprime en el usb el numero del array y el estado actual
{
printf(usb_cdc_putc,"%u;%u-",i,act[i]);
}
}
delay_ms(50);
}while (TRUE); // bucle eterno
}
al probarlo me comienza a arrojar muchos datos de muchos cambios sobretodo en el puerto a y b,
no se, ¿me falta algo?(por ejemplo en los fuses o en el control de puertos),
o ¿mi codigo esta mal? (soy programador pero primera vez que hago algo para pics),
o si esta bien ¿que puede pasar algo mal en la board de prueba? (no uso fuente solo el voltaje
del usb, o puede ser que las entradas son muy sensibles y no se las puede dejar abiertas),
Porfavor Ayuden a este pobre principiante que quiere expandir sus conocimientos jeje:)
Gracias anticipadas