sábado, 27 de maio de 2017

Gravador de memórias Flash seriais com o IC CH341A.

         Em um dos meus pedidos de bugigangas eletrônicas na Aliexpress, comprei este gravador de memórias Flash seriais (I²C das series 24xx e SPI das series 25xx) com o IC CH341A. Ele usa uma porta USB e suporta várias memórias de vários fabricantes. Ele usa um aplicativo específico: o CH431A Programmer, cujo .ZIP já vem com os drivers inclusos.


CH431A Programmer.
CH431A Programmer selecionado para memórias flash I²C da série 24xx.
CH431A Programmer selecionado para memórias flash SPI da série 25xx. Note que neste modo, há um botão que auto-detecta a memória, nocaso, uma MX25L6408D (8 megabytes) da MXIC.
Há também uma interface para procurar manualmente o modelo de memória.

        O uso do CH431A Programmer é intuitivo e muito simples. Basta inserir a memória no soquete de acordo com a marcação da placa e depois inserir o programador numa porta USB.



Placa do programador.

Lado inferior da placa do programador.

Placa adaptadora que veio junto. Soldei uma memória SPI para testar.

MXIC 25L4005A que testei.

24LC02 que testei.

quarta-feira, 24 de maio de 2017

Raspberry Pi 3.

Com o preço do computador da framboesa caindo a menos de R$200,00, resolvi comprar um.

Caixa.

Folheto informativo.

Vista superior da placa do Raspberry Pi 3.
Vista inferior da placa.

Adaptador USB/PS2, para usar um teclado e mouse PS2 no Raspberry Pi 3.
Tela com o prompt de comando após o login automático
Interface gráfica PIXEL.


Alimentação:

Assim como no servidor de arquivos, usei outra fonte igual e com a mesma modificação.
Para medir a energia consumida, usei o medidor com o INA260 (ver post sobre o mesmo).

Raspberry Pi 3 ligado à fonte de alimentação modificada. Note o medidor de corrente/tensão com o INA260.
Raspberry Pi 3 consumindo máxima potência. Note que a corrente fico um pouco maior que 500mA. Não foi usado overclock e o SoC aquece pouco.

Raspberri Pi 3 ocioso. Ajustei, através do 'config.txt', o clock quando ocioso igual a metade do normal (600Mhz)
Raspberry Pi 3 após comando 'shutdown'. Note que a corrente caiu bastante.

Armazenamento:
Os primeiros Raspberry Pi (Revs 1 e 2, models A e B) usam um cartão SD, já o Raspberry Pi3 usa µSD. Comecei a fuçar no RPi3 com um cartão µSD de 8GB classe 4 que era o único disponível no momento. Já sabia que usar um cartão lento comprometeria o desempenho mas foi pior do que achava: o Raspberry Pi3 ficou mais lento que o Raspberry Pi1 usado no servidor de arquivos (ver o post Servidor de arquivos com o Raspberry Pi). Comprei um tempo depois um µSD classe 10 de 8GB com taxa de leitura de 45mB/s e de procedência legítima. Foi da água para o vinho. Agora o Raspberry Pi3 roda a nova interface gráfica PIXEL com desenvoltura. Não economize no cartão microSD, pois compromete o desempenho, muito mesmo.
Medi os tempos de inicialização com os dois cartões:
Tempo de inicialização até Inicialização da interface
o login em modo texto gráfica:
µSD Classe 4 60s 120s
µSD Classe 10 48s 42s


Cartão classe 4 à esquerda e o classe 10 à direita.
Adicionando o Realt Time Clock (RTC) e configurando-o no Raspibian:
Assim como Raspberry Pi1 usado no servidor, usei no Raspberry Pi3 um RTC baseado no IC DS3231. Há RTCs baseados no IC DS1307 mas recomendo usar este com o DS3231, pois é muito mais preciso e compacto, pois o mesmo tem o cristal de quartzo integrado.

Vista superior da placa RTC com o DS3231.
Vista inferior. Note que a bateria de lítio não é recarregável.

Placa do RTC encaixada no barramento I²C do Raspberry Pi 3.

Configurando o RTC no Raspibian:

  • Baixe a útima versão do Raspibian (Raspbian Jessie with PIXEL). Usei a de abril/2017
  • Faça a atualização completa:
$ sudo apt-get update && sudo apt-get upgrade -y

  • Adicione a seguinte linha ao final do arquivo /boot/config.txt
dtoverlay=i2c-rtc,ds3231

  • Reinicie o Raspibian.
  • Remova o fake-hwclock pois não será mais necessário:
$ sudo apt-get purge fake-hwclock

  • Ajuste a data (exemplo)
$ sudo date -s "17 MAY 2017 10:10:00"

  • Atualize o RTC com esta data:
$ sudo hwclock -w

  • Ajuste o fuso horário (opcional) ou faça isso quando iniciar o Raspibian pela primeira vez:
$ dpkg-reconfigure tzdata

  • Adicione a linha a seguir no arquivo /etc/rc.local, logo acima da linha “exit 0”:
/sbin/hwclock -s

  • No arquivo /etc/init.d/hwclock.sh, mude o parâmetro "HWCLOCKACCESS" para "no":
HWCLOCKACCESS=no


Configurando o Wi-Fi:
Uma grande vantagem do Raspberry, além do SoC quad-core, é ter o módulo Wi-Fi/Bluetooth integrado. E mais, tal módulo é conectado em uma interface própria no SoC, não no hub USB2.0 onde a interface Ethernet é conectada, dividindo a banda com as quatro portas USB.

