quinta-feira, 26 de fevereiro de 2015

Gerando sinais de vídeo num PIC com amplitude e impedância corretas (atualizado)

Os sinais de vídeo padrão possuem uma amplitude de 1Volt pico a pico, com o nível de vídeo situado 0,7Volts acima do nível de referência de preto e o sincronismo situado 0,3Volts abaixo.

Fonte: http://www.exampointers.com/teletext/teletext.phtml

Para gerar esses sinais com um microcontrolador podemos utilizar dois pinos e alguns resistores. No circuito abaixo a carga RL representa a impedância interna do monitor, que segundo a norma RS170 deve ser de 75 Ohms. Em alguns circuitos encontrados na internet [1] [2] a resistência R3 não é utilizada, mas isso aumenta muito a impedância de saída do circuito, o que pode ocasionar uma imagem sem contraste em alguns monitores.

Uma das maneiras de se gerar vídeo com um microcontrolador é chaveando-se dois pinos
Usando dois pinos temos quatro combinações possíveis, das quais devemos nos preocupar com as 3 mais importantes: O nível de preto, o pulso de sincronismo e o nível de branco. Dá para gerar um nível de cinza também mas vamos desconsiderá-lo por enquanto.
A linha de nome VBias serve para gerar basicamente o sinal de sincronismo, enquanto a linha VColor gera o conteúdo de vídeo.

Precisamos calcular então os resistores de forma que possamos obter os seguintes níveis quando devidamente terminado por uma carga de 75 Ohms:
 
Pedestal, ou nível de preto: 0,3Volts
Pulso de sincronismo: 0 Volts
Pico de vídeo: 1,0Volt.

A primeira consideração que devemos fazer é em relação aos níveis de saída do microcontrolador. Segundo o 'datasheet' do PIC16F688 (tomado como exemplo) temos que a tensão mínima de saída (VOL, porta em nível 0) pode chegar a 0,6Volts no pior caso. Já a tensão máxima (VOH) pode ser tão baixa quando VDD-0,7Volts

Fonte: Microchip.com

Assim, devemos considerar deslocar nosso nível de sincronismo em 0,3 Volts, pois esse valor corresponde à metade do VOL mínimo. A razão de ser a metade é que estamos considerando que a impedância de saída do nosso circuito vai ser igual à da carga, ou seja 75Ohms.



Com isso, o nível de preto sobe para 0,6 Volts, pois este é 0,3Volts mais alto do que o nível de sincronismo. Já o nível de Branco sobe para 1,3Volts pois esta tensão está 0,7Volts acima do nível de preto. Estes valores estão resumidos na tabela abaixo.
Nível
V Bias
V Color
V Out
Observação
Preto
VOH
VOL
0,6V
0,3V offset + 0,3V sync
Branco
VOH
VOH
1,3V
Vblack + 0,7V video
Sincronismo
VOL
VOL
0,3V
Vblack - 0,3V sync

Os valores acima são todos para o circuito carregado com uma impedância de 75Ohms. No caso do circuito estar sem carga, estas tensões devem dobrar. Assim temos:

CondiçãoV BiasV ColorV Out (RL=75)V Out (aberto)
Black4,7V0,6V0,6V1,2V
White4,7V4,7V1,3V2,6V
Sync0,6V0,6V0,3V0,6V



Agora podemos partir para o cálculo dos resistores de forma a atender à tabela acima. O primeiro passo é a análise do circuito. Partimos então da lei de corrente de Kirchhoff: "Em um nó, a soma das correntes elétricas que entram é igual à soma das correntes que saem"
Aplicando a lei de Kirchhoff para calcular as resistências

Assim temos que 
Considerando as tensões envolvidas, podemos montar a equação genérica do circuito:

Para facilitar as contas, vamos reescrever a equação considerando as condutâncias em vez das resistências.


Então, para RL=75Ohms, VOL=0,6Volts e VOH=4,7Volts (Vdd do PIC a 5,4Volts) temos podemos montar as equações para as três condições principais.


Para o circuito sem carga, ou seja RL=infinito, a condutância é igual a zero. Assim temos



Estas equações podem ser escritas na forma de um produto de matrizes:




Usando o Scilab como ferramenta de cálculo chegamos ao resultado (em Siemens, ou unidades de condutância)

>A=A={4.1 0 -0.6 ; 3.4 3.4 -1.3 ; 0.3 0.3 -0.3 ; 3.5 -0.6 -1.2 ; 2.1 2.1 -2.6 ; 0 0 -0.6}
>b=[ 0.6/75 ; 1.3/75 ; 0.3/75 ; 0 ; 0 ; 0 ]
>x=A\b


O que convertido para resistência resulta em:
 >x.^-1


Usando valores comerciais mais próximos temos:


