Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/01/2014 #381


Muchas gracias D@rkbytes,
El post es el #283 donde dejaste los archivos para el manejo del teclado en ensamblador. Es lo que quiero modificar para el pic16f883. En principio solo cambie el pic, pero no funciono.
Disculpa realmente estoy iniciando.
05/01/2014 #382
Moderador

Avatar de D@rkbytes

josegabrielbh dijo: Ver Mensaje
El post es el #283 donde dejaste los archivos para el manejo del teclado en ensamblador. Es lo que quiero modificar para el pic16f883. En principio solo cambie el pic, pero no funciono.
OK. Ese programa es para un PIC16F877A, no para un PIC16F887, por eso no lo encontré.
josegabrielbh dijo: Ver Mensaje
Lo que traté fue adaptar el proyecto de un post muy anterior de D@rkbytes que esta en assembler y que funcionaba perfecto con un pic16f887
Prueba ahora con las correspondientes modificaciones a ese programa para trabajar con un PIC16F883.

Suerte.
05/01/2014 #383


Muchas Gracias D@rkbytes, funciona perfecto. Felicitaciones por tus amplios conocimientos y tus ánimos para ayudarnos.
23/01/2014 #384


Manejar teclado matricial y mostrar en lcd
Buenas tardes, me encuentro haciendo unas simulaciones de mi tesis, para la cual decidí usar la pantalla y el teclado por el puerto D, debido a la cantidad de interrupciones que necesito y debido a que también utilizare un modulo bluetooh y necesito el port C casi por completo.

Mi primer inconveniente sucedió cuando quise normalmente unir el teclado y la pantalla sin mucho lió en el portd. Sucedía que el barrido del teclado chocaba con el de la pantalla y se hacia un lió todo.

Lo arregle pasando el E, RS y RW al port E. Listo, ya funciona bien la pantalla y el barrido.

Ahora tengo el problema de que el teclado, conectándolo comúnmente como lo hacia en el portB no me lee los números en sus respectivos lugares. Donde debería haber un 4 pone un 6 y así sucesivamente, y no son problemas de que esta invertida las conexiones, ya revise, todo esta bien, y cambiando de lugar los cables, se pone peor!.

Alguna sugerencia o ayuda?
23/01/2014 #385
Moderador

Avatar de D@rkbytes

Urbito dijo: Ver Mensaje
Ahora tengo el problema de que el teclado, conectándolo comúnmente como lo hacia en el portB no me lee los números en sus respectivos lugares. Donde debería haber un 4 pone un 6 y así sucesivamente, y no son problemas de que esta invertida las conexiones, ya revise, todo esta bien, y cambiando de lugar los cables, se pone peor!.

¿Alguna sugerencia o ayuda?
Si mencionas que no tienes invertidas las conexiones, es necesario que adjuntes tu programa con simulación.

Te podría indicar el siguiente ejemplo para el puerto C Teclado 3x4 en PORTC y cambiarlo al puerto D
Pero no mencionas en que lenguaje programas.
25/01/2014 #386


Buenas tardes,

Me gustaría que me colaboraran con este tema que he venido trabajando ya hace varias semanas y no he logrado aun. En los proyectos que he utilizado siempre he conectado el teclado por el puerto B a un pic 18F4550 y ha funcionado correctamente. Pero ahora necesito conectarlo por el puerto D del mismo pic, he utilizado varias librerías y hecho lo que dicen muchos tutoriales pero nada ha funcionado aun, si alguien ha realizado ya este ejercicio le agradecería inmensamente de su colaboración.

