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