Autor Tema: LCD Smartie Usb  (Leído 3747 veces)

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

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
LCD Smartie Usb
« en: 29 de Agosto de 2012, 12:01:38 »
Buenas, amigos! Soy nuevo en el foro y soy hobbista hace como 4 años... Estoy montando este proyecto que es fabuloso, titulado LCD Smartie. Anda casi todo a la pefección, lo único que necesito es saber que hacer con el buzzer que parece no funcionar cuando presiono los botones. Si... dije botones porque los rotary encoder cumplen simil funcion. Bien: Les dejo el proyecto completo:

http://www.madboxpc.com/foro/topic/140129-guia-haz-tu-propio-lcd-usb/

Y un video del mio para que vean como funciona:

feature=g-hist

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LCD Smartie Usb
« Respuesta #1 en: 29 de Agosto de 2012, 13:19:14 »
El tema del buzzer, puede ser que el transistor este al revés? O sea que tenga otro pinout... O el buzzer esta correctamente colocado con su polaridad?

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
Re: LCD Smartie Usb
« Respuesta #2 en: 24 de Septiembre de 2012, 11:32:46 »
El tema del buzzer, puede ser que el transistor este al revés? O sea que tenga otro pinout... O el buzzer esta correctamente colocado con su polaridad?

Saludos!

Hola Suky! Sucede que esa función se incorpora en el config.ini (o bien, en el mismo programa). Ahora me he avocado a la tarea de agregar dos botones mas... por cierto, el tema de cambiar el rotary encoder por pulsadores comunes es por la escasa disponibilidad que hay de ese dichoso encoder. El otro problema es que soy MUY nuevo en esto, recien he encontrado (excelente, por cierto) una guía escrita por vos en la web de C18... Bien. Al grano:

Me he comunicado con el autor (el original, ya que el link que he puesto es un repost y quien lo ha escrito, no tiene la menor idea de cómo modificar el firmware), ch424, quien me ha facilitado el source code. A continuación te detallo los posibles cambios que debería realizar (Aquí mismo, ya que es poco):

En el archivo user.c:

TRISROTA=1;
TRISROTB=1;
TRISROTS=1;
TRISROTC=1;   //agregada por mi
TRISROTD=1;   //agregada por mi

Mas abajo:

queueCheckButtons=0;
newButtons=0b00011111&BUTTONS;      //=000CDABS

Esta es la original:

queueCheckButtons=0;
newButtons=0b00000111&BUTTONS;      //=00000ABS

Luego:

void ProcessIO(void)
{   
   // User Application USB tasks
if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;

   // don't do anything if LCD isn't fully set up
if(!LCDisSetup){setupLCD();return;}

if(queueCheckButtons)
   {
   checkButtons();
   queueCheckButtons=0;
   }

SIN CAMBIOS... Pero inmediatamente debajo:


if (mUSBUSARTIsTxTrfReady())
{
   if(queuedButton==1){
      putrsUSBUSART("S");
      queuedButton=0; return;}
   if(queuedButton==2){
      putrsUSBUSART("A");
      queuedButton=0; return;}
   if(queuedButton==3){
      putrsUSBUSART("B");
      queuedButton=0; return;}
   if(queuedButton==4){                     //Agregada por mi
      putrsUSBUSART("C");             //Agregada por mi
      queuedButton=0; return;}       //Agregada por mi
   if(queuedButton==5){                     //Agregada por mi
      putrsUSBUSART("D");             //Agregada por mi
      queuedButton=0; return;}      //Agregada por mi
   if(getnextbyte()){whatToDo();}
}

Por ultimo en este archivo tengo esto que no se como modificar:

oldButtons=newButtons;
newButtons=0b00011111&BUTTONS;      //=000DCABS
if (oldButtons!=newButtons)         //if something's changed
   {
   if (((oldButtons&0b00010000)!=(newButtons&0b00010000))&((newButtons&0b00010000)==0b00010000))      //if d has changed and =1
      {queuedButton=5;return;}
   if (((oldButtons&0b00001000)!=(newButtons&0b00001000))&((newButtons&0b00001000)==0b00001000))      //if c has changed and =1
      {queuedButton=4;return;}
   if (((oldButtons&0b00000100)!=(newButtons&0b00000100))&((newButtons&0b00000100)==0b00000100))      //if b has changed and =1
      {queuedButton=3;return;}
   if (((oldButtons&0b00000010)!=(newButtons&0b00000010))&((newButtons&0b00000010)==0b00000010))      //if b has changed and =1
      {queuedButton=2;return;}
   if (((oldButtons&0b00000001)!=(newButtons&0b00000001))&(newButtons&0b00000001))      //if s has changed and =1
      {queuedButton=1;return;}
   }
}

