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!
http://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
.
Menu de navegação


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

Fóruns:





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

PARCEIROS

E PATROCINADORES

DO FÓRUM 2002:

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

Clique nos banners:




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

Quer ser um patrocinador do fórum?

Mande um e-mail para:

Valdeni@eletronica2002.com.br


_________________
Últimos assuntos
» Som philips modelo FWM 582 sem som nas caixas e auxilares porem no fone sai o áudio
Ontem à(s) 23:36 por francisco constantino

» Fonte jfa 1000x nao liga,fica so piscando um dos leds internos.
Ontem à(s) 21:29 por ayslan souza

» Tv Toshiba Tv2159OFSH - U19 com imagem rosa.
Ontem à(s) 20:27 por MARIO Y. SEGAWA

» [Resolvido]Aparelho de Som Toshiba ms7310cd com som ruim
Ontem à(s) 20:19 por lasiluz

» Ducha Advanced Eletrônica Lorenzetti (127v) - Sem controle de temperatura
Ontem à(s) 19:44 por eliaspaim

» tv lenoxx modelo tv-2100b não liga totalmente parada
Ontem à(s) 18:51 por eletrônica souza

» arduino com vários projetos de Arduino muito bom!!
Ontem à(s) 15:29 por kir

» som som Sony mhc grx 55 não arma o relé
Ontem à(s) 13:03 por ANTRNIO09

» Tv semp modelo tv 2934 com imagem fraca,sem cores
Ontem à(s) 11:47 por paulorfbm

» Tv CCE 2118USP - Com Vertical Fechado
Ontem à(s) 11:30 por MARIO Y. SEGAWA

» SOM LG MCD504, TRAVADO NO RELOGIO
Ontem à(s) 10:45 por felixtec

» [Resolvido]Aparelho de Som Aiwa - CX-NSZ51LH com som muito grave
Qua 20 Jun 2018, 22:10 por jailton da silva santos

» RADIO SANYO 3 FAIXAS SÓ CHIA.
Qua 20 Jun 2018, 22:01 por Adelalon

» Som Sony hcd_zux9 em proteção (alt para transistores na saída)
Qua 20 Jun 2018, 18:56 por Eduardo Toda

» TV-LG-20K40 não liga só em Standy by
Qua 20 Jun 2018, 17:08 por OTONIEL FERREIRA DE SOUSA

» tv LCD LG 42lh20r Funciona depois fica sem imagem lâmpada ligada,
Qua 20 Jun 2018, 07:57 por Nill

» tv pvt2150
Ter 19 Jun 2018, 23:08 por jailton da silva santos

»  Mini System Philips fwm6000x/78 baixando o audio
Ter 19 Jun 2018, 22:37 por tomate

» Tv Panasonic 14rm10l com linhas sem imagem nem som
Ter 19 Jun 2018, 20:15 por Morlan

» Nobreak APC UPS400 - não carrega bateria
Ter 19 Jun 2018, 19:17 por Alcides.Piracicaba

» Mini System - Samsung - MX-D750 - PROTECT
Ter 19 Jun 2018, 17:42 por Oficina do SOM

» reset tv semp 1031 acdc
Ter 19 Jun 2018, 09:17 por acsabo

» TV LG 20CD2R-LD com Horizontal aberto e Software travado
Ter 19 Jun 2018, 05:15 por Ralph Hinkley

» Sony LBT-N355 não liga
Seg 18 Jun 2018, 13:10 por Roger Rodrigues

» som aiwa modelo nsx-s779 coloca na tomada nao liga so fica standby
Seg 18 Jun 2018, 10:44 por Oficina do SOM

» (Encerrado) SOM AIWA MODELO NSX V700 NÃO LIGA ( DEVOLVIDO )
Seg 18 Jun 2018, 10:41 por Oficina do SOM

» Sony MHC GTR 8 não faz funções pelos botões
Dom 17 Jun 2018, 20:09 por Oficina do SOM

» SOM TOSHIBA MS7916MU - Sem audio nas caixas, mas tem som no fone de ouvido.
Dom 17 Jun 2018, 20:00 por Oficina do SOM

» Números grandes em LCD Alphanumérico com PIC como criar?
Dom 17 Jun 2018, 18:01 por CACÁ

»  Monitor AOC modelo E2243FWK liga e desligm
Dom 17 Jun 2018, 17:33 por celiaura

Quem está conectado
56 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 54 Visitantes :: 2 Motores de busca

Paulo Cezar, Sweettooth

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

PIC16F628 - Display e teclado no mesmo PORT (resolvido)

Ir em baixo

PIC16F628 - Display e teclado no mesmo PORT (resolvido)

Mensagem por CACÁ em Sab 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

[Você precisa estar registrado e conectado para ver esta imagem.]

[Você precisa estar registrado e conectado para ver esta imagem.]

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)

_________________
 



[Você precisa estar registrado e conectado para ver esta imagem.]
avatar
CACÁ
Administrador Auxiliar
Administrador Auxiliar

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

Voltar ao Topo Ir em baixo

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

Mensagem por nagkiller em Sab 07 Out 2017, 19:29

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

[Você precisa estar registrado e conectado para ver este link.] LCD_DATA_PORT getenv("SFR:PORTB");
[Você precisa estar registrado e conectado para ver este link.] LCD_ENABLE_PIN  PIN_B0
[Você precisa estar registrado e conectado para ver este link.] LCD_RS_PIN      PIN_B1
[Você precisa estar registrado e conectado para ver este link.] LCD_RW_PIN      PIN_B2
[Você precisa estar registrado e conectado para ver este link.] LCD_DATA4       PIN_B4
[Você precisa estar registrado e conectado para ver este link.] LCD_DATA5       PIN_B5
[Você precisa estar registrado e conectado para ver este link.] LCD_DATA6       PIN_B6
[Você precisa estar registrado e conectado para ver este link.] 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!!!

[Você precisa estar registrado e conectado para ver esta imagem.]

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);    
     }
  }
}

[Você precisa estar registrado e conectado para ver esta imagem.]

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!!!
avatar
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 : 1743
Idade : 37
Cidade/Estado: : Garça - São Paulo
Humor : Depende
Data de inscrição : 23/11/2011

Voltar ao Topo Ir em baixo

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

Mensagem por CACÁ em 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.

_________________
 



[Você precisa estar registrado e conectado para ver esta imagem.]
avatar
CACÁ
Administrador Auxiliar
Administrador Auxiliar

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

Voltar ao Topo Ir em baixo

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

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

Você é fera viu kkkkk
[Você precisa estar registrado e conectado para ver esta imagem.]

_________________
 



[Você precisa estar registrado e conectado para ver esta imagem.]
avatar
CACÁ
Administrador Auxiliar
Administrador Auxiliar

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

Voltar ao Topo Ir em baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum