domingo, 15 de maio de 2011

SDR a partir de um rádio FM barato.

O texto a seguir e um relato das experiências que  tenho realizado nos últimos meses. Os acontecimentos não tem uma data especifica, e podem conter imprecisões e ou omissões.


O TDA7088T, ou clones como o SC1088, CD9088 e outros, e um chip para recepção de FM que usa uma FI de 70kHz.
Baseado nesse fato, pensei na possibilidade de usar o chip como receptor para SDR. Como tinha um rádio desses, resolvi fazer algumas experiências. Esses rádios custam menos de R$10,00.
Primeira providencia foi obter o datasheet do TDA7088T e identificar os possíveis pontos onde se poderia obter a FI. Os pontos são logo após o mixer (6), após o filtro passa baixas (8) e depois do limitador (15).
 
O primeiro teste foi conectando o pino 15 a entrada de microfone, sem modificar a frequência de sintonia, ao sintonizar foi possível observar um sinal passando no espectrograma, ou o nível de ruido aumentando, que seria a baseband de FM. Possivelmente, se possui-se um ADC com banda passante de 200kHz, seria possível demodular o sinal.
A seguir tentei modificar a frequência do oscilador local para alguma banda em que exista modulação AM ou NBFM, essas tentativas foram infrutíferas, ou o oscilador não oscilava ou não era estável ou frequência desconhecida.
Em seguida, experimentei um oscilador externo, em ~440kHz, conectado ao pino 4 do TDA7088T, e a entrada de antena (11) a FI de 455kHz de um rádio AM/OC. Sucesso, ao sintonizar o rádio em uma emissora AM local (sinal forte) um pico por volta de 13KHz apareceu no espectro, e foi possível fazer a demodulação AM, mas, o ganho excessivo estava acionado o limitador e prejudicando a faixa dinâmica em amplitude, reduzir o sinal de 455kHz melhorou a qualidade da demodulação (maior volume). Montei esse circuito de forma permanente.
Conversor de 455kHz para 12kHz
Esquema do conversor de 455kHz para 12kHz



Um outro dia, comprei um receptor FM/AM com intuito de reaproveitar o capacitor variável (que não se encontrava no comercio local), e como a parte de FM usa o CD9088, tentei novamente usar o oscilador local, novamente sem muito sucesso.

Recentemente, revisitando sites do bookmark, encontrei isso:
http://www.hanssummers.com/poundshop.html#
Que são instruções para usar o TDA7088T como receptor de 40m em AM.
A leitura do texto me mostrou o motivo de não ter conseguido uma sintonia estável, ou de achar que o oscilador não estava funcionando.
O problema e o circuito de FLL, que tem como objetivo comprimir a baseband de FM afim de ficar compatível com a FI de 70kHz. A sugestão do texto e usar um capacitor de grande valor no filtro de loop (3), experimentei um de 47uF. E o tanque LC configurado para oscilar em por volta de 6MHZ (L=12uH). Dessa vez, ao sintonizar uma emissora, a frequência começou a variar lentamente (além da instabilidade do oscilador), deve ser o FLL em funcionamento. Analisando o diagrama interno do TDA7088T, o FLL poderia ser desabilitado cortando o áudio completamente, isso pode ser feito colocando o pino 3 em +v ou gnd, coloquei em +v, curto circuitando o capacitor, em gnd corta também o mixer.
Com essa modificação, o FLL não mais atua, e consegui sintonizar uma emissora em 49m. Mas o oscilador continua instável, provavelmente devido a condição da montagem improvisada. O ganho em RF em muito baixo e apresenta muito ruido, não servindo para escutar estações fracas, nada de QRP. Talvez usando um amplificador de áudio de baixo ruido e usando a entrada line-in, o nível de ruido melhore.
Modificação para 40m
Comprei um novo rádio FM, dessa vez com o intuito de sintonizar a banda de 2m, e ser portátil. Esse usa o SC1088.
Rádio FM de sintonia eletrônica

