LusoRobótica - Robótica em Português
Sistemas específicos => ARM => Tópico iniciado por: ivitro em 08 de Outubro de 2011, 02:53
-
Estou a tentar meter a dar o lcd do 3310 a dar no stm discovery, mas sem sucesso.
depois das inicializações aparece isto:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg854.imageshack.us%2Fimg854%2F4553%2Fimag0070is.jpg&hash=ab52d1ee4c41acc5c5d958f7a190233a5382d90e) (http://imageshack.us/photo/my-images/854/imag0070is.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
e não escreve mais nada no ecrã.
para quem quiser os ficheiros estão AQUI (http://www.easy-share.com/117919A86D2B4ACF946E719471266AAE/LCD.rar)
descompactar para...\STM32 Discovery\stm32vldiscovery_package\Project\Examples
abrir com o Keil
-
Então ninguém faz ideia do que possa ser?
isto acontece quando no fim das inicializações o lcd fica todo preto e depois quando envio a instrução para o modo normal ele fica assim quando recebe o ultimo bit.
já troquei de lcd e continua na mesma. Começo a pensar em virar-me para o LPC....
-
Isso será erro de programação com certeza.
Aposto que será falta de respeito nos tempos do protocolo de comunicação, estás a usar delays?
Normalmente nos exemplos que tens para os arm's os delays são feitos com simples loops usando for's ou whiles e se ligas a optimização do código esses mesmos delays são removidos do código e deixas de ter delays.
-
Senso, ao inicio também pensei ser isso mas depois estive a medir e são 100ms de delay, também meti o arm a trabalhar a 1Mhz por via das duvidas e nada.
Estava a fazer comunicação SPI, e agora emulei em software e engraçado que o resultado é o mesmo.
-
Ia para perguntar se não ser do facto de o SPI dos arms tanto funcionar a 8 bits como a 16, e podia ser disso, o código é mesmo igual?
-
Sim funciona tanto a 8 como 16.
/* SPI1 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // podes mudar aqui por 16b
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
/* Enable SPI1 */
SPI_Cmd(SPI1, ENABLE);
para receber primeiramente utilizei esta função:
///// SEND SPI /////
// Loop while DR register in not emplty
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
// Send byte through the SPI1 peripheral
SPI_I2S_SendData(SPI1, data);
// Wait to receive a byte
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
///// SEND SPI END /////
depois já utilizei esta:
for (bitcnt=8; bitcnt>0; bitcnt--)
{
SCK_OFF();
if ((bits_in&0x80)==0x80) {SDI_ON();}
else {SDI_OFF();}
SCK_ON();
bits_in=bits_in<<1;
}
O resultado foi o mesmo.
Hoje devo experimentar com o LPC a ver se acontece igual.
-
Finalmente consegui resolver o problema, era a tensão de alimentação vs tensão dos dados era diferente.
LCD 3310 + STM32 Discovery (http://www.youtube.com/watch?v=NdKdPkbJAS4#)
-
Qual é a board que usas mesmo?
-
foi testado na F4 e na F1 funcionou tudo bem, mesmo acima dos 4MHz.