Autor Tópico: Dúvida GLCD 240 x 128 com pic18f4520  (Lida 3079 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline gicristhie

  • Novato
  • *
  • Posts: 7
  • Sexo: Feminino
  • Cidade - UF: Campo Grande, MS
  • Nome:: Cristina Goulart
  • Profissão: Programadora
Dúvida GLCD 240 x 128 com pic18f4520
« Online: 13 de Março de 2012, 11:07 »
Bom dia, sou nova no forum ... =)

Usando a biblioteca T6963c e um pic18f4520 foi elaborado um programa que faz a leitura e exibe imagens e texto em um lcd gráfico (240x128) de 21 pinos.
 
O programa funciona bem e as imagens são impressas corretamente, contudo a inicialização falha algumas vezes e o reset demora tempo demais para reiniciar o programa, coisa de 40s pelo menos, nos quais o programa fica travado.

Utilizei um circuito oscilador externo, com  um cristal  de 4Mhz e capacitores de 33pF.
E o reset um circuito POR de acordo com o datasheet do pic...

Alguém tem alguma idéia de qual pode ser o problema e o que pode ser feito para melhorar a partida do programa e tornar o reset mais rápido?

Desde já agradeço.



Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #1 Online: 13 de Março de 2012, 15:26 »
Seria interessante que você colocasse algum fragmento do seu código, o cabeçalho e os pontos de chamada de funções nos ajuda, assim como o compilador utilizado e se possível o esquema eletrônico.
Com isso fica um pouco mais fácil entendermos o problema e sugestionar alguma coisa.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #2 Online: 13 de Março de 2012, 16:04 »
Usando a biblioteca T6963c e um pic18f4520 foi elaborado um programa que faz a leitura e exibe imagens e texto em um lcd gráfico (240x128) de 21 pinos.
 
O programa funciona bem e as imagens são impressas corretamente, contudo a inicialização falha algumas vezes e o reset demora tempo demais para reiniciar o programa, coisa de 40s pelo menos, nos quais o programa fica travado.

Utilizei um circuito oscilador externo, com  um cristal  de 4Mhz e capacitores de 33pF.
E o reset um circuito POR de acordo com o datasheet do pic...

Alguém tem alguma idéia de qual pode ser o problema e o que pode ser feito para melhorar a partida do programa e tornar o reset mais rápido?

Desde já agradeço.

A demora na fase de RESET me parece um problema do programa, ou seja, ou o programador decidiu "demorar", através de uma espera longa demais ou então o programa está aguardando algum sinal de entrada (do LCD, ...) e este sinal demora a ser habilitado.

Mas são hipóteses preliminares..., se você tiver o programa fonte, e este não for muito extenso, dá para ajudar facilmente.

De qualquer maneira, para corrigir o problema, acho que seria necessária uma alteração no programa, que requer analisar o hardware / software e ver as possibilidades e restrições.

Offline gicristhie

  • Novato
  • *
  • Posts: 7
  • Sexo: Feminino
  • Cidade - UF: Campo Grande, MS
  • Nome:: Cristina Goulart
  • Profissão: Programadora
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #3 Online: 13 de Março de 2012, 18:08 »
Abaixo o código...
*não consegui postar a imagem do esquema elétrico

Código: [Selecionar]
#include        "__T6963C.h"

// T6963C module connections
char T6963C_dataPort at PORTD;                   // DATA port

sbit T6963C_ctrlwr  at RC2_bit;                  // WR write signal
sbit T6963C_ctrlrd  at RC1_bit;                  // RD read signal
sbit T6963C_ctrlcd  at RC0_bit;                  // CD command/data signal
sbit T6963C_ctrlrst at RC4_bit;                  // RST reset signal
sbit T6963C_ctrlwr_Direction  at TRISC2_bit;     // WR write signal
sbit T6963C_ctrlrd_Direction  at TRISC1_bit;     // RD read signal
sbit T6963C_ctrlcd_Direction  at TRISC0_bit;     // CD command/data signal
sbit T6963C_ctrlrst_Direction at TRISC4_bit;     // RST reset signal