Vamos agora verificar os valores das tensões considerando os valores comerciais. Para isso é necessário reescrever a equação básica em função de V Out:



Resolvendo as várias condições para Vout, temos que:

Condição V Bias V Color V Out (RL=75) V Out (aberto)
Black 4,7 0,6 0,64 1,29
White 4,7 4,7 1,35 2,71
Sync 0,6 0,6 0,17 0,35

Dividindo-se a tensão em aberto pela tensão com carga de 75 Ohms encontramos a relação igual a:

Vopen/Vload = 2,71/1,35 = 2,01

Essa relação nos permite calcular a resistência de saída do nosso circuito. Partimos da relação de Thèvenin

Em números, ri=75 * (1,01) = 75,75 Ohms.


Conclusão:

Exceto pelos valores de tensão do nível de sincronismo, todos os outros ficaram bem dentro do esperado. Para o circuito carregado temos uma amplitude de 0,47Volts (abaixo do nível de preto) para o pulso de sincronismo e uma amplitude de 0,7Volts (acima do nível de preto) para o sinal de vídeo. Em compensação, apesar dos resistores utilizados serem de valor comercial e estarem ligeiramente diferentes dos valores calculados, a impedância de saída do circuito ficou bem próxima de 75Ohms.



A figura abaixo traz o circuito com os valores finais.

PS:
De maneira genérica, o sistema de matrizes que descreve nosso circuito encontra-se abaixo. O valor das tensões de saída nas três linhas superiores (em verde) correspondem aos níveis de tensão com carga de 75Ohms e as linhas inferiores (em azul) correspondem aos níveis de tensão em aberto, ou seja, sem a carga.



Em Scilab, pode-se utilizar as seguintes linhas de comando

Voh = 4.7
Vol = 0.6
Voffset = 0.3
Vwhite = 1.0 + Voffset
Vblack = 0.3 + Voffset
Vsync  = 0.0 + Voffset
V = {     (Voh - Vwhite) (Voh - Vwhite) -Vwhite ; (Voh - Vblack) (Vol - Vblack) -Vblack ; (Vol - Vsync ) (Vol - Vsync ) -Vsync  ; (Voh - 2*Vwhite) (Voh - 2*Vwhite) -2*Vwhite ; (Voh - 2*Vblack) (Vol - 2*Vblack) -2*Vblack ; (Vol - 2*Vsync ) (Vol - 2*Vsync ) -2*Vsync  }
I = { Vwhite / 75 ; Vblack / 75 ; Vsync / 75 ; 0 ; 0 ; 0 }
s = V\I
r = s.^-1




sexta-feira, 20 de fevereiro de 2015

Sinais de sincronismo da TV analógica e micros antigos.


Nas TVs de tubo, um feixe de elétrons é gerado a partir do aquecimento de um metal no catodo do tubo. Este feixe é acelerado por uma alta tensão nos anodos para adquirir energia cinética que depois é convertida em luz quando o feixe incide sobre uma superfície contendo sais de fósforo (tela).

Como o CRT (Cathode Ray Tube) só consegue iluminar um ponto por vez (tês pontos por vez nos CRTs coloridos), é necessário 'passear' o ponto pela tela numa velocidade tal que nossos olhos não consigam enxergar um ponto fixo, mas sim uma imagem contínua. Este processo é chamado de varredura.

Embora existam monitores CRT que desenhem diretamente a imagem na tela (os chamados  monitores vetoriais como os osciloscópios e antigos consoles de radar), a televisão utiliza um sistema baseado em linhas sequenciais, ou linhas de varredura, que são geradas a partir da ação do campo magnético gerado nas bobinas defletoras.

fonte: Techtudo
Estas bobinas são acionadas através do sinal gerado em dois osciladores, de forma a gerar um padrão de linhas que começa no canto superior esquerdo da tela e termina no canto inferior direito.

Ao final de cada linha o feixe de elétrons desce um pouco e retorna ao lado esquerdo da tela. Este é o chamado retraço horizontal. Ao final da última linha o feixe é deslocado novamente para o início. Assim é formado um campo de vídeo.

Fonte: what-when-how.com
 A TV analógica que conhecemos opera entretanto com 2 campos de vídeo entrelaçados conforme definido  pelo padrão RS-170  chamados de campo par e campo ímpar. Dois campos consecutivos constituem um quadro (frame).  Cada campo possui 262,5 linhas, totalizando 525 linhas de varredura por quadro. O entrelaçamento permite obter o dobro da resolução vertical porém a taxa de quadros cai pela metade. Assim, se a frequência vertical é de 60Hz, o vídeo é exibido a 30 quadros por segundo (valor nominal, pois a norma define 29,97 quadros por segundo).

