sexta-feira, 26 de junho de 2015

Versão 2.0 da Placa Fambruino Uno

Finalmente, desenhamos a versão 2.0 da placa Fambruino Uno, ainda em face simples (porque eu quero prototipá-la internamente aqui na FDI antes de mandar fabricar placas de dupla face).
As principais alterações em relação ao modelo 1.0 da mesma placa são:

a) Foram acrescentados mais 2 botões com os respectivos resistores de pull-up ligados aos pinos RA0 e RA1 do PIC18F2550;  Estes resistores podem ser desligados simplesmente retirando-se um jumper da mesma placa e tais pinos podem então ser utilizados como entradas analógicas;

b) Foi acrescentado um sensor LM35 para medidas de temperatura na própria placa.
Com ele, podemos construir um termômetro usando-se os 3 displays da própria placa. O sensor pode ser ligado ou desligado através de um fio na placa.

Segue o lay-out da versão 2.0:


Placa Fambruino Uno, versão 2.0   (26/06/2015)

Como um primeiro exemplo para testar esta placa, escrevi um programa utilizando o compilador CCS, que ilustra como se faz a multiplexação dos 3 displays a LEDs de 7 segmentos, utilizando o própprio padrão da placa. Este exemplo é o mostrado na foto que ilustra o protótipo.

Este programa implementa um contador digital de 000 até 999  no display de Leds da Placa Fambruino:
LINK PARA O PROGRAMA CONTADOR-FAMBRUINO:

Aula 4 - Microcontroladores I - UNISAL

Material referente à AULA 4 - Microcontroladores PIC, curso de pós-graduação em Sistemas Embarcados, Unisal, Campinas.
O assunto desta aula é:
 
1 - Conversor A/D
2 - PWM

para microcontroladores PIC de 8 bits, tomando-se por referência os modelos PIC16F876 e PIC16F877
Link para o material desta aula:  https://drive.google.com/file/d/0B0T8omiWkMq8RVpYRG5od2VCWmM/view?usp=sharing

sexta-feira, 19 de junho de 2015

Placa Fambruino Uno

Sabe o que eu mais detesto no Arduino Uno ?

Não é a IDE (lamentável na otimização do código, diga-se de passagem)  e  sim a falta de periféricos externos ao Microcontrolador.

De nada adianta ter uma plaquinha Arduino UNO sem nenhum  shield.  O aluno ou estudante não faz quase nada com ela.

Como o aluno vai praticar alguma coisa de software (firmware) se para tudo que ele for fazer precisa ter um protoboard do lado e uma grande quantidade de fios e componentes externos ?

Arduino (sozinho) não é bom para o professor ministrar aulas.

Eu queria uma placa que fosse tão simples quanto Arduino Uno, alimentada pela USB, pequena, barata, simples de montar, e já contivesse algum shield on-board, então criei  o Fambruino  UNO.

Pelo menos ai eu posso ensinar um pouquinho de firmware sem depender de shields externos

Apresento-lhes:

A Placa FAMBRUINO  UNO 
Protótipo da Placa Fambruino Uno - Versão inicial, ainda em placa de fenolite face simples.


Croqui mostrando a distribuição dos componentes:
                                                 Lay-out e distribuição dos componentes

Lay-out da versão beta (protótipo) ainda em placa de face simples:
                                                 Lado cobreado - Placa Fambruino Uno

Baseada no  microcontrolador PIC18F2550, com bootloader que não precisa de fírulas... reset no endereço 0x00  e interrupções no endereço 0x04

Baseada no conceito do Arduino UNO, mas conta com 3 displays a LED multiplexados on-board.

Ideal para ensinar:

a) Multiplexação de displays;
b) Separação dos 3 digitos por software;
c) Como se faz um contador de 000 até  999;
d) Como se faz um frequencimetro de 0 até 999 Hz;
e) Como se faz um voltimetro digital de 0.00 até 5.00 V;
f)  Como fazer um medidor de temperatura (para isso é necessário acrescentar um sensor externo);
g)  Como se lida com ponto flutuante em Assembly
h) Enfim, boa para ensinar C ou Assembly de PIC18F

Um Arduino (com PIC) + um shield de 3 displays multiplexados a LED on-board, com bootloader e baseada no PIC18F2550.

Testando Bootloaders para PIC18F2550

Desenvolvendo um  pequeno e simples kit didático baseado no microcontrolador PIC18F2550, testei diversos bootloaders para ver qual seria o mais adequado.

Para quem não não sabe, bootloader é um simples programa (código .HEX) que deve ser gravado previamente num microcontrolador de modo a permitir a programação simples e rápida via USB.
Somente bootloaders via USB foram testados, embora existam também outros bootloaders que funcionam através da porta RS-232.  Todos os bootloaders testados funcionam com cristal de 20MHz no microcontrolador PIC18F2550.

