Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
PROYECTO Diseño y fabricación de un robot móvil de exploración PROYECTA: D. Bernardo Fernández Carrión Tutor: D. Carlos Vivas Venegas Escuela Superior de Ingenieros Sevilla
Proyecto Vehículo Explorador
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
INDICE
1. MEMORIA................................................................................................................... 1 1.1. Objetivos .................................................................................................................... 1 1.2. Un poco de historia. ................................................................................................... 2 1.3. Descripción mecánico eléctrica.- ............................................................................... 2 1.4. Sistema de tracción.-.................................................................................................. 3 1.5 Recepción de la señal.................................................................................................. 3 1.6 Control de los motores.-.............................................................................................. 4 1.7 Grabación y lectura de la memoria. ............................................................................ 5 1.8 La rutina principal....................................................................................................... 6 1.9 Microcontrolador usado.............................................................................................. 7 1.10 Lectura de la señal de control para los motores........................................................ 7 1.11 Receptores láser modulados...................................................................................... 7 1.12 Sobre el procedimiento de escritura.......................................................................... 8 1.13 Sobre el procedimiento de lectura............................................................................. 8 1.14 Sugerencias y posibles mejoras ................................................................................ 8 2. Anexo de códigos...................................................................................................... 10 2.1 Juego de instrucciones del microcontrolador 16f84. ................................................ 10 2.1 Los registros principales. .......................................................................................... 11 2.1.1 El registro de estado......................................................................................... 11 2.1.2. El registro de Opcion...................................................................................... 12 2.1.3. El registro de interrupción .............................................................................. 13 2.2 Rutinas experimentadas. ........................................................................................... 14 2.2.1. Rutina principal .............................................................................................. 14 2.2.2 Rutina escribe256. ........................................................................................... 31 2.2.3. Rutina pntfin ................................................................................................... 40 2.2.4 Rutina lee256_alea .......................................................................................... 44 2.2.5. Rutina siguepun .............................................................................................. 54 3. Anexo. Fotos y material publicado...................................................................... 56 3.1. Fotos de interés (Orden no cronológico). ................................................................ 56 3.2. Material publicado ................................................................................................... 64 3.3 Correo electrónico del autor...................................................................................... 64 4. Planos ........................................................................................................................... 65 5. Especificaciones y características técnicas......................................................... 68
Proyecto Vehículo Explorador Página 1
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
1. MEMORIA.
1.1. Objetivos. El presente proyecto, surge como una idea de aplicación de los
microcontroladores como componente principal, ayudado de los periféricos necesarios
para cumplir el propósito de ser lo mas próximo a un juguete y el de emplear el mayor
número de componentes reciclados o elaborados desde el nivel más bajo.
El “Explorador” como le llamaré desde este momento fue pensado con ciertas
pretensiones, que a lo largo del tiempo fueron cambiando hasta llegar a las que se
describen finalmente en estas líneas.
El explorador, puede dirigirse a un punto de destino en modo no automático, controlado
por medio de un conjunto emisor-receptor comercial de los usados en aeromodelismo.
Está dotado de una memoria, externa al microcontrolador usado, que puede ir
memorizando las órdenes recibidas por los bloques de control de los dos motores de que
dispone.
En el punto de partida, se dispone de una baliza por puntero láser que servirá al Explorer
para el trayecto de vuelta.
Una vez que el Explorer haya alcanzado su objetivo, se envía una señal que hará que
comience el retorno al punto de partida. Desde el momento que se genera esta señal, el
Explorer entra en modo automático.
El Explorer reproducirá el camino grabado en su memoria hasta que sea interceptado por
el haz láser, momento a partir del cual, ignora lo grabado y sigue un algoritmo de
seguimiento de la luz láser.
Proyecto Vehículo Explorador Página 2
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
1.2. Un poco de historia. La idea primera era que el explorador pudiera ser dirigido por
radio en un entorno no muy hostil, suelo llano, no muchos obstáculos, libre de pendientes
etc., a una distancia entre 50 y 100 metros, limitada únicamente por el sistema emisor-
receptor. Se pensaba en el control desde un portátil y en la posibilidad de que el
explorador pudiera incorporar una cámara wifi, de manera que teniendo buena cobertura
de un entorno de red, pudiera controlarse el desplazamiento en tiempo real sin necesidad
de estar viendo directamente al vehículo.
Una vez que se decidiera el fin del trayecto de ida, el vehículo que habría ido grabando su
posición en una memoria, iniciaría la maniobra de posicionamiento opuesto. A
continuación, debería seguir la ruta previamente grabada en su memoria hasta el punto de
origen.
El Explorador tenía que ser un vehiculo de tipo oruga, con dos motores de tracción
delantera y una rueda loca atrás. Para no complicar el hardware, no se contemplaba la
marcha atrás aunque como se verá mas adelante, su incorporación siempre es posible. El
conjunto motor ideal es el que proporciona un servo trucado de los que se usan en
modelismo. Estos servos, si se les quita un tope que les limita el giro y el potenciómetro de
referencia de posición y contando la buena reductora de que disponen, permiten disponer
de un motor con una velocidad y par motor aceptables. En una prueba de carga que hice,
lo cargué con un paquete de 1 Kg. y tiraba perfectamente de él. Hay que tener en cuenta
que mide 24 cm. de largo y la distancia entre las partes extremas de las ruedas es 18 cm. A
pesar de todo, no quise cargarlo más.
Puesto que la manera de conocer la posición real a este nivel puede ser bastante compleja.
Decidí darle una ayudita al Explorador, proveyendo un sistema de baliza de modo que
aunque estuviera algo perdido, pudiera seguir la señal y que pudiera llegar con éxito a
casa. Mas adelante explico como lo hice.
1.3. Descripción mecánico eléctrica.- Sobre una plancha de plástico de 3 mm. de espesor,
recuperada de la carcasa de un antiguo PC y habiéndola mecanizada en forma de V, se
montaron ambos servos en la parte estrecha de la V, constituyendo el morro del vehículo
(ver fotos 4, 15). Algunas opiniones dicen que el vehículo tiene cierto parecido a un
ratoncito. En la parte trasera y tras haber probado diferentes soluciones como la de un
patín acerado, terminé por usar la rueda loca más pequeña que encontré. Como rueda
Proyecto Vehículo Explorador Página 3
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
también he probado varios tipos unas planas de contrachapado de 4 mm y una junta de
goma alrededor, de 80 mm de diámetro, llevaban en su cara
interior unas marcas blancas y negras que permitirían
realizar un encoder (ver fotos 12, 13 y 21). Finalmente y
por problemas de deslizamiento, se optó por unas
comerciales de goma de 60 mm. De diámetro y 23 mm. de
ancho. Como fuente de energía, el Explorador usa seis
acumuladores recargables micro AAA de 1.2 V en serie,
dándonos una batería de 7.2 V que se aplica a un regulador de tipo 7805 para proveer una
alimentación general estabilizada de 5V. La batería se ubicó por debajo de la plataforma
de plástico por lo que queda no visible. Un interruptor general de tipo palanca, situado a la
izquierda permite el corte general de la alimentación. La antena de recepción, está
localizada en el centro de la parte de atrás del vehículo.
1.4. Sistema de tracción.- Como se ha comentado anteriormente, lo forman dos servos
trucados tipo Hitec HS-303 (Foto 4). En principio, se pensó usar
sólo el motor y la reductora descartando la electrónica que incluye
los servos. Los PWM del microcontrolador 16F877 se encargarían
del control de los motores de corriente continua de cada servo. Se
probó la opción de hacer el control mediante un 16F84 auxiliar
sólo para los motores y unos puentes en H. Al final y motivado
principalmente por la frecuencia tan baja de los PWM, a la que de
una parte no llegaba el 16F877 y los grandes retardos para el
16F84, se optó por usar también la electrónica interna del servo.
1.5 Recepción de la señal.- En principio, pensé en el sistema de
apertura de las puertas de garaje, del que en alguna ocasión realicé algún control básico
monocanal. Tenía los módulos Aurel de 433.9 MHz de emisión y recepción y el
codificador-decodificador UM3750 bastante versátil para estos temas (Fotos 3 y 5). La
interfaz humana, la implementé con visual Basic en las primeras pruebas a través del
puerto serie y algunos intentos también por el puerto paralelo (Foto 22). Usando las
señales de control del puerto serie DTR, RTS la propia TXD (por nivel) y usando la DLL
port.dll de B.Kainka de la revista Elector, pueden hacerse cosas muy interesantes. Yo con
esas tres señales, variaba la codificación del 3750 emisor, con lo que podía tener un total
Proyecto Vehículo Explorador Página 4
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
de ocho ordenes diferentes, con la confianza de seguridad del protocolo de comunicación
del 3750. La interfaz visual era muy sencilla, cuatro flechas indicando los sentidos de
movimiento y algunos botones para las demás órdenes (ver foto 22). Los problemas que
encontré con esta solución, fueron varios. En primer lugar la falta de rapidez de respuesta
de la pareja 3750 emisión-recepción, que hacía que algunos momentos del trayecto del
vehículo, el control fuera un poco crítico. Por otra parte, tenía que disponer en el receptor
de un 3750 por cada orden que quisiera recibir. Tenía planeado emular el protocolo del
3750 en un microcontrolador, haciendo toda la decodificación en este micro aunque la
tarea no parecía del todo fácil. Otra pega del puerto serie era la necesidad de una
alimentación externa, aunque con una batería de los mismos mandos a distancia, lo tenía
solucionado. Con la misma interfaz gráfica, también hice pruebas con el puerto paralelo,
con el que me podía ahorrar la alimentación al disponer de más líneas de salida y poder
dedicar varias a alimentar el emisor. Finalmente la lentitud de respuesta y la idea de tener
que emular el protocolo del 3750 para evitar tantos integrados, me hicieron desistir de esta
solución.
Puesto que ya tenía decidido no usar el PWM de 16F877, pensé en utilizar la USAR de
este micro puesto que ya quedaba más descargado. Ahora la idea era enviar un dato
diferente para cada orden por la salida TXD del puerto serie y usando el protocolo RS232.
Esta solución usaba la misma interfaz gráfica que ya tenía resuelta pero me dio también
algunos problemas y la verdad es que no se muy bien si fue por no conocer del todo el
funcionamiento de la USAR del 16F877 o si por problemas en la transmisión, el caso es
que en ocasiones se perdía el dato lo que hacía que el sistema no fuera muy seguro.
Finalmente y puesto que consideraba que la comunicación era una parte secundaria del
proyecto, opté por mi radio de 6 canales Futaba de toda la vida que hacia tiempo que tenia
aparcada y podría darle un buen uso. Dedicaba las señales AILE y RUDD para el control
de los motores y la AUX2 para la orden de vuelta a casa. La conversión de las señales
PWM de analógico a digital deja abierta muchas posibilidades y no tenemos porqué estar
sujeto a un control todo-nada como se hace en este proyecto. Para futuras adaptaciones,
queda pendiente este tema.
1.6 Control de los motores.- La señal PWM que da el receptor Futaba es de 50 Hz y
pulsos entre 1 y 2 mS de duración. Esta señal si es enviada directamente a los dos servos
Proyecto Vehículo Explorador Página 5
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
trucados, consigue el movimiento adelante atrás de cada rueda y con velocidad variable
dependiendo de la posición de la palanca. Por lo tanto el control manual del vehículo es
total. Hay que entender por control manual, el funcionamiento de la tracción del vehículo
en modo abierto por la señal de radio-control. Para el caso automático, (en el modo
automático, el vehículo es autónomo para crear sus señales de mando de los motores)
pensé en dos 555 o lo que es lo mismo el 556 que generarían una velocidad fija. Podría
conseguirse el cambio del sentido de giro, añadiendo otra pareja de comparadores y
haciendo que cuando los pulsos del PWM emitido sean estrechos, se intercale un resistor
adicional en el 556. El control del enable de cada 555 desde el micro es lo que haría la
aparición o no de las señales PWM locales para cada servo. En principio no hay previsto la
marcha atrás en automático por no complicar excesivamente el software y tener que
dedicar otras dos patitas del micro o añadir los comparadores antes comentados. Aquí es
donde podría también tener aplicación la conversión DA/AD.
Para aislar la procedencia de señales para los motores, he usado un relé de tipo DIL de dos
circuitos que se activa por programa en modo automático. En reposo los motores se
conectan directamente a través de los contactos NC del relé al receptor-decodificador
Futaba. En el plano 1 puede verse el esquema eléctrico de cómo está resuelto. Como
resumen de este apartado, los motores se controlan a través de un relé de dos circuitos,
directamente del módulo futaba por los contactos NC o cuando el relé conmuta (modo
automático) a través de las señales PWM locales habilitadas por el micro y aplicadas a
través de los contactos NA del relé.
1.7 Grabación y lectura de la memoria.- La memoria que se usa para leer y grabar la ruta
es una 24LC256 que es una memoria de 32 kbyte con palabras de 8 bits es
decir 32k x 8 bits = 256 kbits. Tiene interfaz I2C y 8 pines.
Las primeras pruebas que realicé fueron de lectura, dado que es
relativamente fácil grabar la memoria usando el programa WinPic800.
Realicé un programa para que la lectura de la memoria fuera aproximadamente cada
segundo y el resultado se enviara por el puerto B. El tiempo de lectura es posible variar
intercalando un retardo en la rutina de lectura. Como el puerto B es el que controla los
motores, podía hacer que el Explorer realizara un recorrido previamente grabado en la
Proyecto Vehículo Explorador Página 6
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
memoria. El fichero fuente de esta prueba es el lee256_PORTB_v4.asm del anexo de
código.
La memoria está estructurada en 128 páginas de 256 bytes. Sin grabar todas las posiciones
están a FFh luego para detectar el final de la grabación se usó el byte 00h, empleándose
unos tres minutos para realizar la lectura de una página. Posteriormente se bajó la
resolución de lectura cambiando el retardo interno para hacer una actuación más fina del
control de los motores. A pesar de todo se comprobó que la memoria está sobrada para
este proyecto. Gran parte de la dificultad de este proyecto es debida al protocolo de
comunicación I2C, quizás en esta parte el uso de una memoria RAM estática hubiera
descargado bastante el software, pero claro tenemos lo de siempre a costa de complicar
bastante más el hardware.
Esta memoria incluye internamente un mecanismo de autoincremento de la dirección en
curso, que aún siendo bueno por simplificar en algunos casos, puede entorpecer en otros.
La solución adoptada en este proyecto fue la de usar el mecanismo de autoincremento en
la grabación de la memoria y grabar desde la posición mas baja hacia la mas alta.
La lectura de la ruta grabada en memoria se haría en modo aleatorio para poder prescindir
del autoincremento y poder además leer la memoria en orden inverso o sea de la posición
más alta a la más baja.
1.8 La rutina principal.- En el fichero fuente se integran las rutinas de escritura, lectura,
punto final y seguimiento del puntero. Las subrutinas del I2C se han incluido al final del
código fuente para evitar problemas de visibilidad de variables. Las subrutinas de retardo
si se dejan aparte por medio del incluye al final del código y para no complicar
excesivamente el código.
En esta rutina es donde se tiene en cuenta que a la hora de volver el vehículo, lo que en su
momento fue orden de derecha, ahora es de izquierda e igualmente con izquierda- derecha.
El código contempla la posibilidad de dos interrupciones una por cambio en el pin INT
que la provocará la orden de llegada al destino, y otra por cambio en el pin RB7 que la
provocará la detección de luz laser modulada y que lanzaría la rutina seguimiento del
puntero.
Proyecto Vehículo Explorador Página 7
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
1.9 Microcontrolador usado.- Finalmente tras algunas pruebas y dado el carácter de este
proyecto, se utilizó el 16F84A que tiene 1K de memoria de programa que queda un poco
justa pero que como microchip ha fabricado el 16F628 de 2K de memoria de programa y
que es compatible con el 84, siempre podrá hacerse la ampliación sin tocar el hardware.
Decidí trabajar con el más popular. Para el reloj se usa un oscilador con un cuarzo de 4
MHz.
1.10 Lectura de la señal de control para los motores.- En modo manual, las señales PWM
RUDD y AILE provenientes del receptor-demodulador Futaba, son enviadas a través de
los contactos cerrados del relé a los servos trucados y a dos AO’s IC1a-b. El doble
amplificador operacional LM358 (ver plano 1), se encarga de separar integrando las
señales PWM, comparando con las referencias de los pines 3 y 5 poniendo a nivel lógico
TTL su salida para enviarlas a los pines RB5 y RB6. Las lecturas periódicas del puerto B,
será lo que se grabe en la memoria de ruta 256.
1.11 Receptores láser modulados.- Una vez que se dé la orden de vuelta a casa (se hace
temporizando la orden de fin de trayecto unos tres segundos aproximadamente), y tras el
Explorador haber realizado la maniobra de cambio de sentido, se iniciaría la reproducción
de la ruta previamente grabada en la 256. Dado que no hay previsto ningún mecanismo de
detección de la posición real y por tanto realimentación y control se tiene prevista la ayuda
que se describe a continuación.
La idea es la de tener una baliza construida con un puntero láser y que el explorador
pueda seguirla para llegar a su punto de partida. Aunque la baliza usada, tiene la
posibilidad de moverse en el plano horizontal por estar montada sobre un motor paso a
paso, en principio, no se usa esta opción y es fija.
Para evitar interferencias luminosas, el puntero láser (Foto 16), se modula con un LM567
especialmente diseñado para estos casos. En el Explorador, se usan dos circuitos
amplificadores demoduladores también con el LM567 que se encargan de avisar al micro
de lo que ven a través de los pines RA0 y RA1. La luz modulada de la baliza debe estar
siempre en el centro de las dos barras de captación. En este punto agradezco la
colaboración de mi colega Nuria de la especialidad de ortoprótesis de mi instituto que me
construyó las barritas (ver foto 15) con resina autopolimerizante para ortodoncia que es un
material del que disponen en el laboratorio. En la base de la barra se encuentra un
Proyecto Vehículo Explorador Página 8
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
fototransistor que se excita por la luz impactada en cualquier parte de la barrita. Si la luz
es interceptada por alguna barra, el 567 con su electrónica asociada, envía un uno al pin
correspondiente. El micro actúa sobre los motores para hacer que el haz quede dentro.
Antes de llegar a la solución que se ha descrito anteriormente, realicé diferentes pruebas
con células LDR (Foto 13), con parejas de infrarrojos, con algún que otro mando a
distancia en desuso e incluso enviando un potente haz de luz proporcionado por una
linterna de las que alumbran a gran distancia.
1.12 Sobre el procedimiento de escritura.- Se realizó la experiencia de grabar por I2C una
256 que realizaba cada segundo una escritura de la señal presente en el puerto B. En el
puerto B se situaron sendos pulsadores que fueron pulsándose aleatoriamante. Una lectura
posterior, confirmaría el éxito de la grabación. Como se ha comentado en otro apartado, la
señal PWM que se envía en el modo manual a los motores, también se adapta para crear
una señal todo nada en dos pines del puerto B (estos sería la equivalencia con los
pulsadores).
1.13 Sobre el procedimiento de lectura.- Se experimentó grabando una 24LC256
directamente con Winpic800 y se realizó el programa lee256_PORTB que tiene por
finalidad mostrar cada segundo por el puerto B posiciones de memoria sucesivas. La
lectura finaliza cuando el byte sea 00. Los motores se activan con RB1 el derecho y con
RB4 el izquierdo por otra parte el relé que conmuta los modos manual-automático obliga a
tener un uno en RB2 para automático o leyendo de la memoria. Así pues los bytes a grabar
serían adelante -> b’00010110’ 0x16 derecha (funciona motor izquierdo) ->
b’00010100’ 0x14 izquierda (funciona motor derecho) -> b’00000110’ 0x06. Como se
ha comentado anteriormente, para poder leer desde la posición más alta a la más baja
(orden inverso a la grabación) se experimentó la lectura aleatoria, alcanzando el éxito con
la rutina lee256_alea.
1.14 Sugerencias y posibles mejoras.- La placa de circuito impreso que se utilizó fue de
simple cara y albergaba componentes SMD y de tamaño estándar. Para una futura versión,
podría emplearse todo SMD con el consiguiente ahorro de espacio. El diseño de la placa
puede mejorarse haciendo que las señales procedentes del receptor Futaba y que tienen
que pasar por el relé hacia los motores no sigan tanto recorrido. El relé debería estar más
cerca del receptor. Esto último ha podido ser motivo de los cambios por interrupción
Proyecto Vehículo Explorador Página 9
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
intempestiva que se provocaban y que creó bastantes problemas. En un futuro diseño, se
podría pensar incluso en sustituir el relé por componentes discretos de estado sólido.
Si se usara el 16F628, podría suprimirse la circuitería de los comparadores LM 358 ya
que al disponer ese micro controlador de convertidores AD, podrían esos convertidores
hacer el tratamiento a las señales PWM.
Debería contemplarse la posibilidad de la grabación del micro “en circuito” para no tener
que quitarlo cada vez que se haga una modificación del código.
El puntero laser no puede ser fijo porque cuando el Explorer se aleja mucho de la ruta, no
hay manera de conseguir que vuelva a corregir y volver al camino correcto. El motor paso
a paso que se usó, a pesar de llevar una reducción mecánica no es lo suficientemente fino
dando saltos excesivos para la distancia entre las barras sensoras que es de solo 6 cm.
Quizás el mecanismo de movimiento de las cabezas de una disquetera o de un disco duro
pudiera servir mejor.
Habría que prever algún modo de detectar la llegada del vehiculo al punto de partida, en la
actualidad no hay ningún modo de hacerlo y por lo tanto hay que estar pendiente de la
llegada para desconectarlo.
Podría plantearse sustituir el sistema de baliza de la ruta final por un sistema de radio
frecuencia. Un par de mini antenas direccionales montadas en el vehículo, detectarían las
señales enviadas por sendos emisores.
En fin las posibilidades que se tienen son enormes a pesar de las dimensiones del vehículo
y el campo de experimentación es inmenso considerando el estado actual de todas las
disciplinas implicadas, electrónica e informática principalmente.
Proyecto Vehículo Explorador Página 10
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2. Anexo de códigos
2.1 Juego de instrucciones del microcontrolador 16f84.
Proyecto Vehículo Explorador Página 11
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.1 Los registros principales.
2.1.1 El registro de estado
Proyecto Vehículo Explorador Página 12
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.1.2. El registro de Opcion
Proyecto Vehículo Explorador Página 13
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.1.3. El registro de interrupción
Proyecto Vehículo Explorador Página 14
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.2 Rutinas experimentadas.
2.2.1. Rutina principal
;***************************** explor_1.asm *****************************
;
; Referencias escribe256.asm pntfin.asm lee256_alea1.asm, siguepun.asm
; Programa principal del vehiculo programable BFCEXPLOR1, recopila varios módulos
; experimentados y referenciados mas arriba.
; Tras una temporización inicial de aproximadamente tres segundos, se lanza el proceso
; de escritura de la 256, durante este tiempo el vehículo se está conduciendo manual-
; mente al destino deseado.
; Una vez alcanzado el destino, con la señal del emisor AUX2 se provoca una interrupción
; por cambio en el pin INT/RB0. El vehiculo inicia la maniobra de cambio de sentido y
; finalizada da comienzo a la rutina lee256 controlándose los motores por la información
; grabada en la 256. Si durante el trayecto las fotobarras detectan la luz láser modulada,
; se provoca una interrupción por cambio en RB7 y se inicia la rutina siguepun.
;============================PRINCIPAL ========================
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
M24LC256_AddressHigh ; Guarda el valor de la dirección de memoria a
M24LC256_AddressLow ; escribir o leer.
M24LC256_Dato
I2C_ContadorBits ; Cuenta los bits a transmitir o a recibir.
I2C_Dato ; Dato a transmitir o recibido.
Proyecto Vehículo Explorador Página 15
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
I2C_Flags ; Guarda la información del estado del bus I2C.
NIDO
NIDO2
NIDO3
CuentaPosicion
CONTADOR ; para contar los bytes que escribe
ENDC
M24LC256_DireccionEscritura EQU 0xa0; Dirección de la memoria 24LC256 para
M24LC256_DireccionLectura EQU 0xa1; escritura y lectura respectivamente.
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
; - (I2C_UltimoByteLeer)=0, NO es el último byte a leer por el maestro.
; - (I2C_UltimoByteLeer)=1, SÍ es el último byte a leer por el maestro.
; La definición de las líneas SCL y SDA del bus I2C se puede cambiar según las
; necesidades del hardware.
#DEFINE SCL PORTA,3 ; Línea SCL del bus I2C.
#DEFINE SDA PORTA,2 ; Línea SDA del bus I2C.
#DEFINE Posicion 0x00 ; posicion que se lee
;
;===========================ESCRIBE256 ==========================
ORG 0
goto Inicio_Escribe
Proyecto Vehículo Explorador Página 16
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
ORG 4 ;vector de interrupcion
goto RSI_pntfin
Inicio_Escribe
clrf M24LC256_AddressHigh ; Prepara el byte alto de la pagina
movlw Posicion
movwf M24LC256_AddressLow
Inicio2
bsf STATUS,RP0
movlw b'01100001' ; Entrada de interrupción y estado de motores
movwf PORTB ; Configura el PORTB
movlw b'00000000' ; Interrupcion flanco descendente bit6 = 0
movwf OPTION_REG
movlw b'10010000' ; Interrupción por cambio en RB0/INT y RB
movwf INTCON
bcf STATUS,RP0
bcf PORTB,2 ; asegura que no entra el relé
movlw 0xFF
movwf CONTADOR
InicializaEscritura
bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato
call I2C_EnviaStart ; Comienza el protocolo Nº 1
movlw M24LC256_DireccionEscritura ; Nº 2 Incluida en M24LC256 envía direccion escritura del esclavo
call I2C_EnviaByte ; a partir de las direcciones apuntadas mas abajo
Proyecto Vehículo Explorador Página 17
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
movf M24LC256_AddressHigh,W ; Nº 3
call I2C_EnviaByte
movf M24LC256_AddressLow,W ; Nº 4
call I2C_EnviaByte ; Ahora esperamos el reconocimiento del esclavo
EsperaEsclavo
movf PORTB,0 ; Nº 5 el dato del puerto B se carga en W para escribirlo.
bcf PORTB,2 ; asegura que no entra el relé
call I2C_EnviaByte
call Retardo
decfsz CONTADOR,1
goto EsperaEsclavo
call I2C_EnviaStop ; paso 5 del protocolo
sleep
;=============================PNTFIN =========================
; Cuando se provoca una interrupción por cambio en RB0/INT se lanza esta rutina que
; saca una secuencia de dos salidas del puerto para conseguir una ruta de un rombo y
; conseguir que el móvil se ponga orientado en sentido contrario a la marcha que llevaba.
; Cuando termina la maniobra, se inicia la rutina leealea.
RSI_pntfin
btfsc INTCON,RBIF ; vemos si se ha producido por cambio en RB7
goto Siguepun
Proyecto Vehículo Explorador Página 18
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
;----------------------configura-----------------------------------
bsf STATUS,RP0
movlw b'01100001' ; Entrada de interrupción y estado de motores
movwf PORTB ; Configura el PORTB
movlw b'10001000' ; Interrupción por cambio en RB
movwf INTCON
bcf STATUS,RP0
movlw 0x04
movwf NIDO
Comienzo
bsf PORTB,2 ; activa el rele
bcf PORTB,3
call Retardo_500ms
bsf PORTB,3 ; Intermitencia en el pin RB3
call Retardo_500ms
decfsz NIDO,1
goto Comienzo
RSI
; clrf PORTB
bsf PORTB,2 ; activa el rele
movlw b'11111101' ; movimiento a la izquierda
movwf PORTB
; call Retar3
Proyecto Vehículo Explorador Página 19
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; call Retar4
call Retardo_1s
movlw b'11101111' ; movimiento a la derecha
movwf PORTB
call Retardo_500ms ;
call Retardo_1s
movlw b'11101111' ; movimiento a la derecha
movwf PORTB
call Retardo_500ms ;
call Retardo_1s
movlw b'11101111' ; movimiento a la derecha
movwf PORTB
call Retardo_500ms ;
call Retardo_1s
call Retardo_1s
movlw b'11111101' ; movimiento a la izquierda
movwf PORTB
call Retardo_200ms
; bsf INTCON,7 ; prepara las interrupciones
; goto Inicio_Escribe
;======================= LEEALEA =======================
movlw b'11101001' ; desactivamos el rele y paramos los motores
movwf PORTB
Proyecto Vehículo Explorador Página 20
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; configuramos ahora la interrupción por cambio en RB7
bsf STATUS,RP0
movlw b'11100001' ; Entrada de interrupción y estado de motores
movwf PORTB ; Configura el PORTB
movlw b'01000000' ; Interrupcion flanco descendente
movwf OPTION_REG
movlw b'10001000' ; Interrupción por cambio en RB7
movwf INTCON
bcf STATUS,RP0
bcf PORTB,2 ; asegura que no entra el relé
Inicio_alea
clrf M24LC256_AddressHigh ; Prepara el byte alto de la pagina
movlw 0xff
movwf M24LC256_AddressLow ; la primera posición es la FFh
bsf STATUS,RP0
movlw b'00000000'
movwf PORTB ; Configura el PORTB
; movlw 0xff ; Puerto A como entrada.
; movwf PORTA
bcf STATUS,RP0
InicializaLectura
bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato
call I2C_EnviaStart ; Comienza el protocolo Nº 1
Proyecto Vehículo Explorador Página 21
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
movlw M24LC256_DireccionEscritura ; Incluida en M24LC256 envía direccion lectura del esclavo
call I2C_EnviaByte ; a partir de las direcciones apuntadas mas abajo
Bucle
movf M24LC256_AddressHigh,W
call I2C_EnviaByte
movf M24LC256_AddressLow,W
call I2C_EnviaByte ; Ahora esperamos el reconocimiento del esclavo
EsperaEsclavo_alea
call I2C_EnviaStart ; Nº 2
movlw M24LC256_DireccionLectura ; Nº 3
call I2C_EnviaByte
LeeByte
clrf I2C_Dato
call I2C_LeeByte ; Lo deja en I2C_Dato Nº 4
movf I2C_Dato,W
movwf PORTB
bsf PORTB,3
call Retardo
nop
movf I2C_Dato,1 ; Prueba si vale cero
Proyecto Vehículo Explorador Página 22
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
btfss STATUS,Z ; Prueba fin lectura
goto SiguientePosicion
bsf I2C_Flags,0
call I2C_EnviaStop
sleep
SiguientePosicion
incf CuentaPosicion,1 ;Posicion
movf CuentaPosicion,0
sublw .255 ; 256 posiciones en cada pagina
btfsc STATUS,Z
sleep
bsf I2C_UltimoByteLeer
call I2C_EnviaStop
decf M24LC256_AddressLow,1 ; direccion anterior
; decf M24LC256_AddressLow,1 ; por el autoincremento
; movf M24LC256_AddressLow,W
; sublw .127 ; 128 posiciones en cada pagina
goto InicializaLectura
;========================= SIGUEPUN =========================
; Rutina que se sigue en caso de que se produzca una interrupcion por cambio en RB7.
; básicamente es una rutina para mantener la luz laser entre las dos barras, actuando
; sobre el motor que interese en cada caso.
Siguepun
Proyecto Vehículo Explorador Página 23
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
#define Ver_der PORTA,0
#define Ver_izq PORTA,1
#define Saca_der PORTB,1
#define Saca_izq PORTB,4
; ---------------------------- configurar ---------------------------
bsf STATUS,5
movlw b'11111111'
movwf PORTA
movlw b'00000000'
movwf PORTB
bcf STATUS,5
; ----------------------------- principal ---------------------------
clrf PORTB
bsf PORTB,2 ; para activar el rele
Inicio_sigue
btfss Ver_der
goto Derecha
btfss Ver_izq
goto Izquierda
bsf PORTB,2 ; para activar el rele
bsf Saca_der
bsf Saca_izq
goto Inicio_sigue
Proyecto Vehículo Explorador Página 24
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
Derecha
bsf Saca_der
btfss Ver_izq
goto Izquierda
bcf Saca_izq
goto Inicio_sigue
Izquierda
bsf Saca_izq
btfss Ver_der
goto Derecha
bcf Saca_der
goto Inicio_sigue
;end
;=================== SUBRUTINAS =============================
Retardo
movlw 0x04
movwf NIDO3
Retar
decfsz NIDO,1
goto Retar
decfsz NIDO2,1
goto Retar
; bcf PORTB,3 ; para el in termitente
decfsz NIDO3,1
Proyecto Vehículo Explorador Página 25
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
goto Retar
return
; ------------------M24LC256_InicializaLectura --------------------------------
M24LC256_InicializaLectura
bcf I2C_Flags,0 ; Todavía no ha comenzado a leer ningún dato.
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DireccionEscritura ; Envía dirección de escritura del
call I2C_EnviaByte ; esclavo.
movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
call I2C_EnviaByte ; registros M24LC256_AddressHigh y
movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
call I2C_EnviaByte
return
; Subrutina "SDA_Bajo" -------------------------------------------------------
;
SDA_Bajo
bsf STATUS,RP0 ; Configura la línea SDA como salida.
bcf SDA
bcf STATUS,RP0
bcf SDA ; SDA en bajo.
return
;
; Subrutina "SDA_AltaImpedancia" ---------------------------------------------
;
SDA_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SDA entrada.
Proyecto Vehículo Explorador Página 26
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bsf SDA ; Lo pone en alta impedancia y, gracias a la
bcf STATUS,RP0 ; Rp de esta línea, se mantiene a nivel alto.
return
;
; Subrutina "SCL_Bajo" -------------------------------------------------------
;
SCL_Bajo
bsf STATUS,RP0
bcf SCL ; Configura la línea SCL como salida.
bcf STATUS,RP0
bcf SCL ; La línea de reloj SCL en bajo.
return
;
; Subrutina "SCL_AltaImpedancia" ----------------------------------------------
;
SCL_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SCL entrada.
bsf SCL ; Lo pone en alta impedancia y, gracias a la Rp
bcf STATUS,RP0 ; de esta línea, se mantiene a nivel alto.
SCL_EsperaNivelAlto
btfss SCL ; Si algún esclavo mantiene esta línea en bajo
goto SCL_EsperaNivelAlto ; hay que esperar.
return
;
; Subrutina "I2C_EnviaStart" --------------------------------------------------
;
Proyecto Vehículo Explorador Página 27
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; Esta subrutina envía una condición de Start o inicio.
;
I2C_EnviaStart
call SDA_AltaImpedancia ; Línea SDA en alto.
call SCL_AltaImpedancia ; Línea SCL en alto.
call Retardo_4micros ; Tiempo tBUF del protocolo.
call SDA_Bajo ; Flanco de bajada de SDA mientras SCL está alto.
call Retardo_4micros ; Tiempo tHD;STA del protocolo.
call SCL_Bajo ; Flanco de bajada del reloj SCL.
call Retardo_4micros
return
;
; Subrutina "I2C_EnviaStop" ----------------------------------------------------
;
; Esta subrutina envía un condición de Stop o parada.
;
I2C_EnviaStop
call SDA_Bajo
call SCL_AltaImpedancia ; Flanco de subida de SCL.
call Retardo_4micros ; Tiempo tSU;STO del protocolo.
call SDA_AltaImpedancia ; Flanco de subida de SDA.
call Retardo_4micros ; Tiempo tBUF del protocolo.
return
;
; Subrutina "I2C_EnviaByte" ----------------------------------------------------
;
; El microcontrolador maestro transmite un byte por el bus I2C, comenzando por
; el bit MSB. El byte a transmitir debe estar cargado previamente en el registro
Proyecto Vehículo Explorador Página 28
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; de trabajo W. De la subrutina ejecutada anteriormente I2C_EnviaStart o esta
; misma I2C_EnviaByte,la línea SCL se debe encontrar a nivel bajo al menos durante
; 5 µs.
;
I2C_EnviaByte
movwf I2C_Dato ; Almacena el byte a transmitir.
movlw 0x08 ; A transmitir 8 bits.
movwf I2C_ContadorBits
I2C_EnviaBit
rlf I2C_Dato,F ; Chequea el bit, llevándolo previamente al Carry.
btfsc STATUS,C
goto I2C_EnviaUno
I2C_EnviaCero
call SDA_Bajo ; Si es "0" envía un nivel bajo.
goto I2C_FlancoSCL
I2C_EnviaUno
call SDA_AltaImpedancia ; Si es "1" lo activará a alto.
I2C_FlancoSCL
call SCL_AltaImpedancia ; Flanco de subida del SCL.
call Retardo_4micros ; Tiempo tHIGH del protocolo.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los ocho bits.
goto I2C_EnviaBit
;
call SDA_AltaImpedancia ; Libera la línea de datos.
call SCL_AltaImpedancia ; Pulso en alto de reloj para que el esclavo
call Retardo_4micros ; pueda enviar el bit ACK.
Proyecto Vehículo Explorador Página 29
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call SCL_Bajo
call Retardo_4micros
return
;
; Subrutina "I2C_LeeByte" -------------------------------------------------------
;
; El microcontrolador maestro lee un byte desde el esclavo conectado al bus I2C.
; El dato recibido se carga en el registro I2C_Dato y lo envía a la subrutina
; superior a través del registro W. Se empieza a leer por el bit de mayor peso MSB.
; De alguna de las subrutinas ejecutadas anteriormente I2C_EnviaStart, I2C_EnviaByte
; o esta misma I2C_LeeByte, la línea SCL lleva en bajo al menos 5 µs.
I2C_LeeByte
movlw 0x08 ; A recibir 8 bits.
movwf I2C_ContadorBits
call SDA_AltaImpedancia ; Deja libre la línea de datos.
I2C_LeeBit
call SCL_AltaImpedancia ; Flanco de subida del reloj.
bcf STATUS,C ; En principio supone que es "0".
btfsc SDA ; Lee el bit
bsf STATUS,C ; Si es "1" carga 1 en el Carry.
rlf I2C_Dato,F ; Lo introduce en el registro.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los 8 bits.
goto I2C_LeeBit
;
; Chequea si este es el último byte a leer para enviar o no el bit de reconocimiento
Proyecto Vehículo Explorador Página 30
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; ACK en consecuencia.
;
btfss I2C_UltimoByteLeer ; Si es el último, no debe enviar
; el bit de reconocimiento ACK.
call SDA_Bajo ; Envía el bit de reconocimiento ACK
; porque todavía no es el último byte a leer.
call SCL_AltaImpedancia ; Pulso en alto del SCL para transmitir el
call Retardo_4micros ; bit ACK de reconocimiento. Este es tHIGH.
call SCL_Bajo ; Pulso de bajada del SCL.
call Retardo_4micros
movf I2C_Dato,W ; El resultado se manda en el registro de
return ; de trabajo W.
include <RETARDOSv.INC>
END
Proyecto Vehículo Explorador Página 31
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.2.2 Rutina escribe256.
;***************************** escribe256.asm ***************************
;
; Referencia lee256_alea1.asm
; Escribe la memoria 24LC256 de manera secuencial desde la primera posicion en adelante
; Los pines RB5,6 del puerto B son entradas, unos LED los ponen a 0 y pulsadores a 1
; periódicamente (cada segundo aprox.)se escribe en la memoria lo que se lee de estos pines
; El protocolo de escritura comprende los siguientes pasos:
; 1* Primero el maestro envia la condicion de Start.
; 2* Luego envia el byte de control en modo escritura.
; 3* A continuacion envia el byte de pagina donde se va a escribir Address High Byte.
; 4* Se envia el byte de posicion en la pagina Address Low Byte.
; 5º Se transmiten los datos a escribir. La dirección de la posicion se autoincrementa.
; 6º Por último el maestro envía la condición de Stop.
;
; ZONA DE DATOS **************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
M24LC256_AddressHigh ; Guarda el valor de la dirección de memoria a
M24LC256_AddressLow ; escribir o leer.
M24LC256_Dato
I2C_ContadorBits ; Cuenta los bits a transmitir o a recibir.
I2C_Dato ; Dato a transmitir o recibido.
I2C_Flags ; Guarda la información del estado del bus I2C.
NIDO
NIDO2
Proyecto Vehículo Explorador Página 32
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
NIDO3
CuentaPosicion
CONTADOR ; para contar los bytes que escribe
ENDC
M24LC256_DireccionEscritura EQU 0xa0; Dirección de la memoria 24LC256 para
M24LC256_DireccionLectura EQU 0xa1; escritura y lectura respectivamente.
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
; - (I2C_UltimoByteLeer)=0, NO es el último byte a leer por el maestro.
; - (I2C_UltimoByteLeer)=1, SÍ es el último byte a leer por el maestro.
; La definición de las líneas SCL y SDA del bus I2C se puede cambiar según las
; necesidades del hardware.
#DEFINE SCL PORTA,3 ; Línea SCL del bus I2C.
#DEFINE SDA PORTA,2 ; Línea SDA del bus I2C.
#DEFINE Posicion 0x00 ; posicion que se lee
;
; ******** ZONA DE CÓDIGOS *********************************************
ORG 0
Inicio
clrf M24LC256_AddressHigh ; Prepara el byte alto de la pagina
movlw Posicion
movwf M24LC256_AddressLow
Inicio2
Proyecto Vehículo Explorador Página 33
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bsf STATUS,RP0
movlw b'01100000'
movwf PORTB ; Configura el PORTB
; movlw 0xff ; Puerto A como entrada.
; movwf PORTA
bcf STATUS,RP0
movlw 0x08
movwf CONTADOR
InicializaEscritura
bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato
call I2C_EnviaStart ; Comienza el protocolo Nº 1
movlw M24LC256_DireccionEscritura ; Nº 2 Incluida en M24LC256 envía direccion escritura del esclavo
call I2C_EnviaByte ; a partir de las direcciones apuntadas mas abajo
movf M24LC256_AddressHigh,W ; Nº 3
call I2C_EnviaByte
movf M24LC256_AddressLow,W ; Nº 4
call I2C_EnviaByte ; Ahora esperamos el reconocimiento del esclavo
EsperaEsclavo
movf PORTB,0 ; Nº 5 el dato del puerto B se carga en W para escribirlo.
call I2C_EnviaByte
call Retardo
decfsz CONTADOR,1
Proyecto Vehículo Explorador Página 34
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
goto EsperaEsclavo
call I2C_EnviaStop ; paso 5 del protocolo
; ---------------- subrutinas ----------------------------------------------
Retardo
movlw 0x04
movwf NIDO3
Retar
decfsz NIDO,1
goto Retar
decfsz NIDO2,1
goto Retar
; bcf PORTB,3 ; para el in termitente
decfsz NIDO3,1
goto Retar
return
; ------------------ Retardo_4micros ------------------------------------------
Retardo_4micros
return
; ------------------M24LC256_InicializaLectura --------------------------------
M24LC256_InicializaLectura
bcf I2C_Flags,0 ; Todavía no ha comenzado a leer ningún dato.
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DireccionEscritura; Envía dirección de escritura del
call I2C_EnviaByte ; esclavo.
movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
Proyecto Vehículo Explorador Página 35
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call I2C_EnviaByte ; registros M24LC256_AddressHigh y
movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
call I2C_EnviaByte
return
; Subrutina "SDA_Bajo" -------------------------------------------------------
;
SDA_Bajo
bsf STATUS,RP0 ; Configura la línea SDA como salida.
bcf SDA
bcf STATUS,RP0
bcf SDA ; SDA en bajo.
return
;
; Subrutina "SDA_AltaImpedancia" ---------------------------------------------
;
SDA_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SDA entrada.
bsf SDA ; Lo pone en alta impedancia y, gracias a la
bcf STATUS,RP0 ; Rp de esta línea, se mantiene a nivel alto.
return
;
; Subrutina "SCL_Bajo" -------------------------------------------------------
;
SCL_Bajo
bsf STATUS,RP0
bcf SCL ; Configura la línea SCL como salida.
bcf STATUS,RP0
Proyecto Vehículo Explorador Página 36
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bcf SCL ; La línea de reloj SCL en bajo.
return
;
; Subrutina "SCL_AltaImpedancia" ----------------------------------------------
;
SCL_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SCL entrada.
bsf SCL ; Lo pone en alta impedancia y, gracias a la Rp
bcf STATUS,RP0 ; de esta línea, se mantiene a nivel alto.
SCL_EsperaNivelAlto
btfss SCL ; Si algún esclavo mantiene esta línea en bajo
goto SCL_EsperaNivelAlto ; hay que esperar.
return
;
; Subrutina "I2C_EnviaStart" --------------------------------------------------
;
; Esta subrutina envía una condición de Start o inicio.
;
I2C_EnviaStart
call SDA_AltaImpedancia ; Línea SDA en alto.
call SCL_AltaImpedancia ; Línea SCL en alto.
call Retardo_4micros ; Tiempo tBUF del protocolo.
call SDA_Bajo ; Flanco de bajada de SDA mientras SCL está alto.
call Retardo_4micros ; Tiempo tHD;STA del protocolo.
call SCL_Bajo ; Flanco de bajada del reloj SCL.
call Retardo_4micros
return
;
; Subrutina "I2C_EnviaStop" ----------------------------------------------------
;
Proyecto Vehículo Explorador Página 37
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; Esta subrutina envía un condición de Stop o parada.
;
I2C_EnviaStop
call SDA_Bajo
call SCL_AltaImpedancia ; Flanco de subida de SCL.
call Retardo_4micros ; Tiempo tSU;STO del protocolo.
call SDA_AltaImpedancia ; Flanco de subida de SDA.
call Retardo_4micros ; Tiempo tBUF del protocolo.
return
;
; Subrutina "I2C_EnviaByte" ----------------------------------------------------
;
; El microcontrolador maestro transmite un byte por el bus I2C, comenzando por
; el bit MSB. El byte a transmitir debe estar cargado previamente en el registro
; de trabajo W. De la subrutina ejecutada anteriormente I2C_EnviaStart o esta
; misma I2C_EnviaByte,la línea SCL se debe encontrar a nivel bajo al menos durante
; 5 µs.
;
I2C_EnviaByte
movwf I2C_Dato ; Almacena el byte a transmitir.
movlw 0x08 ; A transmitir 8 bits.
movwf I2C_ContadorBits
I2C_EnviaBit
rlf I2C_Dato,F ; Chequea el bit, llevándolo previamente al Carry.
btfsc STATUS,C
goto I2C_EnviaUno
I2C_EnviaCero
call SDA_Bajo ; Si es "0" envía un nivel bajo.
goto I2C_FlancoSCL
I2C_EnviaUno
Proyecto Vehículo Explorador Página 38
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call SDA_AltaImpedancia ; Si es "1" lo activará a alto.
I2C_FlancoSCL
call SCL_AltaImpedancia ; Flanco de subida del SCL.
call Retardo_4micros ; Tiempo tHIGH del protocolo.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los ocho bits.
goto I2C_EnviaBit
;
call SDA_AltaImpedancia ; Libera la línea de datos.
call SCL_AltaImpedancia ; Pulso en alto de reloj para que el esclavo
call Retardo_4micros ; pueda enviar el bit ACK.
call SCL_Bajo
call Retardo_4micros
return
;
; Subrutina "I2C_LeeByte" -------------------------------------------------------
;
; El microcontrolador maestro lee un byte desde el esclavo conectado al bus I2C.
; El dato recibido se carga en el registro I2C_Dato y lo envía a la subrutina
; superior a través del registro W. Se empieza a leer por el bit de mayor peso MSB.
; De alguna de las subrutinas ejecutadas anteriormente I2C_EnviaStart, I2C_EnviaByte
; o esta misma I2C_LeeByte, la línea SCL lleva en bajo al menos 5 µs.
I2C_LeeByte
movlw 0x08 ; A recibir 8 bits.
movwf I2C_ContadorBits
call SDA_AltaImpedancia ; Deja libre la línea de datos.
I2C_LeeBit
call SCL_AltaImpedancia ; Flanco de subida del reloj.
Proyecto Vehículo Explorador Página 39
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bcf STATUS,C ; En principio supone que es "0".
btfsc SDA ; Lee el bit
bsf STATUS,C ; Si es "1" carga 1 en el Carry.
rlf I2C_Dato,F ; Lo introduce en el registro.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los 8 bits.
goto I2C_LeeBit
;
; Chequea si este es el último byte a leer para enviar o no el bit de reconocimiento
; ACK en consecuencia.
;
btfss I2C_UltimoByteLeer ; Si es el último, no debe enviar
; el bit de reconocimiento ACK.
call SDA_Bajo ; Envía el bit de reconocimiento ACK
; porque todavía no es el último byte a leer.
call SCL_AltaImpedancia ; Pulso en alto del SCL para transmitir el
call Retardo_4micros ; bit ACK de reconocimiento. Este es tHIGH.
call SCL_Bajo ; Pulso de bajada del SCL.
call Retardo_4micros
movf I2C_Dato,W ; El resultado se manda en el registro de
return ; de trabajo W.
END
Proyecto Vehículo Explorador Página 40
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.2.3. Rutina pntfin
;pntfin.asm Hace un intermitente de espera, hasta que se provoca una interrupción
; por cambio en RB4 en ese momento se lanza un rutina que saca una secuencia de dos
; salidas del puerto para conseguir una ruta de un cuadrado y conseguir que el móvil
; se ponga orientado en sentido contrario a la marcha que llevaba. Cuando termina la
; maniobra, el WDT provoca el reset y de nuevo comienza la intermitencia.
list p=16f84a
ESTADO equ 0x03
PORTB equ 0x06
INTCON equ 0x0b
OPTION_REG equ 0x81
#define Retar1 Retardo_500ms
#define Retar2 Retardo_1s
#define Retar3 Retardo_200ms
#define Retar4 Retardo_100ms
CBLOCK 0X0C
ENDC
org 0
goto Inicio
org 4 ;vector de interrupción
goto RSI
;----------------------configura-----------------------------------
Inicio
Proyecto Vehículo Explorador Página 41
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bsf ESTADO,5
movlw b'11110000' ;entradas y salidas
movwf PORTB
bcf OPTION_REG,7
movlw b'10001000'
movwf INTCON
bcf ESTADO,5
Comienzo
bcf PORTB,2 ; desactiva el rele
bcf PORTB,3
call Retar1
clrwdt
bsf PORTB,3 ; Intermitencia en el pin RB3
call Retar1
clrwdt
goto Comienzo
RSI
clrf PORTB
bsf INTCON,3 ; para habilitar de nuevo las interrupciones RB
btfsc PORTB,4 ;
goto RSI ; espera WDT
bsf PORTB,2 ; activa el rele
movlw b'11110110' ; movimiento a la izquierda
movwf PORTB
Proyecto Vehículo Explorador Página 42
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call Retar3
call Retar4
clrwdt
call Retar2
clrwdt
movlw b'11110101' ; movimiento a la derecha
movwf PORTB
call Retar1 ;
clrwdt
call Retar2
clrwdt
call Retar3 ;
call Retar4
clrwdt
movlw b'11110101' ; movimiento a la derecha
movwf PORTB
call Retar1 ;
clrwdt
call Retar2
clrwdt
call Retar3 ;
call Retar4
clrwdt
movlw b'11110101' ; movimiento a la derecha
movwf PORTB
Proyecto Vehículo Explorador Página 43
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call Retar1 ;
clrwdt
call Retar2
clrwdt
call Retar3 ;
call Retar4
clrwdt
call Retar2
clrwdt
movlw b'11110110' ; movimiento a la izquierda
movwf PORTB
call Retar3
bsf INTCON,7 ; prepara las interrupciones
include <RETARDOS.INC>
end
Proyecto Vehículo Explorador Página 44
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.2.4 Rutina lee256_alea
.;**************************** lee256_alea1.asm *************************
;
; Referencia lee256_alea.asm
; Lee la memoria 24LC256 de manera aleatoria y lo visualiza por el puerto B
; La lectura se inicia desde la posición FF hasta que encuentra un 00 de modo decreciente
; solo lee una pagina 256 bytes
; El protocolo de lectura comprende los siguientes pasos:
; 1* Primero el maestro realiza el envío de la dirección de comienzo, escribiendo en la memoria
; 2* Luego el maestro vuelve a enviar la condición de Start.
; 3* A continuación envía el byte de control en modo lectura.
; 4* Después el maestro lee el contenido de la memoria.
; 5º El master no envia ACK pero sí se realiza la operación de stop.
;
; ZONA DE DATOS **************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
M24LC256_AddressHigh ; Guarda el valor de la dirección de memoria a
M24LC256_AddressLow ; escribir o leer.
M24LC256_Dato
I2C_ContadorBits ; Cuenta los bits a transmitir o a recibir.
I2C_Dato ; Dato a transmitir o recibido.
I2C_Flags ; Guarda la información del estado del bus I2C.
Proyecto Vehículo Explorador Página 45
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
NIDO
NIDO2
NIDO3
CuentaPosicion
ENDC
M24LC256_DireccionEscritura EQU 0xa0; Dirección de la memoria 24LC256 para
M24LC256_DireccionLectura EQU 0xa1; escritura y lectura respectivamente.
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
#DEFINE SCL PORTA,3 ; Línea SCL del bus I2C.
#DEFINE SDA PORTA,2 ; Línea SDA del bus I2C.
#DEFINE Posicion 0xFF ; posicion que se lee
;
; ******** ZONA DE CÓDIGOS *****************************************
ORG 0
Inicio
clrf M24LC256_AddressHigh ; Prepara el byte alto de la pagina
movlw Posicion
movwf M24LC256_AddressLow
Inicio2
bsf STATUS,RP0
movlw b'00000000'
Proyecto Vehículo Explorador Página 46
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
movwf PORTB ; Configura el PORTB
; movlw 0xff ; Puerto A como entrada.
; movwf PORTA
bcf STATUS,RP0
InicializaLectura
bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato
call I2C_EnviaStart ; Comienza el protocolo Nº 1
movlw M24LC256_DireccionEscritura ; Incluida en M24LC256 envía direccion lectura del esclavo
call I2C_EnviaByte ; a partir de las direcciones apuntadas mas abajo
movf M24LC256_AddressHigh,W
call I2C_EnviaByte
movf M24LC256_AddressLow,W
call I2C_EnviaByte ; Ahora esperamos el reconocimiento del esclavo
EsperaEsclavo
call I2C_EnviaStart ; Nº 2
movlw M24LC256_DireccionLectura ; Nº 3
call I2C_EnviaByte
LeeByte
bsf I2C_UltimoByteLeer ; si se pone este bit a uno la rutina LeeByte no envía ACK
clrf I2C_Dato
call I2C_LeeByte ; Lo deja en I2C_Dato Nº 4
Proyecto Vehículo Explorador Página 47
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
movf I2C_Dato,W
movwf PORTB
call I2C_EnviaStop ; paso 5 del protocolo
call Retardo
movf I2C_Dato,1 ; moverlo en si mismo para ver si es cero
btfsc STATUS,Z ; si es cero a dormir
sleep
decf M24LC256_AddressLow,1
goto Inicio2
; ---------------- subrutinas ----------------------------------------------
Retardo
movlw 0x04
movwf NIDO3
Retar
decfsz NIDO,1
goto Retar
decfsz NIDO2,1
goto Retar
; bcf PORTB,3 ; para el in termitente
decfsz NIDO3,1
goto Retar
return
; ------------------ Retardo_4micros ------------------------------------------
Retardo_4micros
Proyecto Vehículo Explorador Página 48
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
return
; ------------------M24LC256_InicializaLectura --------------------------------
M24LC256_InicializaLectura
bcf I2C_Flags,0 ; Todavía no ha comenzado a leer ningún dato.
call I2C_EnviaStart ; Envía condición de Start.
movlw M24LC256_DireccionEscritura ; Envía dirección de escritura del
call I2C_EnviaByte ; esclavo.
movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
call I2C_EnviaByte ; registros M24LC256_AddressHigh y
movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
call I2C_EnviaByte
return
; Subrutina "SDA_Bajo" -------------------------------------------------------
;
SDA_Bajo
bsf STATUS,RP0 ; Configura la línea SDA como salida.
bcf SDA
bcf STATUS,RP0
bcf SDA ; SDA en bajo.
return
;
; Subrutina "SDA_AltaImpedancia" ---------------------------------------------
;
SDA_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SDA entrada.
Proyecto Vehículo Explorador Página 49
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bsf SDA ; Lo pone en alta impedancia y, gracias a la
bcf STATUS,RP0 ; Rp de esta línea, se mantiene a nivel alto.
return
;
; Subrutina "SCL_Bajo" -------------------------------------------------------
;
SCL_Bajo
bsf STATUS,RP0
bcf SCL ; Configura la línea SCL como salida.
bcf STATUS,RP0
bcf SCL ; La línea de reloj SCL en bajo.
return
;
; Subrutina "SCL_AltaImpedancia" ----------------------------------------------
;
SCL_AltaImpedancia
bsf STATUS,RP0 ; Configura la línea SCL entrada.
bsf SCL ; Lo pone en alta impedancia y, gracias a la Rp
bcf STATUS,RP0 ; de esta línea, se mantiene a nivel alto.
SCL_EsperaNivelAlto
btfss SCL ; Si algún esclavo mantiene esta línea en bajo
goto SCL_EsperaNivelAlto ; hay que esperar.
return
;
; Subrutina "I2C_EnviaStart" --------------------------------------------------
;
; Esta subrutina envía una condición de Start o inicio.
Proyecto Vehículo Explorador Página 50
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
;
I2C_EnviaStart
call SDA_AltaImpedancia ; Línea SDA en alto.
call SCL_AltaImpedancia ; Línea SCL en alto.
call Retardo_4micros ; Tiempo tBUF del protocolo.
call SDA_Bajo ; Flanco de bajada de SDA mientras SCL está alto.
call Retardo_4micros ; Tiempo tHD;STA del protocolo.
call SCL_Bajo ; Flanco de bajada del reloj SCL.
call Retardo_4micros
return
;
; Subrutina "I2C_EnviaStop" ----------------------------------------------------
;
; Esta subrutina envía un condición de Stop o parada.
;
I2C_EnviaStop
call SDA_Bajo
call SCL_AltaImpedancia ; Flanco de subida de SCL.
call Retardo_4micros ; Tiempo tSU;STO del protocolo.
call SDA_AltaImpedancia ; Flanco de subida de SDA.
call Retardo_4micros ; Tiempo tBUF del protocolo.
return
;
; Subrutina "I2C_EnviaByte" ----------------------------------------------------
;
; El microcontrolador maestro transmite un byte por el bus I2C, comenzando por
; el bit MSB. El byte a transmitir debe estar cargado previamente en el registro
; de trabajo W. De la subrutina ejecutada anteriormente I2C_EnviaStart o esta
Proyecto Vehículo Explorador Página 51
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
; misma I2C_EnviaByte,la línea SCL se debe encontrar a nivel bajo al menos durante
; 5 µs.
;
I2C_EnviaByte
movwf I2C_Dato ; Almacena el byte a transmitir.
movlw 0x08 ; A transmitir 8 bits.
movwf I2C_ContadorBits
I2C_EnviaBit
rlf I2C_Dato,F ; Chequea el bit, llevándolo previamente al Carry.
btfsc STATUS,C
goto I2C_EnviaUno
I2C_EnviaCero
call SDA_Bajo ; Si es "0" envía un nivel bajo.
goto I2C_FlancoSCL
I2C_EnviaUno
call SDA_AltaImpedancia ; Si es "1" lo activará a alto.
I2C_FlancoSCL
call SCL_AltaImpedancia ; Flanco de subida del SCL.
call Retardo_4micros ; Tiempo tHIGH del protocolo.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los ocho bits.
goto I2C_EnviaBit
;
call SDA_AltaImpedancia ; Libera la línea de datos.
call SCL_AltaImpedancia ; Pulso en alto de reloj para que el esclavo
call Retardo_4micros ; pueda enviar el bit ACK.
call SCL_Bajo
Proyecto Vehículo Explorador Página 52
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
call Retardo_4micros
return
;
; Subrutina "I2C_LeeByte" -------------------------------------------------------
;
; El microcontrolador maestro lee un byte desde el esclavo conectado al bus I2C.
; El dato recibido se carga en el registro I2C_Dato y lo envía a la subrutina
; superior a través del registro W. Se empieza a leer por el bit de mayor peso MSB.
; De alguna de las subrutinas ejecutadas anteriormente I2C_EnviaStart, I2C_EnviaByte
; o esta misma I2C_LeeByte, la línea SCL lleva en bajo al menos 5 µs.
I2C_LeeByte
movlw 0x08 ; A recibir 8 bits.
movwf I2C_ContadorBits
call SDA_AltaImpedancia ; Deja libre la línea de datos.
I2C_LeeBit
call SCL_AltaImpedancia ; Flanco de subida del reloj.
bcf STATUS,C ; En principio supone que es "0".
btfsc SDA ; Lee el bit
bsf STATUS,C ; Si es "1" carga 1 en el Carry.
rlf I2C_Dato,F ; Lo introduce en el registro.
call SCL_Bajo ; Termina el semiperiodo positivo del reloj.
call Retardo_4micros ; Tiempo tHD;DAT del protocolo.
decfsz I2C_ContadorBits,F ; Lazo para los 8 bits.
goto I2C_LeeBit
;
; Chequea si este es el último byte a leer para enviar o no el bit de reconocimiento
; ACK en consecuencia.
Proyecto Vehículo Explorador Página 53
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
;
btfss I2C_UltimoByteLeer ; Si es el último, no debe enviar
; el bit de reconocimiento ACK.
call SDA_Bajo ; Envía el bit de reconocimiento ACK
; porque todavía no es el último byte a leer.
call SCL_AltaImpedancia ; Pulso en alto del SCL para transmitir el
call Retardo_4micros ; bit ACK de reconocimiento. Este es tHIGH.
call SCL_Bajo ; Pulso de bajada del SCL.
call Retardo_4micros
movf I2C_Dato,W ; El resultado se manda en el registro de
return ; de trabajo W.
END
Proyecto Vehículo Explorador Página 54
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
2.2.5. Rutina siguepun
;siguepun.asm el vehiculo dispone de dos celulas en el morro si la luz le da de lleno avanza, si se desvía, corrige para meterse en el haz.
list p=16f84
ESTADO equ 0x03
PORTA equ 0x05
PORTB equ 0x06
#define Ver_der PORTA,0
#define Ver_izq PORTA,1
#define Saca_der PORTB,1
#define Saca_izq PORTB,4
; ---------------------------- configurar ---------------------------
bsf ESTADO,5
movlw b'11111111'
movwf PORTA
movlw b'00000000'
movwf PORTB
bcf ESTADO,5
; ----------------------------- principal ---------------------------
clrf PORTB
bsf PORTB,2 ; para activar el rele
Inicio
btfss Ver_der
goto Derecha
btfss Ver_izq
goto Izquierda
clrf PORTB
Proyecto Vehículo Explorador Página 55
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
bsf PORTB,2 ; para activar el rele
goto Inicio
Derecha
bsf Saca_der
btfsc Ver_izq
goto Izquierda
bcf Saca_izq
goto Inicio
Izquierda
bsf Saca_izq
btfsc Ver_der
goto Derecha
bcf Saca_der
goto Inicio
end
Proyecto Vehículo Explorador Página 56
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
3. Anexo. Fotos y material publicado.
3.1. Fotos de interés (Orden no cronológico).
1 Emisor con módulo AUREL 433 MHz
2 Receptor con módulo AUREL 433 MHz
3 Detalle de la recepción con los decodificadores de puerta de garaje.
Proyecto Vehículo Explorador Página 57
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
4 Detalle de los servos trucados con ruedas pequeñas y primera rueda loca.
5 Detalle del receptor con el decoder UM3750
6 Migrando al emisor-receptor Futaba
Proyecto Vehículo Explorador Página 58
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
7 Probando los PWM con el 556
8 Detalle del Explorer con las LDR.
9 El Explorer todavía en placa de montaje.
Proyecto Vehículo Explorador Página 59
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
10 Montando la placa CI hibrida principal
11 Detalle de los PWM y la memoria 256.
12 El Explorer con ruedas delgadas y barras de LDR
Proyecto Vehículo Explorador Página 60
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
13 Primeras versiones del Explorer
14 Probando el motor paso a paso para la baliza.
15 Prueba de seguimiento de la luz láser, el punto rojo en la antena procede del puntero-baliza
Proyecto Vehículo Explorador Página 61
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
16 Baliza con el puntero láser montado sobre un motor paso a paso y emitiendo luz.
17 Probando la lectura aleatoria.
18 Emisor de 6 canales usado para el guiado por radio (modo no automático).
Proyecto Vehículo Explorador Página 62
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
19 Receptor usando la USART del 16F877 en las primeras fases del proyecto.
20 Otra placa para la recepción con la USART
21 Encoder ensayado con dos CNY 70
Proyecto Vehículo Explorador Página 63
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
22 Interfase en visual Basic-6
23 Compilando con el WinPic 800
Proyecto Vehículo Explorador Página 64
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
3.2. Material publicado.-
Se escribe a continuación los enlaces donde poder ver tres experimentos realizados. Las direcciones son de Google de la sección que dispone de video.
http://video.google.es/videoplay?docid=-1843072428276081682&hl= es
http://video.google.es/videoplay?docid=7870392132600163403&q=
http://video.google.es/videoplay?docid=-6399958617848381403&q=explorador&ei= FORWSMqtLKWQigKr58T_Dg&hl=es
3.3 Correo electrónico del autor.
Correo del autor: [email protected]
Proyecto Vehículo Explorador Página 65
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
4. Planos
Proyecto Vehículo Explorador Página 66
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
Proyecto Vehículo Explorador Página 67
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
Proyecto Vehículo Explorador Página 68
Proyecta: Bernardo Fernández Carrión Escuela Superior de Ingenieros
5. Especificaciones y características técnicas.
© 1998 Microchip Technology Inc. DS30430C-page 1
Devices Included in this Data Sheet:
• PIC16F83• PIC16F84• PIC16CR83• PIC16CR84• Extended voltage range devices available
(PIC16LF8X, PIC16LCR8X)
High Performance RISC CPU Features:
• Only 35 single word instructions to learn• All instructions single cycle except for program
branches which are two-cycle• Operating speed: DC - 10 MHz clock input
DC - 400 ns instruction cycle
• 14-bit wide instructions• 8-bit wide data path
• 15 special function hardware registers• Eight-level deep hardware stack• Direct, indirect and relative addressing modes
• Four interrupt sources: - External RB0/INT pin- TMR0 timer overflow - PORTB<7:4> interrupt on change- Data EEPROM write complete
• 1000 erase/write cycles Flash program memory
• 10,000,000 erase/write cycles EEPROM data mem-ory
• EEPROM Data Retention > 40 years
Peripheral Features:
• 13 I/O pins with individual direction control• High current sink/source for direct LED drive
- 25 mA sink max. per pin- 20 mA source max. per pin
• TMR0: 8-bit timer/counter with 8-bit programmable prescaler
Pin Diagrams
Special Microcontroller Features:
• In-Circuit Serial Programming (ICSP™) - via two pins (ROM devices support only Data EEPROM programming)
• Power-on Reset (POR)• Power-up Timer (PWRT)
• Oscillator Start-up Timer (OST)• Watchdog Timer (WDT) with its own on-chip RC
oscillator for reliable operation• Code-protection• Power saving SLEEP mode
• Selectable oscillator options
CMOS Flash/EEPROM Technology:
• Low-power, high-speed technology• Fully static design
• Wide operating voltage range:- Commercial: 2.0V to 6.0V- Industrial: 2.0V to 6.0V
• Low power consumption:- < 2 mA typical @ 5V, 4 MHz- 15 μA typical @ 2V, 32 kHz- < 1 μA typical standby current @ 2V
DeviceProgram Memory (words)
DataRAM (bytes)
DataEEPROM (bytes)
Max. Freq (MHz)
PIC16F83 512 Flash 36 64 10
PIC16F84 1 K Flash 68 64 10
PIC16CR83 512 ROM 36 64 10
PIC16CR84 1 K ROM 68 64 10
RA1
RA0
OSC1/CLKIN
OSC2/CLKOUT
VDD
RB7
RB6
RB5
RB4
RA2
RA3
RA4/T0CKI
MCLR
VSS
RB0/INT
RB1
RB2
RB3
•1
2
3
4
5
6
7
8
9
18
17
16
15
14
13
12
11
10
PDIP, SOIC
PIC
16F8X
PIC
16CR
8X
PIC16F8X18-pin Flash/EEPROM 8-Bit Microcontrollers
PIC16F8X
DS30430C-page 8 © 1998 Microchip Technology Inc.
PIC16CXX devices contain an 8-bit ALU and workingregister. The ALU is a general purpose arithmetic unit.It performs arithmetic and Boolean functions betweendata in the working register and any register file.
The ALU is 8-bits wide and capable of addition,subtraction, shift and logical operations. Unlessotherwise mentioned, arithmetic operations are two’scomplement in nature. In two-operand instructions,typically one operand is the working register(W register), and the other operand is a file register oran immediate constant. In single operand instructions,the operand is either the W register or a file register.
The W register is an 8-bit working register used for ALUoperations. It is not an addressable register.
Depending on the instruction executed, the ALU mayaffect the values of the Carry (C), Digit Carry (DC), andZero (Z) bits in the STATUS register. The C and DC bitsoperate as a borrow and digit borrow out bit,respectively, in subtraction. See the SUBLW and SUBWFinstructions for examples.
A simplified block diagram for the PIC16F8X is shownin Figure 3-1, its corresponding pin description isshown in Table 3-1.
FIGURE 3-1: PIC16F8X BLOCK DIAGRAM
Flash/ROMProgramMemory
Program Counter13
ProgramBus
Instruction reg
8 Level Stack(13-bit)
Direct Addr
8
InstructionDecode &
Control
TimingGeneration
OSC2/CLKOUTOSC1/CLKIN
Power-upTimer
OscillatorStart-up Timer
Power-onReset
WatchdogTimer
MCLR VDD, VSS
W reg
ALU
MUXI/O Ports
TMR0
STATUS reg
FSR reg
IndirectAddr
RA3:RA0
RB7:RB1
RA4/T0CKI
EEADR
EEPROMData Memory
64 x 8EEDATA
Addr Mux
RAM Addr
RAMFile Registers
EEPROM Data Memory
Data Bus
5
7
7
PIC16F84/CR841K x 14
PIC16F83/CR83512 x 14
PIC16F83/CR8336 x 8
PIC16F84/CR8468 x 8
RB0/INT
14
8
8
PIC16F8X
DS30430C-page 56 © 1998 Microchip Technology Inc.
TABLE 9-2 PIC16FXX INSTRUCTION SET
Mnemonic,Operands
Description Cycles 14-Bit Opcode StatusAffected
Notes
MSb LSb
BYTE-ORIENTED FILE REGISTER OPERATIONS
ADDWFANDWFCLRFCLRWCOMFDECF
DECFSZINCF
INCFSZIORWFMOVF
MOVWFNOPRLFRRF
SUBWFSWAPFXORWF
f, df, df-f, df, df, df, df, df, df, df-f, df, df, df, df, d
Add W and fAND W with f
Clear fClear W
Complement fDecrement f
Decrement f, Skip if 0Increment f
Increment f, Skip if 0Inclusive OR W with f
Move fMove W to f
No OperationRotate Left f through Carry
Rotate Right f through CarrySubtract W from fSwap nibbles in f
Exclusive OR W with f
111111
1(2)1
1(2)111111111
000000000000000000000000000000000000
011101010001000110010011101110101111010010000000000011011100001011100110
dfffdffflfff0xxxdfffdfffdfffdfffdfffdfffdffflfff0xx0dfffdfffdfffdfffdfff
ffffffffffffxxxxffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
C,DC,ZZZZZZ
Z
ZZ
CC
C,DC,Z
Z
1,21,22
1,21,2
1,2,31,2
1,2,31,21,2
1,21,21,21,21,2
BIT-ORIENTED FILE REGISTER OPERATIONS
BCFBSF
BTFSCBTFSS
f, bf, bf, bf, b
Bit Clear fBit Set f
Bit Test f, Skip if ClearBit Test f, Skip if Set
11
1 (2)1 (2)
01010101
00bb01bb10bb11bb
bfffbfffbfffbfff
ffffffffffffffff
1,21,233
LITERAL AND CONTROL OPERATIONS
ADDLWANDLWCALL
CLRWDTGOTOIORLWMOVLWRETFIERETLW
RETURNSLEEPSUBLWXORLW
kkk-kkk-k--kk
Add literal and WAND literal with W
Call subroutineClear Watchdog Timer
Go to addressInclusive OR literal with W
Move literal to WReturn from interrupt
Return with literal in W Return from SubroutineGo into standby modeSubtract W from literal
Exclusive OR literal with W
1121211222111
11111000101111001100001111
111x10010kkk00001kkk100000xx000001xx00000000110x1010
kkkkkkkkkkkk0110kkkkkkkkkkkk0000kkkk00000110kkkkkkkk
kkkkkkkkkkkk0100kkkkkkkkkkkk1001kkkk10000011kkkkkkkk
C,DC,ZZ
TO,PD
Z
TO,PDC,DC,Z
Z
Note 1: When an I/O register is modified as a function of itself ( e.g., MOVF PORTB, 1), the value used will be that value present on the pins themselves. For example, if the data latch is ’1’ for a pin configured as input and is driven low by an external device, the data will be written back with a ’0’.
2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if assigned to the Timer0 Module.
3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is executed as a NOP.
TL�H�6975
LM
567�LM
567C
Tone
Decoder
February 1995
LM567�LM567C Tone Decoder
General DescriptionThe LM567 and LM567C are general purpose tone decod-
ers designed to provide a saturated transistor switch to
ground when an input signal is present within the passband�
The circuit consists of an I and Q detector driven by a volt-
age controlled oscillator which determines the center fre-
quency of the decoder� External components are used to
independently set center frequency� bandwidth and output
delay�
FeaturesY 20 to 1 frequency range with an external resistorY Logic compatible output with 100 mA current sinking
capability
Y Bandwidth adjustable from 0 to 14%Y High rejection of out of band signals and noiseY Immunity to false signalsY Highly stable center frequencyY Center frequency adjustable from 0�01 Hz to 500 kHz
ApplicationsY Touch tone decodingY Precision oscillatorY Frequency monitoring and controlY Wide band FSK demodulationY Ultrasonic controlsY Carrier current remote controlsY Communications paging decoders
Connection Diagrams
Metal Can Package
TL�H�6975–1
Top View
Order Number LM567H or LM567CH
See NS Package Number H08C
Dual-In-Line and Small Outline Packages
TL�H�6975–2
Top View
Order Number LM567CM
See NS Package Number M08A
Order Number LM567CN
See NS Package Number N08E
C1995 National Semiconductor Corporation RRD-B30M115�Printed in U� S� A�
TL�H�6975
LM
567�LM
567C
Tone
Decoder
February 1995
LM567�LM567C Tone Decoder
General DescriptionThe LM567 and LM567C are general purpose tone decod-
ers designed to provide a saturated transistor switch to
ground when an input signal is present within the passband�
The circuit consists of an I and Q detector driven by a volt-
age controlled oscillator which determines the center fre-
quency of the decoder� External components are used to
independently set center frequency� bandwidth and output
delay�
FeaturesY 20 to 1 frequency range with an external resistorY Logic compatible output with 100 mA current sinking
capability
Y Bandwidth adjustable from 0 to 14%Y High rejection of out of band signals and noiseY Immunity to false signalsY Highly stable center frequencyY Center frequency adjustable from 0�01 Hz to 500 kHz
ApplicationsY Touch tone decodingY Precision oscillatorY Frequency monitoring and controlY Wide band FSK demodulationY Ultrasonic controlsY Carrier current remote controlsY Communications paging decoders
Connection Diagrams
Metal Can Package
TL�H�6975–1
Top View
Order Number LM567H or LM567CH
See NS Package Number H08C
Dual-In-Line and Small Outline Packages
TL�H�6975–2
Top View
Order Number LM567CM
See NS Package Number M08A
Order Number LM567CN
See NS Package Number N08E
C1995 National Semiconductor Corporation RRD-B30M115�Printed in U� S� A�
Absolute Maximum RatingsIf Military�Aerospace specified devices are required�
please contact the National Semiconductor Sales
Office�Distributors for availability and specifications�
Supply Voltage Pin 9V
Power Dissipation (Note 1) 1100 mW
V8 15V
V3 b10V
V3 V4 a 0�5V
Storage Temperature Range b65�C to a150�COperating Temperature Range
LM567H b55�C to a125�CLM567CH� LM567CM� LM567CN 0�C to a70�C
Soldering Information
Dual-In-Line Package
Soldering (10 sec�) 260�CSmall Outline Package
Vapor Phase (60 sec�) 215�CInfrared (15 sec�) 220�C
See AN-450 ‘‘Surface Mounting Methods and Their Effect
on Product Reliability’’ for other methods of soldering sur-
face mount devices�
Electrical Characteristics AC Test Circuit� TA e 25�C� Va e 5V
Parameters ConditionsLM567 LM567C�LM567CM
UnitsMin Typ Max Min Typ Max
Power Supply Voltage Range 4�75 5�0 9�0 4�75 5�0 9�0 V
Power Supply Current RL e 20k6 8 7 10 mA
Quiescent
Power Supply Current RL e 20k11 13 12 15 mA
Activated
Input Resistance 18 20 15 20 kX
Smallest Detectable Input Voltage IL e 100 mA� fi e fo 20 25 20 25 mVrms
Largest No Output Input Voltage IC e 100 mA� fi e fo 10 15 10 15 mVrms
Largest Simultaneous Outband Signal to6 6 dB
Inband Signal Ratio
Minimum Input Signal to Wideband Bn e 140 kHz b6 b6 dBNoise Ratio
Largest Detection Bandwidth 12 14 16 10 14 18 % of fo
Largest Detection Bandwidth Skew 1 2 2 3 % of fo
Largest Detection Bandwidth Variation withg0�1 g0�1 %��C
Temperature
Largest Detection Bandwidth Variation with 4�75 b 6�75Vg1 g2 g1 g5 %V
Supply Voltage
Highest Center Frequency 100 500 100 500 kHz
Center Frequency Stability (4�75–5�75V) 0 k TA k 70 35 g 60 35 g60 ppm��Cb55 k TA k a125 35 g 140 35 g 140 ppm��C
Center Frequency Shift with Supply Voltage 4�75V b 6�75V 0�5 1�0 0�4 2�0 %�V
4�75V b 9V 2�0 2�0 %�V
Fastest ON-OFF Cycling Rate fo�20 fo�20
Output Leakage Current V8 e 15V 0�01 25 0�01 25 mA
Output Saturation Voltage ei e 25 mV� I8 e 30 mA 0�2 0�4 0�2 0�4V
ei e 25 mV� I8 e 100 mA 0�6 1�0 0�6 1�0
Output Fall Time 30 30 ns
Output Rise Time 150 150 ns
Note 1� The maximum junction temperature of the LM567 and LM567C is 150�C� For operating at elevated temperatures� devices in the TO-5 package must be
derated based on a thermal resistance of 150�C�W� junction to ambient or 45�C�W� junction to case� For the DIP the device must be derated based on a thermal
resistance of 110�C�W� junction to ambient� For the Small Outline package� the device must be derated based on a thermal resistance of 160�C�W� junction to
ambient�
Note 2� Refer to RETS567X drawing for specifications of military LM567H version�
2
Schematic Diagram
TL�H�6975–3
3
Typical Performance Characteristics
Typical Frequency Drift Typical Bandwidth Variation Typical Frequency Drift
Typical Frequency Drift Amplitude
Bandwidth vs Input Signal
Largest Detection Bandwidth
Function of C2 and C3
Detection Bandwidth as a
Supply Voltage
Typical Supply Current vs
Before Output
Greatest Number of Cycles
Temperature
Typical Output Voltage vs
TL�H�6975–4
4
Typical Applications
Touch-Tone Decoder
Component values (typ)
R1 6�8 to 15k
R2 4�7k
R3 20k
C1 0�10 mfd
C2 1�0 mfd 6V
C3 2�2 mfd 6V
C4 250 mfd 6V
TL�H�6975–5
5
Typical Applications (Continued)
Oscillator with Quadrature Output
TL�H�6975–6Connect Pin 3 to 2�8V to Invert Output
Oscillator with Double Frequency Output
TL�H�6975–7
Precision Oscillator Drive 100 mA Loads
TL�H�6975–8
AC Test Circuit
TL�H�6975–9
fi e 100 kHz a 5V
�Note� Adjust for fo e 100 kHz�
Applications InformationThe center frequency of the tone decoder is equal to the
free running frequency of the VCO� This is given by
fo j 1
1�1 R1C1
The bandwidth of the filter may be found from the approxi-
mation
BW e 10700Vi
foC2in % of fo
Where�
Vi e Input voltage (volts rms)� Vi s 200 mV
C2 e Capacitance at Pin 2 (mF)
6
Physical Dimensions inches (millimeters)
Metal Can Package (H)
Order Number LM567H or LM567CH
NS Package Number H08C
Small Outline Package (M)
Order Number LM567CM
NS Package Number M08A
7
LM
567�LM
567C
Tone
Decoder
Physical Dimensions inches (millimeters) (Continued)
Molded Dual-In-Line Package (N)
Order Number LM567CN
NS Package Number N08E
LIFE SUPPORT POLICY
NATIONAL’S PRODUCTS ARE NOT AUTHORIZED FOR USE AS CRITICAL COMPONENTS IN LIFE SUPPORT
DEVICES OR SYSTEMS WITHOUT THE EXPRESS WRITTEN APPROVAL OF THE PRESIDENT OF NATIONAL
SEMICONDUCTOR CORPORATION� As used herein�
1� Life support devices or systems are devices or 2� A critical component is any component of a life
systems which� (a) are intended for surgical implant support device or system whose failure to perform can
into the body� or (b) support or sustain life� and whose be reasonably expected to cause the failure of the life
failure to perform� when properly used in accordance support device or system� or to affect its safety or
with instructions for use provided in the labeling� can effectiveness�
be reasonably expected to result in a significant injury
to the user�
National Semiconductor National Semiconductor National Semiconductor National SemiconductorCorporation Europe Hong Kong Ltd� Japan Ltd�1111 West Bardin Road Fax� (a49) 0-180-530 85 86 13th Floor� Straight Block� Tel� 81-043-299-2309Arlington� TX 76017 Email� cnjwge� tevm2�nsc�com Ocean Centre� 5 Canton Rd� Fax� 81-043-299-2408Tel� 1(800) 272-9959 Deutsch Tel� (a49) 0-180-530 85 85 Tsimshatsui� KowloonFax� 1(800) 737-7018 English Tel� (a49) 0-180-532 78 32 Hong Kong
Fran�ais Tel� (a49) 0-180-532 93 58 Tel� (852) 2737-1600Italiano Tel� (a49) 0-180-534 16 80 Fax� (852) 2736-9960
National does not assume any responsibility for use of any circuitry described� no circuit patent licenses are implied and National reserves the right at any time without notice to change said circuitry and specifications�
This datasheet has been download from:
www.datasheetcatalog.com
Datasheets for electronics components.
Tone decoderlphase-locked loop
DESIGN FORMULAS
1 fo - - l.lRl C,
PHASE-LOCKED LOOP TERMINOLOGY CENTER FREQUENCY (fo) The free-ninning frequency d the current contrdled oscillator (CCO) in the absence of an input cignai.
Detection bandwidth (BW) The frequency range, centered about fo, withim w h i i an input signal above the threshdd vdtage (iypicaliy 20 mV-) wiB cause a logical zem siate on the output The detedh bandmdth correcpondc to fhe loop -re range.
Lock range The iargest frequency range within w h i i an input signai above ihe threchdd voHage will hdd a kgical zero state on the out@
Detecüon band skew A measure of how weil the detection band is centered about the center frequency, fo. The skew is defaied as:
3. The value of C3 is generally norraitical. C3 seis the band edge of a kw-pas filter w h i i attenuates frequendes outside ihe detection band to eliminate spurious ouipuis. lf C3 Ls too small, frequenciesjustoutsidethe~bandwillsmtchthewtput stage on and off at the beat frequency, or the ouiput may pulse onandoífduringthetum-onhndent IfC3istooiarge,tum-on and t u M of the ouípui stage wH1 be delayed unüi the vdtage on Gj pases the ihreshdd vdtage. (Such delay may be
deshable iu avoid spurious ouiputs due to transient frequencies.) A typical minimum value for C3 ís 2C2.
Figure 16. TLpfml connedlon
4. Optional resistor R2 seis ihe threshdd for the largest %o ouiptf input voltage. A vdue of 130 W is used to assure the tested fimit
of 10 mVm min. This resistor can be referenced to ground for inaeased sensiovity. The explanaüon can be fwnd in ihe ~ ~ m ~ s e C t i O n w h i c h f o l k w s .
where f w and ~MIN are the f r e q u m corresponding to the edges TYPICAL RESPONSE of ihe deteciion band. The skew can be reduced to zero if necessary by means of an optional centering adjustmertt.
OPERATING INSTRUCi'iONS Fgure 16 shows a typical conneüion d i r a m for the 567. Fw most appücaüons, the fdkwing threestep procedure will be suffiaent for choosing the extemal annponenis Rl. Cl. C2 and Cs.
1. Seled R1 and C l for the desired center frequency. For best tempemture stabirí, R l shouki be between 2 kR and 20 and the awnbined bmperature coefficient of the R l C l produci shoukl have CURaent stability over the projectad tamperaíure range to me& the necessary requiremenis.
Seled the lowpass capad&, C2, by refening iu F ~ u r e 4, 'Bandmdth vs. input signal ampliie'. If the input ampliiude variation is known, the a- vdue á fo . C;! necessary to givethedesiredbandwKlthmaybefound.Conversely,anarea of operaticm may be sekcted on thk graph and the input leve1 and C2 may be adjusted accordi. For example, constant bandwidih operstion requires that input arnplihide be above 2OOmVm. The bandwidth. as noted on the graph. is then mtrdled sdely by the fo - C2 produd (fo (Hz), C2W)).
OuTWT
NOTE: k = l W a -m Response to 1 OOmVRyS Tone Bu&
NOTES: m=- R ~ = l o O n . N o s a ~ = l ~
Response to Same Input Tone Burst Wiih Wideband Noise s~oa563
Figure 17. TLpical response
Philips Serniconductorc Product data
Tone decodedphase-locked loop
AVAILABLE OUTPUTS (Figure 18) The pnrnary output is the uncornrnitted output transistor collector, Pin 8. When an in-band input signal is present, this transistor saturates; its collector voitage b e i i les than 1 .O volt (typically 0.6V) at full output wrrent (100mA). The vdtage at Pin 2 is the phase detector output w h i k a linear function of frequency over the range of 0.95 to 1 .O5 fo wiü~ a slope of about 20rnV per percent of frequency deviation. The average vdtage at Pin 1 k, dunng I d , a funcüon of the in-band input arnplítude in accordance with the íransfer charaderistic g~en. Pin 5 k the controlled oscillator square wave output of rnagnitude (+V -2VBEH+V-1 .4V) having a DC average of +VE. A 1 W load may be dnven from pin 5. Pin 6 is an exponential Mangle of 1Vp+ with an average DC level of +VE. Only high irnpedance loads rnay be con& to pin 6 without afíecüng the CCO duty cyde or ternperature stabilii.
I I I g8y V+
I ---y-- 0 I VCE (SAT) c 4.W
LOW PASS 3.w
I I O.%o fo i.lfo
3.0
2 5 O 100 2MknVrms IKBAND INPUT VOLTAGE
SLDa555
OPERATING PRECAUTIONS A bfief review of the following precautions will help the user achieve the high level of perfomlance of which the 567 is wpable.
1. Operation in the high input ievel rnode (above 200 rnV) will free the user from bandwidth vañations due to changes in the in-band
signal arnplide. The input stage is now lirniting. however, so that out-band signals or high noise ievels can cause an apparent bandwidih reduction as the inband signal is suppressed. Also. the lirniting acüon create in-band components from sub-harrnonic signals, so the 567 becomes sensitive to signals at fd3, fd5, etc.
2. The 567 wiH lock onto signals near (2n+l) fo, and will give an output for signals near (4n+l) fo where n = 0. 1, 2, etc. Thus, signals at 5fo and 9fo can cause an unwanted output If such signals are anticipated. they shaild be atienuated before reaching the 567 input
3. Ma>arnurn irnrnunity from noise and out-band signals is afforded in the low input kvel (below 200 mVW) and reduced bandwidth
operating rnode. However, decreased loop darnping causes the worst-case lo&-up time to increase. as shown by the Greatest Nurnber of Cydes Before Output vs Bandwidth graph.
4. Dueto the high switching speeds (20 ns) associated with 567 operation, care should be taken in lead rwting. Lead lengihs should be kept to a rninirnurn. The power supply shouki be adequately brpassed dose to the 567 with a 0.OIpF or greater capacitar; grainding paths should be carefully chosen to avoid ground loops and unwanted voitage variations. Another factor which rnust be m ide red is the effect of load energization on the power supply. For exampte, an incandescent lamp typically draws 10 times rated wrrent at turn-on. This can cause supply voliage fluctuaüons which could, for exarnple, shift the deteciion band of namw-band systems suíñcientfy to cause rnomentary loss of lock. The result is a low-frequency oscillation mto and out of lock. Such eíkds can be prevented by supplying heavy load wrrents frorn a separate supply or increasing the supply f i k r capaator.
Figure 18. Available outputs
©2002 Fairchild Semiconductor Corporation
www.fairchildsemi.com
Rev. 1.0.2
Features• Internally Frequency Compensated for Unity Gain• Large DC Voltage Gain: 100dB• Wide Power Supply Range:
LM258/LM258A, LM358/LM358A: 3V~32V (or ±1.5V ~ 16V)LM2904 : 3V~26V (or ±1.5V ~ 13V)
• Input Common Mode Voltage Range Includes Ground• Large Output Voltage Swing: 0V DC to Vcc -1.5V DC• Power Drain Suitable for Battery Operation.
DescriptionThe LM2904,LM358/LM358A, LM258/LM258A consist oftwo independent, high gain, internally frequency compensated operational amplifiers which were designedspecifically to operate from a single power supply over awide range of voltage. Operation from split power suppliesis also possible and the low power supply current drain isindependent of the magnitude of the power supply voltage.Application areas include transducer amplifier, DC gainblocks and all the conventional OP-AMP circuits which nowcan be easily implemented in single power supply systems.
8-DIP
8-SOP
1
1
Internal Block Diagram
-+
+
-
1
2
3
4 5
6
7
8 VCC
OUT2
IN2 (-)
IN2 (+)
OUT1
IN1 (-)
IN1 (+)
GND
LM2904,LM358/LM358A,LM258/LM258ADual Operational Amplifier
LM2904,LM358/LM358A,LM258/LM258A
3
Electrical Characteristics(Vcc = 5.0V, VEE = GND, TA = 25°C, unless otherwise specified)
Note:1. This parameter, although guaranteed, is not 100% tested in production.
Parameter Symbol ConditionsLM258 LM358 LM2904
UnitMin. Typ. Max. Min. Typ. Max. Min. Typ. Max.
Input Offset Voltage VIO
VCM = 0V to VCC-1.5VVO(P) = 1.4V, RS = 0Ω
- 2.9 5.0 - 2.9 7.0 - 2.9 7.0 mV
Input Offset Current IIO - - 3 30 - 5 50 - 5 50 nA
Input Bias Current IBIAS - - 45 150 - 45 250 - 45 250 nA
Input Voltage Range VI(R)
VCC = 30V(LM2904, VCC=26V) 0 - Vcc
-1.5 0 -Vcc-1.5 0 -
Vcc-1.5 V
Supply Current ICC
RL = ∞, VCC = 30V(LM2904, VCC=26V) - 0.8 2.0 - 0.8 2.0 - 0.8 2.0 mA
RL = ∞, VCC = 5V - 0.5 1.2 - 0.5 1.2 - 0.5 1.2 mA
Large SignalVoltage Gain GV
VCC = 15V, RL= 2kΩVO(P) = 1V to 11V
50 100 - 25 100 - 25 100 - V/mV
Output Voltage Swing
VO(H) VCC=30V(VCC=26V for LM2904)
RL = 2kΩ 26 - - 26 - - 22 - - VRL=10kΩ 27 28 - 27 28 - 23 24 - V
VO(L) VCC = 5V, RL= 10kΩ - 5 20 - 5 20 - 5 20 mVCommon-ModeRejection Ratio CMRR - 70 85 - 65 80 - 50 80 - dB
Power SupplyRejection Ratio PSRR - 65 100 - 65 100 - 50 100 - dB
ChannelSeparation CS f = 1kHz to 20kHz
(Note1) - 120 - - 120 - - 120 - dB
Short Circuit to GND ISC - - 40 60 - 40 60 - 40 60 mA
Output Current
ISOURCE
VI(+) = 1V, VI(-) = 0VVCC = 15V, VO(P) = 2V
20 30 - 20 30 - 20 30 - mA
ISINK
VI(+) = 0V, VI(-) = 1V, VCC = 15V, VO(P) = 2V
10 15 - 10 15 - 10 15 - mA
VI(+) = 0V,VI(-) =1V , VCC = 15V, VO(P) = 200mV
12 100 - 12 100 - - - - μA
Differential Input Voltage VI(DIFF) - - - VCC - - VCC - - VCC V
©2001 Fairchild Semiconductor Corporation
www.fairchildsemi.com
Rev. 1.0.0
Features• Replaces Two LM555/NE556 Timers• Operates in Both Astable And Monostable Modes• High Output Current• TTL Compatible• Timing From Microsecond To Hours• Adjustable Duty Cycle• Temperature Stability Of 0.005% Per °C
Applications• Precision Timing• Pulse Shaping• Pulse Width Modulation• Frequency Division• Traffic Light Control• Sequential Timing• Pulse Generator• Time Delay Generator• Touch Tone Encoder• Tone Burst Generator
DescriptionThe LM556/NE556 series dual monolithic timing circuitsare a highly stable controller capable of producing accuratetime delays or oscillation. The LM556/NE556 is a dualLM555. Timing is provided an external resistor and capaci-tor for each timing function. The two timers operate inde-pendently of each other, sharing only VCC and ground. Thecircuits may be triggered and reset on falling waveforms.The output structures may sink or source 200mA.
14-DIP
1
14-SOP
1
Internal Block Diagram
LM556/NE556Dual Timer
LM556/NE556
3
Electrical Characteristics(TA = 25°C, VCC = 5 ~ 15V, unless otherwise specified)
Notes:*1. Supply current when output is high is typically 1.0mA less at VCC = 5V*2. Tested at VCC = 5V and VCC = 15V*3. This will determine the maximum value of RA + RB for 15V operation.
The maximum total R = 20MΩ, and for 5V operation the maximum total R = 6.6MΩ.*4. Matching characteristics refer to the difference between performance characteristics of each timer section in the monostable
mode.*5. As reset voltage lowers, timing is inhibited and then the output goes low.
Parameter Symbol Conditions Min. Typ. Max. Units Supply Voltage VCC - 4.5 - 16 V Supply Current *1(two timers) (low state) ICC
VCC = 5V, RL = ∞ VCC = 15V, RL = ∞ - 5
161230
mAmA
Timing Error *2(monostable) Initial Accuracy Drift with Temperature Drift with Supply Voltage
ACCURΔt/ΔT
Δt/ΔVCC
RA = 2KΩ to 100KΩ C = 0.1μF T = 1.1RC
- 0.75500.1
- %ppm/°C
%/VControl Voltage VC VCC = 15V 9.0 10.0 11.0 V
VCC = 5V 2.6 3.33 4.0 VThreshold Voltage VTH VCC = 15V 8.8 10.0 11.2 V
VCC = 5V 2.4 3.33 4.2 V Threshold Current*3 ITH - - 30 250 nATrigger Voltage VTR VCC = 15V 4.5 5.0 5.6 V
VCC = 5V 1.1 1.6 2.2 V Trigger Current ITR VTR = 0V - 0.01 2.0 μA Reset Voltage*5 VRST - 0.4 0.6 1.0 V Reset Current IRST - - 0.03 0.6 mA
Low Output Voltage VOL
VCC = 15V ISINK = 10mA ISINK = 50mA ISINK = 100mA ISINK = 200mA VCC = 5V ISINK = 8mA ISINK = 5mA
-
0.10.42.02.5
0.250.15
0.250.753.2
0.350.25
V
V
High Output Voltage VOH
VCC = 15V ISOURCE = 200mA ISOURCE = 100mA 12.75
12.513.3
- V
VCC = 5V ISOURCE = 100mA 2.75 3.3 - V
Rise Time of Output tR - - 100 300 ns Fall Time of Output tF - - 100 300 ns Discharge Leakage Current ILKG - - 10 100 nA Matching Characteristics*4 Initial Accuracy Drift with Temperature Drfit with Supply Voltage
ACCURΔt/ΔT
Δt/ΔVCC
- - 1.0100.2
2.0
0.5
%ppm/°C
%/V Timing Error (astable)*2 Initial Accuracy Drift with Temperature Drift with Supply Voltage
ACCURΔt/ΔT
Δt/ΔVcc
VCC = 15VRA,RB = 1KΩ to 100KΩC = 0.1μF
- 2.251500.3
- %ppm/°C
%/V
LM556/NE556
5
Mechanical Dimensions (Continued)
Package
8.56
±0.2
0
0.33
7±0
.008
1.27
0.05
0
5.720.225
1.55 ±0.10
0.061 ±0.004
0.050.002
6.00 ±0.30
0.236 ±0.012
3.95 ±0.20
0.156 ±0.008
0.60 ±0.20
0.024 ±0.008
8.70
0.34
3M
AX
#1
#7 #8
0~8°
#14
0.47
0.01
9(
)
1.800.071
MA
X0.
10M
AX
0.00
4
MAX
MIN
+0.
10-0
.05
0.20
+0.
004
-0.0
020.
008
+0.
10-0
.05
0.40
6
+0.
004
-0.0
020.
016
14-SOP
1
Features• Low Voltage and Standard Voltage Operation
– 5.0 (VCC = 4.5V to 5.5V)– 2.7 (VCC = 2.7V to 5.5V)– 1.8 (VCC = 1.8V to 3.6V)
• Internally Organized 16,384 x 8 and 32,768 x 8• 2-Wire Serial Interface• Schmitt Trigger, Filtered Inputs for Noise Suppression• Bidirectional Data Transfer Protocol • 1 MHz (5V), 400 kHz (2.7V) and 100 kHz (1.8V) Compatibility• Write Protect Pin for Hardware and Software Data Protection• 64-Byte Page Write Mode (Partial Page Writes Allowed)• Self-Timed Write Cycle (5 ms typical)• High Reliability
– Endurance: 100,000 Write Cycles – Data Retention: 40 Years– ESD Protection: > 4000V
• Automotive Grade and Extended Temperature Devices Available• 8-Pin JEDEC PDIP, 8-Pin JEDEC and EIAJ SOIC, 14-Pin TSSOP, and
8-Pin Leadless Array Packages
DescriptionThe AT24C128/256 provides 131,072/262,144 bits of serial electrically erasable andprogrammable read only memory (EEPROM) organized as 16,384/32,768 words of 8bits each. The device’s cascadable feature allows up to 4 devices to share a common2-wire bus. The device is optimized for use in many industrial and commercial applica-tions where low power and low voltage operation are essential. The devices are avail-able in space-saving 8-pin JEDEC PDIP, 8-pin EIAJ, 8-pin JEDEC SOIC, 14-pinTSSOP, and 8-pin LAP packages. In addition, the entire family is available in 5.0V(4.5V to 5.5V), 2.7V (2.7V to 5.5V) and 1.8V (1.8V to 3.6V) versions.
Rev. 0670C–08/98
2-Wire Serial EEPROMs128K (16,384 x 8)
256K (32,768 x 8)
AT24C128AT24C256
Pin Configurations
Pin Name Function
A0 to A1 Address Inputs
SDA Serial Data
SCL Serial Clock Input
WP Write Protect
NC No Connect
8-Pin PDIP
1234
8765
A0A1NC
GND
VCCWPSCLSDA
8-Pin SOIC
1234
8765
A0A1NC
GND
VCCWPSCLSDA
8-Pin Leadless Array
Bottom View
1234
8765
VCCWP
SCLSDA
A0A1NCGND
14-Pin TSSOP
1234567
1413121110
98
A0A1NCNCNCNC
GND
VCCWPNCNCNCSCLSDA
AT24C128/2564
AC CharacteristicsApplicable over recommended operating range from TA = -40°C to +85°C, VCC = +1.8V to +5.5V, CL = 100 pF (unless oth-erwise noted). Test conditions are listed in Note 2.
Notes: 1. This parameter is characterized and is not 100% tested.
2. AC measurement conditions:RL (connects to VCC): 1.3KΩ (2.7V, 5V), 10KΩ (1.8V)Input pulse voltages: 0.3VCC to 0.7VCCInput rise and fall times: ≤50nsInput and output timing reference voltages: 0.5VCC
Device OperationCLOCK and DATA TRANSITIONS: The SDA pin is nor-mally pulled high with an external device. Data on the SDApin may change only during SCL low time periods (refer toData Validity timing diagram). Data changes during SCLhigh periods will indicate a start or stop condition as definedbelow.
START CONDITION: A high-to-low transition of SDA withSCL high is a start condition which must precede any othercommand (refer to Start and Stop Definition timing dia-gram).
STOP CONDITION: A low-to-high transition of SDA withSCL high is a stop condition. After a read sequence, thestop command will place the EEPROM in a standby powermode (refer to Start and Stop Definition timing diagram).
ACKNOWLEDGE: All addresses and data words are seri-ally transmitted to and from the EEPROM in 8-bit words.The EEPROM sends a zero during the ninth clock cycle toacknowledge that it has received each word.
STANDBY MODE: The AT24C128/256 features a lowpower standby mode which is enabled: a) upon power-upand b) after the receipt of the STOP bit and the completionof any internal operations.
MEMORY RESET: After an interruption in protocol, powerloss or system reset, any 2-wire part can be reset by follow-ing these steps: (a) Clock up to 9 cycles, (b) look for SDAhigh in each cycle while SCL is high and then (c) create astart condition as SDA is high.
Symbol Parameter
1.8-volt 2.7-volt 5.0-volt
UnitsMin Max Min Max Min Max
fSCL Clock Frequency, SCL 100 400 1000 kHz
tLOW Clock Pulse Width Low 4.7 1.3 0.6 μs
tHIGH Clock Pulse Width High 4.0 1.0 0.4 μs
tAA Clock Low to Data Out Valid 0.1 4.5 0.05 0.9 0.05 0.55 μs
tBUFTime the bus must be free before a new transmission can start(1) 4.7 1.3 0.5 μs
tHD.STA Start Hold Time 4.0 0.6 0.25 μs
tSU.STA Start Set-up Time 4.7 0.6 0.25 μs
tHD.DAT Data In Hold Time 0 0 0 μs
tSU.DAT Data In Set-up Time 200 100 100 ns
tR Inputs Rise Time(1) 1.0 0.3 0.3 μs
tF Inputs Fall Time(1) 300 300 100 ns
tSU.STO Stop Set-up Time 4.7 0.6 0.25 μs
tDH Data Out Hold Time 100 50 50 ns
tWR Write Cycle Time 20 10 10 ms
Endurance(1) 5.0V, 25°C, Page Mode 100K 100K 100KWrite
Cycles
AT24C128/256
7
Device AddressingThe 128K/256K EEPROM requires an 8-bit device addressword following a start condition to enable the chip for a reador write operation (refer to Figure 1). The device addressword consists of a mandatory one, zero sequence for thefirst five most significant bits as shown. This is common toall 2-wire EEPROM devices.
The 128K/256K uses the two device address bits A1, A0 toallow as many as four devices on the same bus. These bitsmust compare to their corresponding hardwired input pins.The A1 and A0 pins use an internal proprietary circuit thatbiases them to a logic low condition if the pins are allowedto float.
The eighth bit of the device address is the read/write opera-tion select bit. A read operation is initiated if this bit is highand a write operation is initiated if this bit is low.
Upon a compare of the device address, the EEPROM willoutput a zero. If a compare is not made, the device willreturn to a standby state.
DATA SECURITY: The AT24C128/256 has a hardwaredata protection scheme that allows the user to write protectthe whole memory when the WP pin is at VCC.
Write OperationsBYTE WRITE: A write operation requires two 8-bit dataword addresses following the device address word andacknowledgment. Upon receipt of this address, theEEPROM will again respond with a zero and then clock inthe first 8-bit data word. Following receipt of the 8-bit dataword, the EEPROM will output a zero. The addressingdevice, such as a microcontroller, then must terminate thewrite sequence with a stop condition. At this time theEEPROM enters an internally-timed write cycle, tWR, to thenonvolatile memory. All inputs are disabled during thiswrite cycle and the EEPROM will not respond until the writeis complete (refer to Figure 2).
PAGE WRITE: The 128K/256K EEPROM is capable of 64-byte page writes.
A page write is initiated the same way as a byte write, butthe microcontroller does not send a stop condition after thefirst data word is clocked in. Instead, after the EEPROMacknowledges receipt of the first data word, the microcon-troller can transmit up to 63 more data words. TheEEPROM will respond with a zero after each data wordreceived. The microcontroller must terminate the pagewrite sequence with a stop condition (refer to Figure 3).
The data word address lower 6 bits are internally incre-mented following the receipt of each data word. The higherdata word address bits are not incremented, retaining thememory page row location. When the word address, inter-nally generated, reaches the page boundary, the followingbyte is placed at the beginning of the same page. If morethan 64 data words are transmitted to the EEPROM, the
data word address will “roll over” and previous data will beoverwritten. The address “roll over” during write is from thelast byte of the current page to the first byte of the samepage.
ACKNOWLEDGE POLLING: Once the internally-timedwrite cycle has started and the EEPROM inputs are dis-abled, acknowledge polling can be initiated. This involvessending a start condition followed by the device addressword. The read/write bit is representative of the operationdesired. Only if the internal write cycle has completed willthe EEPROM respond with a zero, allowing the read orwrite sequence to continue.
Read OperationsRead operations are initiated the same way as write opera-tions with the exception that the read/write select bit in thedevice address word is set to one. There are three readoperations: current address read, random address readand sequential read.
CURRENT ADDRESS READ: The internal data wordaddress counter maintains the last address accessed dur-ing the last read or write operation, incremented by one.This address stays valid between operations as long as thechip power is maintained. The address “roll over” duringread is from the last byte of the last memory page, to thefirst byte of the first page.
Once the device address with the read/write select bit setto one is clocked in and acknowledged by the EEPROM,the current address data word is serially clocked out. Themicrocontroller does not respond with an input zero butdoes generate a following stop condition (refer to Figure 4).
RANDOM READ: A random read requires a “dummy” bytewrite sequence to load in the data word address. Once thedevice address word and data word address are clocked inand acknowledged by the EEPROM, the microcontrollermust generate another start condition. The microcontrollernow initiates a current address read by sending a deviceaddress with the read/write select bit high. The EEPROMacknowledges the device address and serially clocks outthe data word. The microcontroller does not respond with azero but does generate a following stop condition (refer toFigure 5).
SEQUENTIAL READ: Sequential reads are initiated byeither a current address read or a random address read.After the microcontroller receives a data word, it respondswith an acknowledge. As long as the EEPROM receives anacknowledge, it will continue to increment the data wordaddress and serially clock out sequential data words. Whenthe memory address limit is reached, the data wordaddress will “roll over” and the sequential read will con-tinue. The sequential read operation is terminated whenthe microcontroller does not respond with a zero but doesgenerate a following stop condition (refer to Figure 6).
AT24C128/2568
Figure 1. Device Address
Figure 2. Byte Write
Figure 3. Page Write
(* = DON’T CARE bit)
(† = DON’T CARE bit for the 128K)
Figure 4. Current Address Read
AT24C128/256
9
Figure 5. Random Read
(* = DON’T CARE bit)
(† = DON’T CARE bit for the 128K)
Figure 6. Sequential Read