Category: Trabalho

As novas placas do alimentador de cachorro chegaram

Como os meus amigos sabem, estou desenvolvendo desde o ano passado um projeto de um alimentador de cachorro em parceria com uma empresa aqui de Belo Horizonte.

Hoje ao chegar em casa encontro um pacote com as 10 placas que havia solicitado para serem fabricadas na Griffus (note o GFF de Griffus e a data 51-14 nas imagens abaixo), ao custo total de ~R$ 500,00.

Na segunda imagem resolvi colocar o conector de ethernet (Mag45) para ver se estava tudo correto, tudo certo! Como se trata de um projeto comercial não posso dar muitos detalhes, apenas posso dizer que o projeto usa um uC STM32 rodando NuttX e que a placa foi totalmente projetada usando software livre (KiCAD).

placas

placa_mag45

Advertisements

Descobrindo a raiz quadrada com metodo Newton Raphson

Hoje precisei relembrar o processo de achar raiz quadrada. Existem várias tecnicas, uma mais chata que a outra. Eu prefiro usar a aproximação de Newton Raphson:

Xi = (Xo² + N) / 2 * Xo

vamos calcular a raiz de 27:

Sei que o número elevado ao quadrado mais proximo de 27 é 5, pois (5 * 5) = 25 e (6 * 6) é 36.

Então nosso Xo é 5

Xi = (5² + 27) / 2 * 5

Xi = (25 + 27) / 10 => 52/10 => 5,2

Agora nosso Xi (5,2) se torna o Xo da próxima aproximação:

Xi = (5,2² + 27) / 2 * 5,2

Xi = (27,04 + 27) / 10,4 => 54,04/10,4 => 5,196

Assim 5,196 já é uma boa aproximação para a raiz de 27.

Please Google make Android development a really Community Developed Open Source Project

This week we hear about Google could be violating GPL license, then I cannot do without talk about it.

Despite the fact Android be an opensource project, it is not ruled by opensource standard as the Linux kernel. Android was/is developed behind closed doors and the android-contrib mailing list is there just to say “Google wants external contribution”. Removing all existent open-source project that Google used to create Android, I’m sure more than 99% of its code is exclusively developed in the closed door way.

Some people could say Google is developing this way to avoid Apple or Microsoft copying new technologies introduced on Android, but it is not true. Sooner or later they could implement these new features in their system. This is the natural way and this is how the things work.

Android is a really a great system, probably superior to iOS and WinMob, but it could improve if Google decide to develop it really as a Community Developed Free and Open Source Software (CODEFOSS).

Diario de bordo: Linux Embarcado na China

Hoje esta’ completando duas semanas que estou em Beijing.China trabalhando na inicializacao do hardware de nosso novo disposito. A placa deste novo dispositivo esta muito mais estavel que a do modelo anterior, sinal de que desta vez eles fizeram um trabalho melhor.

A inicializacao da memoria foi tranquila, utilizei um JTAG Abatron BDI3000 e consegui inicializar o processador e a memoria sem nenhum problema. O passo seguinte foi inicializar o bootloader (U-Boot) direto da memoria RAM, em principio imaginei que nao teria nenhum problema, pois eu ja havia feito isso varias vezes antes na placa de avaliacao da Freescale (FSL p/ intimos). Mas nao e’ que isto comeca a garrar! Perco quase um dia tentando fazer isso funcionar e nada, eu nao precisava de manual, afinal eu estava seguro que estava fazendo tudo certo, como disse antes, quando voce faz uma coisa varias vezes voce sempre tem certeza que esta certo.

Entao lembrei que eu havia documentado o procedimento no site http://www.imxdev.org, na duvida nao custa nada conferir ne? E eis que descubro a falha trivial, eu confundi o endereco de carga da memoria, estava colocando 0x98000000 e era 0x97800000. Caramba que vacilo, tambem quem manda confiar na memoria, estou ficando velho, rs.

O proximo desafio seria ainda mais cruel, com o bootloader inicializado estava na hora de ativar o suporte a NAND Flash no U-Boot e, com ele inicializado pela RAM, gravar sua copia direto na flash. E mais uma vez Edsel Murphy estava certo, ativando a NAND Flash a inicializacao do U-Boot para no momento de deteccao dela. Depois de um dia inteiro debugando, resolvi contactar meus amigos na FSL Brasil e saber “o que ta pegando”. Teoricamente ninguem sabe e ninguem viu nada desse tipo, mas reza a lenda que se voce for bootar pela NAND voce deveria colocar resistores de pull-up nos em todos os pinos NANDF_RBx (Ready/Busy). Isto e’ um BUG no controlador de NAND, documentado na Errata ENGcm11004.