1) O primeiro bootloader que eu testei 
 não funciona em Windows 7   64-bit
Testei no Windows 7  32-bit e funcionou perfeitamente;

2) O segundo bootloader que eu testei 
precisa de um botão que aterra o pino RB4 e de um resistor de pull-up no pino RB4.  Meu hardware original utilizava o RB4 para outra coisa e era mantido sempre em nivel baixo.
Bastou colocar este botão e o problema foi resolvido.
este funciona em todos os windows.

3) O terceiro bootloader que eu testei é fornecido pela própria Microchip e trabalha juntamente com o HIDLoader.exe
Este também precisa do botão no pino RB4 e de um resistor de 10K de pull-up neste mesmo pino.  Foi só colocar o botão e o problema foi resolvido

4) O quarto bootloader que eu testei também é provided by Microchip
 e utiliza o loader  chamado  PDFSUSB.exe  mas também precisa do resistor e do botão no pino RB4.  Sem ele, nada feito !

5) O quinto bootloader que eu testei é o bootloader do programa PINGUINO. 
Instalei o Pinguino, carreguei o Firmware do bootloader do Pinguino.
Funciona sem nenhum botão e independente do pino RB4.
Mas só serve para gravar o .HEX gerados na IDE do proprio PINGUINO ou seja, é Arduino-like (usa o famoso C-Wiring igual do Arduino).

6) Não consegui usar o SanUSB. 
http://www.cienciasecognicao.org/pdf/v14_3/m254.pdf
Por algum motivo, o dispositivo não é reconhecido na minha máquina, mesmo atualizando o JAVA 64-bit. Não insisti muito (desisti logo) porque os anteriorer já me atenderam.

Todos funcionaram (à exceção do 6, que eu tenho que insistir mais).
Gostei mais do (4) por ser mais curto em termos de código.
Mas eu não gostei de ter de usar um botão (ou jumper) no pino RB4 e agora vou modificar este código para eliminar isso.

Agora, vejam o que eu achei:

O John Main publicou um ebook justamente sobre Bootloaders de alta performance.
Um colega que adquiriu este ebook me contou que o John indica o Tinybootloader neste livro, que é um bootloader desenvolvido para uma ampla linha de microcontroladores.  Vocês podem encontrar este bootloader neste endereço:
http://tinypicbootload.sourceforge.net/

Este eu ainda não testei, mas pretendo fazê-lo em breve, e assim que o fizer, postarei os resultados aqui.

Outra dica é testar também o bootloader fornecido pela MikroE, dica do meu colega Orcino:

O Bootloader da Mikroe é  excelente !

Muito rápido e eficiente.

Porém, existe uma pequena incompatibilidade (fácil de resolver) entre um .HEX gerado pelo compilador da CCS  e este bootloader da Mikroe;

Eu explico:

Quando geramos um arquivo .HEX usando o Compilador PCWHD da CCS, no final do .HEX ele acrescenta o seguinte cabeçalho de finalização:
-----------------------------------------------------------------------------------------------
Exemplo de .HEX  gerado pelo compilador CCS:

0A08A0008B9492988998CDD703003D
:020000040030CA
:0E000000000C181E008381000FC00FE00F409F
:00000001FF
;PIC18F2550
;CRC=AD92  CREATED="18-jun-15 17:31"
------------------------------------------------------------------------------
(O grifo em vermelho é meu).

Quando tentamos abrir o código HEX  gerado pelo compilador CCS no bootloader da Mikroe  (http://www.mikroe.com/startusb/pic/#startusb_pic_bootloader )  ele gera o seguinte erro:

                                  "$PI is not a integer value"

e o código não pode ser carregado no bootloader.


Como corrigir isso ?

É simples, basta abrir o .HEX gerado pelo CCS no bloco de notas e eliminar as duas últimas linhas (justamente aquelas marcadas em vermelho no exemplo acima)  e tudo funcionará perfeitamente !

Este bootloader não necessita de nenhum botão no pino RB4 e é mais rápido do que o da Microchip, porém:

a)  ocupa um pouco mais área de código no PIC18F em relação aos  citados anteriormente;

b)  além disso usa um cristal de 8 MHz (diferentemente dos outros que usam um cristal de 20 Mhz no PIC).

E como principal vantagem: Não exige nenhum desvio especial no código escrito em C, você pode colocar seu código normalmente a partir do endereço  0x00  e seu vetor de interrupção pode ficar no lugar correto: endereço 0x04  do PIC.

No mais, este bootloader da MikroE é um dos mais estáveis e rápidos que eu testei.

Foi este bootloader que eu escolhi para equipar a Placa Fambruino, descrita em outro post.

sábado, 13 de junho de 2015