Autor Tema: van resistencias entre el lcd y el pic?y entre el pic multiplexado con lcd y tec  (Leído 3692 veces)

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

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
hola compañeros del foro, podrian decirme si puedo montar este esquema en protoboard sin poner resistencias entre los pines del lcd y el pic y entre los pines del teclado multiplexados con el lcd y el pic directamente, sin que se me queme algo, o tengo que poner resistencias? y si es asi que valores, puse un par de valores como 2.6 k y de 1 k pero me desplaza una columna, y probe en poner de 10 k y ya el teclado no hace efecto en pantalla, gracias y ojala lo resolvamos porque lo hize en proteus y funciona bien pero al montarlo en protoboard no funciona, se me desplazaron las columnas hacia la derecha, gracias

es el pic 18f452, el teclado es 4x4 y el lcd es un 2x16, la libreria del lcd y del teclado:
//Ahora tengo que modificar esta libreria para el pic 18F452
//include LCD para CCS

// La ventaja de este codigo es que puedes trabajar si lo quieres con pines
// dispersos es decir no estas sujeto a la mitad de un puerto. Además no se usa el pin R/W,
// se conecta a masa

// Registros de Puertos A & B
#define PORTA 0xF80   // #define PORTA 0x05 // Puerto A
#define PORTB 0xF81   // Registro de direccionamiento Puerto A
#define PORTC 0xF82   // Registro de direccionamiento Puerto C
#define TRISA 0xF92   // Puerto B
#define TRISB 0xF93   // Registro de direccionamiento Puerto B
#define TRISC 0xF94   // Puerto C

// Definición de Puertos Pantalla LCD 40x20 Hitachi 44780
/*
#bit lcd_db4 = PORTC.0
#bit tris_lcd_db4 = TRISC.0
#bit lcd_db5 = PORTC.1
#bit tris_lcd_db5 = TRISC.1
#bit lcd_db6 = PORTC.2
#bit tris_lcd_db6 = TRISC.2
#bit lcd_db7 = PORTC.3
#bit tris_lcd_db7 = TRISC.3

#bit lcd_en = PORTA.0
#bit tris_lcd_en = TRISA.0
#bit lcd_rs = PORTA.1
#bit tris_lcd_rs = TRISA.1
*/

#bit lcd_db4 = PORTB.4
#bit tris_lcd_db4 = TRISB.4
#bit lcd_db5 = PORTB.5
#bit tris_lcd_db5 = TRISB.5
#bit lcd_db6 = PORTB.6
#bit tris_lcd_db6 = TRISB.6
#bit lcd_db7 = PORTB.7
#bit tris_lcd_db7 = TRISB.7

#bit lcd_en = PORTA.0
#bit tris_lcd_en = TRISA.0
#bit lcd_rs = PORTA.1
#bit tris_lcd_rs = TRISA.1

// lcd_init() Inicialización del LCD (debe utilizarse al principio,
// antes de trabajar con el LCD).
//
// lcd_putc(c) Imprime un caracter en el LCD.
//
// lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el LCD.
// (la esquina superior izquierda es 1,1)
//
// lcd_getc(x,y) Devuelve el caracter de la posicion x,y del LCD.
//
// void lcd_erase_line(x) Borra una cantidad de caracter hacia la derecha

// Conexion a la pantalla LCD 40x4
// RC0 <---> LCD DB4
// RC1 <---> LCD DB5
// RC2 <---> LCD DB6
// RC3 <---> LCD DB7
// RC5 <---> LCD ENABLE
// RC4 <---> LCD RS
//

#define LCD_DATO 1
#define LCD_INST 0

#define LCD_LINEA1 0x80 // Direccion de memoria para la 1 linea
#define LCD_LINEA2 0xc0 // Direccion de memoria para la 2 linea
#define LCD_LINEA3 0x94 // Direccion de memoria para la 3 linea
#define LCD_LINEA4 0xd4 // Direccion de memoria para la 4 linea



// 7 6 5 4 3 2 1 0
// Function Set 0b 0 0 1 B L F 0 0
// Bus size, B:0=4 bits, B:1=8 bits
// Line Number, L:0=1 Line, L:1=2 Lines
// Font size F:0=5x8, F:1=5x10
#define LCD_FUNCTION_SET 0b00101000 // Bus=4bit, Line=2, Font=5x8

// 7 6 5 4 3 2 1 0
// Display/Cursor 0b 0 0 0 0 1 D U B
// Set Display on/off, D:0=off, D:1=on
// Underline cursor, U:0=off, U:1=on
// Blinking cursor, B:0=off, B:1=on
#define LCD_DISPLAY_CURSOR 0b00001100 // Display=on, Scroll=off, Blinkin=off

// 7 6 5 4 3 2 1 0
// Entry Mode 0b 0 0 0 0 0 1 M S
// Cursor direction, M:0=left, 1=right
// Display Scroll, S:0=no scroll, S:1=scroll
#define LCD_ENTRY_MODE 0b00000110 // Increment cursor, no disp shift