Fonte: Radiologyclub.com
Fazendo a matemática, temos 29,97 quadros por segundo vezes 525 linhas por quadro que resulta em 15734,25 linhas por segundo o que significa que equivale a uma frequência horizontal de 15,734KHz, comumente arredondada para 15KHz nas discussões sobre monitores LG1x21 e afins.

A varredura da imagem na tela é comandada por dois osciladores - horizontal e vertical, que devem ser sincronizados com a imagem a ser exibida. Para isso o sinal de vídeo possui pulsos de sincronismo incorporados a cada linha.


Uma linha típica de vídeo é composta por um período de retraço horizontal (em que o feixe de elétrons é apagado, daí o nome 'blanking' seguido da imagem (linha) a ser exibida. Como o CRT não consegue apagar o feixe instantaneamente, o início do sinal de sincronismo ('frontporch') existe para garantir que a imagem esteja no nível de preto quando o pulso de sincronismo horizontal começar, evitando assim que se perceba o início do retraço horizontal.

Logo após pulso de sincronismo ocorre o período do  'backporch', que é quando os circuitos internos da TV fazem a amostragem do nível de referência (nível de preto) para poderem assim exibir a imagem com o contraste correto.

Fonte: Batsocks.com
O sincronismo vertical ocupa ao todo 9 linhas de vídeo, sendo 3 linhas de pulsos de pré equalização (front porch vertical) seguidas de 3 linhas do pulso de sincronismo vertical em si (vertical serration) e finalmente mais 3 linhas de pós equalização.

O que diferencia os campos pares e ímpares é a posição do início do pulso de sincronismo vertical em relação ao pulso de sincronismo horizontal. Se ambos coincidem temos um campo ímpar, mas se o pulso de sincronismo vertical inicia no meio de uma linha, ou seja, no meio tempo entre dois pulsos horizontais então temos um campo par.

Fonte: http://www.maximintegrated.com


As linhas de pré e pós equalização, bem como as linhas de sincronismo vertical possuem pulsos extras de sincronismo cujo objetivo é permitir que os circuitos separadores de sincronismo do monitor possam diferenciar entre os campos par e ímpar. Mais detalhes nesse (link)

Entre o final do pulso de sincronismo horizontal e o início da primeira linha de vídeo ativa, existem algumas linhas vazias (blank lines) que não são visíveis pois ocorrem durante o tempo de retorno do traço até o alto da tela. Por isso, das 525 linhas de vídeo que compõem um quadro, apenas 483 são visíveis. É daí que vem o nome 480i que significa 480 linhas de vídeo visíveis, num quadro entrelaçado.

Quando os primeiros computadores pessoais começaram a aparecer, eles não possuíam muita capacidade gráfica, e as resoluções verticais raramente excediam 192 linhas, tornando desnecessária a geração de quadros entrelaçados.

Assim, os fabricantes de microcomputadores criaram circuitos mais simples para gerar os sinais de vídeo desconsiderando então toda complexa a geração de pulsos durante o intervalo de sincronismo vertical. O resultado era uma imagem progressiva com 240 linhas úteis, composta de apenas do campo ímpar que se repetia a 60Hz (também chamado de 240p - de progressivo).

Abaixo seguem as formas de onda do intervalo de sincronismo vertical de alguns micros populares no Brasil na década de 80:
.
No TK90X as linhas de 'frontporch' e 'backporch' são brancas, em vez de serem linhas em nível de preto ('blank' lines), e o pulso de sincronismo vertical ocupa o tempo de 4 linhas de vídeo e não começa ao mesmo tempo que o pulso horizontal (começa um pouco antes do final da última linha e termina um pouco antes do próximo pulso de sincronismo.

Intervalo de sincronismo vertical no TK90X. Azul: Vídeo composto / Laranja: Sincronismo composto


No MSX1 (TM9128) o sinal de sincronismo é mais bem comportado, contendo linhas de 'frontporch' e 'backporch' em nível de preto.

Intervalo de sincronismo vertical no TMS9128. Laranja: Vídeo composto


A ausência do campo par nunca foi um problema para os televisores analógicos, pois havia uma margem grande em relação aos pulsos de sincronização vindos do sinal de vídeo. Eles simplesmente resetavam seus osciladores e exibiam novamente o quadro ímpar.  A falta das linhas pares somente evidenciava o efeito das 'scanlines' por causa do aumento do espaço vago entre duas linhas devido à falta das linhas pares.

Nos televisores modernos com circuitos totalmente digitais isso pode funcionar ou não, dependendo de como foi implementada a captura de vídeo, principalmente se a geração dos sinais de sincronismo for meio fora do convencional, como é o exemplo do TK90X. Tudo vai depender da implementação interna do firmware dos monitores.