 |
|
Want your own Fotopage?

|
|
Arao's FotoPage Eletrônica na bancada By: Arao Hayashida Filho
[Recommend this Fotopage] |
[Share this Fotopage]
| [Track this Fotopage]
|
View complete fotopage
|
|
| Sunday, 12-Jul-2009 04:35 |
Email | Share | Bookmark |
|
STM32
|
 |
|
Nem bêbado tira foto pior!!!
|
|
|
Terminando mais uma semana com outro post, agora tratando sobre um microcontrolador no core ARM cortex-M3, vindo de uma recente aquisição de uma placa de desenvolvimento adquirida na fururelec.
O fabricante da placa mandou junto com a mesma um cabo serial de 3 fios e um cd lotado de exemplos, que podem ser baixados do site da st, a primeira idéia era ter um contato inicial com o microcontrolador compilando os exemplos.
O primeiro exemplo foi o de fazer os leds piscar...muito idiota, pra deixar o negócio mais emocionante a idéia era fazer algumas funções pra lidar com o famoso lcd feito a partir do KS0070B, mas agora em 4 bits, o sistema em 8 bits já tinha feito com sucesso anteriormente.
Após errar ligação do LCD uma vez e quebrar um pouco a cabeça como de costume cheguei nas seguintes funções com testes indicando o total funcionamento:
void Inicializa_LCD(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |
GPIO_Pin_1 |
GPIO_Pin_2 |
GPIO_Pin_3 |
GPIO_Pin_4 |
GPIO_Pin_5 |
GPIO_Pin_6 |
GPIO_Pin_7;
GPIO_Init(GPIOC, &GPIO_InitStructure);
DelaymS(400);
Envia_comando_LCD(0x02); // 4 bits mode
Envia_comando_LCD(0x02); // 4 bits mode
Envia_comando_LCD(0x08); // 5x7 2 lines
DelaymS(5);
Envia_comando_LCD(0x00);
Envia_comando_LCD(0x0F); // Display on/cursor on part 1
DelaymS(5);
Envia_comando_LCD(0x00); // Display on/cursor on part 2
Envia_comando_LCD(0x01); // Moving direction part 1
DelaymS(5);
Envia_comando_LCD(0x08); // Moving direction part 2
Envia_comando_LCD(0x00); // Moving direction part 1
clrLCD();
}
void Envia_comando_LCD(u8 comando)
{
u16 GPIOC_saida_atual,GPIOC_saida_proxima;
comando=comando &0x0F;
GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_RESET); // RS=0, command mode
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFF00;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)comando;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
}
void Envia_dado_LCD(u8 dado)
{
u16 GPIOC_saida_atual,GPIOC_saida_proxima;
u8 dadol, dadoh;
dadol=dado;
dado=dado&0xF0;
dadoh=dado/16;
dadoh=dadoh & 0x0F;
dadol=dadol & 0x0F;
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIO_WriteBit(GPIOC,GPIO_Pin_6,Bit_SET); // RS=1
DelayuS(500);
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFFF0;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)dadoh;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
GPIOC_saida_atual=GPIO_ReadOutputData(GPIOC) & 0xFFF0;
GPIOC_saida_proxima=GPIOC_saida_atual | (u16)dadol;
GPIO_Write(GPIOC,GPIOC_saida_proxima);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_SET); // E=1
DelayuS(500);
GPIO_WriteBit(GPIOC,GPIO_Pin_7,Bit_RESET); // E=0
DelayuS(500);
}
u8 addressLCD;
void putcharLCD(u8 entrada)
{
u8 terminated;
terminated=0x0;
if (addressLCD<15)
{
addressLCD++;
terminated=0xFF;
}
if ((addressLCD==15) && (terminated==0x0))
{
Envia_comando_LCD(0x0C); // DDRAM 0x40 address part 1
Envia_comando_LCD(0x00); // DDRAM 0x40 address part 2
addressLCD=64;
terminated=0xFF;
}
if ((addressLCD>63) && (terminated==0x0)) // 64
{
addressLCD++;
}
if (addressLCD>79)
{
Envia_comando_LCD(0x08); // DDRAM 0x0 address part 1
Envia_comando_LCD(0x00); // DDRAM 0x0 address part 2
addressLCD=0;
}
Envia_dado_LCD(entrada);
}
Vale ressaltar que estas funções foram feitas em cima do exeplo do led, e por exemplo os tipos u8, u16 são definidos de lá.
Depois acabei o dia testando e modificando um exemplo utilizando a USB do micro com o exemplo da virtual com port, que cria uma porta serial virtual, a idéia nesse caso foi utilizar o terminal e o display pra exibir os caracteres....
Enfim, mais um pouco de obstáculos e considerações erradas antes de se concluir essa modificação.
A idéia é conseguir amanhã trabalhar com a comunicação no sentido de transferir dados pro pc usando a usb e aquele mesmo exemplo...mais trabalho e um pouco de aprendizado pela frente!
|
|
|
View complete fotopage
|
|
|
|
 |
|
|
|