Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
https://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br

Participe do fórum, é rápido e fácil

Fórum Eletrônica2002 (Brasil)
Seja bem vindo ao fórum Eletrônica2002.

Para ter acesso a todo o conteúdo do fórum você precisa estar cadastrado e fazer o login!

Se não é cadastrado no fórum: aproveite e faça.

Para criar um tópico, você precisa se cadastrar e estar conectado.
Ao criar um tópico, vc deve colocar a marca/modelo/e defeito do aparelho no título do tópico. Isto é regra neste fórum!
https://eletronica2002.forumeiros.com/forum-de-reparacao-de-aparelhos-eletronicos-f1/regras-do-forum-t19731.htm

Falar com o administrador?
Mande um e-mail: valdeni@eletronica2002.com.br
Fórum Eletrônica2002 (Brasil)
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
.

Menu de navegação


Clique nas imagens abaixo para acessar os fóruns desejados.

Fóruns:






---------------------------

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

================



================

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» cliente que não busca os aparelhos consertados, o que fazer
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyHoje à(s) 04:42 por MARIO Y. SEGAWA

» Tv samsung // UN65RU7100G // TELA LAVADA
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyOntem à(s) 17:16 por DANTEX

» cliente que promete, trazer o aparelho e nao volta mais
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyOntem à(s) 08:07 por MARIO Y. SEGAWA

»  aqui no fórum agente vê de tudo
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyQua 17 Abr 2024, 22:05 por MARIO Y. SEGAWA

» MINI SYSTEM LG CM-5660 NÃO LIGA
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyQua 17 Abr 2024, 21:59 por Rafael2

» Tv LG 37LE5510-ZB sem imagem
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyQua 17 Abr 2024, 13:45 por nuno1970

» MICROONDAS SAMSUNG MB6752W NÃO RESPONDE COMANDOS DO TECLADO
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 20:22 por joaquimrosadesouza

» CIRCUITO INTEGRADO USADO NO GRDIENTE PRO1200
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 18:47 por Paranista

» [Encerrado] tv semp toshiba 2085 U1 tela azul sem imagem sem caracteris
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 13:10 por Paranista

» [Encerrado] - Tv Samsung Un46F7500 Problema: ligando e desligando loop
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 12:59 por Paranista

» esquema
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 12:00 por nagkiller

» {Resolvido]TV LG 32LN5400 - BACKLIGHT PISCANDO, SOM/IMAGEM NORMAL
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyTer 16 Abr 2024, 08:44 por Paranista

» fonte de xbox 360 slim, nao liga
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySeg 15 Abr 2024, 19:00 por Paranista

» compro placa pricopal tv philco ph40u21dsg
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySeg 15 Abr 2024, 17:41 por Eletronica Manoel

» tv panasonic tc 49d400b led vermelho piscando
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 11:16 por joaquimrosadesouza

» Rádio Zenith transoceanic royal D7000Y não sintoniza nada
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 11:05 por joaquimrosadesouza

» TV AOC 32s5195/78g precisso esquema fonte
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 10:57 por joaquimrosadesouza

» Tv toshiba Chassi U13 sem imagem e com som
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 10:54 por joaquimrosadesouza

» Caixa amplificada amvox aca 221 gigante ll . Não carrega bateria
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 10:44 por joaquimrosadesouza

» tv Lg // 32ld350 // fonte
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 14 Abr 2024, 10:37 por joaquimrosadesouza

» Som AIWA Z-R227 não gira o motor spindle e sled
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySáb 13 Abr 2024, 23:11 por Juliano_PST

» Usando uma CNC Laser para confeccionar Placas de Circuito Impresso.
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySáb 13 Abr 2024, 19:28 por nagkiller

» Pq alguns projetos nao funciona na pratica ?
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySex 12 Abr 2024, 19:15 por MARIO Y. SEGAWA

» Panasonic Tv tc-55gx500b em looping. Só entra na tela inicial (logo).
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyQui 11 Abr 2024, 08:59 por Paranista

» Caixa Acústica Roland CB-60XL
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySeg 08 Abr 2024, 21:23 por sugeda

» Não consigo opinar no tópico sobre display.
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySeg 08 Abr 2024, 15:22 por MARIO Y. SEGAWA

» Soundigital 5000 led Power piscando
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 07 Abr 2024, 23:46 por eduardoscooby

» TV SONY KDL-46EX405 SEM IMAGEM
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyDom 07 Abr 2024, 17:55 por Taciso

» Strobo Aura 1500watts, não funciona lampada
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptySex 05 Abr 2024, 21:16 por Bambu 25