esta es la librería que estoy utilizando:
Código:
////////////////////////////////////////////////////////////////////////////////////
//                                   KBD.C                                        //
//               FUNCIONES PARA ESCANEO DE UN TECLADO MATRICIAL                   //
//                         4X4 HEXADECIMAL, EN EL PORTB                           //
//       kbd_init()       Debe ser invocada antes que las otras funciones.         //
//       c=lcd_getc(c)    Si há sido presionada una tecla devuelve el caracter c    //
//                  y lo salva en el char c, sino se presiona una tecla       //
//                  retorna el valor /0, esta función puede invocarse         //
//                  frecuentemente para no perder teclas pulsadas.            //
//        NOTA: REQUIERE COLOCAR RESISTENCIAS (2.2K) EN LOS PINES DE COLUMNAS     //
//               PINES DE COLUMNAS DE RB0(COL0) A RB3(COL3))                   //
//               PINES DE FILAS DE RB4(ROW0)) A RB7(ROW3))                    // 
//                  MODIF.: ING. FRANK GIRALDO - UD                       //
////////////////////////////////////////////////////////////////////////////////////
/*////////////////////////////////////////////////////////////////////////////////// 
*    RB0 RB1 RB2 RB3   
*     |   |   |   |
*     c0  c1  c2  c3  
*   | 1 | 2 | 3 | F | r0 - RB4
*   | 4 | 5 | 6 | E | r1 - RB5
*   | 7 | 8 | 9 | D | r2 - RB6
*   | A | 0 | B | C | r3 - RB7
*
*   COLUMNS=OUTs
*   ROWS=INs
*   SE HABILITAN PULL-UP INTERNAS 
*   SE REQUIERE COLOCAR RESISTENCIAS (2.2K) EN LOS PINES DE COLUMNAS 
*
*///////////////////////////////////////////////////////////////////////////////////
//
#byte portkbd = 0XF83                  //portkbd = portD
//Keypad connection:   (Column 0 es B0)
//                Bx:
#define COL0 (0 << 0)
#define COL1 (0 << 1)
#define COL2 (0 << 2)
#define COL3 (0 << 3)
#define ROW0 (1 << 4)
#define ROW1 (1 << 5)
#define ROW2 (1 << 6)
#define ROW3 (1 << 7)
#define ALL_ROWS (ROW3|ROW2|ROW1|ROW0)
#define ALL_PINS (ALL_ROWS|COL3|COL2|COL1|COL0)

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

#define KBD_DEBOUNCE_FACTOR 1.2
// Modifique el valor de temporización antirrebote con (KBD_DEBOUNCE_FACTOR = n/333),
// en donde n es el número de veces por segundo en los que ud. invoca
//la función kbd_getc().
//

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;
   //port_d_pullups(TRUE);
   kchar='\0';

   if(++kbd_call_count>KBD_DEBOUNCE_FACTOR)
   {
       switch (col)
       {
         case 0   : set_tris_d(ALL_PINS&~COL0);
                    portkbd=(0b1110);
                    break;

         case 1   : set_tris_d(ALL_PINS&~COL1);
                    portkbd=(0b1101);
                    break;

         case 2   : set_tris_d(ALL_PINS&~COL2);
                    portkbd=(0b1011);
                    break;

         case 3   : set_tris_d(ALL_PINS&~COL3);
                    portkbd=(0b0111);
                    break;
       }

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

/*char dato;
char tecla()
{
   dato=\'\\0\';
   while(dato==\'\\0\')
   {
      dato=kbd_getc();
      delay_ms(100);
   }
return dato;
} */
Y utilizando picc compiler este es el código que manejo en este momento:

Código:
#include <18F4550.h>
#include <KBD18FD.c>
#use delay(clock=20000000)
#fuses  NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP,HS,CPD,NODEBUG
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=n)//n bit  seg //debe hacerse en ambos micros 877A

#define prender output_high   
#define apagar output_low
#define luz1 PIN_C1
#define luz2 PIN_C2
#define pulsador1 PIN_B0

#define LCD_DAT PIN_E0
#define LCD_E PIN_E2
#define LCD_CK PIN_E1
#include <LCD4x20_3PIN.c>

char daton;
long auxsegundos;
long segundos;


void un_digito()
{
   lcd_putc("\f");
   segundos=0;
   auxsegundos=0;
   do{
      daton=kbd_getc();
      lcd_putc(daton);
      delay_ms(60);
      if( daton !=0)
      {
         lcd_gotoxy(8,1);
         lcd_putc(daton); 
         delay_ms(1000);
         // daton=daton-0X30;
         auxsegundos=0;
         segundos=12;
      }
      auxsegundos ++;
      if(auxsegundos < 20)
      {
         auxsegundos = 0;
         segundos ++;
      }
   }while(segundos<12);
}
void main()
{
#zero_ram
set_tris_A(0x00);
set_tris_B(0x00);
set_tris_C(0x80);
set_tris_D(0xff);
set_tris_E(0x00); 


lcd_init();
kbd_init();

setup_comparator(No_analogs);
enable_interrupts(INT_RDA);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

EXT_INT_edge(H_to_L);

output_A(0x00);
output_B(0x00);
output_C(0x00);
output_D(0x00);
output_E(0x00);

lcd_gotoxy(1,1);
lcd_putc("\fBIENVENIDO");
delay_ms(500);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("\fPRUEBA1");
delay_ms(500);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("\fPROTEUS");
delay_ms(500);
un_digito();
      
}
25/01/2014 #387
Moderador

