collapse

* Posts Recentes

Rede de comboios elétricos totalmente autónomos 10 ton em Rust em realtime. por blabla
[18 de Setembro de 2022, 18:44]


NiMH por 18650 por almamater
[18 de Setembro de 2022, 17:21]


How We Get Down to 0.2nm CPUs and GPUs - TechTechPotato por blabla
[18 de Setembro de 2022, 15:38]


Nova secção de Raspberry Pi Bare Metal em C e em Rust e Systems Programming por blabla
[04 de Setembro de 2022, 08:55]


The code for AGI will be simple - John Carmack and Lex Fridman por blabla
[29 de Agosto de 2022, 07:36]


Wavelets: a mathematical microscope por blabla
[28 de Agosto de 2022, 20:50]


Bom livro - Dive Into Systems por blabla
[28 de Agosto de 2022, 12:19]


graus negativos inclinação por josecarlos
[28 de Agosto de 2022, 11:31]


Super obsolescência super programada? por SerraCabo
[06 de Agosto de 2022, 11:36]


Motor de aspirador por dropes
[02 de Agosto de 2022, 22:18]

Autor Tópico: localizador carro.  (Lida 2990 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
localizador carro.
« em: 07 de Fevereiro de 2021, 00:29 »
Boa noite,
Sempre quis fazer um alarme para o meu carro com localização, Agora com o virus uma pessoa pode-se dedicar-se um pouco mais.
A uns anos comprei o keetec com uma app que funciona bem mas quando recebo link desde 2019 que não abre directo no google maps, nem o link da no browser como antigamente. Updates da google.
Abri o meu keetec e tentei toda a informação possível e vou tentar reproduzir a coisa.
A nivel de codigo consegui reproduzir na totalidade e continuar a usar app keetec.

O Hardware é o pior mas tentei basear-em nos datasheets e comprando depois com esquemas adafruit e afins, acrescentando mais componentes.
Neste caso hardware não consigo testar, porque não tenho material, fui simulando no multisim, a minha ideia é mandar vir componentes lcsc e fazer placa ljcpcb, montar tudo e ver se não falha.

Anexei o schematic e agradeço muito desde já a quem me possa dar uma vista de olhos e ver se esta a falhar alguma coisa.

Em resumo.
No stm32 fica ligado.
1-  modulo sim808 da itead chamadas /sms  e gps.
1-  mpu 6050 acelerômetro/giroscópio para medir o carro em inclinação e em batida.ftp://
1 - eemprom 4mb guardar dados e textos.
3 - saidas para activar relays e ligar dashcam em caso toque. Usei ULN 23003.
3 - entradas 1 estado da bateria , ligação chave, 1 livre. No multisim aguenta 350v entrada 3.57v no stm32 e  14v. entrada e 2.85v no stm.
« Última modificação: 07 de Fevereiro de 2021, 00:34 por dio123 »

Online jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.865
  • NERD!
Re: localizador carro.
« Responder #1 em: 07 de Fevereiro de 2021, 15:04 »
Assim de repente (estou no tlm) R9 e R24 não me parece que estejam a fazer nada. E os diodos de clamping não faz muito sentido que sejam diferentes.EDIT: já viste o BAT54S? Tens os.2 diodos no mesmo package
Para proteção de entradas eu gosto mais de em vez  de ligar ao micro com muita proteção mas "direto", passar por um NPN que liga ao micro. A base de um NPN aguenta com muito mais abuso que os MOS de um micro, e se pifar é fácil de diagnosticar e substituir.
Os 12V do ULN devias ir buscar depois do fusível, ficas melhor protegido que com o zenner e poupas um componente.
« Última modificação: 07 de Fevereiro de 2021, 16:48 por jm_araujo »

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #2 em: 08 de Fevereiro de 2021, 09:37 »
Bom dia,
Inicialmente fiz com 1n4148 mas depois passei bat54 e não troquei os debaixo.
Aqui na protecção é que li no eevblog e uns documentos da littelfuse sobre electrónica automóvel, em que a voltagem inicial gerada no momento pelo motor de arranque pode ter um pico superior 120v, dai ter colocado o diodo tvs a entrada.

Das depois pensei sobre também proteger a entrada dos adc que também ficam ligadas aos 12v, e encontrei quem usa-se diodos tvs mas recomendavam os diodos clamping ou com 1n4148 os bat.
 
Em relação ao diodo uln2303 é para fazer com anulação freewheeling diode, se calhar até nem perciso pois é só relays que vai actuar.

 

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #3 em: 28 de Fevereiro de 2021, 22:37 »
A pcb já esta a ganhar forma 6.5 x 5.1cm, pensei que fosse pior.
Feito no easyEDA  que mais gostei foi  simulador 3d.

Fotos em anexo

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
Re: localizador carro.
« Responder #4 em: 03 de Março de 2021, 19:17 »
Aqui na protecção é que li no eevblog e uns documentos da littelfuse sobre electrónica automóvel, em que a voltagem inicial gerada no momento pelo motor de arranque pode ter um pico superior 120v, dai ter colocado o diodo tvs a entrada.

O zener D12 (12V) não vai fazer nada a não ser queimar quando for ligado em paralelo á bateria.
A mim o que está em falta é uma resistência de baixo valor em série com os 12V, mesmo assim não colocaria um zener.

A seguir, um conversor dc/dc estável, é que a linha de alimentação pode ser bastante ruidosa.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #5 em: 10 de Junho de 2021, 09:10 »
O step-down ACT4070 segui o datasheet, e como estava la um esquema tipico 5v 3A e uma tabela para outras voltagens, então montei 5v 3A com os mesmos componentes.

Liguei-lhe os 12v e a saída esta-me a dar 7.45v. Meti um led com uma resistência 100R. mas a voltagem manteve se.

Porque será que os valores nao bateram certo, será por nao ter consumo, ou o led nao foi suficiente?

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #6 em: 17 de Julho de 2021, 21:42 »
Bem mandei fazer a pcb na jlcpcb e nem chegou a 2 semanas e já tinha em casa. Para mim veio com uma qualidade muito top.
No entanto a eeprom que projectei ficou sem stock que era a : AT45DB161E e procurei em todo o lado e sem stock.

Fui ao ebay mandei vir o  at45db011b-su aparentemente só com 1Mb. Agora que olho para o datasheet a algumas coisas diferentes.
Este trabalha com paginas de 256 bytes, nao tem Manufacturer ID nem chip id que dificulta o teste, se estou a comunicar certo com a eeprom ou não.
Como tenho um código/projecto de  ler ids depois escrever um texto e voltar a ler esse texto AT45DB161E , agora para o at45db011b-su nas page address sao diferentes.

A minha duvida é como adapto o pageAddr com Shift Operators para a nova eeprom. E que andei a ver o datasheet para tentar perceber onde foram buscar o 0xFE e 0x1F e nao encontrei nem percebi nada.


Citar
uint8_t wcmd[4];
// opcode
wcmd[0] = 0x82; // 0x82 for buffer 1

// for 512 bytes/page chip address is transfered in form:
 wcmd[1] = (pageAddr >> 7) & 0x1F;
 wcmd[2] = (pageAddr << 1) & 0xFE;
 wcmd[3] = 0x00;

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #7 em: 05 de Setembro de 2021, 11:14 »
Continuo a luta com o dataflash, há alguma coisa que me esta a escapar mas já virei o Google inteiro e não encontro nenhum exemplo pratico.

AT45DB011B-SU no datasheet do site mouser pagina 27. Tenho 2 maneiras de para gravar os dados.
Ou por buffer  e depois mando gravar para a main memory  ou escrever directamente na main memory.  E no final dizer se auto page rewrite  apaga a pagina previamente ou escreve logo  por cima .

Agora o que acontece é que escrever no buffer e voltar a ler consigo sem qualquer problema.
Gravar do buffer para a  main memory depois desligar o hardware voltar a ligar e correr:
 main memory para o buffer e voltar ler buffer aparece  tudo a 255.

No entanto as transmissão spi com os comandos nao me retorna nenhum erro.

Anexo o codigo


Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.105
Re: localizador carro.
« Responder #8 em: 13 de Setembro de 2021, 21:00 »
Só agora é que reparei neste tópico  :o

Tanto o AT45DB161E como o AT45DB011B-SU são memórias FLASH e não EEPROM, embora este último tenha uma emulação eeprom para comunicação caso se pretenda.

Pelo menos a identificação do chip deves conseguir ler, 3 bytes, antes de prosseguir.
Agora que li melhor os comandos, a memória de 1M não apresenta ID... coitadinho deve ser órfão

Os comandos parecem semelhantes, apesar de terem nºs de sectores, blocos, páginas e bytes por página diferentes, o que implica uma revisão no código.

Montei há pouco tempo em breadboard um programador de flash para clonar uma memória https://sourceforge.net/projects/flashprog/

Funciona perfeitamente, apesar de ser muiiiito lenta 1MB/Min, entretanto faz o serviço, também lê a assinatura (se tiver LoL)
Antes de gravar qualquer memória, esta tem de ser apagada, parcialmente ou na totalidade.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #9 em: 12 de Fevereiro de 2022, 17:34 »
Já consegui finalmente comprar 4x AT45DB041E, depois de muita procura e demora.

No entanto já consegui identificar por software o manufacturer and memory family. E consigo ler e escrever para o buffer1 e buffer2.
Claro que o lib foi da net um pouco adaptada.

Agora a minha dificuldade está em guardar do buffer para a memoria, isto porque consigo guardar e ler para a pagina 0 e pagina 1 , mas depois se for para a pagina 3 para a frente consigo escrever mas ao ler nao le nada.

Será que o AT45dbxx_WritePage(buffer, 6, 3); não basta só por o numero da pagina?

Código: [Seleccione]
void at45db_test(void)
{
uint8_t msg[6] = "123abc";

uint8_t  buffer[254]={0,};

printf("Escrita no buffer\r\n");
FlashBuffer1Write(0,6, msg);
FlashBuffer1Read(0, 6, buffer);
HAL_Delay(250);

printf(" leitura Pagina buffer: %s\r\n", buffer);
AT45dbxx_WritePage(buffer, 6, 3);
printf("Escrito em memoria\r\n");
}

void at45db_test2(void)
{
uint8_t  buffer[254]={0,};

PageToBuffer1(3);
HAL_Delay(250);
FlashBuffer1Read(0, 254, buffer);
printf(" Pagina  lida: %s\r\n", buffer);
printf("fim de leitura\r\n");

}


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.731
  • Helpdesk do sitio
Re: localizador carro.
« Responder #10 em: 13 de Fevereiro de 2022, 20:07 »
Por defeito a página de buffer tem uma dimensão de 264 bytes, e não 254, e para escrita tens de escrever 256 bytes ou 264, é logo na página 2 da datasheet:
https://www.dialog-semiconductor.com/sites/default/files/2021-03/DS-AT45DB041E-8783.pdf

Agora a pergunta parva, porque não utilizar um 24Q64FV que é muito mais comum, mais barato e tens montes de código funcional na net? Para além de que pelo preço desse AT45 de 4Mb compras 64Mb..

Mas diria que alterando o .h para que o manufacturer e family batam certo este código devia funcionar:
https://github.com/SodaqMoja/Sodaq_dataflash
« Última modificação: 13 de Fevereiro de 2022, 20:08 por senso »
Avr fanboy

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #11 em: 20 de Fevereiro de 2022, 22:04 »
Mas já fiz tanta coisa que acabou por alterar para 256. O resultado que dá na indentificação é
Citar
manufacturer: 1f devid1: 24 devid2: 9f
capacity: 04 Mb
Shift: 0 PageSize: 256

Agora segunda questão é as paginas tanto o read como write o esquema é at45db_writepage(dados,tamanho,pagina)
Se escrever na pagina 1, 2, 3 e voltar a ler só vejo o texto partido com menos 1 letra do lado esquerdo conforme o numero da pagina.
Mas depois lembrei-me se a pagina 0 vai do 0 até 255 e pagina 1 dos 256 até 512 e assim sucessivamente a pagina 2048 vai ser 524032.

Entao escrevi na pagina 256 e 512 e 768 (equivalente a 1 , 2 e 3) depois li novamente e os textos bateram certos.  Na pagina 2 repeti a letra "a" 255vezes e tanto pagina 1 e 3 continua certas. Desliguei o hardware 5minutos e voltei a ligar e continua a ler certo.Tambem exprimentei a 2048 e funcionou.

Então porque é que no código abaixo que é parecido com outros códigos que esta pelo google fora, chamam-lhe pagina quando na pratica é um endereço de inicio de pagina poderiam ter chamado algo como start_address.

Ou isto não funciona assim e é pura sorte estar a dar resultado certos nas primeiras paginas?

Código: [Seleccione]
void at45db_writepage(uint8_t *Data,uint16_t len,uint16_t page)
{
at45db_resume();
    at45db_waitbusy();
    at45db_active();
AT45dbxx_Spi(AT45DB_MNTHRUBF1);
AT45dbxx_Spi((page >> 16) & 0xff);
AT45dbxx_Spi((page >> 8) & 0xff);
AT45dbxx_Spi(page & 0xff);
HAL_SPI_Transmit(&hspi1,Data,len,100);
    at45db_deactive();
    at45db_waitbusy();

#ifdef CONFIG_AT45DB_PREWAIT
    at45db_waitbusy();
#endif
 printf("Written\r\n");
}



Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.028
Re: localizador carro.
« Responder #12 em: 06 de Março de 2022, 16:58 »
Boa tarde,
Esta acontecer uma coisa meio estranha.
Se iniciar o stm32 em modo debug,para ver os printfs  a coisa funciona bem, mas se iniciar só com alimentação externa, não me está a ler os dados do at45db.

Explorei e vi que no at45db_init() nem se quer identifica,  mas descobri que fazendo um reset sem desligar alimentação já identifica e le at45db.

Meti um delay de 10s antes de iniciar o carregamento configurações do dma, spi, i2c, e afins, mas nao resolve.

Só "arrancar" uma segunda vez é que le o at45db.