Autor Tema: Proyecto 25 botones controlados por PIC  (Leído 44653 veces)

0 Usuarios y 9 Visitantes están viendo este tema.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #135 en: 16 de Junio de 2012, 08:26:49 »
Tienes que conectarlo al positivo.

A la hora de realizar rutas ten en cuenta que cuanto más separados estén los hilos que llevan las señales, más ruido pueden captar y más inductancias parásitas pueden tener.

Hay que intentar realizar las rutas con hilos paralelos siempre que se pueda.


Saludos.

Desconectado Nanashi

  • PIC12
  • **
  • Mensajes: 69
Re: Proyecto 25 botones controlados por PIC
« Respuesta #136 en: 16 de Junio de 2012, 08:30:50 »
Tienes que conectarlo al positivo.

A la hora de realizar rutas ten en cuenta que cuanto más separados estén los hilos que llevan las señales, más ruido pueden captar y más inductancias parásitas pueden tener.

Hay que intentar realizar las rutas con hilos paralelos siempre que se pueda.


Saludos.

Conectarlo al positivo? en el PIC, al USB o necesitaria una fuente externa de alimentación?

A la hora de realizar rutas ten en cuenta que cuanto más separados estén los hilos que llevan las señales, más ruido pueden captar y más inductancias parásitas pueden tener.

No lo entiendo, que serian las pistas de la PCB?

Un saludo

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #137 en: 16 de Junio de 2012, 08:46:50 »
1.- Al positivo de la placa (que viene del USB)


2.- Si, las pistas de la PCB.

La señal positiva y la negativa deberían ir en paralelo lo más cerca posible una de la otra desde la entrada hasta el chip.

Saludos.

Desconectado ifcaro

  • PIC10
  • *
  • Mensajes: 8
Re: Proyecto 25 botones controlados por PIC
« Respuesta #138 en: 17 de Junio de 2012, 12:11:07 »
Hola, he hecho el siguiente circuito en proteus y también el programa para el PIC en ccs y para el pc en vb.net. El problema es que solo puedo dejar pulsado como mucho un pulsador en cada columna porque sino sale error en el proteus y no tengo ni idea de a que se debe.

Código: [Seleccionar]
#include <main.h>
#include <usb_cdc.h>

int8 DATA_RX[4];
int8 DATA_TX[30];

void main()
{
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   usb_init();
   
   int i=0;
   
   for(i=0; i<25; i++)
      DATA_TX[i]='0';
   
   DATA_TX[25]='!';
   DATA_TX[26]='E';
   DATA_TX[27]='N';
   DATA_TX[28]='D';
   DATA_TX[29]='\0';
     
   while (true) {

      if (usb_enumerated()){
         if(usb_cdc_kbhit()){
            for (i=0;i<3;++i){
               DATA_RX[i] = usb_cdc_getc();
            }
          }
         if(DATA_RX[0]=='G' && DATA_RX[1]=='E' && DATA_RX[2]=='T'){
            for(i=0; i<5; i++){
               output_low(PIN_B0);
               output_low(PIN_B1);
               output_low(PIN_B2);
               output_low(PIN_B3);
               output_low(PIN_B4);
               delay_ms(100);
               switch(i){
                  case 0:
                     output_high(PIN_B0);
                     break;
                  case 1:
                     output_high(PIN_B1);
                     break;
                  case 2:
                     output_high(PIN_B2);
                     break;
                  case 3:
                     output_high(PIN_B3);
                     break;
                  case 4:
                     output_high(PIN_B4);
                     break;
               }
               
               if(input(PIN_A0)){
                  DATA_TX[(5*i)+0]='1';
               }else{
                  DATA_TX[(5*i)+0]='0';
               }   
               if(input(PIN_A1)){
                  DATA_TX[(5*i)+1]='1';
               }else{
                  DATA_TX[(5*i)+1]='0';
               }
               if(input(PIN_A2)){
                  DATA_TX[(5*i)+2]='1';
               }else{
                  DATA_TX[(5*i)+2]='0';
               }
               if(input(PIN_A3)){
                  DATA_TX[(5*i)+3]='1';
               }else{
                  DATA_TX[(5*i)+3]='0';
               }
               if(input(PIN_A4)){
                  DATA_TX[(5*i)+4]='1';
               }else{
                  DATA_TX[(5*i)+4]='0';
               } 
            }
           
            usb_cdc_puts(DATA_TX);
           
            DATA_RX[0]='\0';
         }
      }
   }
   enable_interrupts(GLOBAL);
}