void lcd_set_write() {
tris_lcd_db4 = 0; //
tris_lcd_db5 = 0; //
tris_lcd_db6 = 0; //
tris_lcd_db7 = 0; //---> Set portb RB0-RB3 mode output
}


void lcd_send_nibble(int8 n) {
if (bit_test(n,0)) //
lcd_db4 = 1; //
else //
lcd_db4 = 0; //

if (bit_test(n,1)) //
lcd_db5 = 1; //
else //
lcd_db5 = 0; //

if (bit_test(n,2)) //
lcd_db6 = 1; //
else //
lcd_db6 = 0; //

if (bit_test(n,3)) //
lcd_db7 = 1; //
else //
lcd_db7 = 0; //---> Set data nibble
delay_cycles(5); // nop
lcd_en = 1; // Habilita LCD Eneable __
delay_us(20); // Espera 2 uSeg. | |
lcd_en = 0; // Desabilita LCD Eneable __| |__
}

void lcd_send_byte (int1 select, int8 n) {
lcd_rs = 0; // Modo de instruccion
lcd_rs = select; // Escoje entre RS=0 : Instruccion & RS=1 : Data
delay_cycles(5); // nop
lcd_en = 0; // Desabilita LCD Eneable
lcd_send_nibble(n >> 4); // Envia los datos superiores MSB
lcd_send_nibble(n); // Envia los datos inferiores LSB
}

void lcd_init() {
int8 i, count=0;
lcd_set_write(); // Prepara el puerto DB4-DB7 como salida
tris_lcd_en = 0; //
tris_lcd_rs = 0; //---> Set porta RA0, RA1 & RA2 mode output
lcd_en = 0; //
lcd_rs = 0; //---> Clear LCD_EN, LCD_RW & LCD_RS
delay_ms(100);
retry:
for(i=1; i<=3; ++i) {
lcd_send_nibble(0b0011); // 8 bit mode 3 times
delay_ms(30);
}
lcd_send_nibble(0b0010); // 4 bit mode
lcd_send_byte(LCD_INST, LCD_FUNCTION_SET); // Function Set
lcd_send_byte(LCD_INST, LCD_DISPLAY_CURSOR); // Display Cursor
lcd_send_byte(LCD_INST, LCD_ENTRY_MODE); // Entry Mode
}

void lcd_gotoxy(int8 x, int8 y)
{
int8 const address[4]={LCD_LINEA1,LCD_LINEA2,LCD_LINEA3,LCD_LINEA4};
int8 pos;
pos=address[y-1]+(x-1);
lcd_send_byte (LCD_INST, pos);
}


void lcd_putc(char c) {
lcd_send_byte(LCD_DATO,c);
}

void lcd_clear() {
lcd_send_byte(LCD_INST,0x01);
}

void lcd_home() {
lcd_send_byte(LCD_INST,0x02);
}

void lcd_erase_line(int8 x) {
int8 i;
for(i=1;i<=x;++i) {
lcd_send_byte(LCD_DATO,32);
}
}
///////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
////                     KBD_LIB.C by Redraven                         ////
////                                                                   ////
////                     Derived from KBDD.C                           ////
////                  Generic keypad scan driver                       ////
////                                                                   ////
////  kbd_init()   Must be called before any other function.           ////
////                                                                   ////
////  c = kbd_getc(c)  Will return a key value if pressed or /0 if not ////
////                   This function should be called frequently so as ////
////                   not to miss a key press.                        ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

////////////////// The following defines the keypad layout on port D

// Un-comment the following define to use port B
#define use_portb_kbd TRUE

// Make sure the port used has pull-up resistors (or the LCD) on
// the column pins


#if defined(__PCH__)
#if defined use_portb_kbd
   #byte kbd = 0xF81              // This puts the entire structure
#else
   #byte kbd = 0xF83              // This puts the entire structure
#endif
#else
#if defined use_portb_kbd
   #byte kbd = 6                  // on to port B (at address 6)
#else
   #byte kbd = 8                  // on to port D (at address 8)
#endif
#endif

#if defined use_portb_kbd
   #define set_tris_kbd(x) set_tris_b(x)
#else
   #define set_tris_kbd(x) set_tris_d(x)
#endif

//Keypad connection:   (for example column 0 is B0)

#define COL0 (1 << 0) // PIN_B0
#define COL1 (1 << 1) // PIN_B1
#define COL2 (1 << 2) // PIN_B2
#define COL3 (1 << 3) // PIN_B3

#define ROW0 (1 << 4) // PIN_B4
#define ROW1 (1 << 5) // PIN_B5
#define ROW2 (1 << 6) // PIN_B6
#define ROW3 (1 << 7) // PIN_B7


#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)


#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2|COL3)


// Keypad layout:

char const KEYS[4][4] = {{'1','2','3','A'},
                         {'4','5','6','B'},
                         {'7','8','9','C'},
                         {'*','0','#','D'}};


#define KBD_DEBOUNCE_FACTOR 33    // Set this number to apx n/333 where
                                  // n is the number of times you expect
                                  // to call kbd_getc each second

void kbd_init() {
}

