Display LCD Nokia 3310 com AVR

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Display LCD Nokia 3310 com AVR

Mensagempor vohr56 » 23 Mai 2008 17:58

Olá! tudo bem?

Abro este tópico pois acredito que será útil a várias pessoas.

LCD's gráficos não são tão baratos. O LCD do Nokia 3310 é fácil de encontrar e para pequenas aplicações é uma mão na roda, pois é pequeno, fácil de encontrar e relativamente barato (em torno de R$25,00).

Procurei já muita coisa na internet. Para AVR consegui encontrar alguma coisa. Porém até hoje só utilizei o CodeVision como compilador, e não manjo nada de assembler. Alguns exemplos que encontrei foram desenvolvidos em programas como ICCAVR, GCC-AVR, BASCOM.

O programa encontrado que foi escrito no ICCAVR é completo, e segundo algumas fontes na internet ele funciona. Ele pode ser visto aqui:
http://www.microsyl.com/

Este aqui segundo o usuário foi escrito no codevision:
http://www.avrfreaks.net/index.php?name ... 55&start=0

LCD do Nokia 6100:
http://thomaspfeifer.net/

Para o 8051:
http://www.kmitl.ac.th/~kswichit/8051sb ... 1sbc1.html

Exemplo de aplicação do display:
http://www.radiolocman.com/shem/schemat ... l?di=44132

Imagem





Alguém do fórum já utilizou em algum projeto este display? Gostaria de ajuda para utiliza-lo em um atmega-8 ou atmega-16. Para programar utilizarei o C, se possível no codevision. Mas se necessário, adotarei outro compilador.

o projeto que desenvolverei será de um computador de bordo para moto, com medição de temperatura, nível de combustível, tensão da bateria, medidor de velocidade, rpm e outros.

Disponibilizarei o projeto aqui no fórum, por isso conto com a ajuda de todos.



Abraços!!
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36

Mensagempor brasilma » 24 Mai 2008 12:41

Olá Colega,

Estou justamente para começar a trabalhar com display gráfico.