Avatar de D@rkbytes

wilmertri dijo: Ver Mensaje
Buenas tardes.
Me gustaría que me colaboraran con este tema que he venido trabajando ya hace varias semanas y no he logrado aun. En los proyectos que he utilizado siempre he conectado el teclado por el puerto B a un pic 18F4550 y ha funcionado correctamente. Pero ahora necesito conectarlo por el puerto D del mismo pic, he utilizado varias librerías y hecho lo que dicen muchos tutoriales pero nada ha funcionado aun, si alguien ha realizado ya este ejercicio le agradecería inmensamente de su colaboración.
Le hice algunas modificaciones a la librería 4x4 que estás usando para hacerla funcionar un poco mejor,
pero esa librería no puede trabajar conjuntamente con la pantalla por el mismo puerto.

Adjunto el proyecto con la librería modificada y el ejemplo con simulación.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 18F4550 Teclado 4x4 en Puerto D.rar (56,4 KB (Kilobytes), 57 visitas)
24/11/2014 #388

Avatar de yamilongiano

Manejar teclado matricial y mostrar en lcd
hola a todos tengo un codigo que no logro comprender podrian ayudarme por favor.

me afloran muchas dudas.

Código:
char  keypadPort at PORTD;

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

char kp, contar=0;

void main(){

Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);


while (1){
 kp=0;
 do
  kp=Keypad_Key_Click();
 while (!kp);
 switch (kp){
  case  1: kp = 49; break;  // 1
  case  2: kp = 50; break;  // 2
  case  3: kp = 51; break;  // 3
  case  4: kp = 55; break;  // A
  case  5: kp = 52; break;  // 4
  case  6: kp = 54; break;  // 5
  case  7: kp = 55; break;  // 6
  case  8: kp = 52; break;  // B
  case  9: kp = 55; break;  // 7
  case 10: kp = 51; break;  // 8
  case 11: kp = 57; break;  // 9
  case 12: kp = 49; break;  // C
  case 13: kp = 42; break;  // *
  case 14: kp = 48; break;  // 0
  case 15: kp = 45; break;  // #
  case 16: kp = 49; break;  // D
 }
 Lcd_Chr_CP(kp);
 contar++;
 if (contar==10){
  contar=0;
  Delay_1sec();
  Lcd_Cmd(_LCD_CLEAR);
 }
}
}
despues de compilar...

Código:
0 1 mikroCPIC1618.exe -MSF -DBG -pP16F877A -DL -O11111114 -fo8 -N"C:\Users\yamil\Desktop\16F887\teclado2\teclado.mcppi" -SP"C:\mikroc_pro\mikroC PRO for PIC\defs\" -SP"C:\mikroc_pro\mikroC PRO for PIC\Uses\P16\" -SP"C:\Users\yamil\Desktop\16F887\teclado2\" "teclado.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_CString.mcl" "__Lib_CStdlib.mcl" "__Lib_CMath.mcl" "__Lib_MemManager.mcl" "__Lib_Conversions.mcl" "__Lib_Sprinti.mcl" "__Lib_Sprintl.mcl" "__Lib_Time.mcl" "__Lib_Trigonometry.mcl" "__Lib_Button.mcl" "__Lib_Keypad4x4.mcl" "__Lib_Manchester.mcl" "__Lib_OneWire.mcl" "__Lib_PS2.mcl" "__Lib_Sound.mcl" "__Lib_SoftI2C.mcl" "__Lib_SoftSPI.mcl" "__Lib_SoftUART.mcl" "__Lib_ADC_A_C.mcl" "__Lib_EEPROM.mcl" "__Lib_FLASH_RW.mcl" "__Lib_I2C_c34.mcl" "__Lib_PWM_c21.mcl" "__Lib_SPI_c345.mcl" "__Lib_UART_c67.mcl" "__Lib_PortExpander.mcl" "__Lib_CANSPI.mcl" "__Lib_CF.mcl" "__Lib_GlcdFonts.mcl" "__Lib_Glcd.mcl" "__Lib_LcdConsts.mcl" "__Lib_Lcd.mcl" "__Lib_RS485.mcl" "__Lib_S1D13700.mcl" "__Lib_T6963C.mcl" "__Lib_SPIGlcd.mcl" "__Lib_SPILcd.mcl" "__Lib_SPILcd8.mcl" "__Lib_SPIT6963C.mcl" "__Lib_EthEnc28j60.mcl" "__Lib_EthEnc24j600.mcl" "__Lib_TouchPanel.mcl"  
0 1139 Available RAM: 352 [bytes], Available ROM: 8192 [bytes]  
0 122 Compilation Started teclado.c
57 123 Compiled Successfully teclado.c
0 127 All files Compiled in 500 ms  
0 1144 Used RAM (bytes): 10 (3%)  Free RAM (bytes): 342 (97%) Used RAM (bytes): 10 (3%)  Free RAM (bytes): 342 (97%)
0 1144 Used ROM (program words): 424 (5%)  Free ROM (program words): 7768 (95%) Used ROM (program words): 424 (5%)  Free ROM (program words): 7768 (95%)
0 125 Project Linked Successfully teclado.mcppi
0 128 Linked in 156 ms  
0 129 Project 'teclado.mcppi' completed: 781 ms  
0 103 Finished successfully: 24 nov 2014, 15:56:56 teclado.mcppi
en isis.

