|
Software de Codificaçao e Descodificaçao de sistema R.D.S. |
|
Codificador e Descodificador RDS - Assembler 8086 |
|
Pretende-se com estes 2 programas desenvolver os conhecimentos do sistema RDS (1996-2001), usado em crescente numero, depurando a informação gerada e recebida - consoante o tipo de sistema usado. Para uso do Codificador , podemos simular um emissor de VHF injectando os dados gerados num descodificador para o efeito ( pelas suas linhas SCLK / SDAT ). Vai ser levantado futuramente o esquema, já funcional , de um bloco de modulação RDS para injecção de sinal num circuito emissor VHF-FM ou opcionalmente num multiplexador Stereo ( por retenção de fase , para que não haja batimento de frequências ). Numa primeira fase deste projecto , vai o esquema de ligação LPT ao circuito externo. De notar que os programas usam o vector de interrupção 7 e porto paralelo LPT1 no endereço 0x0378. Segundo experiencias, o OS Windows(9x) altera a configuração do interface, principalmente nas boards actuais, pelo que para se garantir que estes programas funcionem em condiçoes, e necessário que o PC tenha sido reposto ( reset ) para que o interface seja iniciado pela BIOS, ou usando uma placa I/O paralela configurada para LPT1,por jumpers , para que seja forçada uma configuração precisa.
Ja programei uma versão de descodificação com algoritmo de correcção de erros. Mas a mesma esta englobada num modulo que construi ( sintonizador FM-Wideband ), e por agora não sera aqui ainda colocada.
Codificadores RDS : ( versao simples - codigo fonte Assembler 8086 , e versao melhorada ).
Codificador RDS ( versao simples )
Codificador Avançado ( com suporte de controlo por consola )
Programa para controlar os codificadores AXEL RDS101Pro, usados em larga escala a nivel nacional pelas radios locais, comercializado pela ditelco . De notar que este ficheiro foi fornecido pela Axel italia - versao 2.15 - Download.
Nota - Embora estes 2 programas disponíveis necessitem de funcionar em DOS é necessário que o PC "dispare" bem ao reconhecimento do IRQ7 até cerca ( ou acima de ) de 1.190KHz...( neste caso interrupçoes por segundo ... ) - O programa corre bem numa board 8088 de um antigo PC da sucata... alterado para poder ser inserido no pino NMI do CPU o sinal de interrupção , mas num PC clássico , dito equivalente/compatível IBM , como pode ser difícil obter essa linha , alem de só ser para quem sabe o que anda a fazer, os programas foram escritos para, também alternativamente , usar o IRQ7 ( o tal da LPT1 ) ... sendo por isso necessário rapidez do reconhecimento da interrupção - isto corre bem num 486...não porque os anteriores sejam lentos para o assunto, mas porque há um conjunto de interrupçoes a serem reconhecidas no sistema ao mesmo tempo.
Temos para futura comercialização ( e em actual fase de testes em emissão ) de um sistema autonomo de RDS que funciona sincrono ( ou isolado ) com o sinal MPX de um codificador FM-Stereo ( 19KHz ) e que consta com interface avançada em ambiente Windows 9X ( futuramente sera lançado um programa cliente/server para Linux com entre-compatibilidade, ie server linux/ cliente Win9X ou verso ). Este sistema nao necessita da ligação a PC , a nao ser para update de dados da consola ( microcontrolador - EEPROM ) . Este sistema tem a possibilidade de trabalhar em rede TCP/IP para controlo remoto ( por exemplo de "rolar" o radio-texto em função do departamento de informação da radio - tendo N x 2 x Linhas de 64 caracteres processaveis no tempo - rolloff ) e de facil actualização de software. Este e desenvolvido em Visual C++ 6.0 ( microsoft ) e nao necessita de DLL externas ( linked static code ).
Codificador MPX e RDS. |
Codificador ( vista componentes ) |
Bloco R.F. VHF-FM |
|
Software para gestao do Modulo R.D.S. ( via porta lpt ).
versão 8bit |
|
Descarga ( download ) das versoes WINDOWS 9X para o sistema comercial. - Versão antiga para o codificador a 8 bit.
( este codificador da primeira geração tem como nucleo o PIC 16F84A e uma EEPROM 24C16. )
Servidor RDS para o codificador avançado ( para em rede TCP/IP se controlar os dados do codificador ) - Nesta nova versao, este contem o serviço de sincronizar os relogios dos computadores ( iX86 - windows9X/NT ?? ) a partir deste ( para isso necessita do programa TimeSync a correr em cada maquina, que devera estar registada no timecli.txt contido no WinrdsServer ) .
Cliente RDS ( o programa que gerencia o codificador atraves do servidor ... )
-
Referimos aqui o windows 9x ( 98/95 e XP ??? ) devido amaneira de como o software acessa as portas de comunicação com o hardware - o software não corre em ambiente NT ( incluindo do 2000 ) sem auxiliares que porque as instruçoes de assembler IN , OUT ( velhinho problema de sempre para programação em sistemas multi-tarefa ) presentes em varios pontos importantes do programa sao privilegios de kernel ( do ponto de vista do sistema operativo ) embora estamos atentos a este problema e esperamos resolver este artefacto sem ter de instalar ficheiros vxd ou dll, mas sim usando "funçoes" do sistema operatinvo.
A extrutura antiga da EEPROM continha ( portanto apontador de 8 bits - aponta até 256 blocos ):
ADDR |
Significado da celula |
0x000
|
Numero de blocos RDS existentes na codificação - Cada bloco RDS contém 13 bytes consecutivos. |
0x001 |
Primeiro byte do bloco 0 ( essencialmente o primeiro byte de dados ) - seja o primeiro bloco |
0x....
|
|
0x00D |
Primeiro byte do bloco 1 , ou seja - inicio do 2 bloco |
....
|
|
....
|
|
|
|
|
|
0x07FF |
Ultimo endereço disponível - 24C16 |
|
para o sistema comercial de 16 bit. NÃO COMPATÍVEL COM O DE 8BIT! |
|
Descarga ( download ) das versoes WINDOWS 9X para o sistema comercial de 16 bit - NAO COMPATIVEL COM O DE 8BIT! .
Para a versão do controlador a 8 bit descarrege a versão mais acima.
Servidor RDS - Modulo 16bit. O software tem o mesmo funcionamento em nivel de configuraçao, e melhoramentos de estabilidade de codificacao - devido ao longo comprimento que pode haver na codificaçao de radio-texto.
Novidade: O programa, se configurado no ini, vai buscar ao winamp os títulos das músicas e codifica-as no stream PS ou RT: Os títulos ficam assim disponíveis em tempo real no receptor.
Programa para o codificador da segunda geração - tem mais memória e está portanto preparado para conter mais informaçao. Isso levou a alterar o firwmare do PIC ( interno no codificador ) para conter apontador de dados para 16 bits.
O codificador tem como nucleo o PIC 16F84A e uma EEPROM 24C256 - O codificador de geração 1 pode ser levado a upgrade, programando a versão 2 para o PIC sem qualquer alteração no hardware do controlador/gerador dado que se trata essencialemente na evolução de apontador de dados.
A nova extrutura( versão 2 ) da EEPROM contém ( portanto apontador de 16 bit - aponta virtualmente ate 65535 blocos )
ADDR
|
Significado da celula |
0x0000
|
Numero de blocos LOW_Byte |
0x0001
|
Numero de blocos HIGH_Byte. Cálculo de Blocos = Low+256*High |
0x0002
|
Igual à versão anterior na explicação... primeiro bloco... |
0x000E |
Inicio do segundo bloco... |
|
|
0x7FF7 |
Ultimo byte disponivel ( utilizado ) - 24C256 |
Destaca-se o seguinte funcionamento, do actual módulo.
- O programa insere e faz espera que o PIC lhe dê autorização de acesso ao barramento I2C para escrever/ler à EEPROM.
- Em caso algum o programa devera aceder ao barramento - irá provocar corrupção / lock ao PIC porque este verifica o ACK da eeprom. Estando em LOCK só sairá se este receber o sinal Release vindo do programa.
- O PIC quando detectar alteração no comprimento de BLOCOS irá proceder à leitura desde o inicio da EEPROM
- O PIC le de bloco-a-bloco para a sua RAM interna e dá o release do barramento se pedido.
- Se o PIC fizer o release para o programa fica infinitamente a enviar para a emissao RDS o ultimo bloco cativo na RAM - assim mesmo que haja um lookup grande para gravar a eeprom, devido aos tempos necessários para escrita, este evita que o receptor salte para outros emissores por deixar de haver o PID de rds - que está presente em todos os blocos.
- Para evitar grandes "paragens" de envio podem ser enviados dados em interleave - O PROGRAMA NAO USA ESSE MODO.
- 1 bloco contem 13 bytes, porque em uma palavra RDS temos 4 grupos de 16 bits + 10 bits de CRC ( para isso deverão estudar os manuais para o efeito ou ver o codigo disponivel gerado ) - portanto os blocos já tem a sequencia final - DADOS+CRC
Em relação aos programas MSDOS ( ou equivalente ) :
Nao se assustem com o tamanho do programa , porque o mesmo e escrito em assembler puro, logo o "estado-de-arte" da verdadeira programação esta em jogo...resultando codigo compacto e funcional - e claro que estas versoes que neste momento estou a fornecer sao funcionais mas ha que perceber que ainda pode haver alguns erros a corrigir . A Informação para criar os programas e escassa , e nao coloco aqui de bandeja tudo... ha que saber desenvolver as coisas - e a minha intenção e , para quem queira , proporcionar uma base para iniciar testes em sistema RDS. Isto porque eu tive dificuldade em encontrar programas na net que fazem exactamente isto ... e nenhum deles era totalmente funcional com na realidade se queria - ou seja , funcionavam apenas a ler de um ficheiro exemplo e tinham de ser pagos para a versao funcional - nao e isso que pretendo.
Esta a ser desenvolvido o projecto para o ambiente GNU-Linux ... esta concluido aquilo que era previsto - uma construção a partir de um modulo com processador para o efeito de buffer controlado pelo SERVIDOR RDS para evitar o uso de uma maquina extra.
Para usar estes programas ira ser necessario, no caso do Codificador, de um circuito modulador RDS ( NRZ-DSB ) - circuito totalmente desenvolvido por mim, naquelas tardes no cafe..em que nao ha mais nada para fazer.
Para o descodificador, e necessario ter praticamente o circuito desmodulador RDS , baseado por exemplo no TDA7330 ou outros para o mesmo fim e um cabo que envio o esquema do interface descodificador em formato jpeg - Boa descodificação.
|