"Para começar" pois antes que possa começar a me divertir, tenho de concluir algumas modificações no projeto antigo (processador '51).

Só que no nosso caso a idéia é usar os display gráfico padrão mesmo, estamos pagando este mesmo valor que falou neles.

Minha intenção é desenvolver as rotinas de controle e fontes de caractere, preciso de uma bem pequena 5x3.

As rotinas de controle serão inicialmente apenas para "printar" caracteres e bmps, e traçar linhas.

Creio que poderemos trocar idéias.

Abraços.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor vohr56 » 24 Mai 2008 12:50

brasilma escreveu:Olá Colega,

Estou justamente para começar a trabalhar com display gráfico.

"Para começar" pois antes que possa começar a me divertir, tenho de concluir algumas modificações no projeto antigo (processador '51).

Só que no nosso caso a idéia é usar os display gráfico padrão mesmo, estamos pagando este mesmo valor que falou neles.

Minha intenção é desenvolver as rotinas de controle e fontes de caractere, preciso de uma bem pequena 5x3.

As rotinas de controle serão inicialmente apenas para "printar" caracteres e bmps, e traçar linhas.

Creio que poderemos trocar idéias.

Abraços.



Olá Brasilma!!

A minha intenção é esta também, a de desenvolver o próprio código para o display. Não tenho a mínima noção de como o micro se comunica com o LCD, mas quero aprender, pois aí fica fácil desenvolver rotinas para outros displays também e para micros diferentes.

O display gráfico que vocês estão utilizando possui qual tamanho? Mas voês compraram em quantidade maior?

Eu gostaria de utilizar o display do 3310 porque no projeto do computador de bordo para a moto ele cabe certinho no lugar do marcador de combustível. Talvez um GLCD de 128*128 não caiba.

Com certeza trocaremos idéias.


Abraços!!!
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36

Mensagempor brasilma » 29 Mai 2008 12:42

Olá Vohr,

Os displays gráficos em termos de recursos são mais "pobres" que os de caracteres comuns, ou seja, você deve fazer uma parte do serviço que os outros fazem sózinhos, com aumento do código e memórias consumidas, porem ganha-se em flexibilidade.

O chip de controle deles geralmente é compativel com o KS0108, então é interessante baixar o data-sheet desse carinha.

O display é o 128 x 64 padrão, este preço é para 100 peças ou mais.

Abraços.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor gafar » 14 Jul 2008 13:05

vohr56
já usei os displays:
3310 com AVR (codevision) e 8051 assembler registrador grafico de temperatura com 15 horas de registro usando o LM35.
O 6100 com AMR e AVR.
O Cx65 de celular Siemens com AVR e ARM.
Avatar do usuário
gafar
Bit
 
Mensagens: 26
Registrado em: 23 Out 2006 08:07
Localização: São Paulo SP

Mensagempor brasilma » 29 Jul 2008 17:15

Já estou a vontado com o GLCD, no momento estou fazendo experiências para definir as fontes mais adequadas ao projeto.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Display LCD Nokia

Mensagempor compredosul » 22 Out 2008 13:50

Olá pessoal...

A um tempão atrás eu implementei um circuito com LCD do Nokia 5120, e lembro que na época funcionou legal, porém eu usei Atmega32 e Atmega8 para os testes.

No meio da minha biblioteca particular localizei o código em C que talvez possa ajudá-los, afinal a estrutura do código será a mesma bastando interpretá-lo e adequar ao microcontrolador que pretende usar.

Lembro também que usei um programa chamado FastLCD para converter um .BMP em string para mandar para o LCD, pelo nome você devem encontrá-lo para download.

/***********
V2.02: >> 03/04/06
Simplismente modificado o modo de apresentação da versão na inicialização


************/
#include <mega8.h>

//#include <gray.h)
//#include <string.h>
//#include <stdio.h>
#include <delay.h>
//#include <math.h>

#define cs PORTB.7
#define dc PORTB.6
#define reset PORTD.5

#define scl PORTD.0
#define sda PORTD.1

/*#define apaga_scl PORTC.3=0
#define seta_scl PORTC.4=1
#define seta_sda PORTC.5=0
#define apaga_sda PORTC.6=1
*/


flash char iniciar[4]={0x21,0x90,0x20,0xE};
//flash char iniciar[5]={0x21,0xC5,0x13,0x20,0x09};//Constante de inicialização

//Constante da imagem
flash char grafico1[84]={0x00,0x00,0x00,0xFC,0x18,0x60,0x80,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x38,0x44,0x44,0x44,0x84,0x84,0x18,0x00,0x00,0xFC,0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x08,0x04,0x44,0x44,0x44,0xB8,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico2[84]={0x00,0x00,0x00,0x8F,0x80,0x80,0x83,0x0C,0x03,0x00,0x80,0x8F,0x80,0x80,0x06,0x08,0x08,0x88,0x88,0x88,0x87,0x80,0x00,0x0F,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x0F,0x02,0x00,0x04,0x08,0x08,0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico3[84]={0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x40,0x40
};
flash char grafico4[84]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00
};
flash char grafico5[84]={0x00,0x00,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0xC0,0x30,0x0C,0x03,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x00,0xE0,0x18,0x07,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0xFF,0xC0,0x30,0x0C,0x03,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0x00,0x00
};
flash char grafico6[84]={ 0xFF,0x80,0x70,0x80,0xFF, 0x7E, 0x11, 0x11, 0x11, 0x7E,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00
};


//Constante de caracteres
flash char FontLookup[91,5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
};



//Funções em geral
void Reiniciar(void);
void nokia_write(unsigned char dado);
void nokia_write_comando(void);
void nokia_write_data(void);



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x30;
// Place your code here
}





void main(void)
{



// Input/Output Ports initialization
// Port B initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTB=0x00;
DDRB=0xFF;




// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=Out
// State0=T State1=T State2=T State3=T State4=T State5=T State6=0
PORTC=0x00;
DDRC=0x40;

// Port D initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
TCCR0=0x04;
TCNT0=0x30;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x05;//1

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")


reset=1;
// delay_ms(1);
reset=0;
nokia_write_comando();

while(1)
{
nokia_write_data();
delay_ms(500);
}

}//MAIN

void Reiniciar(void)
{
#asm("RJMP __RESET"); // Reset !!!
}

void nokia_write(unsigned char dado)
{
// envia um byte pelo barramento
int conta=8;
scl=0; // coloca SCL em 0
while (conta)
{
// envia primeiro o MSB
if (shift_left(&dado,1,0)) seta_sda; else apaga_sda;
// dá um pulso em scl
seta_scl;
conta--;
apaga_scl;
}

// seta_sda;
}

void nokia_write_comando(void)
{
unsigned int8 conta=0;
while(conta<4){
output_low(dc);
output_low(cs);
nokia_write(iniciar[conta]);
output_high(cs);
conta++;
}
}
/////////////////////////////////////////////////////////////////////////////////
void nokia_write_data(void)
{
unsigned int16 conta;


while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico1[conta]);

output_high(cs);

conta++;
}
conta=0;
while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico2[conta]);

