Software RDS
Active o javascript !

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 conclui­do 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.