http://www.forosdeelectronica.com/at...1&d=1416855916



no puedo seguir al parecer tengo problema con la memoria del pic.

pero quizas tambien el problema va con la introcuvvion de los datos en la memoria.
Imágenes Adjuntas
Tipo de Archivo: jpg error lcd+teclado+16f877A.jpg (72,1 KB (Kilobytes), 16 visitas)
10/05/2015 #389


Manejar teclado matricial y mostrar en lcd
Hola, buenas tardes.

Estoy intentado conseguir un programa que:

Al conectar la placa, me salga este mensaje: Codigo:<espacio><lugar para codigo>
Mientras la placa esté esperando dos ordenes.

1)Seria que nosotros cambiemos el interruptor RA5
2)Pulsemos una tecla del 0 al 9

-Si pulsamos el interruptor RA5,me tendria salir el mensaje: hola
-Si pulsamos una tacla , por ejemplo el 4, tendria que salir el mensaje:
Codigo:<espacio>4


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Creo que el programa podria empezar así
Código PHP:
                Loop:     call Key_Scan    ;Explora el teclado
                          movlw    0x80
                          subwf    Tecla
,W
                          btfsc    STATUS
,Z    ;Hay alguna pulsada ?
                          goto    
mirar_5        ;Noseguir explorando
                          
goto  modo_normal


                        mirar_5
:  btfss PORTA,5           ;El bit 5 esta a 1?
                                  goto 
loop               ;No lo está
                                  
goto modo_configuracion ;Si lo está




                       modo_normal 
-> aqui vendria la rutina para el código

                       modo_configuración 
->aqui vendria la rutina para el hola 
Lo de arriba creo que esta bien, mi problema es que tengo aqui el código para los mensajes y para la pantalla y no se relacionarlo. Es este:
Código PHP:
;El teclado y el LCD.
;
;
Haciendo uso de las rutinas incluidas en los ficheros TECLADO.INC y LCD_CXX.INCse trata 
;de leer el teclado yvisualizar sobre el módulo LCD  la tecla pulsada.
;
;
El ejemplo pretende mostrar cómo es posible gobernar dos periféricos distintos conectados
;a la misma puerta (LCD y teclado). Para ello basta reprogramarla dinámicamente en el 
;tiempo según sea necesario.

        List    
p=16F876    ;Tipo de procesador
        
include    "P16F876.INC"    ;Definiciones de registros internos
                 
Lcd_var        equ    0x20        
;Inicio de las variables para el LCD
Key_var        equ    0x22        
;Inicio de las variables del teclado                
Temporal_1    equ    0x28        
;Variable temporal nº 1
Temporal_2    equ    0x29        
;Variable temporal nº 2
    
        org    0x05
        
goto    Inicio
                
        
include    "LCD_CXX.INC"    ;Incluir rutinas de manejo del LCD
        
include    "TECLADO.INC"    ;Incluir rutinas de manejo del teclado

Tabla_Mensajes
:    movwf    PCL        ;Desplazamiento sobre la tabla

Mens_0        equ    
$        ;Mens_0 apunta al primer carácter
        dt    
"Se ha pulsado: ",0x00