output_high(cs);

conta++;
}

conta=0;
while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico3[conta]);

output_high(cs);

conta++;



}


conta=0;
while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico4[conta]);

output_high(cs);

conta++;



}

conta=0;
while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico5[conta]);

output_high(cs);

conta++;



}

conta=0;
while(conta<83){

output_high(dc);

output_low(cs);

nokia_write(grafico6[conta]);

output_high(cs);

conta++;

}

}
Everton Machado... www.compredosul.com.br
Avatar do usuário
compredosul
Bit
 
Mensagens: 16
Registrado em: 06 Set 2008 08:42
Localização: RS - Brasil

Mensagempor vohr56 » 22 Out 2008 20:42

Amigo compredosul, muito obrigado pela sua contribuição!! Vou procurar o display pra testar o código!!

Só achei estranho a parte output_high(dc)! No ccs pra pic se utiliza assim! No avr não sabia que tinha isso.
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36

Display LCD Nokia 3310 com AVR Atmel

Mensagempor compredosul » 23 Out 2008 10:52

vohr56 escreveu:Amigo compredosul, muito obrigado pela sua contribuição!! Vou procurar o display pra testar o código!!

Só achei estranho a parte output_high(dc)! No ccs pra pic se utiliza assim! No avr não sabia que tinha isso.


Olá amigo... eu uso o compilador Code Vision, lembro que compilei e rodou tranquilo.

output_high(dc); >> o dc de dentro do parênteses é uma definição para a porta B.6 (#define dc PORTB.6)

output_low(cs); >> o cs de dentro do parênteses é uma definição para a porta B.7 (#define cs PORTB.7)

Bons estudos!!
Everton Machado... www.compredosul.com.br
Avatar do usuário
compredosul
Bit
 
Mensagens: 16
Registrado em: 06 Set 2008 08:42
Localização: RS - Brasil

Mensagempor vohr56 » 23 Out 2008 17:36

Estranho, acabei de compilar aqui no codevision e este comando não funcionou. Estou utilizando o Codevision 1.24.8d.
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36

Mensagempor vohr56 » 23 Out 2008 17:39

Mas este comando é fácil de se substituir:

output_high(dc);

por

dc=1;
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36

Mensagempor vohr56 » 23 Out 2008 20:51

Modifiquei algumas coisas e olha o resultado:


/********************************************************************************************************************
V2.02: >> 03/04/06
Simplismente modificado o modo de apresentação da versão na inicialização
********************************************************************************************************************/

#include <mega8.h>

#include <delay.h>
//#include <gray.h>
//#include <string.h>
//#include <stdio.h>
//#include <math.h>

#define cs PORTB.7
#define dc PORTB.6
#define reset PORTD.5
#define scl PORTD.0
#define sda PORTD.1
#define apaga_scl PORTC.3=0
#define seta_scl PORTC.4=1
#define seta_sda PORTC.5=0
#define apaga_sda PORTC.6=1



flash char iniciar[4]={0x21,0x90,0x20,0xE};
//flash char iniciar[5]={0x21,0xC5,0x13,0x20,0x09};//Constante de inicialização

//Constante da imagem
flash char grafico1[84]={0x00,0x00,0x00,0xFC,0x18,0x60,0x80,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x38,0x44,0x44,0x44,0x84,0x84,0x18,0x00,0x00,0xFC,0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x08,0x04,0x44,0x44,0x44,0xB8,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico2[84]={0x00,0x00,0x00,0x8F,0x80,0x80,0x83,0x0C,0x03,0x00,0x80,0x8F,0x80,0x80,0x06,0x08,0x08,0x88,0x88,0x88,0x87,0x80,0x00,0x0F,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x0F,0x02,0x00,0x04,0x08,0x08,0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
flash char grafico3[84]={0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x7F,0x01,0x01,0x01,0x01,0x01,0x7F,0x40,0x40,0x40,0x40,0x40,0x40
};
flash char grafico4[84]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00
};
flash char grafico5[84]={0x00,0x00,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x40,0x30,0x0C,0x02,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0xC0,0x30,0x0C,0x03,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x80,0x60,0x18,0x06,0x01,0xFF,0x00,0xE0,0x18,0x07,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0xFF,0xC0,0x30,0x0C,0x03,0x0F,0xF0,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0xC0,0x30,0x0C,0x03,0x00,0xFF,0x00,0x00,0x00
};
flash char grafico6[84]={ 0xFF,0x80,0x70,0x80,0xFF, 0x7E, 0x11, 0x11, 0x11, 0x7E,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00
};


//Constante de caracteres
flash char FontLookup[91,5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
};
/*******************************************************************************************************************/

//Funções em geral
void Reiniciar(void);
void nokia_write(unsigned char dado);
void nokia_write_comando(void);
void nokia_write_data(void);



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x30;
// Place your code here
}

/*******************************************************************************************************************/





/********************************************************************************************************************
**************************************** Função principal ***********************************************************
********************************************************************************************************************/

void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=Out
// State0=T State1=T State2=T State3=T State4=T State5=T State6=0
PORTC=0x00;
DDRC=0x40;

// Port D initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
TCCR0=0x04;
TCNT0=0x30;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x05;//1

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")


reset=1;
// delay_ms(1);
reset=0;
nokia_write_comando();

while(1)
{
nokia_write_data();
delay_ms(500);
}

}
/********************************************************************************************************************
**************************************** Fim da função principal ****************************************************
********************************************************************************************************************/




/*******************************************************************************************************************/
void Reiniciar(void)
{
#asm("RJMP __RESET"); // Reset !!!
}
/*******************************************************************************************************************/




/*******************************************************************************************************************/
void nokia_write(unsigned char dado)
{
// envia um byte pelo barramento
int conta=8;
scl=0; // coloca SCL em 0
while (conta)
{
//envia primeiro o MSB
if ( shift_left(&dado,1,0))
seta_sda;
else
apaga_sda;

// dá um pulso em scl
seta_scl;
conta--;
apaga_scl;
}
// seta_sda;
}
/*******************************************************************************************************************/



/*******************************************************************************************************************/
void nokia_write_comando(void)
{
unsigned int conta=0;
while(conta<4)
{
dc=0;
cs=0;
nokia_write(iniciar[conta]);
cs=1;
conta++;
}
}
/*******************************************************************************************************************/



/*******************************************************************************************************************/
void nokia_write_data(void)
{
unsigned int conta;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico1[conta]);
cs=1;
conta++;
}

conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico2[conta]);
cs=1;
conta++;
}

conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico3[conta]);
cs=1;
conta++;
}

conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico4[conta]);
cs=1;
conta++;
}

conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico5[conta]);
cs=1;
conta++;
}

conta=0;
while(conta<83)
{
dc=1;
cs=0;
nokia_write(grafico6[conta]);
cs=1;
conta++;
}
}
/*******************************************************************************************************************/





O codevision continua dando erro em:

//envia primeiro o MSB
if ( shift_left(&dado,1,0))
seta_sda;
else
apaga_sda;


Ele não intendeu o shift_left e não reconheceu a condição do if.



Também não consegui declarar isto:
unsigned int8 conta=0;

e

unsigned int16 conta=0;

deixei como unsigned int somente.
vohr56
Bit
 
Mensagens: 22
Registrado em: 30 Nov 2006 10:36


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x