Como no meu caso nao estou bootando pela NAND, estou carregando o U-Boot para RAM via JTAG e partindo de la’ entao este problema nao deve me afetar. O cara que projetou a placa tambem contactou o suporte da FSL China e mais uma vez eles sao enfaticos: o problema so existe para quem esta bootando da NAND. E la se vai mais um dia. Entao meu amigo da FSL Brasil confirma o problema: mesmo se nao tiver bootando da NAND precisa de colocar os resistores de pull-up. E nao e’ que colocando os resistores a NAND “funciona” (continue lendo para saber o por que das aspas).

Entao com o U-Boot inicializado e a NAND detectada esta na hora de gravar a copia do U-Boot na NAND e mudar o switches para inicializar pela NAND. Tenho duas opcoes para fazer a copia pra a memoria RAM: usar o comando “loady” do U-Boot e fazer a transferia via serial ou usar o proprio JTAG para fazer a copia. Fiz via JTAG, e’ bem mais rapido que via serial. Entao la esta’ o U-Boot gravado na NAND, hora de mudar os switches e … oops, cade o bootloader iniciando pela NAND? Nao pode ser… Confiro novamente todos os switches e tudo certo.

Entao resolvi conferir o conteudo gravado na NAND e ver se estava igual ao que eu havia gravado e infelizmente nao estava. O conteudo parecia seguir uma certa logica com o conteudo original, mas definitivamente eram diferente. Vamos ver, a Errata dizia que os dados poderiam ser corrompidos caso o modo usando fosse RBB_MODE = 1 e ADD_OP = 1. Simples, e’ so eu mudar o modo para RBB_MODE = 0 e pronto.

Nada feito, a lei de Murphy e’ realmente implacavel, descubro a Errata ENGcm09970 que diz que o controlador NAND nao funciona corretamente quando no modo RBB_MODE = 0. “Ah para, ohh”, desse jeito eu vou voltar pra roca pra plantar batatas. Bom, so me resta uma opcao: ADD_OP = 0.

“E’ TETRA!!!, E’ TETRA!!!, O BRASIL E’ TETRA!!!”

Finalmente funcionou!!!

Consigo bootar a placa pela NAND, agora os demais problemas vou deixar para comentar outro dia, com certeza eles nao sao nada perto deste problema da NAND.

Voltando a China, quer dizer, ao tema inicial do post. Nao e’ facil definir este pais, as pessoas, a cultura, etc.
Parece que voce realmente esta em outro planeta. Aqui o traco mais marcante e’ a mistura do velho (milenar) com o novo, da riqueza e prosperidade com a pobreza e sujeira. E’ comum ver nos fundos de construcoes modernas e luxuosas, casas simples que resistem em continuar la’, talvez rejeitando quantias altissimas por elas.

Enfim, todo mundo que vem pra China sempre reclama da comida, mas e’ estranho, nao tive nenhum problema com isso. Ontem mesmo experimentei o tradicionalissimo ovo podre. O gosto e’ muito bom, voce so’ nao deve ficar pensando no que esta comendo e apreciar o paladar. Na minha infacia minha mae morava e trabalha em outra cidade, entao tinhamos que comer a “gororoba” que meu pai fazia. Acho que por isso nao sinto tanta difenca assim 🙂

Este post ja ficou enorme, entao vou finalizando, ainda tenho muito trabalho pela frente.

Economizando nas ligacoes da China para o Brasil

Assim que cheguei aqui na China eu adquiri um SIM Card da China Mobile e descobri que existe uma forma mais barata de fazer ligacoes para telefones fixos no Brasil.

Basta digitar 12593 antes do numero desejado. A ligacao passa a custar 2 RMB por minuto (algo em torno de R$ 0,67). Exemplo: 1259300XXYYYYYYYY, onde XX e’ o DDD do estado e YYYYYYYY e’ o numero do telefone desejado.

Infelizmente esta dica nao funciona para ligar para telefones celulares no Brasil.