PD: es la primera vez que programo para un PIC, aunque tengo bastante experiencia en programación.

Un saludo

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #139 en: 17 de Junio de 2012, 12:44:32 »
Creo que faltan las resistencias a masa en las entradas RA

Saludos.

Desconectado ifcaro

  • PIC10
  • *
  • Mensajes: 8
Re: Proyecto 25 botones controlados por PIC
« Respuesta #140 en: 17 de Junio de 2012, 14:36:13 »
Creo que faltan las resistencias a masa en las entradas RA

Saludos.

He añadido lo del otro circuito de kicad pero ahora me marca todos pulsados siempre independientemente de si lo están o no.

Adjunto una imagen y el circuito. Si es necesario puedo subir el .hex y el .exe o el codigo fuente

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #141 en: 17 de Junio de 2012, 14:56:07 »
Todas las salidas RB deben estar por defecto a 1. Para activar una de las columnas, la salida RB correspondiente se lleva a cero.

Las entradas están por defecto a 0. Si se pulsa un pulsador pasa a valer 1, pero tardan algún tiempo debido al condensador.
Desde que se activa RB hasta que se leen las entradas RA deben pasar más de 10 milisegundos para que se carguen y descarguen los condensadores.


Saludos.
« Última modificación: 17 de Junio de 2012, 14:59:00 por Picuino »

Desconectado Nanashi

  • PIC12
  • **
  • Mensajes: 69
Re: Proyecto 25 botones controlados por PIC
« Respuesta #142 en: 18 de Junio de 2012, 18:08:15 »
Todas las salidas RB deben estar por defecto a 1. Para activar una de las columnas, la salida RB correspondiente se lleva a cero.

Las entradas están por defecto a 0. Si se pulsa un pulsador pasa a valer 1, pero tardan algún tiempo debido al condensador.
Desde que se activa RB hasta que se leen las entradas RA deben pasar más de 10 milisegundos para que se carguen y descarguen los condensadores.


Saludos.

No somos capaces, de hacerla funcionar. Jeje.
No sabemos que falla. Pero no va.
Alguna ayuda?. Gracias
« Última modificación: 18 de Junio de 2012, 18:16:59 por Nanashi »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #143 en: 18 de Junio de 2012, 18:54:55 »
Yo no tengo el Proteus instalado.

¿Qué es lo que va mal?

Podéis intentar lo siguiente: todas las salidas RB a uno, excepto una que esté siempre a cero.

Leer las entradas RA a ver que tienen.

Intentad trabajar por ahora con leds de salida, para no mezclar los problemas con el RS232 o el USB.

Puede que tengáis problemas con los retardos. Si los hacéis con un bucle, el USB se cuelga.


Saludos.
« Última modificación: 18 de Junio de 2012, 18:57:24 por Picuino »

Desconectado ifcaro

  • PIC10
  • *
  • Mensajes: 8
Re: Proyecto 25 botones controlados por PIC
« Respuesta #144 en: 18 de Junio de 2012, 19:17:10 »
Yo creo que el problema esta en el circuito de vuelta a RA porque en la simulación siempre esta a nivel alto al estar conectado a vcc y le da igual el estado de los botones.

@Picuino Las salidas RB no deberían estar todas a nivel bajo menos la seleccionada? si están varias a nivel alto, llegara siempre 1 con que haya un solo botón activado por columna o eso entiendo yo.

De todos modos ponga las salidas RB como las ponga siempre recibe un 1 por lo que comenté en la primera linea

Un saludo

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #145 en: 19 de Junio de 2012, 09:53:00 »
El transistor conectado a RB es un PNP que se activa (comienza a conducir) cuando la salida RB está a nivel CERO.