Después en el io_cfg.h he modificado esto:

#define ROTA      PORTCbits.RC2
#define TRISROTA   TRISCbits.TRISC2

#define ROTB      PORTCbits.RC1
#define TRISROTB   TRISCbits.TRISC1

#define ROTS      PORTCbits.RC0
#define TRISROTS   TRISCbits.TRISC0

#define ROTC      PORTCbits.RC6
#define TRISROTC   TRISCbits.TRISC6

#define ROTD      PORTCbits.RC7
#define TRISROTD   TRISCbits.TRISC7

Y en el p18f2550.h las modificaciones son estas:

extern volatile near unsigned char       PORTC;
extern volatile near union {
  struct {
    unsigned RC0:1;
    unsigned RC1:1;
    unsigned RC2:1;
    unsigned RC6:1;  //Agregada por mi
    unsigned RC7:1;  //Agregada por mi
    unsigned :1;
    unsigned RC4:1;
    unsigned RC5:1;
//    unsigned RC6:1;   comentada por mi
//    unsigned RC7:1;   comentada por mi

luego:

extern volatile near struct {
  unsigned RC0:1;
  unsigned RC1:1;
  unsigned RC2:1;
  unsigned RC6:1;  //Agregada por mi
  unsigned RC7:1;  //Agregada por mi
  unsigned :3;
 // unsigned RC6:1;  comentada por mi
 // unsigned RC7:1;  comentada por mi

A continuación te dejo el link con el source code original (sin cambios):

http://www.mediafire.com/?ff4br813e9jjsnp

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LCD Smartie Usb
« Respuesta #3 en: 24 de Septiembre de 2012, 11:58:09 »
Hola!

Citar
Por ultimo en este archivo tengo esto que no se como modificar:

oldButtons=newButtons;
newButtons=0b00011111&BUTTONS;      //=000DCABS
if (oldButtons!=newButtons)         //if something's changed
   {
   if (((oldButtons&0b00010000)!=(newButtons&0b00010000))&((newButtons&0b00010000)==0b00010000))      //if d has changed and =1
      {queuedButton=5;return;}
   if (((oldButtons&0b00001000)!=(newButtons&0b00001000))&((newButtons&0b00001000)==0b00001000))      //if c has changed and =1
      {queuedButton=4;return;}
   if (((oldButtons&0b00000100)!=(newButtons&0b00000100))&((newButtons&0b00000100)==0b00000100))      //if b has changed and =1
      {queuedButton=3;return;}
   if (((oldButtons&0b00000010)!=(newButtons&0b00000010))&((newButtons&0b00000010)==0b00000010))      //if b has changed and =1
      {queuedButton=2;return;}
   if (((oldButtons&0b00000001)!=(newButtons&0b00000001))&(newButtons&0b00000001))      //if s has changed and =1
      {queuedButton=1;return;}
   }
}

Pero ya esta agregado el uso de C y D... Y es correcta... Primero pregunta si el estado de los pulsadores es distinta a lo testeado anteriormente, si es eso es verdadero pasa a preguntar cual es distinto:
(oldButtons&0b00010000)!=(newButtons&0b00010000)) Es Dold distinto de Dnew? y ((newButtons&0b00010000)==0b00010000) Dnew igual a 1?

Cumplida esas dos condiciones significa que se ha pulsado  :mrgreen:

Luego debes sacar las modificaciones que has realizado en p18F2550.h. No se pueden cambiar las posiciones como lo has realizado, ya que eso esta ligado al hardware.

Lo que debes agregar o cambiar es la definición de BUTTONS, puede ser:

Código: [Seleccionar]
#define BUTTONS ((ROTD<<4)|(ROTC<<3)|(ROTA<<2)|(ROTB<<1)|(ROTS))
Por ejemplo.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
Re: LCD Smartie Usb
« Respuesta #4 en: 24 de Septiembre de 2012, 12:22:51 »
Claro... lo hice por intuicion binómica (?............ una ultima acotación: No encuentro el #define Buttons por ninguna parte... dónde esta?  :oops:
Lo único que encontré al respecto está en el io_cfg.h  :?

Gracias millones por tu rápida respuesta  :mrgreen:  ((:-))

« Última modificación: 24 de Septiembre de 2012, 12:27:02 por Arsenic »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LCD Smartie Usb
« Respuesta #5 en: 24 de Septiembre de 2012, 12:24:14 »
una ultima acotación: No encuentro el #define Buttons por ninguna parte... dónde esta?  :oops:

Ni idea, pero tiene que existir  :roll:
No contesto mensajes privados, las consultas en el foro

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
Re: LCD Smartie Usb
« Respuesta #6 en: 24 de Septiembre de 2012, 12:28:41 »
una ultima acotación: No encuentro el #define Buttons por ninguna parte... dónde esta?  :oops:

Ni idea, pero tiene que existir  :roll:

Archivo:

io_cfg.h

Lineas:

#define ROTA      PORTCbits.RC2
#define TRISROTA   TRISCbits.TRISC2

#define ROTB      PORTCbits.RC1
#define TRISROTB   TRISCbits.TRISC1

#define ROTS      PORTCbits.RC0
#define TRISROTS   TRISCbits.TRISC0

#define ROTC      PORTCbits.RC6
#define TRISROTC   TRISCbits.TRISC6

#define ROTD      PORTCbits.RC7
#define TRISROTD   TRISCbits.TRISC7

#define BUTTONS      PORTC

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LCD Smartie Usb
« Respuesta #7 en: 24 de Septiembre de 2012, 12:32:02 »
Ahí esta! Reemplazalo por lo que indique, debería de funcionar  :tongue: Otra forma:

Código: [Seleccionar]
#define BUTTONS ((POTC&0b111)|((PORTC&0b11000000)>>3))
No contesto mensajes privados, las consultas en el foro

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
Re: LCD Smartie Usb
« Respuesta #8 en: 24 de Septiembre de 2012, 12:43:42 »
Ahí esta! Reemplazalo por lo que indique, debería de funcionar  :tongue: Otra forma:

Código: [Seleccionar]
#define BUTTONS ((POTC&0b111)|((PORTC&0b11000000)>>3))


Voy a tener que reportarte por ser tan genio!!!! Funciona perfecto!!! Confieso que estoy bastante "SECO" en lo que se refiere a programar pic's... pero quiero aprender a hacerlo en todos los lenguajes posibles... Creo que con aprender assembler y C18 estaríamos bárbaros no? Algo de programacion se, pero no demasiado... y de electronica emmm poco =S pero quiero aprender... solamente necesito material para consumir y ampliar mis conocimientos... esa guia tuya sirve mucho, lo se.. pero es un tantito avanzada para usuarios que recien empezamos... creo que necesito empezar con algo mas "light"...

2000000000000000 millones de gracias!

Por cierto, como NOTA: tu pickit2clone funca perfecto!!! Hasta hace debuggin!!!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LCD Smartie Usb
« Respuesta #9 en: 24 de Septiembre de 2012, 12:51:19 »
Genial!  :-/ Asm + algún C, sobrado! Tienes para encarar proyectos de todo tipo  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Arsenic

  • PIC10
  • *
  • Mensajes: 47
Re: LCD Smartie Usb
« Respuesta #10 en: 24 de Septiembre de 2012, 13:55:56 »
Es cierto, sobre asm, ya tengo un tutorial "asm desde cero" en este mismo foro, fichado... en C tengo tus guías... pero necesitaria algun material basico con la sintaxis que aun no la he interpretado correctamente al 100%... con respecto a este proyecto, me gustaría ponerle otro GPO (salida) con un led o varios de ellos, para así, tener una alarma luminosa y el frente hacerlo de acrílico... de esa manera, que "brille titilando" cuando nos llega un mail, por ejemplo... interesante propuesta, verdad?


 

anything