30
microcontroladores y robotica conversor analogico digital adc0804 Realizado por A. Marin Facil todo esta inventado o casi, la conversion de analogico a digital para que la informacion pueda ser procesada se consigue con un conversor analogico/digital de la serie ADC080x, estos A/D disponen de una salida de 8 bits y son muy rapidos con una velocidad de conversion de aproximadamente 100uS. Trabajan a 5 Vlts., dispone de reloj interno o externo para saber mas sobre el reloj consular intrucciones aunque lo mas facil es poner un puente R/C entre los pin 19,4 y masa. Las instrucciones son: CS (Chip Select) autoriza el funcionamiento del convertidor WR (Write) Da la orden de inicio del conversor RD (Read) Efectua la lectura de los datos INTR (Indicador fin conversion Con CS y WR con posicion logica I el convertidos A/D se bloquea y no actua. La conversión empieza con la llegada de un pulso I a la entrada de WR si la entrada de CS esta a 0. Durante la transición de I a 0 de la señal en la entrada del WR o del CS, se resetean el controlador interno, y el registro de datos y la salida del INTR se pone a I

Microcontroladores Y Robotica

Embed Size (px)

DESCRIPTION

microcontroladores y robotica

Citation preview

Page 1: Microcontroladores Y Robotica

microcontroladores y robotica 

conversor analogico digital adc0804

 

Realizado por A. Marin  

Facil todo esta inventado o casi, la conversion de analogico a digital para que la informacion pueda ser procesada se consigue con un conversor analogico/digital de la serie ADC080x, estos A/D disponen de una salida de 8 bits y son muy rapidos con una velocidad de conversion de aproximadamente 100uS. Trabajan a 5 Vlts., dispone de reloj interno o externo para saber mas sobre el reloj consular intrucciones aunque lo mas facil es poner un puente R/C entre los pin 19,4 y masa.

Las instrucciones son:

CS (Chip Select) autoriza el funcionamiento del convertidor

WR (Write) Da la orden de inicio del conversor

RD (Read) Efectua la lectura de los datos

INTR (Indicador fin conversion

Con CS y WR con posicion logica I el convertidos A/D se bloquea y no actua.

La conversión empieza con la llegada de un pulso I a la entrada de WR si la entrada de CS esta a 0.

Durante la transición de I a 0 de la señal en la entrada del WR o del CS, se resetean el controlador interno, y el registro de datos y la salida del INTR se pone a I

Después de que la conversión sea completa la patita INTR realiza una transición de I a 0 , esto puede ser usado para interrumpir un microprocesador o señalar la posibilidad de un nuevo resultado para otra conversión

Una operación de lectura del RD con CS a 0 limpia la INTR y autoriza los lacht de salida.

Los periodos entre transiciones de 0 a I o de I A 0 deben ir precedidos de unos periodos de tiempo en espera de 0,5 mS para permitir la adecuación de

Page 2: Microcontroladores Y Robotica

todos los circuitos internos del conversor A/D. Este tiempo puede ser menor aunque es cuestión de controlar las tablas de tiempos según el proceso que se este realizando

Para conseguir una conversión en continuo CS y RD deben de estar a 0 y la patita INTR conectada a la entrada de WR. Esta INTR/WR conexión fuerza a 0 la patita de WR y asegura la operación del circuito 

Pin Nombre Funcion Logica 1 CS- Chip Select Habilita el chip I / 0 2 RD- Salida autorizada Lee la informacion I / 0 3 WR- Start conversion Iniciar conversion I / 0 4 CLKIN Entrada de reloj   5 INTR Indicador fin conversion I / 0 6 Vlts + Señal positiva analogica -0,3/16V

7 Vlts - Señal negativa analogica 0 8 A GND Tierra analogica 0 9 Vref/2 1/2 maximo del Pin 6   10 D GND Tierra digital   11/18 DB7 a DB0 Salidas digitales I / 0 19 CLK R Salidas reloj interno   20 Vcc Alimentacion hasta 6,5V

Atencion esto son datos para el ADC0804 otros conversores de la familia ADC080x aunque son similares tienen diferencias pequeñas pero importantes que deben ser tenidas en cuenta.

Con la Vref/2 (pin9) sin tension la tension que se obtiene de referencia en el interior del conversor es Vcc/2 los que no permite hacer un ajuste de escala fondo.

  PEQUEÑA RUTINA PARA MICROCONTROLADOR.

 Esta rutina sencilla permite una lectura de un ADC0804 desde un microcontrolador pic16F84

Primero debemos de saber la banda en la que se movera la tensión aplicada a los pines 6 y 7 para ajustar la mitad de la misma en el pin 9

Los pines 1 y 2 (CS/RD) del ADC0804 deben estar unidos y conectados a la patita RA3 del PIC.

El pin 3 (WR) debe estar unido a la patita RA4 del PIC

Page 3: Microcontroladores Y Robotica

Los pines DB7 al DB0 se unira a la Puerta B del Pic (RB7/RB0)

El pin 5 (INTR) debe estar sin conexión

rutina:

estado equ 0x03

PTAA_TRA equ 0x05

PTAB_TRB equ 0x06

bsf ESTADO,5 ;Al BANCO 1

clrf PTAA_TRA ;Configura los latch de salida

clrf PTAB_TRB ;Configura los latch de salida

bcf estado,5 ;Al banco0

movlw b’00011000’ ;Carga W con 00011000

mowvf PTAA_TRA ;Aplica a CS/RD y WR un impulso I lo que hace

;que el ADC0804 se bloquee y no actue

goto TEMPORIZACION DE 0,5 mS

BSF estado,5 ;Al banco 1

movlw 0xFF

movwf PTAB_TRB ;Configura la Puerta B de entrada

bcf estado,5 ;Al BANCO 0

movlw b’00010000

movwf PTAA_TRA ;Pone el CS/RD a 0 y WR a I con lo que empieza

;la conversion de analogico a digital

goto TEMPORIZACION DE 0,5 mS

movlwb’00000000’

Page 4: Microcontroladores Y Robotica

movwfPTAA_TRA ;Pone a CS/RD y WR a 0 bloque el conversor y

;manda la señal a los latch de salida

goto TEMPORIZACION DE 0,5 mS

movf PTAB_TRB ;La informacion de la puerta B esta ahora

;en el registro de trabajo W y desde alli donde

;uno quiera.

fin de la rutina. no hay de que.

Hoja de datos del chip ADC0804

Aviso de responsabilidad.

Atencion esto son programas realizados sin interes comercial ni economico alguno, solo desarrollados con animo de enseñanza, no pretendo que funcionen en otros sistemas o para otras personas, cualquier error que exista debe ser subsanado por la persona que lo usa. Cualquier daño que ocasione el uso de este programa es responsabilidad del usuario del mismo. La unica condicion es que se menciona la procedencia de los datos que se esten utilizando. Si tienes alguna duda estoy a tu disposicion

 

 

pagina inicio Pagina articulos asociados

Page 5: Microcontroladores Y Robotica

microcontroladores y robotica 

el control del tiempo en un microcontrolador

 

Realizado por A. Marin

Medidas de tiempo estándar:

1 microsegundo = 0,000001 segundos

1 nanosegundo = 0,000000001 segundos

La medida del tiempo en un microPic esta sujeta a 3 temas:

1- El oscilador externo

2- El TMR0

3- El Divisor de frecuencias

El oscilador externo depende del tipo del sistema de oscilación aquí vamos a considerar exclusivamente el tipo XT a cristal de 4 Mhz.

Recordemos que cada ciclo de instrucción tarda en hacerse 4 periodos de reloj por lo que con un oscilador de 4 Mhz.:

1 Periodo = 1segundo/4.000.000=0,00000025 segundos = 0,25 microsegundos

4 Periodos = 1 ciclo instrucción = 0,25 msg. x 4 = 1 msg. = 1000 nanosegundos

El contador TMR0 o temporizador lo vamos a observar solo en este caso como medidor basándose en el reloj y se da cuando el bit T0CS (5) de OPTION ( Banco1 registro 81 H) es igual a 0.

El TMR0 que es un registro físico de la memoria SFR Banco0 posición 01 H aumenta de valor hasta llegar a 255 en cada ciclo de instrucción, cuando llega a 255 provoca un desbordamiento controlable en el bit T0IF (2) de INTCON que se pone a 1 después del desbordamiento.

Page 6: Microcontroladores Y Robotica

El TMR0 se puede cargar con cualquier registro de 0 a 255.

El divisor de frecuencia es un sistema por el que según ciertas combinaciones se aplican divisores de tiempo que nos permiten ralentizar los ciclos de instrucciones.

Estas combinaciones se obtienen con los bits 0,1 y 2 del Registro OPTION (81 H)

FORMULA PARA CALCULAR EL TIEMPO:

Tiempo = 4 x Tiempo de cada ciclo x Valor a contar de TMR0 x Divisor de frecuencia

Explicación:

4 ---- ciclo de instrucción = 4 ciclos de reloj

Tiempo de cada ciclo ---- 1/Valor del oscilador

Valor a contar de TMR0 --- Valor introducido en el TMR0 que asciende hasta 255

Divisor de frecuencia --- Factor constante aplicado para alargar los periodos del reloj

Por lo que el máximo tiempo controlable por un programa cargado el TMR0 con 255 el divisor de frecuencia con el valor (111) o sea 255 y un oscilador de 4 Mhz. seria:

Tiempo= 4 x 1/4000000 x 255 x 255 = 0,065025 segundos = 65,025 microsegundos.

Ejemplo para conseguir un segundo de tiempo. (No es exactamente un segundo pero desconozco otro sistema si sabes alguno muy agradecido por decírmelo)

;Programa en ensamblador para conseguir 1 segundo + ó –

Page 7: Microcontroladores Y Robotica

;Después de provocar un RESET se encenderá un LED al 1 segundo

;Al programar el microcontrolador desconectar el WDT

list                   p=16c84

radix hex

                          tmr0_opt equ 0x01

                          status equ 0x03

                          intcon equ 0x0b

                          ptb equ 0x06

                          aux equ 0x0e

  org 0

goto inicio

org 5

            inicio bsf status,5 ;pone bit 5 de status = 1 . Ir al Banco 1

clrf ptb ;selecciona puertaB como salida

movlwb’00000111’ ;w=00000111

movwf tmr0_opt ;carga el divisor de frecuencias con 111 (1:255)

bcf status,5 ;pone bit 5 de status = 0 . Ir al banco 0

clrf ptb ;Registro de Puerta B = 0

          unsgd movlw 0x64 ;Carga W con 0x64 (en decimal 100)

movwf aux ;Carga el registro aux (0x0e) con el valor 0x64 (100)

          contabcf intcon,2 ;pone a 0 el bit 2 de INTCON .Señalizador de

;desbordamiento del TMR0 = 0

Page 8: Microcontroladores Y Robotica

movlw0xd8 ;carga W con valor literal 0xd8 (216 en decimal)

movwf tmr0_opt ;Carga el TMR0 con el valor 0xd8 (216) lo que da un

;periodo hasta el desbordamiento de 255-216=39

        conta1btfss intcon,2 ;Comprueba si T0IF a cambiado a 1 si es asi es

;porque hubo desbordamiento del TMR0 y en ese caso

;se produce un brinco

goto conta1 ;En cada ciclo de instrucción el TMR0 sube una unidad

;hasta llegar a 255

decfszaux,1 ;decrementa una unidad por cada ciclo de instrucción

;y recarga el registro aux con el nuevo valor.

;por ciclo aux=aux-1 si llega a 0 brinca

goto conta ;vuelve al bucle de 39 en el TMR0

movlw0xff ;carga W con 11111111

movwf ptb ;enciende los LED

end

resumiendo

tiempo = 4 x 1/4000000 x 39 x 100 x 255 = 0,9945 segundos

 

Aviso de responsabilidad.

Page 9: Microcontroladores Y Robotica

Atencion esto son programas realizados sin interes comercial ni economico alguno, solo desarrollados con animo de enseñanza, no pretendo que funcionen en otros sistemas o para otras personas, cualquier error que exista debe ser subsanado por la persona que lo usa. Cualquier daño que ocasione el uso de este programa es responsabilidad del usuario del mismo. Si tienes alguna duda estoy a tu disposicion.

 

pagina inicio temas asociados

Page 10: Microcontroladores Y Robotica

microcontroladores y robotica 

Calculo de tiempo en bucles de retardo anidados

Realizado por A. Marin

Basicamente la precision del tiempo en los microcontroladores depende del tipo de oscilador y es en los osciladores XT o sea los controlados por cristal de cuarzo en los que se obtiene mejor precision.

Estamos todos de acuerdo en que las instrucciones de los programas son de 1 o 2 ciclos de instruccion y tambien estamos de acuerdo que cada instruccion equivale a 4 ciclos de reloj.

Partamos de un oscilador tipo basico de 4 Mhz, lo que nos daria:

TR (Tiempo Reloj)= Periodo de oscilador/Frecuencia oscilador

TR=1sg/4.000.000 de ciclos por segundo

TR en nanosegundos= 1.000.000.000/4.000.000=250 nanosegundos

TI (Tiempo Instruccion)=4 x TR= 4 x 250 nsg =1000 nsg = 1microsegundo = 1usg.

Resumiendo cada instruccion tarda segun el tipo entre 1usg. y 2 usg. en ejecutarse.

Veamos cuando tardan cada instruccion de programa:

Goto, Call, Return, RetlW, Retfie --------> Tardan 2 ciclos de instruccion

Decfsz, Incfsz, Btfsc, Btfss ----------------> Tardan 1 o 2 ciclos segun instruccion

Todas las demas ordenes tardan 1 ciclo de instruccion.

Ahora vamos a estudiar un bucle de retardo anidado tipo.

Primero empezamos con las rutinas de inicio de configuracion de

Page 11: Microcontroladores Y Robotica

posiciones de memoria, tanto de cont1 como de cont2, eliminado TMRO y WDT, y realizado un inicio de programa basico.

------------- bucle decfsz cont1,1

---------------------------goto bucle

---------------------------decfsz cont2,1

---------------------------goto bucle

El bucle de cont1 necesita 3 ciclos para ejecutarse

1 ciclo ------> decfsz conta1,1

2 ciclos ----> goto bucle

esto durante 255 veces la vez 256 necesita solo 2 ciclos porque llega a 0 y salta la instruccion goto bucle, esto nos darias en forma matematica

(2 x 255)+ 2 = 767 o en gorma de formula (conta1 x 3)+2= ciclos bucle conta1

Seguimos ahora con el bucle conta2:

El bucle conta2 necesita 3 ciclos y vuelve al bucle anterior de conta1. Decrementa i en conta2 y repite el ciclo anterior en conta1

1 ciclo ------- > decfsz conta2,1

2 ciclos -----> goto bucle

Estos ciclos se repiten 255 veces en conta2 lo que matematicamenta da:

( 255 ( 767 + 3 )) + 2 = total ciclos que en forma de formula nos daria

( conta2 ((( conta1 x 3) + 2) + 3) + 2=total ciclos instruccion

Total ciclos instruccion x 4 x tiempo de reloj = tiempo total

Es decir que podemos precargar las posiciones de conta1 y conta2 con determinados valores que serviran para conseguir el periodo de tiempo que

Page 12: Microcontroladores Y Robotica

nos interese.

Este bucle con estas formulas añadiendo contadores y bloqueando la funcion de interrupcion del TMR0 y WDT, permite alargar indefinidamente el tiempo de conteo dado que si añadimos una nueva posicion o Conta3 al bucle anterior, este se repetiria 256 veces mas lo que nos llevaria a minuto y con otro bucle a las 3 horas, al mes, etc. etc. etc. y con 10 bucles un muy buen monton de años.

 

Aviso de responsabilidad.

Atencion esto son programas realizados sin interes comercial ni economico alguno, solo desarrollados con animo de enseñanza, no pretendo que funcionen en otros sistemas o para otras personas, cualquier error que exista debe ser subsanado por la persona que lo usa. Cualquier daño que ocasione el uso de este programa es responsabilidad del usuario del mismo. Si tienes alguna duda estoy a tu disposicion.

 

Pagina inicio pagina asociada

Page 13: Microcontroladores Y Robotica

microcontroladores y robotica 

 

MOTORES

 

Uno de los problemas que se presentan cuando se pretende controlar un robot es el control de los motores, esto se puede solucionar con facilidad

con varios chips los, ULN2003A, L293C,   ULN2803A , etc.

Nosotros tenemos dos placas una la MT293 basada en el chip L293 y la MT2803 basada en el chip ULN2803. (Ver materiales).

El chip L293A es un driver diseñado para proporcionar corriente a mecanismos impulsores bidireccionales de hasta 1 AMp. con voltajes

entre 4,5 y 36 Vlts. con una capacidad maxima de disipacion de potencia de 5 W.

Todas las entradas con TTL compatibles.

Cada canal de salida es un circuito controlador completo administrado por un Darlington capaz de proporcionar hasta 1 Amp.

Una caracteristica importante, es que la alimentacion de los circuitos del chip es diferente a la alimentacion de los canales, lo que da estabilidad al

circuito.

Puede funcionar con temperaturas entre 0 y 70 grados y tiene control interno de temperatura, lo que aconseja en caso de altos consumos un

cierto nivel de refrigeracion del circuito.

De los cuatro canales por pares estan controlados por una señal añadida de habilitacion. por lo que para controlar un canal de salida se deben enviar dos señales una al canal y la otra a la habilitacion del par de

canales.

Las caracteristicas del chip por Pines son:

PIN NOMBRE DESCRIPCION

1 1,2 EN Control canales 1 y 2

Page 14: Microcontroladores Y Robotica

2 1A Entrada señal canal 1

3 1Y Salida potencia canal 1

4   Tierra

5   Tierra

6 2Y Salida potencia canal 2

7 2A Entrada señal canal 2

8 VCC2 Alimentacion de las cargas

9 3,4 EN Control canales 3 y 4

10 3A Entrada señal canal 3

11 3Y Salida potencia canal 3

12   Tierra

13   Tierra

14 4Y Salida potencia canal 4

15 4A Entrada señal canal 4

16 VCC1 Alimentacion 5V L293

Con este chip se puede controlar todo tipo de dispositivos que necesiten en un momento determinado cierta tension con un nivel de potencia,

reles, lamparas, motores, dentro de un orden lo que sea.

La logica que hace que actue el L293 es la siguiente:

LOGICA HABILITACION LOGICA CANAL LOGICA SALIDA

Page 15: Microcontroladores Y Robotica

Nivel "1" Nivel "1" Nivel "1"

Nivel "1" Nivel "0" Nivel "0"

Nivel "0" Nivel "1" Sin señal

Nivel "0" Nivel "0" Sin señal

Nuestra placa MT293 es un montage que recibe señales tipo TTL de un microcontrolador que vamos a resumir aqui en un PIC16F84, estas

señales pasan por un 40106 que filtra y estabiliza la señal y este a su vez a un chip L293, el cual controla 4 salidas independientes, a la tension

suministrada por la alimentacion de cargas (Pin 8).

Control de motores de corriente continua.

Este es el esquema basico para controlar un motor de corriente continua que funcione en dos direcciones y control de paro.

 

 

la logica para que funcione este circuito es :

Logica en Pin9

control canales 3 y 4

Logica en Pin 10 . Entrada señal canal 3

Logica en Pin 15 Entrada señal canal 4

Actividad del Motor

Nivel "1" Nivel "1" Nivel "1" Parada

Page 16: Microcontroladores Y Robotica

Nivel "1" Nivel "1" Nivel "0" Giro Sentido A

Nivel "1" Nivel "0" Nivel "1" Giro Sentido B

Nivel "1" Nivel "0" Nivel "0" Parada

Nivel "0" Nivel "1"-"0" Nivel "1" - "0" Motor desconectado

 

Sencillo no?. Un ejemplo tipico de orden seria mandar una señal por las patitas de un PIC de la siguiente forma:

1 1 1 0 0 0 0 0

Salida clasica de una puerta. El bit 5 al pin 9, el bit 6 al pin 10 y el bit 7 al pin 15

sobre nuestra placa o sobre un L293 daria como resultado el paro inmediato del motor.

1 0 1 0 0 0 0 0

Haria que el motor funcionara en un sentido.

Ojo se debe prestar atencion a la duracion del tiempo en cada orden.

Otra forma de conectar dos motores es segun este esquema:

motor 1                       motor 2

Page 17: Microcontroladores Y Robotica

 

aqui como se observa se pueden controlar dos cargas (motores, reles, etc) haciendo que funcionen independientemente, las dos cargas se

pueden conectar asi o las dos a la fuente de alimentacion y a masa pero de esta forma lo que se consigue es que los motores funcionen cada uno

en direccion contraria al otro, si se unen a la misma fuente los dos funcionaran pero en el mismo sentido segun se apliquen ordenes a los pines 10 y 15, Se entiende que como esta rutina es para 1/2 del Chip L293 en realidad con la placa MT293 se pueden controlar 4 motores

independientes.

Las logicas serian:

Logica en Pin9

control canales 3 y 4

Logica en Pin 10 . Entrada señal canal 3

Logica en Pin 15 Entrada señal canal 4

Actividad en Motor 1

Actividad en Motor 2

       

Nivel "1" Nivel "1" Nivel "1" Stop Gira

Nivel "1" Nivel "0" Nivel "0" Gira Stop

Nivel "0" Nivel "0" o "1" Nivel "0" o "1" Motor 0 Motor 0

No repito las rutinas de activacion pero son similiares cambiando las actividades logicas de las salidas de las Puertas del microcontroladorde a

las explicadas con anterioridad.

Page 18: Microcontroladores Y Robotica

--------

Aviso de responsabilidad.

Atencion esto son programas realizados sin interes comercial ni economico alguno, solo desarrollados con animo de enseñanza, no pretendo que funcionen en otros sistemas o para otras personas, cualquier error que exista debe ser subsanado por la persona que lo usa. Cualquier daño que ocasione el uso de este programa es responsabilidad del usuario del mismo. Si tienes alguna duda estoy a tu disposicion.

 

Page 19: Microcontroladores Y Robotica

microcontroladores y robotica 

 

PUERTO SERIE RS-232C

 Este puerto el RS232C, existente en todos los ordenadores actualmente es el sistema mas comun para la transmision de datos entre ordenadores. 

El RS232C es un estandar de comunicaciones propuesto por la Asociacion de Industrias Electronicas (EIA) y es la ultima de varias versiones anteriores. 

Lo mas importante del estandar de comunicaciones es la funciones especifica de cada pin de entrada y salida de datos porque nos encontramos basicamente con dos tipos de conectores los de 25 pines y los de 9 pines, es probable que se encuentre mas la version de 9 pines aunque la version de 25 permite muchas mas informacion en la transferencia de datos. 

Las señales con la que actua el puerto son digitales (0 - 1) y la tension a la que trabaja es de 12 Voltios, resumiendo:

12Vlts. = Logica “0”

-12 Vlts = Logica “1” 

Las caracteristicas de los pines y su nombre tipico son: 

TXD Transmitir Datos Señal de salida

RXD Recibir Datos Señal de entrada

RTS Solicitud de envio Señal de salida

DTR Terminal de datos listo Señal de salida

CTS Libre para envio Señal de entrada

DSR Equipo de datos listo Señal de entrada

DCD Deteccion de portadora Señal de entrada

SG Tierra Referencia para señales

RI Indicador de llamada Señal de entrada

 

Page 20: Microcontroladores Y Robotica

Existen hasta practicamente 25 mas señales pero no son muy usadas y para usos con el microcontrolador generalmente no son necesarias. En caso de mayor interes en el Puerto RS232C hay otras paginas mucho mas profundas en cuanto a su desarrollo. 

Posiciones y explicacion de los pines 

Conector 25 pines Conector 9 pines Nombre Descripcion 1 1 - Masa chasis 2 3 TxD Transmit Data 3 2 RxD Receive Data 4 7 RTS Request to send 5 8 CTS Clear to send 6 6 DSR Data Set Ready 7 5 SG Signal Ground 8 1 DCD Data Carrier Detect

15 - TxC Transmit Clock 17 - RxC Receive Clock 20 4 DTR Data Terminal Ready 22 9 RI Ring Indicator 24 - RTxC Transmin/Receive Clock

  

Page 21: Microcontroladores Y Robotica

Los pines que portan los datos son RxD y TxD los demas se encargan de otros trabajos, el DTR indica que el ordenador esta encendido, DSR que el dispositivo conectado al puerto esta encendido, RTS que el ordenador al no estar ocupado puede recibir datos, al reves de CTS que lo que informa es que es el dispositivo el que puede recibir datos, DCD detecta que existen presencia de datos, etc.

Con los puertos de E/S se pueden intercambiar datos mientras que las IRQ producen las interrupciones para indicar a la CPU que ha ocurrido un acontecimiento (ha cambiado el estado de alguna señal de entrada)

Page 22: Microcontroladores Y Robotica

En el PC el puerto RS232 esta controlado mediante un circuito integrado “Transmisor-Receptor-Asincrono Universal” (UART) EL 16550A con buffers de E/S Aunque existen otros modelos mas antiguos y posiblemente saldran modelos mejorados).

Para controlar el puerto serie, la CPU usa direcciones de E/S y direcciones de interrupcion (IRQ), durante mucho tiempo fueron fijas las direciones de E/S y las IRQ por ejemplo en un AT-286 son para COM1 la direccion 3F8h y el IRQ4 y para COM2 la 2F8h e IRQ3, luego el estandar cambio al añadir nuevos puertos serie siendo las direcciones de E/S, 3E8 para COM3 y 2E8 para COM4, sin especificar las IRQ , teniendo que ser el usuario quien debe especificarlas en funcion de las que tenga libres o el uso que vaya a hacer de los puertos serie, pudiendo tener un diferentes puertos las mismas IRQ siempre que no se utilicen los dos al mismo tiempo, ya que en caso contrario pueden aparecer problemas.

Cuando ocurre un evento en un puerto serie se activa la IRQ que avisa a la CPU que debe recoger el dato lo antes posible, pues se puede anular con un nuevo dato, para eso esta la UART 16550A que incluye 2 buffers o almacenes de informacion de tipo FIFO (First In Firts Out) uno para entrada y otro para salida de 16 bytes que puede guardar los datos antes de que la CPU los recoja.

El RS232C puede hacer transmision de datos en grupos de 5, 6, 7, u 8 bits a determinada velocidad (normalmente 9600 bits por segundo o mas). despues de los datos, le sigue un bit opcional de paridad (indica que el numero de bits transmitidos es par o impar) y luego 1 o 2 bits de stop. Un protocolo clasico de transmision de datos seria el 8N1 que quiere decir,. 8 bits de datos, sin paridad y 1 bit de stop.

La transmision debe de ser constante y a una velocidad predeterminada. Los bits deben de llegar uno detras de otro y en determinados instantes de tiempo .

Antes de iniciar cualquier comunicacion con el puerto RS232 se debe de determinar el protocolo a seguir dado que el estandar del protocolo no permite indicar en que modo se esta trabajando, es la persona que utiliza el protocolo el que debe decidir y configurar ambas partes antes de inciciar la transmision de datos.

Siendo los parametros a configurar los siguientes:

Protocolo serie (numero bits-paridad-bits stop)

Velocidad de puerto

Protocolo de control de flujo (RTS/CTS o XON/XOFF).

Dado que tenemos una ligera idea de como funciona un puerto serie RS-232, ahora vamos a conectar el puerto serie con el microcontrolador.

Page 23: Microcontroladores Y Robotica

Los microcontroladores en funcion de su vinculacion con el puerto RS232 se deben clasificar en que puedan o no trabajar directamente con el control del puerto.

Nosotros nos vamos a dedicar a mi micro estrella por ahora el PIC 16F84, este no incorpora el USART por ello las comunicciones con el puerto deben de hacerse mediante rutinas de software.

El primer problema es que los niveles logicos TTL que salen del micro no son compatibles con los niveles logicos del puerto, para ello debemos introducir en el circuito un puente que nos traduzca los datos del micro al puerto y viceversa, este puente es el micro MAX232 o el ICL232 (son exactamente iguales).

Nosotros hemos creado la placa PL232 que facilita esta transmision cambiando las señales logicas del micro adaptadas al puerto y viceversa.

Para la visualizacion de las señales y la comunicacion del PC con el micro es necesario unas rutinas macro que gestione el software del micro asi como un programa base para el PC que gestione el control dentro del Ordenador

El programa para controlar el PC sirve cualquiera que gestione el puerto serie. Uno muy comun es el programa TERMINAL en DOS (que se encuentra en la red) aunque los hay mejores este es bastante bueno por su sencillez y facilidad de uso.

Tanto el programa TERMINAL como los macros para la programacion se pueden encontrar en la red.

 

 

Aviso de responsabilidad.

Atencion esto son programas realizados sin interes comercial ni economico alguno, solo desarrollados con animo de enseñanza, no pretendo que funcionen en otros sistemas o para otras personas, cualquier error que exista debe ser subsanado por la persona que lo usa. Cualquier daño que ocasione el uso de este programa es responsabilidad del usuario del mismo. Si tienes alguna duda estoy a tu disposicion.

 

Page 24: Microcontroladores Y Robotica