// Signals not used by library, they are set in main function
sbit T6963C_ctrlce at RC3_bit;                   // CE signal
sbit T6963C_ctrlfs at RC6_bit;                   // FS signal
sbit T6963C_ctrlmd at RC5_bit;                   // MD signal
sbit T6963C_ctrlce_Direction  at TRISC3_bit;     // CE signal direction
sbit T6963C_ctrlfs_Direction  at TRISC6_bit;     // FS signal direction
sbit T6963C_ctrlmd_Direction  at TRISC5_bit;     // MD signal direction

// End T6963C module connections

/*
 * bitmap pictures stored in ROM
 */
/*const code char mC[];
const code char einstein[];*/


void main() {
  char txt1[] = " ITS ME!!";
  char txt[] =  " ;) ";

  unsigned char  panel;         // Current panel
  unsigned int   i;             // General purpose register
  unsigned char  curs;          // Cursor visibility
  unsigned int   cposx, cposy;  // Cursor x-y position

  TRISA0_bit = 1;               // Set RA0 as input
  TRISA1_bit = 1;               // Set RA1 as input
  TRISA2_bit = 1;               // Set RA2 as input
  TRISA3_bit = 1;               // Set RA3 as input
  TRISA4_bit = 1;               // Set RA4 as input


 ADCON1 |= 0xFF;            // Configure AN pins as digital


 CMCON  |= 7;                  // Disable comparators

 
  T6963C_ctrlce_Direction = 0;
  T6963C_ctrlce = 0;            // Enable T6963C
  T6963C_ctrlfs_Direction = 0;
  T6963C_ctrlfs = 0;            // Font Select 8x8
  T6963C_ctrlmd_Direction = 0;
  T6963C_ctrlmd = 0;            // Column number select
   // Initialize T6369C
  T6963C_init(240, 128, 8);
  /*
   * Enable both graphics and text display at the same time
   */
  T6963C_graphics(1);
  T6963C_text(1);

  panel = 0;
  i = 0;
  curs = 0;
  cposx = cposy = 0;
  /*
   * Text messages
   */
  T6963C_write_text(txt, 0, 0, T6963C_ROM_MODE_XOR);
  T6963C_write_text(txt1, 0, 15, T6963C_ROM_MODE_XOR);

  /*
   * Cursor
   */
  T6963C_cursor_height(8);       // 8 pixel height
  T6963C_set_cursor(0, 0);       // Move cursor to top left
  T6963C_cursor(0);              // Cursor off

  /*
   * Draw rectangles
   */
  T6963C_rectangle(0, 0, 239, 127, T6963C_WHITE);
  T6963C_rectangle(20, 20, 219, 107, T6963C_WHITE);
  T6963C_rectangle(40, 40, 199, 87, T6963C_WHITE);
  T6963C_rectangle(60, 60, 179, 67, T6963C_WHITE);

  /*
   * Draw a cross
   */
  T6963C_line(0, 0, 239, 127, T6963C_WHITE);
  T6963C_line(0, 127, 239, 0, T6963C_WHITE);

  /*
   * Draw solid boxes
   */
  T6963C_box(0, 0, 239, 8, T6963C_WHITE);
  T6963C_box(0, 119, 239, 127, T6963C_WHITE);

  /*
   * Draw circles
   */
  T6963C_circle(120, 64, 10, T6963C_WHITE);
  T6963C_circle(120, 64, 30, T6963C_WHITE);
  T6963C_circle(120, 64, 50, T6963C_WHITE);
  T6963C_circle(120, 64, 70, T6963C_WHITE);
  T6963C_circle(120, 64, 90, T6963C_WHITE);
  T6963C_circle(120, 64, 110, T6963C_WHITE);
  T6963C_circle(120, 64, 130, T6963C_WHITE);

/*T6963C_sprite(76, 4, einstein, 88, 119);         // Draw a sprite

  T6963C_setGrPanel(1);                            // Select other graphic panel

  T6963C_image(mC);*/

  for(;;) {                                        // Endless loop
    /*
     * If RA0 is pressed, display only graphic panel
     */
    if(RA0_bit) {
      T6963C_graphics(1);
      T6963C_text(0);
      Delay_ms(300);
      }

    /*
     * If RA1 is pressed, toggle the display between graphic panel 0 and graphic panel 1
     */
    else if(RA1_bit) {
      panel++;
      panel &= 1;
      T6963C_displayGrPanel(panel);
      Delay_ms(300);
      }

    /*
     * If RA2 is pressed, display only text panel
     */
    else if(RA2_bit) {
      T6963C_graphics(0);
      T6963C_text(1);
      Delay_ms(300);
      }

    /*
     * If RA3 is pressed, display text and graphic panels
     */
    else if(RA3_bit) {
      T6963C_graphics(1);
      T6963C_text(1);
      Delay_ms(300);
      }

    /*
     * If RA4 is pressed, change cursor
     */
    else if(RA4_bit) {
      curs++;
      if(curs == 3) curs = 0;
      switch(curs) {
        case 0:
          // no cursor
          T6963C_cursor(0);
          break;
        case 1:
          // blinking cursor
          T6963C_cursor(1);
          T6963C_cursor_blink(1);
          break;
        case 2:
          // non blinking cursor
          T6963C_cursor(1);
          T6963C_cursor_blink(0);
          break;
        }
      Delay_ms(300);
      }

    /*
     * Move cursor, even if not visible
     */
    cposx++;
    if(cposx == T6963C_txtCols) {
      cposx = 0;
      cposy++;
      if(cposy == T6963C_grHeight / T6963C_CHARACTER_HEIGHT) {
        cposy = 0;
        }
      }
    T6963C_set_cursor(cposx, cposy);

    Delay_ms(100);
    }
}

