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
» Mini System LG CM4440 não liga, não tem audio
Hoje à(s) 17:28 por NiemeyerD

» Mini System LG CM4330 não tem audio aparece S-protection no display
Hoje à(s) 14:30 por NiemeyerD

» TV LCD SONY KLV-46S200A não LIGA, PISCANDO O LED POWER 4 VEZES
Hoje à(s) 11:36 por jandilson

» TV SONY kv29fs100 Imagem rolando e ronco no áudio
Hoje à(s) 08:22 por Dr.Luan

» Tv philips 29pt5645 problemas no av1
Hoje à(s) 08:20 por Dr.Luan

» Auto Rádio Philips CEM2000 não liga
Ontem à(s) 23:23 por Ohm

» Central Multimídia - MediaNav Renault Duster - Tela branca
Ontem à(s) 15:41 por rafaquino91

» SOM PHILIPS FWM593/BK SEM SOM
Ontem à(s) 13:50 por HAHNRAHN

» MICROSSISTEM PANASSONIC SA-MAX200 ARMANDO PROTEÇÃO
Ontem à(s) 13:20 por negoleo21

» MÓDULO PYRAMID PB310GX SEM ÁUDIO
Ontem à(s) 10:12 por glob

» MIXER BEHRINGER VMX 300 COM TRAFO ALTERADO.
Ontem à(s) 08:59 por Oficina do SOM

» tv philips mod 14GX1618/78R ñ muda de canal(travada)
Ontem à(s) 07:29 por Nill

» tv semp toshiba 2092 lav com linhas de retraços
Seg 15 Out 2018, 16:18 por samucasvm

» nobreak pl1500b1 só liga fora da rede
Seg 15 Out 2018, 14:15 por nagkiller

» Receiver Yamaha mod RX. V. 640 entrando em proteção
Seg 15 Out 2018, 10:59 por Oficina do SOM

» Caixa amplificada lexsen LS12A MP3 não sai som
Seg 15 Out 2018, 10:50 por Oficina do SOM

» Receiver-Gradiente- r343-problema saida som baixa e fm para de funcionar apos alguns minuyos
Seg 15 Out 2018, 10:46 por Oficina do SOM

» som sharp cd-k1600z volume baixo e com ruido
Seg 15 Out 2018, 10:40 por Oficina do SOM

» caixa ativa donner clarity CL-200A com chiado.
Dom 14 Out 2018, 16:37 por Nill

» Som Sony HCD-GTX77 - Não toca pendriver
Dom 14 Out 2018, 16:36 por Nill

» tv lg RP-14CB25A não liga
Dom 14 Out 2018, 12:05 por MARIO Y. SEGAWA

» Som lg // cm 4330 // s-proteção
Sab 13 Out 2018, 21:00 por antonio benedito de queir

» tv lg cp29k30 nao liga
Sab 13 Out 2018, 20:41 por antonio benedito de queir

» tv lg 21fs4rlg-ls desliga e fica em standby
Sex 12 Out 2018, 20:22 por antonio benedito de queir

» TV Sanyo CTP6707 fonte alta
Sex 12 Out 2018, 07:29 por tomate

» CAIXA AMPLIFICADA CICLOTRON PREMIUM 800! QUEIMANDO SAÍDAS DE ÁUDIO
Sex 12 Out 2018, 07:14 por tomate

» TV LG RP 29FA35A - Tensões nas linhas SCL e SDA oscilando.
Qua 10 Out 2018, 22:16 por glob

» Amplificador deaudio JRC SPA750 (em curto)
Qua 10 Out 2018, 21:58 por Oficina do SOM

» Nobreak Tsshara upsmp14 (upsmini 500va) esquema ou ajuda
Qua 10 Out 2018, 10:34 por MARCINHOXP

» projetor epson 12+
Ter 09 Out 2018, 16:10 por Nill

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

Arona, Arthur Gomes, CARLOS ALCEBYADES, centauro, DANTEX, delabeneta, dino 3, Dr.Luan, Eletronica Manoel, Fábio Lena, jeffersonjs, joaoalmeida, Julioc3, klein, maglefy, marcosmacedo, maumau, Paranista, Porto, Ricardo Luis Bomfim, ROBERTO CARLOS, WALTER JANSEN

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 : 18849
Idade : 38
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 : 1796
Idade : 38
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 : 18849
Idade : 38
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 : 18849
Idade : 38
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