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!






Add your comment
Name
Email (optional)
Register for updates Register for this Fotopage update (requires email)
Register for entry comments update (requires email)

More...
Link URL (optional)
verification Code
fill in the below number in the box





View complete fotopage


© Pidgin Technologies Ltd. 2008.