char kbd_getc( ) {
   static byte kbd_call_count;
   static short int kbd_down;
   static char last_key;
   static byte col;

   byte kchar;
   byte row;

   kchar='\0';
   if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) {
       switch (col) {
         case 0   : set_tris_kbd(ALL_PINS&~COL0);
                    kbd=~COL0&ALL_PINS;
                    break;
         case 1   : set_tris_kbd(ALL_PINS&~COL1);
                    kbd=~COL1&ALL_PINS;
                    break;
         case 2   : set_tris_kbd(ALL_PINS&~COL2);
                    kbd=~COL2&ALL_PINS;
                    break;
         case 3   : set_tris_kbd(ALL_PINS&~COL3);
                    kbd=~COL3&ALL_PINS;
                    break;
       }

       if(kbd_down) {
         if((kbd & (ALL_ROWS))==(ALL_ROWS)) {
           kbd_down=false;
           kchar=last_key;
           last_key='\0';
         }
       } else {
          if((kbd & (ALL_ROWS))!=(ALL_ROWS)) {
             if((kbd & ROW0)==0)
               row=0;
             else if((kbd & ROW1)==0)
               row=1;
             else if((kbd & ROW2)==0)
               row=2;
             else if((kbd & ROW3)==0)
               row=3;
             last_key =KEYS[row][col];
             kbd_down = true;
          } else {
             ++col;
             if(col==4)
               col=0;
          }
       }
      kbd_call_count=0;
   }
  set_tris_kbd(ALL_PINS);
  return(kchar);
}







« Última modificación: 15 de Junio de 2012, 22:22:33 por juanjuan19 »

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
use el pic 18f452 en ccs

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
no se si alguien ha tenido el mismo problema, pero lo que me sucede ahora es que, arranco el programa con la unica posibilidad de que puedas elegir la tecla 1  o la tecla 2 del teclado 4x4, cualquiera d elas dos opciones hace algo distinto a la otra, que es lo que programe, el tema es que, si vemos a  como esta formada la primera fila: '1', '2', '3', 'F1'. si elijo presionar la opcion 1, tendre un resultado, si presiono la opcion 2, se tiene otro resultado, el tema es que tambien funcionan las otras dos teclas en la misma fila, la tecla 1 tiene la misma opcion que la tecla 3, y la tecla 2 tiene la misma opcion que la tecla 4, el tema es que en esta instancia del programa que hice, las teclas 3 y 4 no tienen porque funcionar y menos todavia tener como funcion lo que hacen las teclas 1 y 2, gracias y ojala alguien me puede ayudar
« Última modificación: 16 de Junio de 2012, 02:02:25 por juanjuan19 »

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
hola gente del foro, estuve probando posibles soluciones y pienso que ya lo solucione, igual, antes de comentar bien mi experiencia, voy a testearlo bien para brindar una ayuda correcta saludos!!!! :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
no lo lo arregle, lo probe y sigue funcionando mal... por fabor si alguien tiene alguna sugerencia, por favor que la comente porque no se que hacer

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
tengo una consulta que hacerles, no quiero molestar mucho, pero no se q quien mas preguntarles, miren tengo un teclado 4x4,
en primera instancia, habilito la tecla 1 y la tecla 2, nada mas, podes apretar cualquier tecla que no pasara nada, bien??
bueno, yo preto la tecla 1, y magicamente sucede lo que programe por soft, todos contentos, si ahora quiero probar con la tecla 2, presiono la tecla, y hace la funcion de la tecla 1(hecha en el soft), y si presiono la tecla 3 en el teclado, sucede lo que le programe por soft a la tecla 2,
en conclusion, sucede que tengo el fenomeno de teclas gemelas, la tecla 1 y 2 (en el teclado real), hacen lo que lo programe a la tecla 1, y las teclas 3 y 4(del teclado real) hacen lo que le programe por soft a la tecla 2, esto es hablando de la primera fila,
probando muchas cosas, y recaliente, opte por cambiar filas por columnas y columnas por filas, y ahora el fenomeno de teclas gemelas, no lo tengo mas en la primera fila, sino en la primera columna, tienen idea que puede ser??en proteus funciona y rebien, y en el protoboard me esta complicando lo que les comente, por fabor si alguien puede ayudar, lo agradecere mucho

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Deberias poner el codigo del PIC, con las rutinas solamente no se puede opinar siquiera.
Usa Geshi y de la lista elige C o C++ para poner el codigo...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120

MGLSOFT:

            gracias por contestar, en un a de esas te das cuenta, listo, no se que es lo de geshi pero lo copio y lo pego en breve

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
hola MGLSOFT:
                   gracias de nuevo por responder, te paso lo que mete problemas, la librerías que puse al principio vas a necesitarlas, te agrego el proyectito con DNS y todo para que puedas ejecutarlo, en Proteus anda bien, pero al pasarlo al protoboard se tiene el problema que comente antes, miralo y agradezco tu interes:
Código: C
  1. #include <18F452.h>
  2. #device adc=10                  //para el convertidor de temperatura
  3. int8 control=12,activacion=1,sip=1,siq=1,sir=1,sip_c=1,siq_c=1;
  4. int8 mot=10,con=1,sale=10;
  5. int8 moh=10,envio=10;
  6. static int8 siq_salir=0,jkt=0,ordent=1;
  7. int i, ban_visor=0,final=0;
  8.  
  9. #use delay (clock=8000000)//20000000
  10. #include <LCD420___08_02_2012.c>//#include <lcd_ind424.c> //lo edite el dia 06 02 2012, adjunto
  11. #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
  12. #use fast_io(B)
  13.  
  14. #fuses XT,NOWDT,NOPROTECT,NOLVP//esta es la linea que va 04/06/2012
  15.  
  16. #include <kbd1.c>
  17. #include <STDLIB.H>
  18. #bit RC5=0xF82.5//#bit RC5=0x7.5 //defino RC7 como el pin 7 de la puerta C
  19. #rom int8 0xF00000={'7','2','3'}//#rom 0xF00000={'7','2','3'}//#rom 0x00FF/*0x2100*/={'7','2','3'}
  20. #bit RD7=0xF83.7
  21. int8 crin=7,code=1;
  22. float hum_actual;
  23.  
  24. int CONST adc[150]={0,2,4,6,8,10,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49
  25. ,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,93,95,97,99,101,103,105,107,109,
  26. 109,111,113,115,117,119,121,129,131,134,136,138,140,142,144,146,148,150,150,152,154,156,158,
  27. 160,162,164,166,168,170,172,175,177,179,181,183,185,187,189,191,193,195,197,199,201,203,205,
  28. 207,209,211,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,
  29. 255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,285,287,289,291,293,296,298,300,
  30. 302,304,306,308};    
  31. ///////////////15 02 2012 //////////////////////////////////////////
  32. static int8 lmt_bajo_tem ,lmt_alto_tem,tmp_actual;
  33. static int8 lmt_bajo_hum ,lmt_alto_hum;
  34. //static int8 lmt_bajo_luz ,lmt_alto_luz,luz_actual,error_l=0,reloj=0,tix=10,veri=10;
  35.  
  36. #int_TIMER0
  37. void led(void)///TIMER0_isr(void)
  38. {
  39.  if (RC5==0)
  40.    {
  41.     RC5=1;
  42.     set_TIMER0(0x10); //inicializa el timer0//0x83
  43.    }  //lo agrego el 29/11/2011, la idea es que llame  
  44.  else //a la velocidad del parpadeo del led
  45.    {
  46.     RC5=0;
  47.     set_TIMER0(0x10); //inicializa el timer0
  48.    }
  49. }
  50. #int_TIMER1
  51. void temp1s(void)   //Función
  52. {
  53.  if(sir==5)
  54.    {  
  55.      if(jkt >= 25)
  56.       {
  57.         code=7;
  58.         jkt=0;
  59.         sale=3;
  60.         return;
  61.       }  
  62.      else
  63.       {  
  64.         jkt++;
  65.       return;
  66.       }
  67.     return;
  68.    }
  69.  return;
  70. }
  71. void seleccioC(void);
  72. void modos(void);
  73. void seleccion(void);
  74. void visor(void);
  75. void seleccioCA(void);
  76. void seleccioCB(void);
  77. void ver_siempre_3(void);
  78. void muestra(void);
  79. ///////////////*****************
  80. void main(void)
  81. {
  82.     port_b_pullups(true);      
  83.    
  84.     kbd_init();
  85.     set_tris_c(0b00000011); //configura RB7 como salida el resto como entrada
  86.     RC5=0; //inicializo el bit RB7 a 0;
  87.     set_tris_e(0b11111111);
  88.     set_tris_d(0b11111111);
  89.     output_low(pin_c4);
  90.     output_low(pin_c3);
  91.     output_low(pin_c2);
  92.    
  93.     //estos valores ingresan valores por defecto
  94.     write_eeprom(10,1);
  95.     delay_ms(10);
  96.     write_eeprom(11,1);
  97.     delay_ms(10);    
  98.     write_eeprom(12,2);
  99.     delay_ms(10);
  100.     write_eeprom(13,2);
  101.     delay_ms(10);
  102.     write_eeprom(14,3);
  103.     delay_ms(10);
  104.     write_eeprom(15,3);
  105.     delay_ms(10);
  106.     write_eeprom(16,4);
  107.     delay_ms(10);
  108.     write_eeprom(17,4);
  109.     delay_ms(10);
  110.  
  111.     lcd_init();
  112.     kbd_init();
  113.    
  114.     lcd_gotoxy(1,1);
  115.     lcd_putc("hola foro todopic     ");     //lo modifique ahora
  116.     lcd_gotoxy(1,2);               //lo agregue ahora  
  117.     lcd_putc("problema de teclas    "); //lo agregue ahora
  118.     delay_ms(2000);                //lo agregue ahora  
  119.    
  120.     lcd_init();
  121.     lcd_gotoxy(1,1);
  122.     lcd_putc("Tecla 1:elijo 1     ");//lcd_putc("1:Modo Visor    ");
  123.     lcd_gotoxy(1,2);  
  124.     lcd_putc("Tecla 2:elijo 2     ");//lcd_putc("2:Modo Ajuste   ");      
  125.    
  126.  
  127.     set_tris_b(0xF0);             //RB0..RB3 salidas a teclado, RB4..RB7 entradas de teclado
  128.    
  129.    
  130.     setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
  131.     enable_interrupts(INT_TIMER0);
  132.    
  133.     setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);//setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); par el jkt
  134.     enable_interrupts(INT_TIMER1);
  135.     enable_interrupts(global);                //habilita interrupción general
  136.  
  137. do{
  138.    seleccion();           //ya esta
  139.    visor();               //ya esta
  140.    modos();               //ya esta
  141.    seleccioC();           //ya esta    
  142.    seleccioCA();          //ya esta
  143.    
  144.    ver_siempre_3();       //ya esta
  145.    muestra();             //ya esta
  146.    }while(TRUE);
  147.  return;
  148. }
  149. //////////////////////////////////////////////////////////////////////////////
  150. //esta funcion arranca activada, y puede responder al teclado cuando se presion
  151. //la tecla 1 o 2 sobre el teclado real
  152.  
  153. void seleccion()             //la k ya viene de otra funcion cargada
  154. {
  155.  int kk;
  156.  if(activacion==1)
  157.   {
  158.    kk=kbd_getc();
  159.    if(kk==49)           //presiono 1??     1: Presiono 1 para ingresar al modulo visor
  160.             {
  161.              control=1;
  162.              activacion=0;
  163.              code=1;
  164.              return;
  165.             }
  166.    if(kk==50)           //presiono 2??     2: Presiono 2 para ingresar al modulo configuracion
  167.             {
  168.              control=2;
  169.              activacion=0;
  170.              code=1;
  171.              return;
  172.             }
  173.    return;
  174.   }
  175.  return;
  176. }
  177. ////////Seleccion de modos  Seleccion de modos Seleccion de modos
  178. void modos(void)
  179. {
  180. //if(code==1)        ///<----------06 04 2012 lo comente
  181.   {
  182.      if(control==1)
  183.        {
  184.          lcd_init();
  185.          lcd_gotoxy(1,1);
  186.          lcd_putc("Presionaste 1 ahora ");
  187.          lcd_gotoxy(1,2);  
  188.          lcd_putc("Presiona  A, B o D   ");
  189.          control=10;//10
  190.          ban_visor=1;
  191.          crin=26;
  192.          code=0;
  193.          return;
  194.       }    
  195.     if(control==2)
  196.       {  
  197.          lcd_init();
  198.          lcd_gotoxy(1,1);
  199.          lcd_putc("presionaste 2 ahora     *");
  200.          lcd_gotoxy(1,2);  
  201.          lcd_putc("elegi el 7 o 8          ");
  202.          control=9;
  203.          ban_visor=0;
  204.          code=0;
  205.          return;
  206.       }
  207.    return;
  208.   }
  209.  return;
  210. }
  211. ///presiono la tecla 2 por eso
  212. //empieza a funcionar esta funcion
  213. void seleccioC()             //
  214. {
  215.  int kk;
  216.  if(control==9)                
  217.   {
  218.    kk=kbd_getc();
  219.    if(kk==55)           //presiono A??     0: Presiono cero para resetear
  220.             {                                  
  221.              lcd_init();
  222.              lcd_gotoxy(1,1);
  223.              lcd_putc("Parece que                 ");
  224.              lcd_gotoxy(1,2);  
  225.              lcd_putc("anda el soft                ");
  226.              control=98;
  227.              sip_c=2;
  228.              return;
  229.             }
  230.    if(kk==56)           //presiono B??     1: Presiono 1 para ingresar al modulo visor
  231.             {
  232.              lcd_init();
  233.              lcd_gotoxy(1,1);
  234.              lcd_putc("apretaste el           ");
  235.              lcd_gotoxy(1,2);  
  236.              lcd_putc("boton 8                ");
  237.              control=98;
  238.              siq_c=2;
  239.              return;
  240.             }
  241.  
  242.    if(kk==42)           //presiono *??     3: Presiono 3 para cambiar de modo                            
  243.             {
  244.              control=1;//lo comente el 18 04 2012
  245.              code=1;
  246.              return;
  247.             }
  248.     return;
  249.   }
  250.  return;
  251. }
  252. //////////////////////////////////////////////////////////////////////
  253. //esta funcion arranca si se presiono la tecla 1
  254. //al momento de preguntar que tecla quiere:¿¿ tecla 1 o tecla 2??
  255.  
  256. void visor(void)
  257. {  
  258.  if(control==10) //      control=10, kk=65, sip=1  sir=1;
  259.    {
  260.     int kk;
  261.     kk=kbd_getc();
  262.    
  263.     if(kk==53 && sir==1)     //modo activo
  264.      {
  265.        code=7;
  266.        sir=5;
  267.        sale=3;
  268.        ordent=5;
  269.        final=1;
  270.        return;
  271.      }
  272.  
  273.     if((kk==65 && final==0) || (kk==66 && final==0))
  274.       {
  275.        lcd_init();
  276.        lcd_gotoxy(1,1);
  277.        lcd_putc("Presione 5 para ");
  278.        lcd_gotoxy(1,2);
  279.        lcd_putc("habilitar A y B ");
  280.        control=10;
  281.        return;
  282.       }
  283.  
  284.  
  285.     if(kk==65 && sip==1 && final==1)        //ver la temperatura actual
  286.      {                
  287.        lcd_init();
  288.        lcd_gotoxy(1,1);
  289.        printf(lcd_putc," Habilitaste =%d   ",tmp_actual);
  290.        lcd_gotoxy(1,2);
  291.        printf(lcd_putc,"Prueba=%d   Prueba=%d ",lmt_bajo_tem,lmt_alto_tem);
  292.        sip=2;
  293.        sir=1;
  294.        siq_salir=1;  //05 04 2012
  295.        //ordent=5;//agrego esta variable para activar a act_temp() cuando yo quiera
  296.        return;
  297.      }  
  298.     if(kk==65 && sip==2)
  299.      {
  300.       sir=1;
  301.       if(mot==2)
  302.            {
  303.             lcd_init();
  304.             lcd_gotoxy(1,1);
  305.             lcd_putc("Presionaaste          ");
  306.             lcd_gotoxy(1,2);
  307.             lcd_putc("La a de vuelta         ");
  308.             sip=1;
  309.             envio=1;
  310.            // rs__232();
  311.             return;
  312.            }
  313.       if(mot==1)
  314.            {
  315.             lcd_init();
  316.             lcd_gotoxy(1,1);
  317.             lcd_putc("esta cambiandp        ");
  318.             lcd_gotoxy(1,2);
  319.             lcd_putc("en marcha             ");
  320.             sip=1;
  321.             envio=1;
  322.             //rs__232();
  323.             return;
  324.            }
  325.         //if(mot==0)      
  326.            {
  327.             lcd_init();
  328.             lcd_gotoxy(1,1);
  329.             lcd_putc("no cambia           ");
  330.             lcd_gotoxy(1,2);
  331.             lcd_putc("nada                ");
  332.             sip=1;
  333.             envio=1;
  334.             //rs__232();
  335.             return;
  336.            }
  337.     return;
  338.     }          
  339.   if(kk==66 && siq==1 && final==1)        //
  340.       {
  341.        sir=1;
  342.        lcd_init();
  343.        lcd_gotoxy(1,1);
  344.        printf(lcd_putc,"  Presionaste la B =%f   ",hum_actual);
  345.        lcd_gotoxy(1,2);
  346.        printf(lcd_putc,"si    =%d   L=%d ",lmt_bajo_hum,lmt_alto_hum);
  347.        siq=2;
  348.        siq_salir=1;  //05 04 2012
  349.        return;
  350.       }
  351.   if(kk==66 && siq==2)
  352.      {
  353.       sir=1;
  354.       if(moh==0)
  355.        {
  356.          lcd_init();
  357.          lcd_gotoxy(1,1);
  358.          lcd_putc("compu                ");
  359.          lcd_gotoxy(1,2);
  360.          lcd_putc("Apagados             ");//lcd_putc("Encendido       ");
  361.          //lcd_putc("Encendidos      ");//output_low(pin_c1);
  362.          siq=1;
  363.          envio=2;
  364.          //rs__232();
  365.          return;
  366.        }
  367.       ////*-
  368.       ////*-
  369.       if(moh==1)
  370.        {
  371.          lcd_init();
  372.          lcd_gotoxy(1,1);
  373.          lcd_putc("esta cambiando        ");//lcd_putc("Motor           ");
  374.          lcd_gotoxy(1,2);
  375.          lcd_putc("sigue el ca          ");//lcd_putc("Apagados        ");
  376.          output_low(pin_c1);
  377.          siq=1;
  378.          envio=2;
  379.          //rs__232();
  380.          return;
  381.        }
  382.       if(moh==2)
  383.        {
  384.          lcd_init();
  385.          lcd_gotoxy(1,1);
  386.          lcd_putc("cambio de vuelta       ");//lcd_putc("Aspersores      ");
  387.          lcd_gotoxy(1,2);
  388.          lcd_putc("cambia de vuelta        ");//lcd_putc("Encendidos      ");
  389.          output_high(pin_c1);
  390.          siq=1;
  391.          envio=2;
  392.         // rs__232();
  393.          return;
  394.        }
  395.     return;
  396.    }
  397.    if(kk==42 && sir==5) //05 04 2012
  398.       {
  399.        code=1;           //me permite volver a poder elegir entre modo visor y modo ajuste
  400.        sir=1;
  401.        sale=10;          //desactiva al modo real time  
  402.        control=2;
  403.        return;
  404.       }
  405.    if(kk==42) //05 04 2012
  406.       {
  407.         control=2;
  408.         return;
  409.       }
  410.   return;
  411.  }
  412.  return;
  413. }
  414. ///////////////////////////////////////////////////////////////////////////
  415. void ver_siempre_3(void)
  416. {
  417.  if(sale==3)
  418.   {
  419.    envio=2;
  420.    if(moh==0)
  421.       {            
  422.           //rs__232();
  423.           output_low(pin_c1);
  424.           output_low(pin_c0);
  425.           envio=1;
  426.           if(mot==0)
  427.           {
  428.            output_low(pin_c2);
  429.            output_high(pin_c3);
  430.            output_low(pin_c4);
  431.           // rs__232();
  432.            return;
  433.           }  
  434.           if(mot==1)
  435.           {
  436.            output_low(pin_c2);
  437.            output_low(pin_c3);
  438.            output_high(pin_c4);
  439.           // rs__232();
  440.            return;
  441.           }
  442.           if(mot==2)
  443.           {
  444.            output_high(pin_c2);
  445.            output_low(pin_c3);
  446.            output_low(pin_c4);
  447.           // rs__232();
  448.            return;
  449.           }
  450.         envio=0;
  451.         return;
  452.       }
  453.    if(moh==1)
  454.        {  
  455.           //rs__232();
  456.           output_low(pin_c0);
  457.           output_high(pin_c1);
  458.           envio=1;
  459.           if(mot==0)
  460.           {
  461.            output_low(pin_c2);
  462.            output_high(pin_c3);
  463.            output_low(pin_c4);
  464.            //rs__232();
  465.            return;
  466.           }  
  467.           if(mot==1)
  468.           {
  469.            output_low(pin_c2);
  470.            output_low(pin_c3);
  471.            output_high(pin_c4);
  472.            //rs__232();
  473.            return;
  474.           }
  475.           if(mot==2)
  476.           {
  477.            output_high(pin_c2);
  478.            output_low(pin_c3);
  479.            output_low(pin_c4);
  480.            //rs__232();
  481.            return;
  482.           }
  483.         envio=0;
  484.         return;
  485.        }
  486.    if(moh==2)
  487.        {              
  488.           //rs__232();
  489.           output_high(pin_c0);//output_high(pin_c1);
  490.           output_low(pin_c1);
  491.           envio=1;
  492.           if(mot==0)
  493.            {
  494.             output_low(pin_c2);
  495.             output_high(pin_c3);
  496.             output_low(pin_c4);
  497.             //rs__232();
  498.             return;
  499.            }
  500.           if(mot==1)
  501.            {
  502.             output_low(pin_c2);
  503.             output_low(pin_c3);
  504.             output_high(pin_c4);
  505.             //rs__232();
  506.             return;
  507.            }
  508.           if(mot==2)
  509.            {
  510.             output_high(pin_c2);
  511.             output_low(pin_c3);
  512.             output_low(pin_c4);
  513.             //rs__232();
  514.             return;
  515.            }
  516.           envio=0;
  517.        }
  518.    return;
  519.   }
  520.  return;
  521. }
  522. //////////////////////////////////////////////////////////////////////////
  523. void muestra(void)
  524. {
  525.  if(code==7)
  526.   {
  527.     lcd_init();
  528.     lcd_gotoxy(1,1);
  529.     printf(lcd_putc,"Parece que fun=%d      ",tmp_actual);
  530.     lcd_gotoxy(1,2);
  531.     printf(lcd_putc,"ciona ahora    =%f     ",hum_actual);
  532.     code=0;
  533.     sale=0;
  534.     return;
  535.   }
  536.   return;
  537. }
  538. ////////////////////////////////////////////////////////////////////////////
  539. void seleccioCA()                          //Setea valores de temperatura
  540. {
  541.  if(ban_visor==0 && sip_c==2)                              //if(control==8)
  542.   {
  543.    int kk;
  544.    con=1;
  545.    kk=kbd_getc();
  546.    if(kk==49)                              //presiono 1??    
  547.             {                                  
  548.              lcd_clear();
  549.              lcd_init();
  550.              lcd_gotoxy(1,1);
  551.              lcd_putc("?? TS T>            ");   //tengo que comentarlas
  552.              lcd_gotoxy(1,2);
  553.              printf(lcd_putc,"   %c%c %d                 ", read_eeprom(12),read_eeprom(13),tmp_actual);
  554.              control=98;
  555.              sip_c=3;                      //sip_C=1;
  556.              return;
  557.             }
  558.   if(kk==50)                    //presiono 2??     1: Presiono 1 para ingresar al modulo visor
  559.             {
  560.              lcd_clear();
  561.              lcd_init();
  562.              lcd_gotoxy(1,1);
  563.              lcd_putc("TI ?? T>               ");   //tengo que comentarlas
  564.              lcd_gotoxy(1,2);                //tengo que comentarlas    
  565.              printf(lcd_putc,"%c%c    %d                    ", read_eeprom(10),read_eeprom(11),tmp_actual);
  566.              control=98;
  567.              sip_c=4;
  568.              return;
  569.             }
  570.   if(kk==42)           //presiono *??     *: volver para atras                            
  571.             {
  572.              code=1; // lo agregue el 04 04 2012
  573.              control=2;
  574.              sip_c=1;                  
  575.              return;
  576.             }
  577.    return;
  578.   }
  579.  return;
  580. }
  581. ///////////////////////////////////////////////////////////////////////
  582. void seleccioCB()             //Setea valores de humedad
  583. {
  584.  int kk;
  585.  if(ban_visor==0 && siq_c==2)//if(control==8)
  586.   {
  587.    kk=kbd_getc();
  588.    if(kk==49)           //presiono 0??     0: Presiono cero para resetear
  589.             {                                  
  590.              lcd_clear();
  591.              lcd_init();
  592.              lcd_gotoxy(1,1);
  593.              lcd_putc("?? HS H>            ");//lcd_putc("1:Limit Inf. Hum");
  594.              lcd_gotoxy(1,2);  
  595.              printf(lcd_putc,"   %c%c %f                    ", read_eeprom(16),read_eeprom(17),hum_actual);//lcd_putc("                ");
  596.              control=98;
  597.              siq_c=3;
  598.              return;
  599.             }
  600.    if(kk==50)           //presiono 1??     1: Presiono 1 para ingresar al modulo visor
  601.             {
  602.              lcd_clear();
  603.              lcd_init();
  604.              lcd_gotoxy(1,1);
  605.              lcd_putc("HI ?? H>               ");   //tengo que comentarlas//lcd_putc("2:Limit Sup. Hum");
  606.              lcd_gotoxy(1,2);  
  607.              printf(lcd_putc,"%c%c    %f                    ", read_eeprom(14),read_eeprom(15),hum_actual);//lcd_putc("                ");
  608.              control=98;
  609.              siq_c=4;
  610.              return;
  611.             }
  612.   /* if(kk==51)           //presiono 3??     3: Presiono 3 para cambiar de modo                            
  613.             {
  614.              lcd_clear();
  615.              lcd_init();
  616.              lcd_gotoxy(1,1);
  617.              lcd_putc("3:Cambiar a modo");
  618.              lcd_gotoxy(1,2);  
  619.              lcd_putc("                ");
  620.              control=1;
  621.              siq_c=5;
  622.              return;
  623.             }*/
  624.    if(kk==42)           //presiono *??     *: volver para atras                            
  625.             {
  626.              control=2;
  627.              siq_c=1;                  
  628.              return;
  629.             }
  630.    return;
  631.   }
  632.  return;
  633. }

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
hola, como estan no se si alguien tuvo el inconveniente que te ahora con el teclado, lo que se:
tengo los puertos RB4-RB7 como entradas
tengo los puertos RB0-RB3 como salidas
o sea las primeras son las columnas y las segundas son las filas
noto que al teclear teclas, la unica variacion la noto en los pines que pertenecen a las columnas, y pasa, que se rota un pin apagado, y los otros pines de la columna permanecen en alto, en cambio los pines que pertenecen a las filas, pines RB0-RB3, permanecen en nivel bajo siempre, y nunca varian, esto lo vi en proteus, no entiendo porque esto, en vez de tener mi teclado 4x4, tengo un teclado 2x2, no se que sucede y aun no puedo resolverlo, si alguien entiende el porque de esto agradecere su comentario, tengo que presentarlo y llevo bastante tiempo, y esto es lo que me falta, desde ya gracias 