» [Resolvido]Tv Philco PH24T21DMT LED Problema: Led do Standby piscando não Liga.
PIC16F628 - Display e teclado no mesmo PORT (resolvido) EmptyQua 03 Abr 2024, 11:46 por charles josé cipriano

Quem está conectado?
436 usuários online :: 3 registrados, 0 invisíveis e 433 visitantes :: 2 motores de busca

elmotec@hotmail.com, rodrigo.mp100, silvaismae

O recorde de usuários online foi de 1034 em Sex 24 Jul 2015, 10:41
Anuncios

    Nenhum anúncio


    PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    2 participantes

    Ir para baixo

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Empty PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    Mensagem por CACÁ Sáb 07 Out 2017, 16:33

    Pessoal aos poucos estou aprendendo a programar PICs com o PIC C Compilerseguindo video aulas e foi passado um exemplo aonde se mostra um display alfanumérico e um teclado 4x3 juntos no mesmo PORT mas fiz tudo exatamente como se pede mas não funciona de forma alguma.
    Print do projeto

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) 114

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) 214

    Código
    Código:

    #include <16F628A.h>

    #FUSES NOMCLR                   //Master Clear pin used for I/O
    #FUSES NOBROWNOUT               //No brownout reset
    #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

    #use delay(internal=4000000)
    #define use_portb_kbd TRUE //Teclado definido para o port B
    #include <KBD.C>

    char tecla;
    #include <lcd.c>

    void main()
    {
       kbd_init();

       lcd_init();

       while(TRUE)
       {
      tecla=kbd_getc();
      delay_ms(1);
      if (tecla!=0){ //tecla diferente de zero, foi pressionada
      printf(lcd_putc, "%c", tecla);
      delay_ms(200);
      
      }

        
       }

    }

    Segundo o próprio instrutor, o display é automaticamente definido para o PORTD mas em MCUs que não tem ele que é o caso do 16F628A o display já é definido automaticamente para o PORTB
    Já tentei de tudo, mudei de display do LM044L para o LM016L, mudei de PIC do 16F628A para o F88 (refazendo claro todo o código) mas não adianta, o PIC C Compiler compila sem erros, o Isis simula sem erros mas ao pressionar o teclado nada acontece.


    Última edição por CACÁ em Dom 08 Out 2017, 14:14, editado 1 vez(es)

    _________________
     


    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Unnamed
    CACÁ
    CACÁ
    Administrador Auxiliar
    Administrador Auxiliar

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : 17 anos/ 9 anos
    Sexo : Masculino
    Número de Mensagens : 19779
    Idade : 43
    Cidade/Estado: : Ritápolis Minas Gerais
    Humor : Bom
    Data de inscrição : 25/03/2010

    Ir para o topo Ir para baixo

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Empty Re: PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    Mensagem por nagkiller Sáb 07 Out 2017, 19:29

    Você precisa declarar qual port será utilizado para o LCD!!!

    #define LCD_DATA_PORT getenv("SFR:PORTB");
    #define LCD_ENABLE_PIN  PIN_B0
    #define LCD_RS_PIN      PIN_B1
    #define LCD_RW_PIN      PIN_B2
    #define LCD_DATA4       PIN_B4
    #define LCD_DATA5       PIN_B5
    #define LCD_DATA6       PIN_B6
    #define LCD_DATA7       PIN_B7


    Exemplo
    Código:

    #include <16F628A.h>
    #use delay(internal=4000000)

    #FUSES NOMCLR                  //Master Clear pin used for I/O
    #FUSES NOBROWNOUT              //No brownout reset
    #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

    #define use_portb_kbd TRUE //Teclado definido para o port B
    #include <KBD.C>

    char tecla;
    #define LCD_DATA_PORT getenv("SFR:PORTB");
    #define LCD_ENABLE_PIN  PIN_B0
    #define LCD_RS_PIN      PIN_B1
    #define LCD_RW_PIN      PIN_B2
    #define LCD_DATA4       PIN_B4
    #define LCD_DATA5       PIN_B5
    #define LCD_DATA6       PIN_B6
    #define LCD_DATA7       PIN_B7
    #include <lcd.c>

    void main()
    {
      kbd_init();
      lcd_init();
      lcd_putc("\fTeste de LCD\r\n");  // \f limpa a tela, \r\n muda de linha
      
      
      while(TRUE)
      {
         tecla=kbd_getc();
         delay_ms(1);
         if (tecla!=0){ //tecla diferente de zero, foi pressionada
            printf(lcd_putc, "%c", tecla);
            delay_ms(200);    
         }
      }
    }

    Para não haver ruídos no display, aterre os pinos D0~D3!!!

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Sem_ty10

    Pino RW também pode ser aterrado, utilizando um pino a menos para o display. Porém terá que editar o arquivo LCD.C, mas é melhor deixá-lo sem modificações para não haver problemas com a biblioteca.
    Para isso, recomendo o uso da biblioteca flex_lcd.c ... é melhor para ser utilizada do que a padrão do CCS C Compiler. Além dela já vir com o RW desabilitado!!!

    Código:

    //*****************************************************************************
    // CCS C Compiler for PIC
    //*****************************************************************************
    // flex_lcd.c
     
       // These pins are for the Microchip PicDem2-Plus board,
       // which is what I used to test the driver.  Change these
       // pins to fit your own board.
      
     #define LCD_RS    PIN_B1
     #define LCD_E     PIN_B0
     
     #define LCD_DB4   PIN_B4
     #define LCD_DB5   PIN_B5
     #define LCD_DB6   PIN_B6
     #define LCD_DB7   PIN_B7
      
       // If you only want a 6-pin interface to your LCD, then
       // connect the R/W pin on the LCD to ground, and comment
       // out the following line.
      
       // #define USE_LCD_RW   1      
      
       //========================================
     
     #define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
     #define lcd_line_two 0x40 // LCD RAM address for the 2nd line
     
     
     int8 const LCD_INIT_STRING[4] =
     {
      0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
      0xc,                    // Display on
      1,                      // Clear display
      6                       // Increment cursor
      };
                                  
     
     //-------------------------------------
     void lcd_send_nibble(int8 nibble)
     {
     // Note:  !! converts an integer expression
     // to a boolean (1 or 0).
      output_bit(LCD_DB4, !!(nibble & 1));
      output_bit(LCD_DB5, !!(nibble & 2));  
      output_bit(LCD_DB6, !!(nibble & 4));    
      output_bit(LCD_DB7, !!(nibble & 8));    
     
      delay_cycles(1);
      output_high(LCD_E);
      delay_us(2);
      output_low(LCD_E);
     }
     
     //-----------------------------------
     // This sub-routine is only called by lcd_read_byte().
     // It's not a stand-alone routine.  For example, the
     // R/W signal is set high by lcd_read_byte() before
     // this routine is called.      
     
     #ifdef USE_LCD_RW
     int8 lcd_read_nibble(void)
     {
     int8 retval;
     // Create bit variables so that we can easily set
     // individual bits in the retval variable.
     #bit retval_0 = retval.0
     #bit retval_1 = retval.1
     #bit retval_2 = retval.2
     #bit retval_3 = retval.3
     
     retval = 0;
        
     output_high(LCD_E);
     delay_cycles(1);
     
     retval_0 = input(LCD_DB4);
     retval_1 = input(LCD_DB5);
     retval_2 = input(LCD_DB6);
     retval_3 = input(LCD_DB7);
      
     output_low(LCD_E);
        
     return(retval);    
     }    
     #endif
     
     //---------------------------------------
     // Read a byte from the LCD and return it.
     
     #ifdef USE_LCD_RW
     int8 lcd_read_byte(void)
     {
     int8 low;
     int8 high;
     
     output_high(LCD_RW);
     delay_cycles(1);
     
     high = lcd_read_nibble();
     
     low = lcd_read_nibble();
     
     return( (high<<4) | low);
     }
     #endif
     
     //----------------------------------------
     // Send a byte to the LCD.
     void lcd_send_byte(int8 address, int8 n)
     {
     output_low(LCD_RS);
     
     #ifdef USE_LCD_RW
     while(bit_test(lcd_read_byte(),7)) ;
     #else
     delay_us(60);  
     #endif
     
     if(address)
        output_high(LCD_RS);
     else
        output_low(LCD_RS);
          
      delay_cycles(1);
     
     #ifdef USE_LCD_RW
     output_low(LCD_RW);
     delay_cycles(1);
     #endif
     
     output_low(LCD_E);
     
     lcd_send_nibble(n >> 4);
     lcd_send_nibble(n & 0xf);
     }
     
     //----------------------------
     void lcd_init(void)
     {
     int8 i;
     
     output_low(LCD_RS);
     
     #ifdef USE_LCD_RW
     output_low(LCD_RW);
     #endif
     
     output_low(LCD_E);
     
     delay_ms(15);
     
     for(i=0 ;i < 3; i++)
        {
         lcd_send_nibble(0x03);
         delay_ms(5);
        }
     
     lcd_send_nibble(0x02);
     
     for(i=0; i < sizeof(LCD_INIT_STRING); i++)
        {
         lcd_send_byte(0, LCD_INIT_STRING[i]);
        
         // If the R/W signal is not used, then
         // the busy bit can't be polled.  One of
         // the init commands takes longer than
         // the hard-coded delay of 60 us, so in
         // that case, lets just do a 5 ms delay
         // after all four of them.
         #ifndef USE_LCD_RW
         delay_ms(5);
         #endif
        }
     
     }
     
     //----------------------------
     
     void lcd_gotoxy(int8 x, int8 y)
     {
     int8 address;
     
     if(y != 1)
        address = lcd_line_two;
     else
        address=0;
     
     address += x-1;
     lcd_send_byte(0, 0x80 | address);
     }
     
     //-----------------------------
     void lcd_putc(char c)
     {
      switch(c)
        {
         case '\f':
           lcd_send_byte(0,1);
           delay_ms(2);
           break;
        
         case '\n':
            lcd_gotoxy(1,2);
            break;
        
         case '\b':
            lcd_send_byte(0,0x10);
            break;
        
         default:
            lcd_send_byte(1,c);
            break;
        }
     }
     
     //------------------------------
     #ifdef USE_LCD_RW
     char lcd_getc(int8 x, int8 y)
     {
     char value;
     
     lcd_gotoxy(x,y);
     
     // Wait until busy flag is low.
     while(bit_test(lcd_read_byte(),7));  
     
     output_high(LCD_RS);
     value = lcd_read_byte();
     output_low(lcd_RS);
     
     return(value);
     }
     #endif

    Utilizando a biblioteca flex_lcd:
    Salve uma cópia acima dentro de seu projeto!!!

    Código:

    #include <16F628A.h>
    #use delay(internal=4000000)

    #FUSES NOMCLR                  //Master Clear pin used for I/O
    #FUSES NOBROWNOUT              //No brownout reset
    #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

    #define use_portb_kbd TRUE //Teclado definido para o port B
    #include <KBD.C>

    char tecla;

    #define LCD_DATA_PORT getenv("SFR:PORTB")
    #include "flex_lcd.c"

    void main()
    {
      kbd_init();
      lcd_init();
      lcd_putc("\fTeste de LCD\r\n");  // \f limpa a tela, \r\n muda de linha

      while(TRUE)
      {
         tecla=kbd_getc();
         delay_ms(1);
         if (tecla!=0){ //tecla diferente de zero, foi pressionada
            printf(lcd_putc, "%c", tecla);
            delay_ms(200);    
         }
      }
    }

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Sem_ty11

    Meus arquivos download:
    Código:
    https://www.4shared.com/rar/0uszaj12ei/LCD_e_KEYBD.html

    Flw...

    _________________
    No mundo só existem 10 tipos de pessoas: as que conhecem binário e as que não conhecem!!!
    nagkiller
    nagkiller
    Moderador do fórum
    Moderador do fórum

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : Desde 1990
    Sexo : Masculino
    Número de Mensagens : 2844
    Idade : 43
    Cidade/Estado: : Garça - São Paulo
    Humor : Depende
    Data de inscrição : 23/11/2011

    Ir para o topo Ir para baixo

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Empty Re: PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    Mensagem por CACÁ Dom 08 Out 2017, 13:23

    Opa, valeu mesmo, eu achava que pelo que o próprio instrutor disse no vídeo, o display já vinha definido automaticamente para o PORT D mas se usar PICs de 18 pinos e dois ports ele era definido automaticamente para o PORT D.
    Vou simular aqui, mais uma vez muito obrigado.

    _________________
     


    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Unnamed
    CACÁ
    CACÁ
    Administrador Auxiliar
    Administrador Auxiliar

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : 17 anos/ 9 anos
    Sexo : Masculino
    Número de Mensagens : 19779
    Idade : 43
    Cidade/Estado: : Ritápolis Minas Gerais
    Humor : Bom
    Data de inscrição : 25/03/2010

    Ir para o topo Ir para baixo

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Empty Re: PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    Mensagem por CACÁ Dom 08 Out 2017, 14:13

    Você é fera viu kkkkk
    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Captur16

    _________________
     


    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Unnamed
    CACÁ
    CACÁ
    Administrador Auxiliar
    Administrador Auxiliar

    DESCRIÇÃO: : Técnico em Eletrônica e informática
    TEMPO DE EXPERIÊNCIA : 17 anos/ 9 anos
    Sexo : Masculino
    Número de Mensagens : 19779
    Idade : 43
    Cidade/Estado: : Ritápolis Minas Gerais
    Humor : Bom
    Data de inscrição : 25/03/2010

    Ir para o topo Ir para baixo

    PIC16F628 - Display e teclado no mesmo PORT (resolvido) Empty Re: PIC16F628 - Display e teclado no mesmo PORT (resolvido)

    Mensagem por Conteúdo patrocinado


    Conteúdo patrocinado


    Ir para o topo Ir para baixo

    Ir para o topo

    - Tópicos semelhantes

     
    Permissões neste sub-fórum
    Não podes responder a tópicos