;*************************************************************************************
;
MensajeEsta rutina visualiza en el LCD el mensaje cuyo inicio está  indicado en
;el acumuladorEl fin de un mensaje se determina mediante el código 0x00

Mensaje             movwf       Temporal_1          
;Salva posición de la tabla
Mensaje_1           movf        Temporal_1
,W        ;Recupera posición de la tabla
                    call        Tabla_Mensajes      
;Busca caracter de salida
                    movwf       Temporal_2          
;Guarda el caracter
                    movf        Temporal_2
,F
                    btfss       STATUS
,Z            ;Mira si es el último
                    
goto        No_es_ultimo
                    
return
No_es_ultimo        call        LCD_DATO            ;Visualiza en el LCD
                    incf        Temporal_1
,F        ;Siguiente caracter
                    
goto        Mensaje_1
                            
Inicio
:        bsf    STATUS,RP0    ;Selecciona página 1 de datos
        movlw    0x06
        movwf    ADCON1        
;Puerta A digital
    
        bcf    STATUS
,RP0    ;Selecciona página 0 de datos
        clrwdt            
;Refrescar WDT
                
        call    UP_LCD        
;Configura Puerta A y B como salidas
        call    LCD_INI        
;Rutina de inicialización del LCD
        movlw    
b'00001100'
        
call    LCD_REG    ;LCD en ON
        movlw    
b'00000001'
        
call    LCD_REG    ;Borra LCD y HOME

;Salida del mensaje "Tecla pulsada:"
                
        
movlw    Mens_0
        call    Mensaje        
;Visualiza el mensaje
                
;Bucle principal

Loop
:        call    Key_Scan    ;Explora el teclado
        movlw    0x80
        subwf    Tecla
,W
        btfsc    STATUS
,Z    ;Hay alguna pulsada ?
        goto    
Loop        ;Noseguir explorando
                
        movlw    0x8f
        call    LCD_REG    
;Posiciona el cursor del LCD
        movf    Tecla
,W
        sublw    .9
        btfss    STATUS
,C            ;Es mayor que 9 (AB,C,D,E,F)?
        goto    
Mayor_que_9    ;Si
        movf    Tecla
,W        ;No
        addlw    0x30                
;Ajuste ASCII de los caracteres del 0 al 9
        call    LCD_DATO    
;Visualizar sobre el LCD
        
goto    Loop                                                

Mayor_que_9    movf    Tecla
,W
        addlw    0x37        
;Ajuste ASCII de los caracteres de la A a la F
        call    LCD_DATO        
;Visualiza sobre el LCD
        
goto    Loop

        end            
;Fin del programa fuente 
Haber si podeis ayudarme a que me salga lo descrito arriba.
Muchas gracias!!
24/08/2015 #390


A mi me falla algo. No puedo avanzar en ningún proyecto que utilice keypad-phone y un LCD standar.
Esto ocurre también con proyectos que antes funcionaban hechos por otros.
Vuestros programas y correcciones tampoco funcionan.

Cuando aplico el #define use_portb_kbd TRUE en kbd.c, en vez del programa principal.c, al compilar me da error diciendo que no existe la carpeta __history en C:\program files\PICC\Drivers.
Ahí es donde intenta guardar.
Cuando yo, esta carpeta sólo la veo donde están todos los archivos del proyecto. ¿Esto es normal?

El único programa que me funciona actualmente con kbd_get() sólo me sirve para manejar pulsos/flancos.
Si le meto un printf(lcd_putc,"\d",lectura); todo falla.

Código PHP:
#include <16f877.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG 
#USE delay(clock=4m)
//#define  use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>
#include <stdio.h>
#use standard_io(a)
//MANIPULACION
#BYTE PORTD=0X08 
#BYTE TRISD=0X88


void main(){ 
int k,kant=0;
int PWMH=0,PWML=0,nk=0;
lcd_init();
kbd_init();
port_b_pullups(true); //impedancias
//lcd_gotoxy(1,1);
//lcd_putc("\f prueba"); delay_ms(10);// LCD NO MUESTRA NADA
while(true){
k=kbd_getc();
if (
k==0)
k=kant;}

kant=k;
k=k-48;
PWMH=k*28;
PWML=255-PWMH;
//printf(lcd_putc,"\f k =  %d",k); delay_ms(300);// SI INCLUYO ESTE "printf" NADA FUNCIONA
for(PWMH;PWMH>0;PWMH--){
OUTPUT_HIGH(PIN_A0);
//delay_ms(50);
}
for(
PWML;PWML>0;PWML--){
OUTPUT_LOW(PIN_A0);
//delay_ms(50);
}
}