ahora creo que ya lo arregle, lo voy a revisar un toke mas y les cuento!
« Última modificación: 26 de Junio de 2012, 16:17:44 por juanjuan19 »

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
Re: van resistencias entre el lcd y el pic?y entre el pic multiplexado con lcd y tec
« Respuesta #10 en: 26 de Junio de 2012, 16:19:01 »
ahora creo que lo arregle, lo revisare un toke mas y les comento cual era la falla si estoy en lo cierto, saludos :D

Desconectado juanjuan19

  • PIC16
  • ***
  • Mensajes: 120
Re: van resistencias entre el lcd y el pic?y entre el pic multiplexado con lcd y tec
« Respuesta #11 en: 01 de Julio de 2012, 12:40:28 »
hola foro, bueno como les comente antes, ya lo arregle, lo probe, y anda bastante bien, asi que me presento a rendir en breve, si observan el esquema que les deje, es muy comodo, ya que se ahorran bastantes pines que pueden servir para usos futuros, las librerias que estan mas arriba estan muy buenas, me las dio un amigo, yo las use y andan rebien, el problema fue el siguiente, como no sabia y aun no se, le coloque resistencias a todos los pines que se encuentran en contacto (entre el LCD y el pic), use las que tenia a mano.bien, como trabaje todo en un protoboard, el mismo se hizo chico, pero no tenia otro mas, asi que debi conformarme con lo que tenia, entonces, en una pista, puse el pin del lcd, le conecte una resistencia y de ahi lo conecte al pic (por medio de cablecitos), el tema fue que, puse todo en la misma pista sin darme cuenta, entonces tuve este error en los cuatro pines, lo correcto fue poner un pin del LCD en una pista, inmediatamente en un agujero de la misma pista poner una resistencia, (2k6), y el otro extremo de la resistencia ponerla en otra pista distinta a la anterior, y de esta ultima pista por medio de un cablecito conectarlo al pin correspondiente del pic. En fin, eso era todo, es un error bastante sencillo pero no me di cuenta al montar el hardware, asi que si tienen un error como el que tuve...miren el hard, eso fue todo, un abrazo  y gracias a los que leyeron el mensaje, nos vemos!!!!!! :D