Nessa primeira parte do projeto, o  programa ainda não recebe sinais externo, seria apenas impressão de dados no lcd mesmo...
Agora a tarde retirei o circuito POR do reset e coloquei nesse apenas um resistor de 10k ligado a fonte e um capacitor de 100nF indo para o terra... com isso o programa deixou de travar, contudo ainda permanece o problema na inicialização, só começa a mostrar as imagens na tela quando eu encosto nos pinos onde está o cristal...



Offline gicristhie

  • Novato
  • *
  • Posts: 7
  • Sexo: Feminino
  • Cidade - UF: Campo Grande, MS
  • Nome:: Cristina Goulart
  • Profissão: Programadora
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #4 Online: 13 de Março de 2012, 18:15 »
Segue o esquema elétrico,

e estou utilizando o mikroCPro PIc como compilador... :)

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #5 Online: 13 de Março de 2012, 20:38 »
Gildete, tudo indica que seu oscilador está preguiçoso ... algo nada incomum ...

Recomendo a leitura:

http://www.piclist.com/techref/clocks.htm


Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #6 Online: 13 de Março de 2012, 23:07 »
Citar
contudo ainda permanece o problema na inicialização, só começa a mostrar as imagens na tela quando eu encosto nos pinos onde está o cristal...

experimente trocar o cristal, no ultimo projetinho que fiz ele não funcionava se eu não encostasse no cristal ... troquei e o circuito que me tirou o sono quase 1 semana funcionou.

Offline gicristhie

  • Novato
  • *
  • Posts: 7
  • Sexo: Feminino
  • Cidade - UF: Campo Grande, MS
  • Nome:: Cristina Goulart
  • Profissão: Programadora
Re:Dúvida GLCD 240 x 128 com pic18f4520
« Resposta #7 Online: 18 de Junho de 2012, 16:27 »
Após testar com muitos cristais, optamos pela compra de novos displays...
Agora chegaram, e o circuito funcionou perfeitamente \o/
Aparentemente o anterior estava com algum mal contato e acabou queimando.
Obrigada pela ajuda pessoal, foi bem proveitosa.  :)

 

/** * */