- Conversor Digital/Anal¢gico para PC - Se¤ales Digitales: Los circuitos anal¢gicos se caracterizan por el hecho de que la respuesta (cualquiera que sea) var¡a en forma continua dependiendo de la se¤al.Tomemos como ejemplo un circuito sencillo compuesto por una fuente (una pila o bater¡a),un re¢stato(resistencia variable) y una l mpara.El brillo de la l mpara aumenta gradual y continuamente a medida que disminuimos la resistencia ofrecida por el re¢stato. En los circuitos digitales la respuesta no es continua,sino discreta. La respuesta depende de que la se¤al est‚ en uno u otro estado,en este caso las se¤ales digitales se acomodan a niveles TTL(Transistor to Transistor Logic).Esto quiere decir que una linea de se¤al tiene 2 estados nominales posibles: Alto(5 Volts) y Bajo(0 Volts).En la pr ctica,las tensiones no son tales,sino pr¢ximas a ellas,y los dispositivos discriminan como Alto un nivel por encima de 2 Volts y como Bajo uno por debajo de 0,8 Volts. Generaci¢n de formas de onda A trav‚s del puerto de impresora de una computadora se pueden hacer muchas aplicaciones £tiles,conectando dispositivos que intercambien informaci¢n con ella. En este caso se trata de un sencillo conversor digital-anal¢gico por medio de una escalera resistiva R/2R.De esta manera se podremos generar ondas senoidales,cuadradas,triangulares o en diente de sierra. Las salidas de datos de la puerta paralelo de impresora nos ofrecen la posibilidad de manejar 8 l¡neas, lo que resultar¡a en 256 niveles de se¤al (una resoluci¢n m s que suficiente para la mayor¡a de las aplicaciones). Generaremos el nivel de salida simplemente escribiendo en el port de datos un n£mero entre 0 y 255;el nivel de salida an logica ser  pr¢porcional a este valor. La Puerta Paralelo: 25 pin Parallel port (female): Pin 13 1 _____________________________ \ . . . . . . . . . . . . . / \ . . . . . . . . . . . . / \_______________________/ Pin 25 14 Pin Description Pin Description 1 /STROBE Output 14 /AUTOFEED Output 2 DATA 0 Output 15 /ERROR Input 3 DATA 1 Output 16 /INIT Output 4 DATA 2 Output 17 /SELECT Output 5 DATA 3 Output 18 Ground 6 DATA 4 Output 19 Ground 7 DATA 5 Output 20 Ground 8 DATA 6 Output 21 Ground 9 DATA 7 Output 22 Ground 10 /ACKNOWLEDGE Input 23 Ground 11 BUSY Input 24 Ground 12 PAPER-END Input 25 Ground 13 SELECTED Input Esta interfase involucra realmente 3 ports,2 de salida y 1 de entrada Direcciones: BASE (3BC,378) BASE+1(3BD,379) BASE+2(3BE,37A) Funcionamiento de una escalera R/2R: Cuando la corriente alcanza un nodo se divide en 2 ,pues en todos los casos la resistencia presente en cada rama es igual a 2R. La corriente del bit menos significativo es 1/2n de la corriente debida al bit m s significativo. Cuando el byte vale 255 (su valor m ximo),la tensi¢n de salida es: VsMax = 2/3 * Vh * 255/256 = 0.665 * Vh aproximadamente 2/3 de Vh.Para una salida TTL,como la del port paralelo puede suponerse en promedio,alrededor de 4.7 Volts. Rango de salida : 0 a 3.13 Volts Vsalida = VsalidaMax * byte/255 Resoluci¢n: Cuando el byte aumenta en una unidad,la salida aumenta en VsMax/255, aproximadamente 12 miliVolts. Resistencia de Salida: La resistencia de salida de este divisor resistivo es de 2/3 R, unos 1200 _ - 3 - Programaci¢n del conversor: El acceso a unidades perifericas se obtiene en forma sencilla en la mayoria de los lenguajes: Lenguaje Lectura Escritura (Entrada) (Salida) Assembler in al,port out port,al in ax,port out port,ax in al,dx out dx,al outp(port,dato) inp(port) C outp(port,dato) inp(port) Basic out port,dato INP(port) Pascal port[port]:=dato Port[port) En este caso se utilizar  el lengaje Basic,con un par de programas de aplicaci¢n. El primero genera se¤ales anal¢gicas de las formas m s comunes: *Senoidales: DIM a(2500) D0 2 >---___--___---___-___---0v (Tierra, pin 20) _ 1k8 D1 3 >---___--___-Ý E D _ 1k8 n i D2 4 >---___--___-Ý t g _ 1k8 r i D3 5 >---___--___-Ý a t _ 1k8 d a D4 6 >---___--___-Ý a l _ 1k8 D5 7 >---___--___-Ý _ 1k8 D6 8 >---___--___-Ý Bit m s _ 1k8 significativo ->D7 9 >---___--___-+--------> _ 1k8 Ý Salida Anal¢gica _ 1k8 Tierra 20 >------------+--------> 0v Ajustes: Si se presentan inversiones (menor nivel de salida para mayor byte), seguramente se registraran durante el cambio de uno de los bits m s significativos. Si esto sucede,se deber n montar,empezando por el de menos peso,un resistor en paralelo del orden de R*64 o R*128,seg£n la desviaci¢n observada. Listado del Programa 1 - Senales.bas CLS amplitud = 255 frec = 10 g = 20 h = 5 20 X = 10 30 Y = 11 35 pres = 500 100 SCREEN 0, 0: COLOR 1, 15, 15: WIDTH 40: CLS 102 LOCATE X, Y: PRINT "Generador de Se¤ales" PRINT PRINT "Para conversor Digital-Analogico" PRINT PRINT "Presionar espaciadora para continuar..." whung$ = "T255L32mlO3CD>CD<>CD<CD" PLAY whung$ 103 eb$ = INKEY$ IF eb$ = CHR$(32) THEN 104 GOTO 103 104 OUT 888, 0 CLS 105 COLOR 14, 1, 0: WIDTH 40: LOCATE X, Y, 0: PRINT "Elejir una opcion:" CLS PRINT " Menu Principal " PRINT PRINT "---------------------------------------" PRINT " Tipos de Se¤al:" PRINT PRINT " 1.Senoidal 2.Cuadrada " PRINT PRINT " 3.Triangular 4.Diente de Sierra" PRINT PRINT "----------------------------------------" PRINT " 5.Aumentar Amplitud " PRINT " 6.Disminuir Amplitud" PRINT " 7.Aumentar Frecuencia" PRINT " 8.Disminuir Frecuencia" PRINT "----------------------------------------" PRINT " Valores Actuales:" PRINT PRINT " Amplitud:"; amplitud PRINT " Frecuencia:"; frec PRINT PRINT "Seleccionar una opcion o" PRINT "Presionar S para salir del programa " 106 Phone2$ = "T240L64MLO4EGEGEGEGEGEGEGEGEGEGEGEGEGEGEG": PLAY Phone2$ 110 cmd$ = INKEY$ 120 IF cmd$ = CHR$(49) THEN GOTO 150 121 REM 54 "6"; 52 "4" 125 IF cmd$ = CHR$(50) THEN GOTO 200 130 IF cmd$ = CHR$(51) THEN GOTO 250 131 REM 50 "2" ;56"8" 133 IF cmd$ = CHR$(52) THEN 300 IF cmd$ = CHR$(53) THEN 400 IF cmd$ = CHR$(54) THEN 450 IF cmd$ = CHR$(55) THEN 500 IF cmd$ = CHR$(56) THEN 550 IF cmd$ = CHR$(83) THEN 600 IF cmd$ = CHR$(115) THEN 600 GOTO 110 150 'SENOIDAL - COMIENZO CLS PRINT "Senoidal " PRINT PRINT "Presionar espaciadora para terminar." DIM a(2500) FOR i = 1 TO 15 a(i) = amplitud * SIN(frec * i) NEXT i 10 'empieza ciclo cmd$ = INKEY$ IF cmd$ = CHR$(32) THEN GOTO 104 FOR i = 1 TO 15 OUT 888, a(i) NEXT i GOTO 10 'SENOIDAL - FINAL 200 'CUADRADA - COMIENZO CLS PRINT "CUADRADA _-_-_-_-_-_-_-_-_-_-_" PRINT PRINT "Presionar espaciadora para terminar." 201 cmd$ = INKEY$ IF cmd$ = CHR$(32) THEN GOTO 104 FOR p = 1 TO frec OUT 888, amplitud NEXT p FOR p = 1 TO frec OUT 888, 0 NEXT p GOTO 201 'CUADRADA - FINAL 250 'TRIANGULAR -COMIENZO CLS PRINT " TRIANGULAR /\/\/\/\/\/\/\/\/\/\/\/\/" PRINT PRINT "Presionar espaciadora para terminar." DIM B(2500) amplitud = 255 FOR c = 1 TO amplitud B(c) = c NEXT c 299 cmd$ = INKEY$ IF cmd$ = CHR$(32) THEN 104 FOR c = 1 TO amplitud STEP frec OUT 888, B(c) NEXT c FOR c = amplitud TO 1 STEP -frec OUT 888, B(c) NEXT c GOTO 299 'TRIANGULAR - FINAL 300 'DIENTE DE SIERRA \ -1- COMIENZO CLS PRINT " \\\\\\\\ DIENTE DE SIERRA " PRINT PRINT "Presionar Espaciadora para terminar." DIM D(2500) FOR c = 1 TO amplitud D(c) = c NEXT c 350 cmd$ = INKEY$ IF cmd$ = CHR$(32) THEN GOTO 555 FOR c = amplitud TO 1 STEP -frec OUT 888, D(c) NEXT c GOTO 350 'DIENTE DE SIERRA \ -1- FINAL 400 'Aumentar amplitud IF amplitud > 255 THEN GOTO 110 amplitud = amplitud + 15 GOTO 104 450 'Disminuir amplitud IF amplitud < 10 THEN GOTO 110 amplitud = amplitud - 15 GOTO 104 500 'Aumentar frecuencia frec = frec + 10 GOTO 104 550 'Disminuir frecuencia IF frec < 0 THEN 110 frec = frec - 10 555 GOTO 104 600 SYSTEM Listado del Programa 2 - Dibujo.bas COLOR 15, 12, 12 CLS LOCATE 10, 25 PRINT "Generador de se¤ales" PRINT LOCATE 20, 10 PRINT "Usar el teclado numerico para dibujar la se¤al." PRINT " debe estar activada." PRINT " presionar cualquier tecla para continuar..." DO WHILE pedo$ = "" pedo$ = INKEY$ LOOP GOTO menu 1 CLS SCREEN 1 DIM a(500) DIM B(500) grab = 0 8 COLOR 2, 10, 10 PRINT "presionar para terminar" COLOR 1, 15, 15 LINE (19, 19)-(319, 180), , B al = 25 LOCATE 3, 1 PRINT al FOR l = 8 TO 20 STEP 4 LOCATE l, 1 al = al - 5 PRINT al NEXT l LOCATE 23, 1 PRINT " 0" FOR lin = 30 TO 170 STEP 10 LINE (21, lin)-(318, lin) NEXT lin FOR col = 20 TO 300 STEP 20 LINE (col, 20)-(col, 180) NEXT col x = 20 y = 100 xv = 21 yv = 100 10 eb$ = INKEY$ LINE (x, y)-(xv, yv), 2 xv = x yv = y IF eb$ = CHR$(54) THEN GOTO 20 IF eb$ = CHR$(52) THEN GOTO 30 IF eb$ = CHR$(56) THEN GOTO 40 IF eb$ = CHR$(50) THEN GOTO 50 IF eb$ = CHR$(57) THEN GOTO 60 IF eb$ = CHR$(51) THEN GOTO 70 IF eb$ = CHR$(27) THEN GOTO 80 a(x) = y GOTO 10 20 x = x + 1 GOTO 10 30 x = x - 1 GOTO 10 40 y = y - 1 GOTO 10 50 y = y + 1 GOTO 10 60 x = x + 1 y = y - 1 GOTO 10 70 x = x + 1 y = y + 1 GOTO 10 80 COLOR 11, 10, 10 LOCATE 2, 5 PRINT "reproduciendo la se¤al..." LOCATE 24, 5 PRINT "presionar para terminar." IF grab = 0 THEN GOTO 83 grabado: SCREEN 1 COLOR 11, 10, 10 CLS LOCATE 2, 5 PRINT "reproduciendo la se¤al..." LOCATE 25, 5 PRINT "presionar para terminar." LINE (19, 19)-(319, 180), , B al = 25 LOCATE 3, 1 PRINT al FOR l = 8 TO 20 STEP 4 LOCATE l, 1 al = al - 5 PRINT al NEXT l LOCATE 23, 1 PRINT " 0" FOR lin = 30 TO 170 STEP 10 LINE (21, lin)-(318, lin) NEXT lin FOR col = 20 TO 300 STEP 20 LINE (col, 20)-(col, 180) NEXT col x = 20 y = 100 xv = 21 yv = 100 FOR x = 21 TO 319 y = a(x) LINE (x, y)-(xv, yv), 8 xv = x yv = y NEXT x 83 xv2 = 20 FOR x = 21 TO 319 OUT 888, a(x) xv2 = x - 1 vx = a(x) - 1 NEXT x cmd$ = INKEY$ IF cmd$ = CHR$(27) THEN 85 GOTO 83 menu: 85 SCREEN 0 COLOR 15, 1, 1 CLS PRINT PRINT PRINT PRINT "(D)ibujar se¤al " PRINT "(G)rabar" PRINT "(C)argar" PRINT "(S)alir" PRINT "" 2 PRINT INPUT p$ 89 IF p$ = "D" OR p$ = "d" THEN GOTO 1 IF p$ = "g" OR p$ = "G" THEN GOTO GRABAR IF p$ = "S" OR p$ = "s" THEN GOTO SALIR IF p$ = "c" OR p$ = "C" THEN GOTO CARGAR 90 GOTO 89 GRABAR: INPUT "Escriba el nombre del archivo: "; n$ OPEN "O", #1, n$ FOR x = 21 TO 319 PRINT #1, a(x); ","; NEXT x CLOSE 110 GOTO 1 CARGAR: grab = 1 CLS : LOCATE 5, 1 PRINT "nombre del archivo " INPUT n$ OPEN "I", #1, n$ FOR x = 21 TO 319 INPUT #1, a(x) NEXT x PRINT "Leyendo: "; n$ CLOSE GOTO 80 SALIR: SYSTEM ---Escrito por:Gast¢n Salaya--- --------------------------------------------E.B.BBS Tld 23 a 7 (541)-703-5479---------------------------------