Que teve, a etapa de áudio modificado para ser um pré-amplificador do sinal que vem do pino 15, indutores de desacoplamento da antena removidos, jack para o fone reconfigurado, sintonia eletrônica desabilitado pondo o pino 16 no GND, potenciômetro de volume modificado para ser um divisor de tensão e atuar como sintonia, o cursor do potenciômetro foi ligado ao resistor que anteriormente estava no pino 16. Bobina do oscilador trocado por um com menos voltas. Por falta de um frequencímetro que cubra VHF, não tenho ideia em que frequência esta oscilando, não consegui sintonizar quase nada, só coisas que se parecem com estação FM ou áudio de TV, distorcidos. Resolvi voltar a bobina original, e ver se conseguia sintonizar algo, não deu muito certo.
Como não modifiquei o filtro passa baixa e o passa banda, a FI deve estar optimizado para algo torno de 70kHz. Para verificar isso, precisaria amostrar a mais de 140kHz, não tenho uma placa de som com amostragem a 192kHz (96kHz de banda). Mas, a placa de TV (bt878) tem um ADC que chega a 448kHz, ou seja, 224kHz de banda, mas o funcionamento desse ADC e um pouco temperamental. Reconectei os cabos para a entrada do ADC da TV, e realmente, o sinal esta mais forte em torno de 80kHz. Consegui sintonizar algumas emissora locais de FM, com distorção, e o áudio do canal 6 (TV) sem distorção (ou pouca). O meu computador não tem potência suficiente para processar a largura de banda exigida para WBFM, motivo da distorção, a FM da TV tem profundidade de modulação menor que a de FM.
Algumas modificações
No CD1088, aparentemente existe um filtro passa alta, com corte de uns 40dB em aproximadamente 1kHz, e 5dB lá por 20kHz, ou seja, existe um grande atenuação para frequencias abaixo de 20kHz. Mesmo removendo (ou desacoplando) os filtros, esse passa alta não muda. Com o CD9088 isso aparentemente não ocorre.
O filtro passa baixa pode ser reconfigurado para outra frequência, mudando os capacitores do fitro "Sallen-key", capacitor entre o pino 6 e o 8, eo capacitor do pino 7. Com 22nF e 1nF a frequência de corte fica em 33kHz.

Não tenho um outro hardware para SDR similar para dizer se os resultados obtidos com a modificação do rádio FM são bons ou ruim. Comparado com o QSD I/Q o desempenho e muito ruim.


quarta-feira, 11 de fevereiro de 2009

Gravando uma PEROM