Archivos Adjuntos
Tipo de Archivo: rar CAJERO.rar (31,4 KB (Kilobytes), 13 visitas)
24/08/2015 #391
Moderador

Avatar de D@rkbytes

La pantalla no muestra nada porque tienes mal las conexiones en el diseño.

Los bucles "FOR" no están bien, porque asignas los valores externamente y eso hará que el bucle no tenga efecto.

En lugar de...
for(PWMH;PWMH>0;PWMH--)
Debe ser...

for(PWMH=k*28;PWMH>0;PWMH--)

Como quiera, así como pretendes generar PWM, no está bien.
La generación PWM debería estar dentro de un único bucle, usando un timer y con una mejor estructura.

Si ese PIC cuenta con módulo CCP para generar PWM, deberías aprovecharlo y no hacerlo por software.
25/08/2015 #392


E vuelto a mirarlo las conexiones estan bien son las "standar" y funcionan en otros proyectos Solo e modificado la alimentacion del LCD quitandole el potencimetro como haceis vosotros.
No lo e probado pero la parte del codigo que te quejas es lo unico que funciona. Es lo unico que me permite hacer kbd_get() Algo hecho por otra persona. Insisto que mi problema esta cada vec que intento escribir algo en el LCD recogido en una variable que es escrita por kbd_get() el resultado siempre es 0. En este proyecto todo va a peor cada vec que utilizo el printf_LCD No funciona nisiquiera el generador de pulsos, la parte que dices que esta mal.
25/08/2015 #393
Moderador

Avatar de D@rkbytes

Según tú, están bien las conexiones, pero por estar mal, la pantalla no funciona.
Realiza una conexión directa para que mires bien el orden y verás que debe funcionar.

El potenciómetro es importante físicamente, en la simulación no es tomado en cuenta.
Y si todo va cada vez mal, es porque desde un principio lo hiciste todo mal.

Realiza un nuevo diseño o corrige ese teniendo más cuidado en las conexiones.
Sobre el programa entonces ni hablar, porque dices que así te funciona.
25/08/2015 #394


Tenias razon en una cosa en un label ponia LCD6 y en otro LCD 6 por eso no respondia el LCD. E tenidop que pasar del KEYPAD-PHONE y lo e cambiado por 12 botones. Tiene cierta ventaja no necesito 6 bits con el nuebo diseño. Mis preguntas ahora son muy simples, las estoy buscando pero No se que e hecho con el libro de dev c++ Era muy valido de referencia
23/09/2015 #395


Hola, muy buenas noches. Tengo dudas para realizar una clave.

Sólo sé los comandos básicos, el teclado ya está listo con el tema del barrido, pero tengo dudas sobre el tema de colocar una clave y que al momento de colocar esa clave tiene que aparecer un 7 y si está mal, colocara un 0.
Traté de hacer rutinas de llamadas pero no me ha salido.


Código PHP:
org 0x00

bsf status
,rp0


bcf trisa
,0
bcf trisa
,1
bcf trisa
,2
bcf trisa
,3


bcf trisb
,0
bcf trisb
,1
bcf trisb
,2
bcf trisb
,3

bsf trisb
,4
bsf trisb
,5
bsf trisb
,6
bsf trisb
,7


bcf status
,rp0
lopez3
bsf portb
,0
bcf portb
,1
bcf portb
,2
bcf portb
,3

btfss portb
,4
goto lala
movlw 0x07
movwf porta

lala    btfss portb
,5
goto lala1
movlw 0x08
movwf porta

lala1    btfss portb
,6
goto lala2
movlw 0x09
movwf porta

lala2    btfss portb
,7
goto lala3
movlw 0x0A
movwf porta


lala3    bcf portb
,0    
bsf portb
,1
bcf portb
,2
bcf portb
,3

btfss portb
,4
goto lero
movlw 0x04
movwf porta

lero    btfss portb
,5
goto lero1
movlw 0x05
movwf porta

lero1    btfss portb
,6
goto lero2
movlw 0x06
movwf porta

lero2    btfss portb
,7
goto lero3
movlw 0x0B
movwf porta

lero3    bcf portb
,0
bcf portb
,1
bsf portb
,2
bcf portb
,3

btfss portb
,4
goto emi1
movlw 0x01
movwf porta

