• Welcome to LusoRobótica - Robótica em Português.
 

[AJUDA] LCD NOKIA 3310 + STM32 Discovery

Started by ivitro, 08 de October de 2011, 02:53

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ivitro

Estou a tentar meter a dar o lcd do 3310 a dar no stm discovery, mas sem sucesso.


depois das inicializações aparece isto:




Uploaded with ImageShack.us

e não escreve mais nada no ecrã.

para quem quiser os ficheiros estão  AQUI

descompactar para...\STM32 Discovery\stm32vldiscovery_package\Project\Examples

abrir com o Keil

ivitro

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....

senso

#2
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.
Avr fanboy

ivitro

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.

senso

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?
Avr fanboy

ivitro

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.

ivitro

Finalmente consegui resolver o problema, era a tensão de alimentação vs tensão dos dados era diferente.

LCD 3310 + STM32 Discovery

metRo_


ivitro

foi testado na F4 e na F1 funcionou tudo bem, mesmo acima dos 4MHz.