As flash PEROM (Programable Erasable Read Only Memory) podem ser gravados por circuitos tão simples quanto o necessário para a sua leitura, necessitando de uma alimentação de 5V e da sinalização de gravação.
Devido a essa simplicidade, muitos aparelhos eletrônicos, como placas de computador, tem a capacidade de atualizarem o firmware sem a necessidade de remover o chip (Circuito Integrado) e colocar-lo em um gravador próprio, como no caso das EPROM tradicionais.
Placas mães e algumas placas de rede possem esse recurso, no caso da placa mãe e necessário, trocar de chip a 'quente', ou seja, remover o chip que contem a BIOS e colocar o PEROM que deseja gravar. Uma operação que pode danificar as partes envolvidas. Recomenda-se usar uma placa mãe que não esteja sendo usada.
Para fazer a gravação pode se utilizar o software de atualização de bios do próprio fabricante, ou então o Uniflash (http://www.rainbow-software.org/uniflash/)
Um demostração desse método pode ser visto neste vídeo:


Um outro meio de gravar uma flash PEROM e usando uma placa de rede, como as que usam o chip da Realtek RTL8139 versões A, B e C, muito comuns e baratas. A versão D (RTL8139D) teve essa e outras funcionalidades removidas.
Os fabricantes de placas, para economizar míseros centavos, usam um soquete de 28 pinos em vez do de 32 pinos, necessário para a gravação, ou quando e de 32 pinos, não fazem a trilha do sinal de gravação.


A placa com o soquete de 28 pinos precisa ser modificada para poder efetuar a gravação, para tanto e necessário substituir o soquete por um de 32 pinos, será preciso dobrar os pinos adicionar, ou se a placa permitir, fazer furos extras. Ou montar o soquete de 32 pinos em cima do de 28 pinos.
Os diversos tamanhos dos chips de memoria ROM possuem muitos dos pinos em comum, de modo a possibilitar o uso de um mesmo soquete, deixando os pinos próximos a marca do pino 1 vazios.
Os seguintes pinos do soquete de 32 pinos precisa ser ligados, pino 31 deve ir ao 89 (/WE) do RTL8139C, e o 2 (A16) a o 70.


O pino 30, ou seja o 28 do soquete de 28 pinos, que corresponde ao VCC (5V) dos CHIPs de 28 pinos, e ao A17 nos de 32 pinos, de capacidade maior que 1Mb. O RTL8139 e capaz de endereçar no máximo 1Mb ou 256KB, portanto as linhas de endereçamento A17 e A18 não são utilizados. Esses pinos podem ser ligados no GND ou no VCC, mas dependendo da capacidade do PEROM, eles podem ser usando para selecionar qual a porção de 1Mb que será endereçada. Portando seria interessante colocar um jumper para selecionar o nível lógico desses pinos. E o pino 32 deve ter ligado a o VCC.


O RTL8139 precisa ser configurado para utilizar uma BOOT ROM, que é realizado pelo programa de configuração RSET8139.EXE.


A gravação e feita pelo programa fornecido pela realtek, o rtflash.exe, que e um programa de linha de comando, sem interface.
Use a opção -l para ver a lista de PEROM testados, bem como a identificação do chip atual.
O -s para salvar o conteúdo da ROM atual, -v para realizar uma verificação.
Para gravar: rtflash imagem.rom
Para veriricar: rtflash -v imagem.rom


O uso mais comum de ROMs gravados dessa forma e para realizar o boot pela rede, usando por exemplo o PXE.
O projeto Etherboot (http://www.etherboot.com) desenvolve soluções open source para o boot remoto, diversos sistemas operacionais, até mesmo o que aparentemente não possuem esse recurso podem ser carregados pela rede, no site do Etherboot, há vários tutoriais.

No caso de reaproveitar chips já usados, como BIOS de placas mãe fora de uso, para gravar um ROM de boot remoto, ou outro código que não tenha o tamanho exato da capacidade do PEROM, e interessante prevenir que algum lixo fique gravado, e como os programas não possuem a opção de apagar (isso e feito automaticamente quando se grava), assim e necessário gerar uma imagem do tamanho exato da PEROM, e ter os bits não usando setados em nível lógico alto (1), que costuma ser o valor de uma PEROM vazia. Uma imagem assim pode ser criado usando algumas ferramentas Unix, como o dd e o tr.
Criando um arquivo de 256KB (2Mb) cheio de 0xff:
dd if=/dev/zero bs=1 count=256k | tr '\000' '\377' >imagem.rom
Copiando a imagem para o primeiro megabit:
dd if=gpxe-git-10ec8139.rom of=imagem.rom conv=notrunc
Onde gpxe-git-10ec8139.rom e a imagem para a placa de rede realtek 8139.

Copiando para o segundo megabit:
dd if=gpxe-0.9.6-10ec8139.rom bs=1 seek=128k of=imagem.rom conv=notrunc

Imagem de 2Mb somente pode ser gravado pelo método da placa mãe.
Pela placa de rede, somente 1Mb podem ser gravados por vez, selecionando manualmente do endereçamento do pino 30, e ou do 1.

Dessa forma, temos imagens em duas regiões da PEROM, que pode ser selecionado mudando o nível do pino 30.


O RSET8139.EXE e o RTFLASH.EXE podem ser baixados do site da realtek.
Existe também a possibilidade de usar este programa: http://ctflasher.sourceforge.net/

quinta-feira, 1 de maio de 2008

Mandriva One no Pendrive



Mandriva Seed
O Aurelien Lefebvre liberou o Mandriva Seed, que e um programa para copiar o iso do Mandriva One 2009.1 para um pendrive ou similar. Pode ser baixado do diretório devel/tools/ de um dos mirror da mandriva.
ftp://ftp5.gwdg.de/pub/linux/mandriva/mandrivalinux/devel/tools/
Baixe o mandriva-seed.sh, para um diretório no seu sistema que tenha permissão de executar.
Torne-o executável com o comando chmod +x mandriva-seed.sh, e rode com ./mandriva-seed.sh
Precisa estar em um ambiente gráfico.
Uma tela do xterm pedindo password será aberta, digite a senha do root.
Janela do Mandriva Seed, mostrado abaixo, deve aparecer.


Use o botão Browse para escolher a imagem iso previamente baixado.
Plugue o pendrive, e aguarde alguns segundos, que ele vai aparecer na opção Target, caso tenha mais um pendrive, escolha a que vai ser usado.
Agora e só clicar em "Create Live USB" e esperar a conclusão, feito, e só fechar o programa, remover (ou não) o pendrive e fazer o boot por ele.
Não esqueça de fazer um backup do conteudo do pendrive, já que o mesmo será sobre escrito.


Os procedimentos abaixo ainda não foi testando com a versão 2009.1 do Mandriva One.

Indrodução
Mandriva e uma distribuição que se formou pela junção do Mandrake e da Conectiva, A Mandriva vende uma versão especial para ser rodado direto do pendrive, o Mandriva Flash. Infelizmente ela não disponibiliza uma imagem dessa versão para download. O que me motivou a tentar carregar o versão para cd do Mandriva Linux One a partir de um pendrive. Depois de algumas horas de pesquisas (leitura) e tentativas empiricas, resultou nesse artigo.

Material necessário:
Imagem iso do Mandriva Linux One 2008 Spring, que pode ser baixando de
http://www.mandriva.com/ .
Um pendrive ou cartão de memoria com mais de 700MB livres, formatado em fat (fat16 ou fat32 conforme a capacidade da mídia) e que não tenha arquivos importantes.
Um sistema linux (pode ser o próprio Mandriva one), com as seguintes ferramentas:
module-init-tools (depmod) com suporte a zlib
syslinux
kernel com suporte ao squashfs
dosfstools (mkdosfs)
Opcional: install-mbr(1) ou lilo

Procedimentos:
Criar uma partição fat no pendrive, e torna-la ativa (se necessário).
# fdsik /dev/sde

Formatar a partição em fat se necessário, com label MandrivaOne.
# mkdosfs -F16 -n MandrivaOne /dev/sde1
Se o pendrive estiver formatado, somente mude o label para MandrivaOne, que pode ser realizado pelo mlabel (mtools).

Copiar o conteúdo do cdrom do "Mandriva Linux one 2008 spring" para o pendrive.
# cd /media/MandrivaOne
# cp -rv /media/cdrom/ .

Modificando o initrd:
Caso queira, não e necessário realizar esta etapa, veja no final do texto como fazer pelo Windows XP, use o initrd indicado.
O initrd procura o cdrom pelo nome do volume e faz o mount. Temos que mudar a linha que faz a montagem no linuxrc para que em vez do iso9660 use o vfat. A imagem não possui os modulos para montar um sistema de aquivos em vfat, nem os para suporte a discos (HDs e pendrives e similares). Fazendo as devidas adaptações e possivel usar outros sistemas de arquivos, como o ext2, e montar como um branch do unionfs, e ter um sistema gravavel.

Montar o /media/cdrom/loopbacks/distrib.sqfs, squashfs.
# mkdir /mnt/squash
# mount -t squashfs -o ro,loop /media/cdrom/loopbacks/distrib.sqfs /mnt/squash

Descompactar o boot/cdrom/initrd.gz que esta no pendrive
# cd boot/cdrom/
# gzip -d initrd.gz

Montar o initrd
# mkdir /mnt/initrd
# mount -t ext2 -o rw,loop /media/MandrivaOne/boot/cdrom/initrd /mnt/initrd

Copiar os modulos sd_mod,vfat,fat e msdos para o initrd
# cd /mnt/initrd/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/msdos/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/fat/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/vfat/ .
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/nls/nls_cp437.ko.gz nls/
# cd ../drivers/scsi/
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/drivers/scsi/sd_mod.ko.gz .
# cd

Atualizar as dependências dos modulos do kernel
# depmod -a -b /mnt/initrd 2.6.24.4-desktop586-1mnb

Editar o linuxrc que esta no initrd
# cd /mnt/initrd
# (editor predileto) linuxrc
e incluir as seguintes linhas, junto a linhas similares
probe-modules sd_mod
probe-modules nls_cp437
probe-modules vfat
#
mudar a linha
nash-mount -o ro -t iso9660 LABEL=MandrivaOne /live/media
para
nash-mount -o ro -t vfat LABEL=MandrivaOne /live/media
mude o ro para rw caso queira gravar no pendrive enquanto roda o live mandriva.
grave o arquivo e saia do editor.

Desmontar o initrd
# umount /mnt/initrd

compactar o initrd
# cd /media/MandrivaOne/boot/cdrom/
# gzip -9 initrd
Verifique se o initrd.gz esta com a data atualizada.

Instalando o syslinux:
Copiar o boot/cdrom/syslinux.cfg para a raiz do pendrive
# cd /media/MandrivaOne/
# cp boot/cdrom/syslinux.cfg .
# cd

Desmontar o pendrive
# umount /media/MandrivaOne/

Instalar o syslinux, sde1 e a partição no pendrive.
# syslinux /dev/sde1

Como o syslinux esta instalado na partição, e necessário copiar um mbr para o raiz do pendrive.
# cat /usr/lib/syslinux/mbr.bin >/dev/sde
Pode ser que esse mbr não funcione corretamente (tela somente com um cursor piscando), nesse caso e necessário instalar ou um outro, que pode ser feito usando o install-mbr ou pelo lilo
# install-mbr /dev/sde
ou
# lilo -M /dev/sde mbr
Agora, e só testar o boot.
O syslinux não ira mostrar corretamente os menus e o gráficos como no boot pelo cdrom.

Windows XP:
Pelo windows não seria possível fazer algumas das modificações necessárias no initrd, sendo necessário usar um pré modificado.
Baixe o initrd modificado desse endereço:
http://enigma.nobel.com.br/eeepc/mandriva_initrd.gz
Renomeia para initrd.gz

Baixe o syslinux para o windows
http://syslinux.zytor.com/
http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.63.zip
Descompacte em algum ponto do seu hd, recomendo na raiz de alguma partição.

Em um pendrive formatado em fat (fat16 ou fat32), não pode ser NTFS, mude o nome do volume onde pretende instalar o Mandriva para MANDRIVAONE (propriedades do drive).

Use algum programa que abra aquivos .iso, como o winrar ou um emulador de cdrom, e copie o conteúdo para a raiz do pendrive.
Copie o initrd.gz previamente baixado para o boot/cdrom do pendrive, copie o syslinux.cfg para a raiz o pendrive.

Abra um prompt de comandos, mude para o diretório onde esta o win32/syslinux.exe.
c:\
cd c:\syslinux-3.63\win32
syslinux -m -a U:

onde U: e a letra correspondente ao pendrive.

Não garanto que esse procedimento funcione.


1) install-mbr foi escrito para o projeto Debian por Neil Turton.