Académique Documents
Professionnel Documents
Culture Documents
Data MSB Finished with last char; pulse Not ready 1 HIGH = no paper Pulled HIGH Auto LF Chassis ground
Tabela 1 Sinais Centronics Nota 1: BUSY = HIGH i. Durante cada transferncia de caracter; ii. Se o buffer estiver cheio iii. Se a impressora estiver desligada iv. Se for sinalizado erro Os sinais bsicos so listados no primeiro grupo. D0-D7, STROBE, ACKNLG e BUSY. BUSY um sinalizador (flag) que indica, quando est em LOW que a impressora no est ocupada, ou seja, que ela est pronta para receber dados. O computador coloca ento os dados (D0-D7) e define STROBE; BUSY torna-se ento HIGH e s volta a LOW quando a impressora estiver pronta para receber outro byte. O computador deve ento analisar o sinal BUSY para saber quando ele pode enviar outro byte. ACKNLG, que um pulso, e no um sinal, pode ser utilizado para disparar uma interrupo. A figura abaixo apresenta o handshaking utilizado em transferncias de dados com o padro Centronics.
JCFJ
maro/2005
Centronics Handshake
Strobe Busy Ack Data
Alguns dos sinais de entrada (linhas 10-13) sero utilizados nas experincias para fornecer dados aos programas que sero desenvolvidos, fazendo com que estes programas possam se comportar respeitando escolhas feitas pelo usurio via hardware. Com o padro Centronics uma porta paralela s consegue fornecer 2,6 mA e drenar 24 mA e portanto, deve-se utilizar drivers com todas as sadas de dados quando se conecta dispositivos externos s portas.
e b c
PD507
10 9 8 7 6 1e 2d 3 A(K) 4c 5 DP 6b
a f g e d
1 2 3 4 5
7a 8 A(K) 9f 10 g
JCFJ
maro/2005
Exemplo: Escrever um programa C que atravs da porta paralela do microcomputador permita que se acenda e apague um led conectado ao bit D0 da interface Centronics. Soluo: O sinais D0-D7 podem no fornecer corrente suficiente para o acionamento de dispositivos externos. Para resolver este problema deve-se utilizar drivers externos. Um driver simples composto por um transistor trabalhando como chave. O circuito abaixo mostra este driver.
+5V
330
D0
BC327
Para se descobrir o endereo da porta paralela de um microcomputador que utilize o sistema operacional Windows 98 deve-se proceder da seguinte maneira: em Iniciar/Configuraes/Painel de Controle selecionar o cone Sistema. Em Sistema selecionar Gerenciador de Dispositivo e ento Portas (COM & LPT). Aps selecionar Porta de Impressora e clicar em Propriedades. Aps obter-se a tela relativa ao dispositivo, selecionar Recursos para se obter o resultado mostrado na figura abaixo.
JCFJ
maro/2005
Nesta tela pode-se ver o endereo utilizado pela porta paralela, neste caso 03BC-038F. Estes endereos constituem um intervalo no qual o endereo primrio espelhado. As instrues da linguagem C que sero utilizadas para o interfaceamento so as seguintes: a = inport(endereo)ou a = inp(endereo): uma palavra de uma porta do hardware. outport(endereo, dado) ou outp(endereo, dado): escreve uma palavra em uma porta do hardware.
Ou seja deve-se fornecer o endereo da porta e no caso da escrita a varivel onde o dado ser escrito. Pode-se passa agora a implementao da experincia. Para tanto, deve-se recuperar o cabo com um conector DB25 de maneira a ter-se acesso aos pinos D0-D7, BUSY e CHASSIS GND. Aps, deve-se montar no protoboard o circuito de driver apresentado. Aps deve-se conectar D0 base do transistor BC327. O programa apresentado a seguir ir acender e apagar o led deste circuito dependendo da entrada de dados do usurio.
//************************************************************************ // Nome: 1led.cpp // Autor: Jos Celso Freire Junior // Objetivo: Acender um led atravs de um cabo conectado a porta paralela // no bit D0 - Endereo da porta paralela 0x0378 - Neste micro. //************************************************************************ #include<stdio.h> #include<conio.h> void main(void) { char escolha; char valor; do{ printf("\nFaa sua Escolha - 0=0x00 | 1=0xFF | s=Stop --> "); escolha = getche(); if(escolha=='s') break; if(escolha=='0') valor = 0x00; if(escolha=='1') valor = 0xFF; outp(0x0378,valor); } while(escolha != 's'); outp(0x0378,0xFF); return; }
JCFJ
maro/2005
+5V
10 K BUSY
S1
5. Escrever um programa que leia os bits BUSY e ACK da porta paralela. Quando o bit BUSY estiver ativo (valor lido no registrador for igual a 1), o programa deve funcionar; caso contrrio deve ficar aguardando. Se o programa estiver ativo, o bit ACK deve ser lido. Caso ACK estiver ativo o display de 7 segmentos que estar conectado a porta paralela deve apresentar os mero pares e caso contrrio os nmeros mpares.
JCFJ maro/2005 5
Nesta parte da experincia deve-se utilizar a oitava de nmero 4 de todas as notas. Assim para gerar um D necessrio gerar uma onda quadrada, no bit D0 da interface Centronics, cujo perodo igual a: 1/261,63 Hz = 3,82219 ms. No interfaceamento do PC com o alto falante os seguintes componentes sero utilizados:
e b c
Exemplo: Escrever um programa C que atravs da porta paralela do microcomputador gere uma onda quadrada no bit D0 da interface Centronics de tal maneira que esta onda conectada ao auto falante do circuito apresentado abaixo emita a nota D.
+5V
56
D0
BC327
JCFJ
maro/2005
Soluo:
A freqncia da nota D : 261,63 Hz. O perodo da onda quadrada que ser gerada portanto 1/261,63 Hz = 3,82219 ms. O sinal que ser gerado em D0 deve portanto passar 3,82219/2 = 1,91109 ms em 1 e o mesmo tempo em 0. Deve-se portanto escrever um programa que faa com que o micro escreva 0x01 no bit D0, espere 1,91109 ms, escreva 0x00 e espere 1,91109 ms. Isto ir gerar um perodo da nota D, o que tomar somente 3,82219 ms. Para que a nota seja audvel necessrio fazer com que esta onda quadrada de perodo 3,82219 ms seja gerada diversas vezes. Uma estrutura de for aninhados resolve o problema. O loop exterior ir fazer com que a nota seja gerada durante um certo tempo, e o interior ir gerar efetivamente a onda quadrada na freqncia da nota. O problema existente o seguinte: determinar-se o nmero de iteraes do for, tanto o exterior quanto o interior, e isto levando em considerao o fato de que PCs com velocidades diferentes executam o loop for em tempos diferentes. Para tanto o mtodo da tentativa e erro deve ser utilizado. Deve conectar-se um osciloscpio ao pino D0 da interface, e variando o nmero de loops, descobrir aquele que gera uma onda quadrada que corresponde freqncia da nota D. Para se iniciar a experincia, sugere-se que se coloque um nmero grande no loop que controlar o tempo que a nota D ser emitida. Dica: o nmero de iteraes grande; utilize por exemplo uma varivel de tipo unsigned int como contador.
Utilizando estas funes escreva um programa que fique tocando por cinco segundos a nota d e depois por mais cinco segundos a nota si.
7. Aps utilizando as mesmas funes escreva um programa C para tocar a clebre D-R-MiF. O programa devera gerar na ordem ento as seguintes chamadas:
a diviso do perodo da onda que ir emitir o som. Assim com pitch 0,5 a onda quadrada dever ficar metade do tempo em 1 e a outra metade em 0. Com pitch 0,7 ela dever ficar 70% do tempo em 1 e 30% em 0 ou viceversa. maro/2005 7
JCFJ
void main(void) { float pitch=0.3; som(Do, pitch, 0.7); som(Re, pitch, 0.7); som(Mi, pitch, 0.7); som(Fa, pitch, 0.7); atraso(100); som(Fa, pitch, 0.7); atraso(100); som(Fa, pitch, 0.7); atraso(100); som(Do, pitch, 0.7); som(Re, pitch, 0.7); atraso(100); som(Do, pitch, 0.7); som(Re, pitch, 0.7); atraso(100); som(Re, pitch, 0.7); atraso(100); som(Re, pitch, 0.7); atraso(100); som(Do, pitch, 0.7); som(Sol, pitch, 0.7); som(Fa, pitch, 0.7); som(Mi, pitch, 0.7); atraso(100); som(Mi, pitch, 0.7); atraso(100); som(Mi, pitch, 0.7); atraso(100); som(Do, pitch, 0.7); som(Re, pitch, 0.7); som(Mi, pitch, 0.7); som(Fa, pitch, 0.7); atraso(100); som(Fa, pitch, 0.7); atraso(100); som(Fa, pitch, 0.7); }
8. Escrever um programa na linguagem C que leia o teclado e de acordo com as letras tecladas faa com que o alto falante emita um som especfico. A equivalncia nota/som deve ser a seguinte: A/D S/R D/Mi F/F G/Sol H/L e J/Si. 9. Descubra na Internet as notas de uma cano polular (de ninar, folclrica) e escreva um programa que toque o incio desta cano.
JCFJ
maro/2005