Autor Tema: Ayuda para mi proyecto de entradas digitales con un 18f4550 y c  (Leído 2323 veces)

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

Desconectado Jacobus

  • PIC10
  • *
  • Mensajes: 6
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.

Código: [Seleccionar]
#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

Desconectado Jacobus

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda para mi proyecto de entradas digitales con un 18f4550 y c
« Respuesta #1 en: 14 de Mayo de 2010, 13:02:25 »
Saludos, ya he acabado mi proyecto y me fue muy bien, me autorespondo para ayudar a quien sea novato como yo, por que aunque
para mi ya sean obvias las respuestas ahora antes no conocía esto y perdí un par de días en entenderlo.

1.- si se definen como entradas no es necesario poner output (como e visto en muchas pags de este foro) ya que esto no hace
nada, peor aun en raros casos si la entrada es 1 y tu mandas un output 0, el pic se "desconecta" para evitar el corto.

2.-a diferencia de otras marcas de microcontroladores y a los circuitos integrados, las entradas digitales del pic 18f4550 al estar abiertas
son indeterminadas por lo cual hay que hacer un pequeño circuito (para cada entrada) con una sola resistencia para que pase de 0 a 1 al
conectar o desconectar

+----/\/---- pin
            |
            \
            |
            gnd


Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Ayuda para mi proyecto de entradas digitales con un 18f4550 y c
« Respuesta #2 en: 14 de Mayo de 2010, 14:23:14 »
Hola jacobus, revisa este ejemplo con aplicaciones básica con el 18F4550

saludos.


 

anything