Com o comando a seguir, é listado as redes Wi-Fi disponíveis:
# sudo iwlist wlan0 scan

Edite o arquivo "/etc/wpa_supplicant/wpa_supplicant.conf", adicionando no final deste estas linhas:

network={
    ssid="ESSID do roteador"
    psk="senha do roteador"
}

Onde "ssid" é o nome da rede e "psk" é a senha de acesso.
Exemplo:
network={
    ssid="Wi-Fi de casa"
    psk="123456"
}


Em breve mais post sobre este Raspberry.





Microcontrolador MSP430FRxxxx com memória ferro-elétrica (FRAM).

        Estava muito curioso com a tecnologia de memória ferro-elétrica (FRAM) usada nos novos microcontroladores MSP430FRxxxx. Não entrarei em detalhes sobre esta tecnologia pois está bem explanado no site da Texas Instruments.
        Esta memória tem muitas vantagens sobre a memória Flash:
• Escrita na FRAM não necessita de preparação ou procedimentos como o apagamento das células de memória antes da escrita;
• FRAM não é segmentada, pode ter cada bit individualmente alterado;
• Escrita na FRAM requer pouca energia pois não necessita de um charge pump.
• Escrita na FRAM pode ser feita em toda a faixa de tensão de operação do microcontrolador (1,8V~3,6V);
• Velocidade de escrita da FRAM típica de 2MBps enquanto a FLASH fica em 14 kBps;
• FRAM tem uma quantidade de escritas muito maior que a FLASH, praticamente ilimitada (10^15 ciclos de escrita!).
        A única desvantagem, por enquanto, já que é uma tecnologia muito recente, é o tempo de acesso de leitura: um microcontrolador operando a 16MHz deve-se adicionar um wait-state ao acesso da FRAM que opera até 8MHz.
  O LaunchPad MSP-EXP430G não é compatível com esta família, assim tive que comprar o LaunchPad MSP-EXP430FR2311, que vem com um MSP430FR2311 soldado à placa. Também obtive mais dois MSP430FR2311, dois MSP430FR2111 (o mais simples da família) e dois MSP430FR2632 (com 2k de memória RAM para acionar o Sharp Memory LCD, tema de um próximo post).
LaunchPad MSP-EXP430FR2311.
Vista inferior. Adicionei os quatro postes com parafusos M3.
        Comparados com os membros de baixo custo MSP430G2xxx, os MSP430FR2xxx possuem mais opções de periféricos (que são mais complexos e elaborados), mais modos de economia de energia, mais opções de controle interno e mais RAM.

Adaptadores
        Os MSP430FRxxxx só estão disponíveis em encapsulamento SMD, assim para aproveitar as placas de desenvolvimento que havia montado, tive que criar adaptadores DIP, mantendo ou adaptando a pinagem para a do MSP430G2553 e G2231. Nestes adaptadores, foram adicionados dois capacitores de 12pF para o cristal de quartzo, pois a família FR não os têm internamente. Também foi adicionado um capacitor na alimentação de 1uF.
MSP430FR2311 montado no adaptador DIP, com a pinagem modificada/adaptado para ser compatível com o MSP430G2553 na placa de desenvolvimento com interface I²C.
MSP430FR2111 montado no adaptador DIP, com a pinagem modificada/adaptada para ser compatível com o MSP430G2231 na placa de desenvolvimento com interface SPI (a eUSCI do FR2111 não tem interface I²C). Note que os terminais P2.0 e P2.1 não foram usados para caber num DIP-14.


Usando o LaunchPad MSP-EXP430FR2311 para debug/programação externa
        Assim como no MSP-EXP430G, fiz um cabo Spy-by-Wire para debug/programação externa das placas de desenvolvimento.
Cabo Spy-by-Wire para programação das placas de desenvolvimento.
LaunchPad MSP-EXP430FR2311 com o cabo Spy-by-Wire ligada à placa de desenvolvimento.


Oscilador interno (Clock System - CS)
        O módulo de clock (Clock System) da família FR é bem mais complexo que o da G. Há muitas opções mas só uso duas:
  • A primeira opção, é baseada no oscilador calibrado interno REFO (32768Hz +/-3,5%)  cuja frequência é entregue a um PLL multiplicando-a  para fornecer aproximadamente 16MHz.
P1.1 como saída do ACLK. Este clock vem diretamente do oscilador interno REFO. Note que a frequência está dentro da tolerância. 
P2.6 como saída do MCLK (REFO multiplicado pelo PLL).
P1.0 como saída do SMCLK (MCLK/8).

  • A segunda opção, é parecida com a primeira, mudando apenas o tipo de oscilador, onde é usado um cristal de quartzo de 32,768kHz, cuja frequência também é multiplicada pelo PLL, muito mais precisa e estável. Achei fantástica esta opção, pois consome muito menos energia que um oscilador com cristal de 16MHz e ainda se tem uma base de tempo de 32,768kHz.

P1.1 como saída do ACLK. Este clock vem diretamente do oscilador com cristal de 32768Hz. Note que o valor é muito próximo e muito estável.
P1.0 como saída do SMCLK (MCLK/8). O MCLK não pode ser disponibilizado pois a saída já é utilizada pelo oscilador com o cristal de quartzo.

        No próximo post falarei sobre a eUSCI acionando os displays OLEDs.