Para activar una salida RB hay que llevarla a CERO.


Saludos.

Desconectado Nanashi

  • PIC12
  • **
  • Mensajes: 69
Re: Proyecto 25 botones controlados por PIC
« Respuesta #146 en: 20 de Junio de 2012, 16:30:35 »
Yo no tengo el Proteus instalado.

¿Qué es lo que va mal?

Podéis intentar lo siguiente: todas las salidas RB a uno, excepto una que esté siempre a cero.

Leer las entradas RA a ver que tienen.

Intentad trabajar por ahora con leds de salida, para no mezclar los problemas con el RS232 o el USB.

Puede que tengáis problemas con los retardos. Si los hacéis con un bucle, el USB se cuelga.


Saludos.

Estamos dale que te pego y no somos capaces.
Cual usas tu? aver si nos es mas sencillo con ese.
Gracias y un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #147 en: 20 de Junio de 2012, 16:58:10 »
Yo trabajo directamente con una placa de desarrollo con microcontrolador.

Colgad el programa a ver que le pasa.

Saludos

Desconectado ifcaro

  • PIC10
  • *
  • Mensajes: 8
Re: Proyecto 25 botones controlados por PIC
« Respuesta #148 en: 20 de Junio de 2012, 17:05:45 »
Código: [Seleccionar]
#include <main.h>
#include <usb_cdc.h>

int8 DATA_RX[4];
int8 DATA_TX[30];

void main()
{
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   usb_init();
   
   int i=0;
   
   for(i=0; i<25; i++)
      DATA_TX[i]='0';
   
   DATA_TX[25]='!';
   DATA_TX[26]='E';
   DATA_TX[27]='N';
   DATA_TX[28]='D';
   DATA_TX[29]='\0';
     
   while (true) {

      if (usb_enumerated()){
         if(usb_cdc_kbhit()){
            for (i=0;i<3;++i){
               DATA_RX[i] = usb_cdc_getc();
            }
          }
         if(DATA_RX[0]=='G' && DATA_RX[1]=='E' && DATA_RX[2]=='T'){
            for(i=0; i<5; i++){
               output_high(PIN_B0);
               output_high(PIN_B1);
               output_high(PIN_B2);
               output_high(PIN_B3);
               output_high(PIN_B4);
                     
               delay_ms(100); //no se donde va el delay
               
               switch(i){
                  case 0:
                     output_low(PIN_B0);
                     break;
                  case 1:
                     output_low(PIN_B1);
                     break;
                  case 2:
                     output_low(PIN_B2);
                     break;
                  case 3:
                     output_low(PIN_B3);
                     break;
                  case 4:
                     output_low(PIN_B4);
                     break;
               }
               
               delay_ms(100); //lo pongo aqui tambien por si acaso
               
               if(input(PIN_A0)){
                  DATA_TX[(5*i)+0]='1';
               }else{
                  DATA_TX[(5*i)+0]='0';
               }   
               if(input(PIN_A1)){
                  DATA_TX[(5*i)+1]='1';
               }else{
                  DATA_TX[(5*i)+1]='0';
               }
               if(input(PIN_A2)){
                  DATA_TX[(5*i)+2]='1';
               }else{
                  DATA_TX[(5*i)+2]='0';
               }
               if(input(PIN_A3)){
                  DATA_TX[(5*i)+3]='1';
               }else{
                  DATA_TX[(5*i)+3]='0';
               }
               if(input(PIN_A4)){
                  DATA_TX[(5*i)+4]='1';
               }else{
                  DATA_TX[(5*i)+4]='0';
               } 
            }
           
            usb_cdc_puts(DATA_TX);
           
            DATA_RX[0]='\0';
         }
      }
   }
   enable_interrupts(GLOBAL);
}

Saludos

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Proyecto 25 botones controlados por PIC
« Respuesta #149 en: 20 de Junio de 2012, 18:11:09 »
Repito:
El delay no funciona con el USB.
Probad primero con un led de salida para comprobar si se ha leído un pulsador.

A partir de ahí podéis continuar.

Saludos.