emi1    btfss portb
,5
goto emi2
movlw 0x02
movwf porta

emi2    btfss portb
,6
goto emi3
movlw 0x03
movwf porta

emi3    btfss portb
,7
goto emi4
movlw 0x0c
movwf porta


emi4    bcf portb
,0
bcf portb
,1
bcf portb
,2
bsf portb
,3

btfss portb
,4
goto lopez
movlw 0x0F
movwf porta

lopez    btfss portb
,5
goto lopez1
movlw 0x00
movwf porta

lopez1    btfss portb
,6
goto lopez2
movlw 0x0E
movwf porta


lopez2    btfss portb
,7
goto lopez3
movlw 0x0D
movwf porta


end 
La pregunta es, ¿cómo logro hacer una combinación, la cual al realizarla me coloque un 7 en el display?
23/09/2015 #396
Moderador

Avatar de D@rkbytes

Deberías comentar el programa y usar etiquetas con nombres coherentes.
Cuando realices un programa más grande, eso de lala, lero, lopez, etc. No te servirá para identificar las rutinas posteriormente.
EmilioLopElectronico dijo: Ver Mensaje
Sólo sé los comandos básicos
A nivel programación, los comandos hacen referencia a información, e instrucciones al set de palabras del compilador.
EmilioLopElectronico dijo: Ver Mensaje
La pregunta es, ¿cómo logro hacer una combinación, la cual al realizarla me coloque un 7 en el display?
A ese programa le hacen falta muchas cosas para que realice lo que quieres.
  • No tiene cabecera.
  • No tiene configuración de registros y variables.
  • No incluye librerías ni rutinas para el manejo de LCD o displays de 7 segmentos.
  • Etcétera.
Debes empezar siempre por lo más elemental antes de llevar a cabo un proyecto como el que pretendes.

Como dato extra:
Si recopilas información sobre los posts que existen en el Foro usando el buscador, podrás obtener partes fundamentales de código para lograr lo que deseas.
23/09/2015 #397


No conosco aun las librerias debido a que soy nuevo y en clases estamos usando el pic simulator aun no le encuentro las librerias y creo que tampoco aun nos van a enseñar a usarlas, la programacion me funciona en proteus me cumple el objetivo de al momento de presionar la tecla me salga el numero pero lo que quiero implementar no me funciona de colocarle una clave especifica de 3 digitos

Si quieres te comparto el proteus con la programacion para que veas que en realidad si me funciona y es muy simple el programa que realize para el teclado
23/09/2015 #398
Moderador

Avatar de D@rkbytes

OK. Si piensas continuar con lenguaje ensamblador, que a estas alturas ya es obsoleto, te recomiendo que uses algo serio, como MPLAB o MPLAX.

Aprender ensamblador no está nada mal, pero tardarás mucho tiempo en crear un programa si no tienes los conocimientos suficientes.
En cambio, con otros lenguajes de programación de alto nivel, como Basic o C, podrás realizar tu programa en cuestión de minutos u horas.
¿Por qué? Porque éstos lenguajes ya incluyen librerías e instrucciones directas para controlar LCD y otros periféricos más.
Así te evitas escribir librerías y código extra para el manejo de los dispositivos externos.

Y te repito, recopila información. Aquí en Foro existe bastante.
Para poder ayudarte, yo tendría que buscar esa información por ti y crear un proyecto que te corresponde realizar a ti.
25/09/2015 #399


No me queda otra, Si fuera por mi seguiría solo en C

Eso me estan pasando en una asignatura y el profesor no me da muchos datos solo me dice "Aprende las instrucciones y luego nos da estos ejercicios que tenemos que pensarlo solos
estamos sin libreria tenemos que hacer toda la instrucción

Lo he intentado y vuelto a intentar y aun no llego a la respuesta
25/09/2015 #400
Moderador

Avatar de D@rkbytes

Pero no me hiciste caso acerca de que recopilaras información sobre los proyectos que existen en el Foro.
Te daré una ayuda, mira éstos enlaces: Resultados de Búsqueda

En algunos de ellos podrás encontrar proyectos realizados en ensamblador y en otros lenguajes.
Utiliza el que más te convenga y realiza los cambios que creas necesarios.
También puedes usar partes de varios programas para crear tu proyecto final.

Los proyectos funcionales del Foro son de libre distribución, subidos por gente que colabora para que otras personas aprendan de sus experiencias y sin fines de lucro.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.