Ir ao conteúdo
  • Cadastre-se

Josias_Martins

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

0
  1. Pois então. Nesse meio tempo consegui resolver isso. Acabei tendo a mesma "luz" que você.. haha O problema é que a função que estava utilizando para envio da matriz, não estava funcionando como esperado. Ela não estava enviando cada um dos bytes, apenas o primeiro byte. OBS: Escrevi errado la em cima no exemplo, a função certa era UART1_Write_text, para envio de mais de um caractere. No fim, acabei escrevendo uma função própria, com um laço for, que faz o envio caractere por caractere, e tudo passou a funcionar como esperado! Muito obrigado pela ajuda. Como trabalho sozinho, muitas vezes você chega num ponto que não enxerga mais erros básicos e precisa de alguém para trocar uma ideia!
  2. Pois então, estou utilizando a função UART1_WRITE, do próprio MikroC. Se eu declaro uma variável CHAR e inicializo ela com o valor, funciona: Agora, utilizando a variável que contem o endereço IP que foi lido do SDCard, não vai. Cheguei a cogitar a hipótese de não estar carregando os dados, mas parece que não é isso. Coloquei vários pontos de aviso (leds piscando) no decorrer do código para verificar se as funções são concluídas com êxito. Amanhã vou ver se compro um Display LCD, e de repente ligo ao Hardware para ver o que ele exibe (estou sem display no HW). EDITADO: Realmente, os dados estão sendo carregados. Como sei? Criei um IF para verificar se o conteúdo da posição "0" do vetor IPADDR é o primeiro número do endereço IP, acionando dois LEDs para caso positivo, e funcionou como esperado. Ou seja, o dado no Vetor é o dado esperado, mas por algum motivo ao enviar pela UART se torna ilegível ao ESP8266 (Wifi). Não parece ser problema com a UART, pois se envio a infornação diretamente, ele reconhece. Por exemplo, isso funciona: Agora isso, não: Criando uma variável de teste, também funciona:
  3. Obrigado pela ajuda. Acabei conseguindo resolver parte do problema, agora, consigo processar os caracteres e exibí-los no LCD, porém, não estou conseguindo enviar os mesmos através da UART (pelo menos e o que acho, pois o ESP não compreende os dados). A solução foi boba, na realidade. Estava utilizando uma variável para indexar meu vetor, e esta variável estava declarada como CHAR, e não como INT. Isto causou algum bug na indexação, mas o compilador não acusava nada nos logs. Após arrumar isso, tudo passou a funcionar. Código de referência: Aqui eu resumi o código. No meu caso utilizo varios vetores pequenos no lugar de DADOCARREGADO, e um switch case para selecionar os dados que vão para cada pequeno vetor (endereço IP, SSID e etc). Em anexo, consta um print do LCD (Proteus) contendo a informação presente nos vetores de dados, sendo o SSID, SENHA, e IP (respectivamente - dados de teste). Agora o problema já é outro. Tenho o endereço IP no vetor IPADDR E estou enviando ele para o ESP através da UART. Parece que o dado que chega no ESP não é entendido por ele, pois ele fica em loop. Como sei disso? Pois se eu desativar a função de LOAD de dados do SDCard, e declarar o vetor IPADDR com um valor précarregado, como abaixo, funciona: O que me faz acreditar que o problema é formatação dos dados que estão sendo enviados pela UART. Alguma dica do que fazer? Já tentei utilizar o strcpy para formatar o dado, e o memcpy para copiar para outro vetor, mas nada tem efeito. PS: Os testes com o ESP (Wifi) estão sendo realizados em protótipo (físico).
  4. Perdão, mandei a versão 100 do manual, e tenho aqui em meu PC a versão 101. A página 376 da Versão 101 possui o mesmo conteúdo da versão da 421 deste manual que coloquei ai no post. Testei a função, mas infelizmente continua sem funcionar. Ele não retorna o byte lido no cartão SD, ele retorna qualquer outra coisa, menos o esperado. Somente consigo obter o valor no caso apresentado no post inicial: 1 - Se "character" for declarado como "unsigned short *character 2 - Se descarregar o endereço do ponteiro character para outro ponteiro "SDDATA = &character" 3 - Neste caso, SDDATA aponta para o valor lido, e consigo mandar-lo para o lcd diretamente com o comando LCD_Out(1, 1, SDDATA); O problema é que não consigo descarregar o dado para o qual o ponteiro aponta em outra variável. Se declarar "character" como variável char comum (não ponteiro para um valor char, como exemplificado em 1), não funciona, simplesmente enlouquece e começa a trazer valores aleatórios armazenados na ROM do Microcontrolador. Não faz sentido. Pois pelo que entendo, é passado para a função MMC_FAT_READ o endereço da variável, para que ele descarregue a informação diretamente nela (provavelmente a variável declarada como input da função seja um ponteiro para o endereço passado por &character). Teoricamente deveria funcionar normalmente, e "character" deveria retornar o byte lido. Mas não está retornando.
  5. Pois então. Consegui ir um pouco adiante. Consegui descarregar o dado de endereço para um ponteiro. A função MMC_FAT_READ retorna o endereço onde está o dado, pelo que entendi. A documentação da MikroE é muito ruim neste sentido, não explica absolutamente nada... Sabendo que & retorna o endereço, e sabendo que a função incrementa o endereço onde está o caractere cada vez que é chamada, creio que a variável &DADO contém apenas o endereço, e o DADO que quero propriamente dito. Sabendo isso, posso criar um ponteiro compatível e descarregar o endereço nele, que este irá apontar para o dado: No exemplo acima, descarrego o endereço em memória onde está o dado no ponteiro, e este passa a apontar para o dado que eu quero. O problema, é que eu não consigo simplesmente descarregar o dado em uma variável unsigned short: Em todo lugar que vejo sobre C/C++ é afirmado que isto funciona, mas no MikroC parece que não vai. PS: Se enviar DATALOAD para o LCD, tenho os caracteres que necessito. O problema é que não consigo trabalhar em sentenças diretamente com DATALOAD, somente marcando este como ponteiro, que acaba trazendo a localização do ponteiro, e não o valor.
  6. Boa tarde a todos Utilizo o MikroC já a algum tempo, mas nunca necessitei realizar a leitura de arquivos no SDCard, então me deparei com um problema bem estranho. Vou colar abaixo um trexo de código: O que acontece: Fiz a inicialização do cartão SD, e abri o arquivo "main.cnf". Preciso descarregar o conteúdo do arquivo em uma variável interna para avaliar ele, e carregar as configurações de meu dispositivo. O problema, é que aparentemente a função mmc_fat_read apenas relaciona o endereço em memória onde está o dado, e não o dado em si. O problema é que mesmo trabalhando com ponteiros, não consigo descarregar o dado diretamente em uma variável. No exemplo, tenho uma sequência de comandos para escrever em um display LCD. Se envio para o displau &DADO (o endereço onde está o dado, de acordo com as regras de programação C), tenho na tela os caracteres que estão no arquivo, corretamente. Porém, DADOCARREGADO recebe &DADO, e este é um ponteiro. Teoricamente, enviar *DADOCARREGADO para o LCD deveria ter o mesmo efeito, só que não tem. Também não consigo descarregar &DADO diretamente em uma VAR CHAR qualquer. DADO (sem o &) é nulo. Estou a dias tentando achar uma solução para isto, e não saio do lugar. Alguma ideia de como posso fazer para descarregar o caractere recuperado pela função mmc_fat_read diretamente em uma variável do tipo CHAR, para que eu possa manipulá-la posteriormente? Obrigado por qualquer ajuda.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...