NODO DE COMUNICACIÓN BASADO EN EL BUS CANdeeea.urv.cat/public/PROPOSTES/pub/pdf/561pub.pdf ·...

128
NODO DE COMUNICACIÓN BASADO EN EL BUS CAN AUTOR: Jose Antonio López Fresno DIRECTOR: Ernest Gil Dolcet DATA: Septiembre / 2004

Transcript of NODO DE COMUNICACIÓN BASADO EN EL BUS CANdeeea.urv.cat/public/PROPOSTES/pub/pdf/561pub.pdf ·...

NODO DE COMUNICACIÓN

BASADO EN EL BUS CAN

AUTOR: Jose Antonio López Fresno

DIRECTOR: Ernest Gil Dolcet

DATA: Septiembre / 2004

ÍNDICE

Índice

3

Índice ............................................................................................. 2

MEMORIA DESCRIPTIVA

1. Antecedentes ................................................................................... 9 2. Titular ............................................................................................. 9 3. Objetivo del proyecto .................................................................. 10 4. Otras posibles soluciones a mi problema ................................... 11 5. Descripción del Bus CAN .............................................................. 14

5.1. Qué es el CAN Bus ............................................................................ 14

5.2. Características principales de protocolo CAN ............................. 14

5.3. Conceptos del Bus CAN ................................................................... 15

5.3.1. Capa física (Physical Layer) ............................................. 15 5.3.2. Capa de Enlace ................................................................... 16 5.3.3. Tipos de comunicación CAN .............................................. 17

5.4. Especificación CAN 2.0A y CAN 2.0B ........................................... 17 5.5. Elementos que componen el sistema CAN Bus .............................. 18 5.6. Explicación funcional del Can-Bus ................................................. 20

5.7. Mensajes y tipos de Tramas ............................................................ 21

5.8. Formatos de Trama .......................................................................... 22

5.8.1. Trama de Datos ................................................................... 23 5.8.2. Trama remota ...................................................................... 24 5.8.3. Trama de error .................................................................... 24 5.8.4. Espacio entre tramas .......................................................... 25 5.8.5. Trama de sobrecarga .......................................................... 25 5.8.6. Arbitraje .............................................................................. 25

5.9. Fallo en la comunicación Can-Bus. Cómo actúa? ......................... 26

5.10. CAN en el mercado actual ............................................................. 26

6. Descripción del proyecto .............................................................. 28

6.1. Introducción ...................................................................................... 28

Índice

4

6.2. Introducción al SJA1000 ................................................................. 29

6.3. Descripción del SJA1000 ................................................................. 29

6.3.1. Características del SJA1000 .............................................. 29 6.3.2. Arquitectura del nodo CAN ............................................... 30 6.3.3. Diagrama de bloques ......................................................... 31

6.4. El sistema .......................................................................................... 32

6.4.1. El SJA1000 en nuestra aplicación .................................... 32 6.4.2. Alimentación ..................................................................... 33 6.4.3. Reset ................................................................................... 33 6.4.4. Oscilador y Clock ............................................................... 33

6.4.4.1 Uso de Sleep y Wake-up ........................................ 34 6.4.5. El microcontrolador 8051 (interficie) ............................... 34 6.4.6. PCA82C250. La capa física (Physical Layer) ................... 35

6.5. Control de la comunicación CAN ................................................... 37

6.5.1. Funciones básicas y Registros del Controlador SJA1000 .. 37

6.5.1.1. Valores de los bits de los registros del SJA1000 .... 40 6.5.1.2. Transmit Buffer / Receive Buffer .......................... 47 6.5.1.3. Filtro de aceptación en modo BasicCAN ............ 48

6.5.2. Funciones para la comunicación CAN ............................. 49

6.5.2.1. Inicialización ........................................................ 50 6.5.2.2. Transmisión ......................................................... 53 6.5.2.3. Abortar Transmisión ............................................ 56 6.5.2.4. Recepción ............................................................. 58

7. Acerca del microcontrolador P89C51 RC2 .............................. 64

7.1. Introducción ..................................................................................... 64

7.2. Distribución de la memoria ............................................................. 65

7.2.1. Localidades asignadas a las Interrupciones ...................... 65 7.2.2. Memoria de programa interna y externa ........................... 65 7.2.3. Memoria de datos (Data Memory) ..................................... 66

7.3. Localización de los Registros Especiales ........................................ 67

7.3.1. Registro de la palabra de estado del programa (PSW) ....... 68 7.3.2. Registro de control de potencia .......................................... 68 7.3.3. Registro de Interrupciones ................................................. 69

7.3.3.1. Registro Habilitador de Interrupciones (IE) ......... 69 7.3.3.2. Registro de Prioridad de las Interrupciones (IP) ..... 70

Índice

5

7.4. Diseño del entorno del microcontrolador ...................................... 70

7.4.1. Diseño de las salidas en paralelo ....................................... 70 7.4.2. Diseño de las entradas en paralelo .................................... 71 7.4.3. Diseño de las señales de Reset ........................................... 71 7.4.4. Diseño de las señales de Reloj ........................................... 72

8. Código comentado ........................................................................ 73

8.1 Como crear un proyecto nuevo en Keil Uvision ............................. 83 9. Bibliografía ................................................................................... 84

PLANOS

1. Planos ........................................................................................... 86

1.1. Introducción ..................................................................................... 86

1.2. Esquemas eléctricos ......................................................................... 87

1.3. Circuitos impresos ........................................................................... 89 1.4. Componentes .................................................................................... 91

1.5. Acabados de las placas electrónicas ............................................... 92

2. Manual de ORCAD Capture ...................................................... 93

2.1. Introducción a ORCAD Capture ................................................... 93

2.2. Descripción de ORCAD Capture ................................................... 93

2.2.1. El Administrador de Proyectos .......................................... 94 2.2.2. El Editor de Esquemas ....................................................... 95 2.2.3. El Editor de Componentes ................................................. 96 2.2.4. Informe de la Sesión (Sesion Log) .................................... 97 2.2.5. La Barra de Estado ............................................................ 97

2.3. Crear un proyecto de ORCAD Capture ........................................ 98

3. Manual de ORCAD Layout ........................................................ 99

3.1. Introducción a ORCAD Layout ...................................................... 99 3.2. Creación de un Proyecto con ORCAD Layout .............................. 99

3.3. Parámetros de la placa .................................................................... 100

Índice

6

3.3.1. El Borde de la placa .......................................................... 100 3.3.2. Fijar Unidades de Medida ................................................ 100 3.3.3. Fijar la Rejilla ................................................................... 100

3.4. La Barra de Herramientas de Layout .......................................... 101

PRESUPUESTO

1. Presupuesto y Mediciones ......................................................... 105

1.1. Introducción .................................................................................... 105

1.2. Mediciones ....................................................................................... 106

1.2.1. Mediciones del Material Electrónico ................................ 106 1.2.2. Mediciones de Mano de Obra Montaje y Test .................. 108 1.2.3. Mediciones Ingeniería de Diseño ................................... 108

1.3. Presupuesto ..................................................................................... 109

1.3.1. Presupuesto del Material Electrónico .............................. 109 1.3.2. Presupuesto del Montaje y Test ........................................ 114 1.3.3. Presupuesto Ingeniería de Diseño .................................... 114 1.3.4. Presupuesto Total .............................................................. 115

PLIEGO DE CONDICIONES

1. Pliego de Condiciones ................................................................ 117

1.1. Introducción .................................................................................... 117

1.2. Condiciones generales .................................................................... 118

1.2.1. Descripción ........................................................................ 118 1.2.2. Ejecución ........................................................................... 118 1.2.3. Recepción .......................................................................... 118 1.2.4. Responsabilidad ................................................................ 118 1.2.5. Modificaciones .................................................................. 118 1.2.6. Mantenimiento .................................................................. 119 1.2.7. Supervisión ........................................................................ 119 1.2.8. Transporte ......................................................................... 119 1.2.9. Anulación del contrato ..................................................... 119

1.3. Condiciones técnicas ....................................................................... 120

1.3.1. Generalidades .................................................................... 120 1.3.2. Normativa aplicada ........................................................... 120

Índice

7

1.3.3. Utilización .......................................................................... 120 1.3.4. Valores límites ................................................................... 120 1.3.5. Circuitos integrados .......................................................... 120 1.3.6. Transistores y diodos ......................................................... 121 1.3.7. Resistencias ....................................................................... 121 1.3.8. Condensadores .................................................................. 122 1.3.9. Circuitos impresos ............................................................ 122 1.3.10. Montaje y cableado interno ............................................ 122 1.3.11. Alimentación del montaje ............................................... 123

1.4. Condiciones facultativas ................................................................. 124

1.4.1. Generalidades .................................................................... 124 1.4.2. Dirección ........................................................................... 124 1.4.3. Realización ........................................................................ 124 1.4.4. Materiales .......................................................................... 125 1.4.5. Construcción ..................................................................... 125

1.5. Condiciones Económicas ................................................................ 126

1.5.1. Mediciones ......................................................................... 126 1.5.2. Precios unitarios ................................................................ 126 1.5.3. Pagos .................................................................................. 126 1.5.4. Multas ................................................................................ 127 1.5.5. Revisión de precios ............................................................ 127

1.6. Condiciones administrativas .......................................................... 128

1.6.1. Adjudicación y contratos ................................................... 128 1.6.2. Entrega de proyecto ........................................................... 128

MEMORIA DESCRIPTIVA

Memoria Descriptiva

9

1. Antecedentes Durante los años de carrera he estudiado multitud de asignaturas diferentes, unas que me han llamado más la atención que otras y es aquí donde he decidido hacia donde iba a enfocar mi proyecto. La parte más atractiva de la carrera, para mi, ha sido la mas relacionada con la electrónica digital y el control de dispositivos programables, por su flexibilidad e interminables posibilidades que me ofrecía. Concretando mas aun, dentro de esta temática, las comunicaciones me fascinaban y siempre he querido saber como es su diseño y el mínimo detalle yo ansiaba estudiar. Ya decidido el tema, solo me faltaba escoger el tipo de industria en el que me movería para que mi aplicación tuviera un mayor aprovechamiento. En las aplicaciones automovilísticas he encontrado una idea muy similar a lo que yo pretendía, que era el funcionamiento de todos los dispositivos (luces, ABS, motor, intermitentes, luces de freno, bocina, limpia parabrisas, etc.) y sus respectivos interruptores y botones que los controlan. Investigando en el sector y mirando las posibles soluciones para este planteamiento de proyecto, encontré varios modelos y finalmente me decanté por el bus CAN ya que era la que parecía tener mas proyección dentro del mercado internacional y aparte de ser la mas fiable y adecuada para mi problema. Este tipo de tecnología lleva implantada en el mercado cerca de 20 años y es un gran reto dominar este tipo de protocolos ya que la industria actual del automóvil demanda mucha gente que sepa de él. Por último, y además de todos estos motivos expuestos, otro gran aliciente para mi, era acabar la carrera dominando ampliamente todo lo relacionado con sistemas programables como son los microcontroladores, los cuales aun sabiendo de su enorme utilidad y aplicación hoy en día en todos los campos y ámbitos del día a día (hornos, microondas, juguetes de cualquier tipo, plancha, aire acondicionado, etc.), yo tenía enormes dificultades en cuanto a su manejo, programación. Era un objetivo que no quería dejar pendiente al titularme. 2. Titular El titular y destinatario del presente proyecto es el Departament d’Enginyeria Eléctrica, Electrónica y Automática de la ETSE (Escola Técnica Superior d’Enginyeria) de la Universitat Rovira i Virgili, ubicada en el Campus Sescelades, Avenida Paisos Catalans 26, C.P.: 43007, Tarragona. La documentación original quedará en propiedad del ETSE. El representante legal en este caso es el Sr. Ernest Gil Dolcet.

Memoria Descriptiva

10

3. Objetivo del proyecto En esta aplicación, en la cual utilizamos dos placas independientes pero comunicadas por un mismo “bus” de datos serie, lo que pretendemos es demostrar que mediante una variación en la entrada de datos del puerto 1 de la primera placa (transmisora) del microcontrolador 1, veremos reflejada esta modificación en el puerto 1 (utilizado ahora como salida) pero en este caso del microcontrolador 2 el cual esta soldado a la placa segunda (receptora) y así reflejar cualquier mínima variación. ¿Cómo hacemos esto? Pues muy fácil, hemos construido una placa emisora la cual tiene 8 pulsadores que me modificarán los valores de las patillas del puerto 1 (establecido como de entrada) entre “1” y ”0” y otra placa que tendrá 8 leds en el puerto 1 del micro de la placa 2 (configurado como salida), la cual me reflejará mediante el encendido o apagado en tiempo real, el estado de los pulsadores de la placa emisora. Al pulsar un botón se enciende la luz que está en la misma posición y así con todos. Otra característica de este sistema es que se pueden pulsar simultáneamente todos los botones que queramos que se podrán encender todas las luces de sus respectivos botones a la vez, sin ningún conflicto. Esto es así porque nosotros transmitimos datos en serie de bit en bit que son guardados en el buffer en forma de words (cada 8 bits 1 word), por lo tanto cada vez que haya una variación de uno de los pulsadores se actualizará toda la palabra, es decir los 8 leds. Todo este trabajo lo hace en tiempo real porque es un sistema de chequeo continuo de las señales, pero solo trabajará cada vez que haya una modificación de la última palabra gracias a la interrupción por recepción de mensaje, que nos avisará de que un mensaje nuevo ha sido recibido para su posterior visualización en los leds.

Memoria Descriptiva

11

4. Otras posibles soluciones a mi problema Hay muchos tipos de soluciones a mi problema, debido a las diferentes clases de comunicaciones serie que transmiten datos entre equipos electrónicos. Aunque en ningún caso superan las prestaciones de la solución adoptada ya sea por velocidad o por tamaño del producto así como por la distancia que es capaz de recorrer. Destacamos las mas importantes: TIA/EIA RS-232 Es un estándar de comunicación para la transmisión de datos en serie entre equipos. La EIA (Electronics Industries Association) derivada de Data Terminal Equipment (DTE), por ejemplo el PC, a Data Communications Equipment (DCE), por ejemplo una impresora, para cubrir las conexiones eléctricas, mecánicas y funcionales entre terminales y equipos de comunicaciones. La EIA RS-232 es la más vieja y el estándar más ampliamente conocido de DTE/DCE. La transmisión de datos digital se hace en serie a través de una línea asimétrica, no terminada, entre dos equipos. La versión europea está bajo la especificación CCITT V.24. La distancia máxima de enlace está sobre los 15 metros y la velocidad de transmisión desde 20 kbps a 480 kbps. Su principal problema radica en que no se le pueden conectar en red varios dispositivos por lo que no es lo que busco exactamente. Aunque posteriormente han salido versiones mas modernas que me permiten conectar más módulos, pués su tamaño es un impedimento para mi aplicación Lazo de corriente 4-20 mA El lazo de corriente 4-20 mA se utiliza para las comunicaciones entre equipos industriales. De hecho, es enviar una señal analógica a través de un lazo de corriente con un par de cables trenzado, sobre una distancia de 3.000 m. Desde un microcontrolador, se puede, a través de un DAC con salida 4-20 mA de Analog Devices AD420 o AD421, implementar un lazo. Transmitiendo una corriente, como respuesta a una tensión asegura que la caída de tensión a través de la resistencia de sensado es la misma en cualquier parte del lazo. 4 mA corresponde a un valor “0” , mientras que 20 mA corresponde a “1”. Se usa 4 mA y no 0 mA, para detectar con 0 mA un corte en la línea de transmisión. El lazo se alimenta típicamente con 24 V y se pueden conectar hasta 4 dispositivos en un mismo lazo. Protocolo PROFIBUS Es un “bus” serie para aplicaciones industriales ideado por Siemens para interconectar sensores, actuadores y controladores, como lo son los autómatas programables (PLC). Es una combinación de hardware a medida y software, con un protocolo de 12 Mbps. Pertenece a la fundación Fieldbus con el estándar EN 50170, es un sistema de comunicación serie, digital y bidireccional. Utiliza los drivers RS485 y un par de cables trenzados, con velocidades desde 9,6 kbps hasta 12 Mbps. Se basa en redes digitales jerarquizadas, para la instrumentación de plantas/factorías, y se utiliza en aplicaciones de procesos y de automatización industriales.

Memoria Descriptiva

12

IEEE 1451.2 Es un nuevo estándar de comunicación de sensores colocados en una red industrial. Se basa en sensores inteligentes, “Smart Sensors”, que se pueden interconectar “plug and play” en una red. El sensor inteligente (o el actuador inteligente) está conectado al modulo de interconexión STIM. Este contiene uno o más sensores y/o actuadores, un acondicionador de señal y un convertidor A/D o D/A que interconecta el sensor o actuador con el microcontrolador residente. El microcontrolador accede también a una memoria no volátil que contiene las TEDS (las especificaciones del sensor e del actuador que van a ser leídas a través de la red industrial). El NCAP es básicamente un nodo donde el STIM va a ser conectado, a través de una interconexión de 10 hilos serie, llamada TII. Con este sistema, cuando un sensor inteligente se conecta a un nodo, la información del TEDS está disponible en la red; esta identifica que tipo de sensor o actuador tiene e indica los valores que hay disponibles de entrada o salida, así como las unidades de dichos valores (grados centígrados, metros cúbicos por segundo, kilopascals, etc.), la precisión del sensor (por ejemplo: ± 2 %) y otras informaciones varias sobre el sensor o actuador. De esta forma se eliminan los pasos de configuración del software, cada vez que hay que hacer un cambio de un sensor/actuador o al añadir un sensor/actuador. INTERBUS El Interbus es un “bus” de campo estándar IEC 61158, para aplicaciones industriales y procesos de producción. Está basado en el estándar RS-485, requiere doble línea de transmisión (5 cables entre dos dispositivos), con una velocidad de transmisión de 500 kb/s, y alcanzan una distancia de 400 metros entre dos puntos. El número de dispositivos máximo es de 512. MODBUS El protocolo de MODBUS® es una estructura de envío de mensajes desarrollada por Modicon en 1979, que establece la comunicación masterslave/clientserver entre dispositivos inteligentes. Es una norma verdaderamente abierta y el protocolo de red ampliamente usado en entornos industriales. CANOpen (Controller Area Network Open) CANopen es un sistema de gestión de redes basado en el bus serie CAN. CANopen asume que los dispositivos hardware tienen un transceptor de CAN y un controlador CAN como está especificado en la ISO 11898. El perfil de la familia CANopen especifica los mecanismos de comunicación estandarizados y la funcionalidad del dispositivo, disponible y mantenida por CAN in Automation (CiA), para que los usuarios puedan implementar la licencia libre. CANopen originalmente, se diseñó orientado para sistemas de control industrial. Pero CANopen también se usa en otros campos de aplicación, por ejemplo: en transporte público, vehículos todo terreno, equipos médicos, electrónica marítima y automatización.

Memoria Descriptiva

13

LIN (Local Interconnect Network) El bus LIN es un subBus del CAN. Está basado en la interface SCI/UART, por tanto más eficaz en costo. Se introdujo como una norma en la industria de automoción en 1999. Hay gran interés en esta norma entre muchos fabricantes de automóviles y sus proveedores, así como en toda la industria. El Bus LIN es una solución significativamente más económica que la del Bus CAN. La fiabilidad de LIN es alta, pero no se encuentra al mismo nivel que la del CAN. El bus LIN se ha diseñado para ser una extensión lógica del CAN. Es escalable y de menor costo en nodos satélites: no requieren ningún cristal o resonador (se pueden sincronizar los esclavos con un montaje simple RC), el requisito de precisión en la frecuencia es de ± 15%, es fácil de implementar, tiene un tiempo de reacción bajo (100ms máximo) y un tiempo predecible en el peor de los casos. La solución técnica consiste en el concepto de un sólo master y múltiples esclavos (hasta 16 nodos), con una longitud de cable de hasta 40m, con velocidades de transmisión de 2.400, 9600, 19200bps. No es necesario ningún arbitraje de bus. La implementación del silicio es de bajo costo, basado en una común UART/SCI hardware. Casi cualquier microcontrolador tiene el hardware necesario interno en el chip. Se implementa con una auto-sincronización sin cristal o resonador cerámico, en los nodos esclavos. La capa física es una implementación de un sólo hilo (ISO 9141 mejorada) con una velocidad de hasta 20Kbit/s. Esto precisamente es lo que me deja en inferioridad con el CAN, la velocidad de transmisión. J1850 SAE (Society of Automotive Engineers recomended practice) En EEUU ha sido adoptado como estándar el bus J1850 SAE, es parecido al CAN en cuanto al campo de aplicación, la automoción. El J1850 permite el uso de uno o dos hilos para el bus, dos velocidades de transmisión (10.4 kbps o 41.7 kbps), dos técnicas de codificación del bit (modulación por ancho de pulso PWM o modulación variable del ancho de pulso VPW), utilizar la detección de errores CRC o Checksum dependiendo del formato del mensaje y de la técnica de modulación seleccionada.

Memoria Descriptiva

14

5. Descripción del Bus CAN 5.1. Qué es el CAN Bus CAN Bus es un protocolo de comunicación en serie desarrollado por Bosch en los años 80 para el intercambio de información entre unidades de control electrónicas del automóvil, aunque actualmente ya ha despertado el interés de otros sectores como el área de control y automatización industrial. Se utiliza además como base para arquitecturas de bus industrial en aplicaciones de tiempo real distribuidas, sistemas de supervisión continua y control en el ámbito de la producción. CAN es protocolo abierto para uso industrial y concebido como un protocolo de alta seguridad. CAN significa Controller Area Network (Red de área de control) y Bus, en informática, se entiende como un elemento que permite transportar información. La robustez del bus CAN se basa en su arquitectura multimaestro. Este sistema permite compartir una gran cantidad de información entre los diferentes módulos de control conectados a la red, lo que provoca una reducción importante tanto del número de sensores utilizados como de la cantidad de cables que componen la instalación eléctrica. De esta forma aumentan considerablemente las funciones actuales en los sistemas del automóvil donde se emplea el CAN Bus sin aumentar los costes, además de que estas funciones pueden estar repartidas entre dichos módulos de control.

Figura a) Módulos conectados en red Bus Can 5.2. Características principales de protocolo CAN

• La información que circula entre las unidades de mando a través de los dos cables (bus) son paquetes de 0 y 1 (bit) con una longitud limitada y con una estructura definida de campos que conforman el mensaje.

• Uno de esos campos actúa de identificador del tipo de dato que se transporta, de la

unidad de mando que lo trasmite y de la prioridad para trasmitirlo respecto a otros. El mensaje no va direccionado a ninguna unidad de mando en concreto, cada una de ellas reconocerá mediante este identificador si el mensaje le interesa o no.

• Todas las unidades de la red pueden ser trasmisoras y receptoras, y el número de

módulos conectados a la red es variable (dentro de unos límites).

Memoria Descriptiva

15

• Cualquier módulo introduce un mensaje en el bus con la condición de que esté

libre, si otra lo intenta al mismo tiempo el conflicto se resuelve por la prioridad del mensaje indicado por el identificador del mismo.

• El sistema está dotado de una serie de mecanismos que aseguran que el mensaje es

trasmitido y recibido correctamente. Cuando un mensaje presenta un error, es anulado y vuelto a trasmitir de forma correcta (automáticamente), de la misma forma un módulo con problemas avisa a los demás mediante el propio mensaje, si la situación no se soluciona, este módulo queda fuera de servicio pero el sistema sigue funcionando.

5.3. Conceptos del Bus CAN 5.3.1. Capa física (Physical Layer) La capa física es responsable de la transferencia de bits entre los distintos módulos que componen la red. Define aspectos como niveles de señal, codificación, sincronización y tiempos en que los bits se transfieren al bus. En la especificación original de CAN, la capa física no fue definida, permitiendo diferentes opciones para la elección del tipo de utilidad y niveles eléctricos de transmisión. Las características de las señales eléctricas en el bus fueron establecidas más tarde por el estándar ISO 11898. La especificación CiA (CAN in AUTOMATION), complementó las definiciones respecto al medio físico y conectores. Los módulos conectados al bus interpretan dos niveles lógicos denominados:

• Dominante: la tensión diferencial (CAN_H - CAN_L) es del orden de 2’0 V con CAN_H = 3’5V y CAN_L = 1’5V (nominales).

• Recesivo: la tensión diferencial (CAN_H - CAN_L) es del orden de 0V con

CAN_H = CAN_L = 2’5V (nominales). Otra de las partes a destacar de esta comunicación, es la velocidad con la que se transmiten los mensajes a través de la red. La normal es tener buses de corta longitud, para así un funcionamiento óptimo. Pero si por el contrario tenemos redes de largas longitudes esto irá mermando nuestra velocidad de transmisión, debido a los retardos en la línea, impedancias, tolerancias de los osciladores, etc. Para atenuar estos carencias se colocan en los extremos del bus impedancias de carga para una mayor estabilidad. A continuación, en la Tabla 1, se muestran los valores típicos (son orientativos) de transmisión según la longitud de los buses:

Memoria Descriptiva

16

Tabla 1. Velocidad-Distancia en CAN Velocidad Tiempo de Bit Longitud Máxima

1 Mbps 1 µS 30 m 800 Kbps 1,25 µS 50 m 500 Kbps 2 µS 100 m 250 Kbps 4 µS 250 m 125 Kbps 8 µS 500 m 50 Kbps 20 µS 1000 m 20 Kbps 50 µS 2500 m 10 Kbps 100 µS 5000 m

El número máximo de módulos no está limitado por la especificación básica y depende de las características de los controladores CAN (SJA1000). Las especificaciones de buses de campo lo limitan a 32 o 64. 5.3.2. Capa de Enlace

Unas de las características que distingue a CAN con respecto a otras normas, es su técnica de acceso al medio denominada como CSMA/CD+CR o "Carrier Sense, Múltiple Access/Colission Detection + Collision Resolution" (Acceso múltiple con detección de portadora, detección de colisión más resolución de colisión).

El acceso al medio por medio de técnicas de acceso múltiple y detección de conflicto evolucionaron desde el método ALOHA inicial hasta su consolidación como método de acceso al medio de las redes Ethernet, con técnica CSMA/CD. El método de acceso al medio utilizado en bus CAN añade una característica adicional: la resolución de colisión. En la técnica CSMA/CD utilizada en redes Ethernet ante colisión de varias tramas, todas se pierden, CAN resuelve la colisión con la supervivencia de una de las tramas que chocan en el bus. Además la trama superviviente es aquella a la que se ha identificado como de mayor prioridad.

La resolución de esta colisión se basa en aplicar una función lógica determinista a cada bit, que se resuelve con la prioridad del nivel definido como bit de tipo dominante. Definiendo el bit dominante como equivalente al valor lógico '0' y bit recesivo al nivel lógico '1' se trata de una función AND de todos los bits transmitidos simultáneamente. Cada transmisor escucha continuamente el valor presente en el bus, y se retira cuando ese valor no coincide con el que dicho transmisor ha forzado. Mientras hay coincidencia la transmisión continua, finalmente el mensaje con identificador de máxima prioridad sobrevive. Los demás módulos reintentarán la transmisión lo antes posible. Por lo tanto la prioridad queda así determinada por el campo Identificador (forma parte del mensaje). Hemos de tener en cuenta que la especificación CAN de Bosch no dice cómo se ha de traducir cada nivel de bit (dominante o recesivo) a variable física. Cuando se utilizan dos cables trenzados (es lo que se especifica) según ISO 11898 el nivel dominante es una tensión diferencial positiva en el bus, el nivel recesivo es ausencia de tensión, o cierto valor negativo.

Memoria Descriptiva

17

5.3.3. Tipos de comunicación CAN Existen dos tipos hardware básicos, aunque la comunicación en los dos es idéntica y son compatibles entre sí. Esto nos permite hacer mas utilidades y de una mayor complejidad. Remarco que en mi proyecto nos centraremos en el primer método (BasicCan) ya que su versatilidad es máxima y para nuestras necesidades cumple sobradamente con lo requerido.

• Basic CAN: hay una relación muy estrecha entre el controlador CAN y el microcontrolador. Interrumpimos el microcontrolador para tratar con cada uno de los mensajes del CAN. Cada módulo transmitirá tan sólo cuando se produzca alguna situación reseñable (p.ejemp: pulsar uno de los pulsadores) de las señales que le interesan. Este funcionamiento es adecuado para aquellos módulos encargados de utilizar informaciones breves y rápidas, disminuyendo la ocupación del bus.

• Full CAN: contiene dispositivos hardware extras que proporcionan un servidor que

automáticamente recibe y transmite los mensajes CAN, sin necesidad de interrumpir al microcontrolador asociado, reduciéndose la carga del mismo. Está orientado a módulos encargados del manejo de señales con un alto nivel de exigencia en cuanto a frecuencia de actualización y seguridad.

5.4. Especificación CAN 2.0A y CAN 2.0B Las aplicaciones de protocolo de comunicaciones Bus CAN siguen la estándar normal internacional ISO 11519-2 para las aplicaciones de velocidad bajas y ISO 11898 para las aplicaciones de velocidad altas que es nuestro caso. La descripción de la ISO sobre especificación de CAN 2.0A y 2.0B están mas enfocada a los requisitos de fabricación de controladores CAN. La diferencia entre CAN 2.0A y CAN 2.0B está principalmente y sobre todo en la forma del identificador. La especificación CAN 2.0A define sistemas CAN con un estándar de 11 bit del identificador (CAN estándar). CAN 2.0B especifica la trama extendida con 29 bit en el identificador (CAN Extendido) Los mensajes transmitidos desde cualquier módulo en una red CAN no contienen la dirección del módulo emisor ni la del módulo receptor. En vez de esto, los mensajes contienen un campo identificativo, único en toda la red, que realiza esa función, además de indicarnos la prioridad del mensaje. El mensaje de mayor prioridad accede al bus, mientras que los mensajes de menor prioridad se retransmitirán automáticamente en los siguientes ciclos de bus. Como consecuencia de esto, varios módulos pueden recibir y actuar simultáneamente sobre el mismo mensaje. Este formato de los mensajes ofrece a la red una gran flexibilidad y posibilidad de expansión, ya que podremos añadir nuevos módulos a la red sin tener que hacer ningún cambio en el hardware ni en el software existente. Las tramas de los mensajes son los elementos básicos de transmisión y van de un módulo emisor a uno o mas módulos receptores. El mensaje está dividido en siete campos diferentes, cada uno de ellos con una función específica.

Memoria Descriptiva

18

5.5. Elementos que componen el sistema CAN Bus Cables La información circula por dos cables trenzados que unen todas los módulos que forman el sistema. Esta información se transmite por diferencia de tensión entre los dos cables, de forma que un valor alto de tensión representa un 1 y un valor bajo de tensión representa un 0. La combinación adecuada de unos y ceros forman el mensaje a transmitir.

En un cable los valores de tensión oscilan entre 0V y 2.25V, por lo que se denomina cable L (Low) y en el otro, el cable H (High) lo hacen entre 2.75V. y 5V. En caso de que se interrumpa la línea H o que se derive a masa, el sistema trabajará con la señal de Low con respecto a masa, en el caso de que se interrumpa la línea L, ocurrirá lo contrario. Esta situación permite que el sistema siga trabajando con uno de los cables cortados o comunicados a masa, incluso con ambos comunicados también sería posible el funcionamiento, quedando fuera de servicio solamente cuando los dos cables se cortan.

Es importante tener en cuenta que el trenzado entre ambas líneas sirve para anular los campos magnéticos, por lo que no se debe modificar en ningún caso ni el paso ni la longitud de dichos cables.

Figura b) Línea CAN

Elemento de cierre o terminador Son resistencias conectadas en los extremos de los cables H y L. Sus valores son habitualmente 120 Ohmios (aunque pueden variar) y se colocan para adecuar el funcionamiento del sistema a diferentes longitudes de cables y número de módulos conectados, ya que impiden posibles efectos parásitos que nos pueden trastocar el mensaje. Estas resistencias las colocamos en la mismísima placa del módulo, para así ahorrar en soluciones externas y para mayor seguridad de funcionamiento.

Figura c) Resistencias de cierre

Memoria Descriptiva

19

Controlador SJA1000

Es el elemento encargado de la comunicación entre el microprocesador del módulo y el trasmisor-receptor (PCA82C250). Trabaja acondicionando la información que entra y sale entre ambos componentes.

Habrá un controlador por cada módulo de nuestra red. Este elemento trabaja con niveles de tensión muy bajos y es el que determina la velocidad de trasmisión de los mensajes, que será mas o menos elevada dependiendo de nuestra aplicación y lo que esperemos de ella. El controlador también interviene en la sincronización entre los diferentes módulos para la correcta emisión y recepción de los mensajes.

Figura d) Ubicación del controlador

Transmisor / Receptor (PCA82C250)

El trasmisor-receptor es el elemento que tiene la misión de recibir y de trasmitir los datos, además de acondicionar y preparar la información para que pueda ser utilizada por los controladores. Esta preparación consiste en situar los niveles de tensión de forma adecuada, amplificando la señal cuando la información se vuelca en la línea y reduciéndola cuando es recogida de la misma y suministrada al controlador.

El trasmisor-receptor es básicamente un circuito integrado que está situado en cada una de los módulos, trabaja con intensidades próximas a 0.5 A y en ningún caso interviene modificando el contenido del mensaje. Para su buen funcionamiento se sitúa entre los cables que forman la línea CAN Bus y el controlador SJA1000.

Figura e) Ejemplo de un módulo

Memoria Descriptiva

20

5.6. Explicación funcional del Can-Bus

Figura f) Ejemplo práctico de CAN

Los módulos que se conectan al sistema CAN Bus son los que necesitan compartir información, pertenezcan o no a un mismo sistema. Por ejemplo, si hablamos de coches pues cabria decir que la velocidad de transmisión de los datos del ABS deberían ser muy rápidos por lo importante que supone la información utilizada y sin embargo la del climatizador pues no haría falta tener una línea súper rápida ya que el muestreo se puede hacer mas pausadamente.

El sistema CAN Bus está orientado hacía el mensaje y no al destinatario. La información en la línea es transmitida en forma de mensajes estructurados en la que una parte del mismo es un identificador que indica la clase de dato que contiene. Todas los módulos reciben el mensaje, lo filtran y solo lo emplean las que necesitan dicho dato. Como se supone, todos los módulos conectados al sistema son capaces tanto de introducir como de recoger mensajes de la línea. Cuando el bus está libre cualquier módulo conectado puede empezar a transmitir de nuevo.

En el caso de que uno o varios módulos quieran introducir un mensaje al mismo tiempo, lo hará la que tenga una mayor prioridad. Esta prioridad nos la indica el identificador.

El proceso de trasmisión de datos se desarrolla siguiendo varios pasos:

Memoria Descriptiva

21

Suministro de datos:

Un módulo recibe información de los sensores que tiene asociados (r.p.m. de un motor, velocidad, temperatura del motor, puerta abierta, en nuestro caso botones, etc.)

Su microprocesador pasa la información al controlador donde es gestionada y preparada para a su vez ser pasada al PCA82C250 donde se traducirá en señales eléctricas.

Transmisión de datos:

El controlador de dicho módulo transfiere los datos y el identificador junto con la petición de inicio de trasmisión, asumiendo la responsabilidad de que el mensaje sea correctamente transmitido a todas los módulos de la red. Para transmitir el mensaje he tenido que encontrar el bus libre, y en caso de conflicto con otro módulo intentando transmitir al mismo tiempo, tener una prioridad mayor. A partir del momento en que esto ocurre, el resto de módulos se convierten en receptores.

Recepción del mensaje:

Cuando todos los módulos reciben el mensaje, verifican el identificador para determinar si el mensaje va a ser utilizado por ellos. Los módulos que necesiten los datos del mensaje lo procesan, si no lo necesitan, el mensaje se ignora.

El sistema CAN Bus dispone de mecanismos para detectar errores en la trasmisión de mensajes, de forma que todos los receptores realizan un chequeo del mensaje analizando una parte del mismo, llamado campo CRC. Otros mecanismos de control se aplican en los emisores que mirarán el nivel del bus, la presencia de campos de formato fijo en el mensaje (verificación de la trama), análisis estadísticos por parte de los módulos de sus propios fallos, etc. Estas medidas hacen que las probabilidades de error en la emisión y recepción de mensajes sean muy bajas, por lo que es un sistema extraordinariamente seguro.

El planteamiento del CAN Bus, como puede observarse, permite disminuir notablemente el cableado de nuestra utilidad, puesto que si un módulo dispone de una información, como por ejemplo, la temperatura ambiente, esta puede ser utilizada por el resto de módulos sin que sea necesario que cada una de ellos reciba la información de ese sensor de temperatura.

Otra ventaja palpable es que las funciones pueden ser repartidas entre los distintos módulos para que así si necesitamos mas funciones no nos supone un problema económico importante. 5.7. Mensajes y tipos de Tramas El mensaje es una sucesión de “0” y “1”, que tal y como explicaba al inicio, están representados por distintos niveles de tensión en los cables del CAN Bus y que se llaman “bit”. CAN utiliza mensajes de estructura predefinida para la gestión de la comunicación, llamados “Tramas”.

Memoria Descriptiva

22

Se distinguen entre dos variantes de CAN, el definido en CAN 2.A o "CAN Standard (Basic Can)" y el definido en CAN 2.B o "CAN Extendido (PeliCan)", los formatos de trama son idénticos con la diferencia mas sustancial que es el número de bits que se utilizan para el identificador de mensaje: 11 bits (2032 identificadores) diferentes en CAN Standard y 29 bits (536.870.912 identificadores) en CAN Extendido. Las tramas CAN son de longitud reducida, la trama más larga es de 130 bits en CAN Estándar y 154 bits en CAN Extendido. Los tipos de trama, y estados de bus utilizados son: Trama de datos: la que un módulo utiliza normalmente para poner información en el bus. Puede incluir entre 0 y 8 Bytes de información útil. Trama de interrogación remota (remote frame): puede ser utilizada por un módulo para solicitar la transmisión de una trama de datos con la información implicada a un identificador dado. El módulo que disponga de la información definida por el identificador la transmitirá en una trama de datos. Tramas de error: se usan para señalarle al resto de módulos la detección de cualquier error, impidiendo normalmente el mensaje erróneo. Trama de sobrecarga: permite que un módulo fuerce a los demás a alargar el tiempo entre transmisión de tramas sucesivas. Lo hace el dispositivo con independencia del software. Espaciado inter-tramas (IFS): Las tramas de datos (y de interrogación remota) se separan entre sí por una secuencia predefinida que se denomina espaciado inter-trama. Bus en reposo: En los intervalos de inactividad se mantiene constantemente el nivel recesivo del bus. En un bus CAN los módulos transmiten la información, sin necesidad de una orden, con tramas de datos, bien sea por un proceso realizado con una frecuencia o bien activado ante algún suceso en el módulo. La trama de interrogación remota sólo se suele utilizar para detectar la presencia de módulos o para puesta al día de información en un módulo recién incorporado a la red. Los mensajes pueden entrar en colisión en el bus, pero como ya sabemos, el de identificador de mayor prioridad sobrevivirá y los demás son posteriormente retransmitidos lo antes posible. 5.8. Formatos de Trama El mensaje se descompone en campos de diferente tamaño (número de bits) que nos permitirán llevar a cabo el proceso de comunicación entre los módulos según el protocolo definido por Bosch para el CAN Bus, que facilitan desde identificar al módulo, como indicar el principio y el final del mensaje, mostrar los datos, permitir distintos controles etc. Los mensajes son introducidos en la línea con una cadencia que oscila entre los 7 y los 20 milisegundos dependiendo de la velocidad del área y del módulo que los introduce.

Memoria Descriptiva

23

5 V valor recesivo

0 V valor dominante 1 0 1 1 0 0 1 0 1 1

Figura g) Ejemplo de cómo se escribe un mensaje

5.8.1. Trama de Datos Estructura del mensaje estándar:

• Campo de inicio del mensaje: El mensaje se inicia con bit dominante, cuyo flanco descendente es utilizado por los módulos para sincronizarse entre sí.

• Campo de arbitrio: Los 11 bit de este campo se usan como identificador que

permite reconocer a los módulos la prioridad del mensaje. Cuanto más bajo sea el valor del identificador más alta es la prioridad, y por lo tanto determina el orden en que van a ser introducidos los mensajes en la línea. El bit RTR indica si el mensaje contiene datos (RTR=0) o si se trata de una trama remota sin datos (RTR=1). Una trama de datos siempre tiene una prioridad más alta que una trama remota. La trama remota la usamos para pedir datos a otros módulos o bien porque se necesitan o para realizar un chequeo.

• Campo de control: Este campo informa sobre las características del campo de datos. El bit IDE indica cuando es un “0” que se trata de una trama estándar (BasicCan, 11 bits) y cuando es un “1” que es una trama extendida (PeliCan, 29 bits). El segundo bit (RB0) es siempre recesivo. Los cuatro bit que componen el campo DLC indican el número de bytes contenido en el campo de datos (0 a 8).

• Campo de datos: En este campo aparece la información del mensaje con los datos que el módulo correspondiente introduce en la línea CAN Bus. Puede contener entre 0 y 8 bytes (de 0 a 64 bit).

• Campo de aseguramiento (CRC): Código de redundancia cíclica que genera el

transmisor por la división módulo 2 de todos los bits precedentes del mensaje, incluyendo los de relleno si existen, por el polinomio generador: X15+ X14+ X8+ X7+ X4+ X3+ X1+1, el resto de esta división es el código CRC transmitido. Los receptores comprueban este código. Este campo tiene una longitud de 16 bits y se utiliza para detectar errores por los 15 primeros, mientras el último siempre será un bit recesivo (1) para delimitar el campo CRC.

• Campo de confirmación (ACK): El campo ACK se compone de dos bit que son

siempre trasmitidos como recesivos (1). Todas los módulos que reciben el mismo CRC modifican el primer bit del campo ACK por uno dominante (0), de forma que el módulo que está todavía trasmitiendo reconoce que al menos un módulo ha recibido un mensaje escrito correctamente. De no ser así, el módulo transmisor interpreta que su mensaje tiene un error.

Memoria Descriptiva

24

• Campo de final de mensaje (EOF): Este campo indica el final del mensaje con una cadena de 7 bits recesivos. Nos puede suceder que en determinados mensajes se produzcan largas cadenas de ceros o unos, y que esto nos provoque una pérdida de sincronización entre los módulos. El protocolo CAN resuelve esta situación metiendo un bit de diferente valor cada cinco bits iguales: cada cinco “0” se inserta un “1” o al revés. El módulo que utilice el mensaje, descarta un bit posterior a cinco bits iguales. Estos bits reciben el nombre de bit stuffing.

• Espaciado entre tramas (IFS): Consta de un mínimo de 3 bits recesivos.

Figura h) Trama de mensaje CAN 2.0 A (Identificador de 11 bits)

Star Identif. RTR IDE r0 DLC datos CRC ACK EOF+IFS 1bit 11bit 1bit 1bit 1bit 4bit 0...8*8 bits 15bit 2bit 10bit 5.8.2. Trama remota El formato es análogo a la trama de datos pero con el bit RTR recesivo. Por otra parte una trama remota no incluye nunca datos. El identificador es el del mensaje que se solicita, el campo longitud corresponde a la longitud de ese mensaje. 5.8.3. Trama de error Las tramas de error son generadas por cualquier módulo que detecta un error. Consiste en dos campos: Indicador de error ("Error Flag") y Delimitador de error. El delimitador de error consta de 8 bits recesivos consecutivos y permite a los módulos reiniciar la comunicación de nuevo tras el error. El Indicador de error varia según el estado de error:

• Si un módulo en estado de error "Activo" detecta un error en el bus interrumpe la comunicación del mensaje en proceso generando un "Indicador de error activo" que consiste en una secuencia de 6 bits dominantes sucesivos. Esta secuencia rompe la regla de relleno de bits y provocará la generación de tramas de error en otros módulos. Por tanto el Indicador de error puede extenderse entre 6 y 12 bits dominantes sucesivos. Finalmente se espera el campo que me delimita el error formado por los 8 bits recesivos. Entonces la comunicación se reinicia y el módulo que había sido interrumpido reintenta la transmisión del mensaje.

• Si un módulo en estado de error "Pasivo" detecta un error, el módulo transmite un "Indicador de error pasivo" seguido, de nuevo, por el campo delimitador de error. El indicador de error de tipo pasivo consiste en 6 bits recesivos seguidos y, por tanto, la trama de error para un módulo pasivo es una secuencia de 14 bits recesivos. De aquí se deduce que la transmisión de una trama de error de tipo pasivo no afectará a ningún módulo en la red, excepto cuando el error es detectado por el propio módulo que está transmitiendo. En ese caso los demás módulos

Memoria Descriptiva

25

detectarán una violación de las reglas de relleno y transmitirán a su vez tramas de error.

Tras señalar un error por medio de la trama de error apropiada cada módulo transmite bits recesivos hasta que recibe un bit también recesivo, luego transmite 7 bits recesivos consecutivos antes de finalizar el tratamiento de error. 5.8.4. Espacio entre tramas El espacio entre tramas separa una trama (de cualquier tipo) de la siguiente trama de datos o trama remota. El espacio entre tramas ha de constar de, al menos, 3 bits recesivos. Esta secuencia de bits se denomina "ínter-trama" (IFS). Una vez transcurrida esta secuencia, un módulo en estado de error activo puede iniciar una nueva transmisión o el bus permanecerá en reposo. Para un módulo en estado de error pasivo la situación es diferente, deberá espera una secuencia adicional de 8 bits recesivos antes de poder iniciar una transmisión. De esta forma se asegura una ventaja en inicio de transmisión a los módulo en estado activo frente a los módulo en estado pasivo. 5.8.5. Trama de sobrecarga Una trama de sobrecarga tiene el mismo formato que una trama de error activo. Sin embargo, la trama de sobrecarga sólo puede generarse durante el espacio entre tramas. De esta forma se diferencia de una trama de error, que sólo puede ser transmitida durante la transmisión de un mensaje. La trama de sobrecarga consta de dos campos, el Indicador de Sobrecarga, y el delimitador. El indicador de sobrecarga consta de 6 bits dominantes que pueden ser seguidos por los generados por otros módulos, dando lugar a un máximo de 12 bits dominantes. El delimitador es de 8 bits recesivos. Una trama de sobrecarga puede ser generada por cualquier módulo que debido a sus condiciones internas no está en condiciones de iniciar la recepción de un nuevo mensaje. De esta forma retrasa el inicio de transmisión de un nuevo mensaje. Un módulo puede generar como máximo 2 tramas de sobrecarga consecutivas para retrasar un mensaje. Otra razón para iniciar la transmisión de una trama de sobrecarga es la detección por cualquier módulo de un bit dominante en los 3 bits de "ínter-trama". Por todo ello una trama de sobrecarga de generada por un módulo dará normalmente lugar a la generación de tramas de sobrecarga por los demás módulos dando lugar, como se ha indicado, a un máximo de 12 bits dominantes de indicador de sobrecarga. 5.8.6. Arbitraje Un módulo transmisor monitoriza constantemente el estado del bus. Durante la transmisión del campo Arbitraje la detección de un bit dominante, cuando el bit transmitido ha sido recesivo, hace que el módulo detenga la transmisión y pase a recepción de la trama. Así no se pierde información y no se destruye por colisión ninguna trama de datos o remota. En un bus único un identificador de mensaje ha de ser asignado a un solo módulo concreto, es decir, se ha de evitar que dos módulos puedan iniciar la transmisión simultánea de

Memoria Descriptiva

26

mensajes con el mismo identificador y datos diferentes. La filosofía CAN es de que un mensaje es único en el sistema. Las tramas remotas con identificador concreto que puedan ser generadas por cualquier módulo han de coincidir en cuanto al campo longitud, definiendo un mensaje como el conjunto identificador + longitud de campo de datos + contenido de estos datos, el mensaje ha de ser único en el sistema y estar asignado a un módulo concreto. Así, por ejemplo, si en mi aplicación pulso el botón 1, esta información ha de ser transmitida al módulo destino diciéndole el LED que se ha de encender, con un identificador concreto, con longitud fija y consistente con la codificación de la información en el campo de datos. 5.9. Fallo en la comunicación Can-Bus. Como actúa? Los sistemas de seguridad que incorpora el CAN Bus permiten que las probabilidades de fallo en el proceso de comunicación sean muy bajas, pero sigue siendo posible que cables, contactos y los propios módulos tengan algún malfuncionamiento.

Para analizar una avería, debemos tener en cuenta que un módulo defectuoso conectado a la red CAN Bus no nos impedirá que el sistema trabaje con normalidad. Por supuesto que no podremos llevar a cabo las funciones relacionadas con el módulo averiado, pero sí del resto.

Para localizar estos posibles fallos la herramienta más adecuada será para nosotros el osciloscopio digital con dos canales y memoria, con el que podremos ver perfectamente los mensajes usados. En este caso, se debe tener en cuenta que los bits stuff (el que se añade después de cinco bits iguales) deben ser eliminados.

5.10. CAN en el mercado actual CAN fue concebido como un protocolo de alta seguridad. Para ello se han adoptado medidas adecuadas en cada una de las capas de protocolo: En la capa de enlace la disponibilidad de “Transceivers” (PCA82C250), con capacidad de funcionamiento en condiciones muy difíciles. Todos los mensajes transmitidos son reconocidos de forma consistente por los receptores enviando una trama con bit ACK que se transmite como recesivo. En las tramas de datos o interrogación remota se aplica la regla de relleno de bits que evita una secuencia sucesiva de más de 5 bits del mismo signo, para ello se inserta un sexto bit de signo contrario, el receptor ha de eliminar este bit adicional siguiendo la misma regla. Para detección de errores se incluye un código CRC con distancia Hamming 6. Cualquier módulo que detecta un error transmite una trama que señala el error a los demás módulos, si el módulo detector es un módulo totalmente activo (no se encuentra en nivel pasivo de error) el mensaje queda invalidado para toda la red y se retransmitirá lo antes posible. El tiempo de recuperación es de como máximo 29 veces el tiempo de bit. Se sigue un moderno proceso de diagnóstico en los módulos, cuando un módulo acumula errores pasa inicialmente a una situación de funcionamiento pasivo y si la degradación continúa el módulo queda excluido de la comunicación evitando perturbar al resto de módulos de la red. Es decir el estado de un módulo puede ser: Activo, Pasivo o Anulado. Un módulo anulado ha de deshabilitar su Transceiver y no participa en la comunicación.

Memoria Descriptiva

27

CAN a alcanzado un nivel muy alto de diseño robusto y implantación, se habla de cientos de millones de módulos, los fabricantes y procesadores digitales de señal están incorporando controladores CAN de forma bastante generalizada. Lo modelos VHDL de controladores CAN se pueden incorporar en ASIC’s y dispositivos de lógica programable (FPGA’s). CAN es una opción a tener en cuenta en sistemas distribuidos de tiempo real. El estado del estándar alcanzado por CAN lo convierte en una tecnología habitual en la industria, y numerosas firmas fabrican y distribuyen productos compatibles con este protocolo de comunicaciones. Entre los productos existentes se cuentan:

• Controladores CAN, que gestionan las comunicaciones a través de este protocolo. Se subdividen a su vez en:

- Módulos CAN integrados en el mismo chip del microcontrolador.

Existen versiones CAN con los microcontroladores más populares del mercado.

- Controladores CAN independientes que permiten a

microcontroladores no incluidos en la anterior categoría comunicarse a través del CAN.

- Tarjetas de conexión con PC’s.

Software y herramientas diversas de monitorización de sistemas CAN, útiles tanto en la fase de diseño y simulación como en la de testado.

Memoria Descriptiva

28

6. Descripción del proyecto 6.1. Introducción El CAN (Controller Area Network), es un protocolo de comunicaciones serie, asíncrono, que puede tener varios módulos de control electrónico conectados comunicándose entre si, con sus respectivos sensores y actuadores, para usarse en automoción y aplicaciones industriales. Con el SJA1000, Philips nos ofrece un regulador independiente (stand-alone) de CAN, que a su vez al ser mas completo y eficiente, es mas que un simple sustituto del anterior modelo de Philips el PCA82C200. Las características del SJA1000 le permiten implementar una amplia gama de usos así como de una fácil optimización, diagnosis y mantenimiento. Esta parte de la Memoria se centrara en la descripción del SJA1000 como parte de un sistema ya que es la pieza angular de nuestro proyecto. Los diagramas muestran la capacidad del interfaz del SJA1000 para la conexión a un circuito con un microcontrolador del tipo 8051 y de la transmisión y recepción de la comunicación CAN. Los organigramas generales para programar el dispositivo en diversos modos se muestran detalladamente durante esta explicación, aunque no hemos utilizado todo el abanico de posibilidades ya que aquí expondré todas las cualidades posibles del SJA1000 y diferentes métodos de programarlo. Así pues, únicamente espero ayudarles en la comprensión de la utilidad mediante esta memoria detallada.

Memoria Descriptiva

29

6.2. Introducción al SJA1000 El sja1000 es un producto independiente del regulador CAN, con unas características avanzadas para el uso en campos de la industria en general y sobre todo en automoción. Esta pensado para sustituir al antiguo regulador PCA82C200, y para eso su hardware y software se hizo compatible. Debido a un sistema muy amplio de funciones, este dispositivo es muy provechoso en multitud de utilidades, especialmente cuando la optimización, la diagnosis y el mantenimiento del sistema son importantes. 6.3. Descripción del SJA1000 El regulador SJA1000 de CAN, tiene dos modos de operación:

- BasicCAN Mode (PCA82C200 compatible) - PeliCAN Mode (PCA82C200 no compatible)

El modo inicial de funcionamiento por defecto, es el BasicCAN. Por lo tanto, el hardware existente y el software desarrollados para el PCA82C200 se pueden utilizar sin ningún cambio. Además de las funciones ya sabidas del PCA82C200, algunas nuevas características adicionales se pondrán en ejecución en este modo con el SJA1000, que hacen al dispositivo más atractivo. Sin embargo, no influyen en la compatibilidad con el PCA82C200. El modo PeliCAN es un modo nuevo de operación que puede manejar todos los tipos del marco según la especificación 2.0B del protocolo CAN. Además proporciona una serie de características que hacen que el SJA1000 sea mas adecuado para una amplia gama de usos. En nuestro proyecto nos centramos en utilizar el modo BasicCan ya que tiene un amplio abanico de posibilidades y a nosotros nos es suficiente para lo que se nos requiere. Teniendo en cuenta que en BasicCan podemos enviar de una misma tacada 8 bytes de datos o lo que es lo mismo 64 bits de información y que nuestro sistema requiere 8 bits únicamente para los 8 dispositivos que simularán los Leds, además de que el identificador es de 11 bits, por lo que se podría escoger un número de dispositivos destino de 211 = 2048 y nosotros solo tenemos 1 destino, pues queda demostrado que no hace falta mas complicación. En el modo PeliCan el identificador es de 29 bits. 6.3.1. Características del SJA1000 Las funciones características del SJA1000 se puede agrupar en 3 tipos principalmente:

- Las funciones establecidas en el PCA82C200. - Las funciones mejoradas del PCA82C200 pensadas para el SJA1000 mejorando

la velocidad, el tamaño o el funcionamiento. - Las funciones realzadas en modo de PeliCAN. (En estas no vamos a entrar).

Memoria Descriptiva

30

funciones establecidas en el PCA82C200: Interface flexible del microcontrolador Permite interconectar la mayoría de los

microprocesadores o microcontroladores Driver de salida CAN programable Interface para toda clase de physical layers.

CAN bit-rates hasta de 1 Mbit/s El SJA1000 cubre cualquier bit-rate,

incluyendo de alta velocidad Las funciones mejoradas del PCA82C200: CAN 2.0B (pasivo) Las características pasivas del CAN 2.0B

del SJA1000 permiten que el regulador del CAN tolere mensajes CAN con identificadores de 29-bit (los de PeliCan)

64 byte Receive FIFO Hasta 21 mensajes se pueden almacenar en el Receive FIFO, éste alarga el tiempo máximo del servicio de la interrupción y evita condiciones de datos sobrantes (overrun)

24 MHz fclock Un acceso más rápido del microprocesador y mas opciones de bit-timing del CAN

Receive Comparator Bypass Reduce los retrasos internos, dando como resultado una longitud mucho más grande del CAN bus debido a una programación mejorada del bit-timing

6.3.2. Arquitectura del nodo CAN Generalmente cada uno de los módulos CAN se pueden dividir en diversos bloques funcionales. La conexión de las líneas de bus CAN se hace generalmente utilizando el Transceiver CAN especificado (PCA82C250), que es el mismo que utilizamos nosotros. El transceiver controla y adecua las señales del nivel lógico del controlador CAN en los niveles físicos del bus y viceversa. El siguiente nivel superior es el Controller CAN (SJA1000), que implementa el protocolo completo de CAN definido en las especificaciones de CAN. También cubre a menudo el buffer del mensaje y la filtración de la aceptación. Todas éstas funciones del CAN son controladas por este módulo Regulador que realiza todas las funciones que nosotros requerimos para la aplicación. Por ejemplo, controla los actuadores, lee los sensores y los actuadores manuales manipulados por personas. Según lo mostrado en la Figura 1, el SJA1000 está situado siempre entre un microcontrolador y el Transceiver, señalando además que es un circuito integrado en la mayoría de los casos. En la siguiente página mostramos una exposición esquemática de lo explicado aquí.

Memoria Descriptiva

31

6.3.3. Diagrama de bloques La figura siguiente muestra el diagrama de bloques del SJA1000 y su ínter conexionado con los demás integrados del proyecto.

El “CAN Core Block”, controla la transmisión y la recepción de las tramas del CAN según las especificaciones. El bloque “Interface Manegement Logic” realiza un acoplamiento al regulador externo, que puede ser un microcontrolador o cualquier otro dispositivo, en nuestro caso es el 8051. Cada acceso de registro vía SJA1000 es multiplexado por el address/data bus y controlado por el read/write. Además a las funciones de BasicCAN sabidas del PCA82C200, se han agregado las nuevas características de PeliCAN. Como consecuencia de esto, los registros y la lógica adicional se ha implementado principalmente en este bloque. El “Transmit Buffer” del SJA1000, puede almacenar un mensaje completo (extendido o estándar). Siempre que se inicie una transmisión por el “Host Controller” (8051), el

Memoria Descriptiva

32

“Interface Manegement Logic”, fuerza “CAN Core Block” a leer el mensaje de CAN del “Transmit Buffer”. Al recibir un mensaje, el “CAN Core Block”, convierte la secuencia serie de bits en datos paralelos para el filtro de aceptación (Acceptance Filter). Con este filtro programable el SJA1000 decide qué mensajes son recibidos realmente por el “Host Controller”, o lo que es lo mismo mi microcontrolador. Si todos los mensajes recibidos son aceptados por el filtro de aceptación, se almacenan dentro del Receiver FIFO. Dependiendo del modo de operación y de la longitud de los datos, pueden ser almacenados hasta 32 mensajes. Esto permite al usuario ser más flexible al especificar servicios a la interrupción y las prioridades de la interrupción para el sistema, porque la probabilidad de que se den condiciones de datos sobrantes (overrun) se reduce extremadamente. 6.4. El sistema Para la conexión del microcontrolador, el SJA1000 proporciona un bus multiplexado de address/data y señales de control de read/write adicionales. El SJA1000 se contempla como un dispositivo de I/O para 8051. 6.4.1. El SJA1000 en nuestra aplicación Los registros para la configuración y los pines del SJA1000, permiten utilizar todo tipo de Transceivers integrados o discretos de CAN. Debido a la flexibilidad del microcontrolador, podremos adecuar esta aplicación a diferentes microcontroladores.

En la Figura 3, mostramos el diagrama típico de aplicación del SJA1000, incluyendo el microcontrolador 80C51 y el Transceiver PCA82C250. El Controller de CAN, funciona

Memoria Descriptiva

33

mientras una señal de reloj se genere en XTAL. La señal de reloj la podemos derivar después al microcontrolar sin necesidad de tener dos cristales (mediante CLK OUT). En este ejemplo la selección del chip SJA1000 se controla a través del pin P2.7. del puerto del microcontrolador, si lo que queremos es deshabilitar el chip pondremos P2.7 a +5 V y cero en el caso de habilitar. Los resets de los diferentes dispositivos serán independientes uno del otro ya que el del SJA1000 se efectuará cada vez que quitemos la alimentación y el del microcontrolador lo haremos manualmente por necesidades del programador ISP que hemos integrado en la misma tarjeta del proyecto. Por descontado la patilla de MODE la colocamos siempre a Vcc por que funcionamos en Intel Mode. 6.4.2. Alimentación La alimentación del SJA1000 la haremos de la siguiente manera. Tenemos tres pares de pines que se utilizan para diversos bloques internos digitales y analógicos del regulador.

- VDD1/VSS1: lógica interna (digital) - VDD2/VSS2: entrada del comparador (analógico) - VDD3/VSS3: driver de salida (analógico)

La fuente se ha separado para un mejor comportamiento. El VDD2 puede desacoplarse mediante un filtro RC, que me eliminará el ruido del comparador. 6.4.3. Reset Para un Reset apropiado del SJA1000, el oscilador ha de proporcionar una señal estable en XTAL, mas tarde hablaremos de esto. Para hacer un reset externo correctamente, en el pin 17 deberemos producirlo durante un tiempo de unas 15 veces txtal. Esto garantiza un reset correcto de todos los registros del SJA1000. 6.4.4. Oscilador y Clock El SJA1000 puede funcionar con un oscilador puesto en XTAL o mediante fuentes externas de reloj. Hay varias formas de conectar el cristal oscilador con el SJA1000 y el microcontrolador. Dependiendo de lo que necesitemos, lo configuramos de una manera o otra tal y como se nos muestra en la Figura 4. Si la señal del pin CLK OUT no es necesaria, se puede prescindir de ella poniendo en off el Clock Divider Register (Clock Off = 1). Esto mejorará el funcionamiento del nodo CAN. La frecuencia de la señal CLK OUT, la podemos cambiar con el Clock Divider Register:

fclkout = fxtal / factor del divisor del reloj (1, 2, 4, 6, 8, 10, 12, 14) (1) Sobre la alimentación o el reset del hardware, el valor por defecto para el factor del divisor del reloj, depende del modo seleccionado (pin 11). Si un cristal de 16 MHz se utiliza en el

Memoria Descriptiva

34

modo Intel, la frecuencia en CLK OUT será de 8 MHz. En el modo de Motorola, el factor del divisor del reloj es por defecto de 12, y se pone en ese valor justo después del reset, por lo que tendremos una frecuencia de 1.33 MHz en este caso.

6.4.4.1 Uso de Sleep y Wake-up Para configurar el dispositivo tenemos el Go To Sleep bit en el Command Register (modo BasicCAN) o el Sleep Mode bit en el Mode Register (modo de PeliCAN). El SJA1000 se pondrá en modo Sleep si no hay actividad del bus y no hay ninguna interrupción pendiente. El oscilador aguarda en funcionamiento hasta que no hayan pasado 15 bit times de CAN. Esto permite al microcontrolador darle una señal utilizando el CLK OUT para poner el dispositivo en modo de bajo consumo. Para ponerse en modo wake-up, ha de ocurrir una de las tres condiciones necesarias de las especificaciones, entonces el oscilador comienza otra vez y se genera una interrupción de wake-up. Tan pronto como el oscilador vuelva a ser estable, la frecuencia de CLK OUT se activará. 6.4.5. El microcontrolador 8051 (interficie) El SJA1000 soporta la conexión directa con dos conocidas familias de microcontroladores: 80C51 y 68xx. Con el pin de MODE del SJA1000 se selecciona el modo del interfaz.

- Modo Intel: MODE = Nivel alto - Modo Motorola: MODE = Nivel bajo

La conexión para el bus de address/data y las señales de control de read/write, en ambos modos, Intel y Motorola, se muestra en la Figura 5. Para los microcontroladores de 8 bits

Memoria Descriptiva

35

de Philips, basados en la familia 80C51 y los microcontroladores 16 bits con arquitectura XA, se utiliza el modo Intel. Para otros Controllers CAN, la lógica adicional es necesaria para la adaptación del bus de address/data y de las señales de control. Sin embargo, cabe destacar que los pulsos de escritura no serán generados durante el ciclo inicial de alimentación (power up). Otra posibilidad es deshabilitar el regulador de CAN con un nivel alto en la entrada del chip select en ese instante.

6.4.6. PCA82C250. La capa física (Physical Layer) Para lograr el propósito de que haya compatibilidad con el dispositivo PCA82C200, el SJA1000 nos incluye un circuito interno llamado “Receive Input Comparator”. Con este circuito podemos tener activo o no, un Comparator Bypass. Este comparador se activará o desactivará, mediante la manipulación del bit CBP. Este comparador integrado puede ser utilizado si las funciones del transceiver se realizan con componentes discretos.

Memoria Descriptiva

36

Si se utiliza un circuito integrado externo tipo Trasnsceiver y la función del Comparator Bypass no se permite en el Clock Divider Register, la entrada RX1 tiene que ser conectada con un voltaje de referencia de 2.5V (salida del voltaje de referencia de los circuitos Transceivers existentes). La Figura 6, muestra los circuitos equivalentes para ambas configuraciones: CBP = activo y CBP = inactivo. además en el dibujo observamos como se conecta para la señal de wake-up. Para todas las nuevas aplicaciones donde se utiliza un Transceiver , se recomienda activar la función de Comparator Bypass del SJA1000. Si se permite esta función, se utiliza una entrada del schmitt-trigger y la propagación interna retrasa td2, que es mucho más corta que la de retraso td1 del Receiver Comparator. Esto tiene un impacto positivo en la longitud máxima del bus. Además, reducirá la corriente de la fuente en modo Sleep, de forma importante.

Memoria Descriptiva

37

6.5. Control de la comunicación CAN 6.5.1. Funciones básicas y Registros del Controlador SJA1000 La funcionalidad con respecto a la configuración y a las actividades del SJA1000 nos viene dada por el programa del microcontrolador. Así el SJA1000 se adapta para resolver las necesidades de los sistemas de CAN-bus de diferentes micros. El intercambio de datos entre el 8051 y el SJA1000 se hace mediante un sistema de registros (segmento de control) y de memoria RAM (message buffer). Los registros y un espacio de direcciones ocuparán una parte de la RAM. La tabla 2 enumera estos registros, agrupados según su uso en un sistema. Algunos registros solo se pueden utilizar como de acceso a lectura o solo acceso a la escritura. En algunos casos también cabe la particularidad, que solo podamos acceder a algún registro durante un reset. Tabla 2: Los registros internos del SJA1000

Memoria Descriptiva

38

La primera columna “CAN Address” es muy importante a la hora de comunicarse el microcontrolador con el SJA1000, ya que es el valor que me va a identificar la orden que le voy a pedir al SJA1000. Para que se entienda un ejemplo: Si quisiéramos modificar el registro de control pues deberíamos dar los pasos y secuencia que nos marca el diagrama de tiempo de la escritura al SJA1000:

Read cycle timing diagram; Intel mode.

Siendo: AD7 to AD0: Datos que envío en el mensaje, A7-A0 es la dirección CAN (CAN Adreess) para decirle a que registro estoy dirigiéndome y D7-D0 es la orden o el valor que le mando. Como podemos observar la manipulación de un registro se hace en dos partes, primero a donde me dirijo y segunda el valor nuevo de ese registro. ALE/AS: Address Latch Enable. permite fijar el byte bajo de la dirección durante el acceso a una memoria externa. En operación normal, ALE es emitido en un rango constante de 1/6 de la frecuencia del oscilador, y puede ser usada para cronometrar. Señalar que un pulso de ALE es emitido en cada acceso a la memoria de datos externos. RD! / WR!: El acceso a memoria del SJA1000 lo hacemos mediante la activación de las señales RD! y WR!, durante la lectura o escritura de datos respectivamente. CS!: Chip Select, nos sirve para habilitar el Chip SJA1000, simplemente si no queremos que se pueda acceder a el pues lo deshabilitamos y al contrario al escribir o leer. Dicho esto explico el funcionamiento de un “ciclo de lectura” en el SJA1000. Lo que hacemos primero es (hablando siempre de pines y registros del SJA1000), habilitar el ALE/AS para fijar la dirección externa CAN, a continuación le introducimos el A7-A0 dirección CAN en binario (registro de control: Address = 0 à A7-A0 = “00000000”), al terminar este paso ya podemos habilitar el SJA1000 (CS!) y darle a la escritura (RD!), y con un tiempo prudencial podemos enviar el dato D7-D0 (nuevo valor del registro de control). Una vez hecho esto podemos ir deshabilitando primero el RD! Y posteriormente el CS!. Hay que destacar que el WR! No se ha tocado en todo la transferencia y estará siempre deshabilitado.

Memoria Descriptiva

39

La escritura es muy similar por no decir idéntica aunque destacamos algunas diferencias. La primera es que aquí en vez de utilizar el RD! (aquí siempre estará deshabilitada), pues solamente hacemos servir el WR! (del mismo modo que antes el RD!) y la mas significativa es que el ALE/AS vuelve a activarse después de acabar con todo el proceso. También nos fijamos en que aquí no hace falta terminar con el proceso de enviado de la dirección CAN para deshabilitar el CS! Y mas tarde el WR!

Write cycle timing diagram; Intel mode. Después de todo esto nos preguntaremos como hacemos para seguir todos estos pasos y controlar los tiempos de cada señal y que ninguna se me cuele antes de tiempo o se desactive mas tarde, etc. Muy sencillo, esta parte la hacemos utilizando una de las ventajas del microcontrolador 89C51 el cual me permite mediante una instrucción concreta, hacer todos estas secuencias sin ningún problema. Esta instrucción se hace de la siguiente forma: Antes que nada he definido cada registro y el XBYTE me indicará el valor de la dirección que deseo acceder de una memoria externa, que en mi caso es la dirección CAN (del SJA1000). En nuestro ejemplo es la dirección cero “XBYTE[0]”. Con este paso ya hemos hecho gran parte de la secuencia ya que a la hora de acceder a lectura o escritura de este registro simplemente lo que haremos es escribir “ModeControlReg” y la operación y se efectuará toda la secuencia antes descrita:

/* REGISTROS DE MODO & CONTROL */ #define ModeControlReg XBYTE[0]

También hemos definido los bits que queremos modificar del registro:

#define RR_bit 0x01 /* reset mode "1" , 1->0 operating mode (request) bit */ Ejemplo de una línea de programa para manipular el registro de control:

ModeControlReg = ModeControlReg | RR_bit ;

Memoria Descriptiva

40

Por último, destacar que para que todo funcione de esta forma y el micro transmita de esta manera, antes deberemos decírselo al micro dándole el valor adecuado al registro AUXR que se encarga de configurar la forma de transmitir.

/* CONFIGURACIÓN DE DIRECCIONAMIENTO PARA MEMORIA EXTERIOR */ AUXR = AUXR | 0x03; /* ALE se activa solo durante un acceso a memoria exterior */ 6.5.1.1. Valores de los bits de los registros del SJA1000 a) Registro de control (CR)

Memoria Descriptiva

41

b) Registro de Comando (CMR)

c) Registro de Estado (SR)

Memoria Descriptiva

42

d) Registro de Interrupciones (IR)

e) Transmit Buffer (TxBuffer)

El identificador consta de 11 bits, permite reconocer a los módulos la prioridad del mensaje. Cuanto más bajo sea el valor del identificador más alta es la prioridad. El bit RTR indica si el mensaje contiene datos (RTR=0) o si se trata de una trama remota sin datos (RTR=1). Una trama de datos siempre tiene una prioridad más alta que una trama remota. Los cuatro bit que componen el campo DLC indican el número de bytes contenido en el campo de datos (0 a 8).

Memoria Descriptiva

43

En el Campo de datos aparece la información del mensaje con los datos que el módulo correspondiente introduce en la línea CAN Bus. Puede contener entre 0 y 8 bytes (de 0 a 64 bit). f) Registro de Bus Timing 0 (BTR0)

Baud Rate Prescaler (BRP): El periodo del reloj del CAN ”tscl”, es programable y determina el ‘bit timing’ (tiempo por bit). Este reloj del sistema CAN se calcula usando la siguiente ecuación:

tscl = 2 x tclk x (32 x BRP.5 + 16 x BRP.4 + 8 x BRP.3 + 4 x BRP.2 + 2 x BRP.1 + BRP.0 + 1) (2) donde tclk es el periodo de la frecuencia XTAL = 1/fXTAL Synchronization Jump Width (SJW): Para compensar los desplazamientos de fase entre los osciladores del reloj de diversos reguladores del bus CAN. Cualquier regulador de bus CAN debe re-sincronizarse en cualquier flanco relevante de la señal de transmisión actual. La SJW define el número máximo de los ciclos de reloj que un período de bit, se puede acortar o alargar para una re-sincronización:

tSJW = tSYNCSEG = tscl x (2 x SJW.1 + SJW.0 + 1) (3)

g) Registro de Bus Timing 1 (BTR1)

Time Segment 1 (TSEG1) y Time Segment 2 (TSEG2): TSEG1 y TSEG2 determinan el número de ciclos de reloj por periodo de bit y la localización del punto de muestreo, donde: tSYNCSEG = tSJW = tscl x (2 x SJW.1 + SJW.0 + 1) (4) tTSEG1 = tscl x (8 x TSEG1.3 + 4 x TSEG1.2 + 2 x TSEG1.1 + TSEG1.0 + 1) (5) tTSEG2 = tscl x (4 x TSEG2.2 + 2 x TSEG2.1 + TSEG2.0 + 1) (6) Con el valor SAM Sample Mode bit, escogemos que si SAM='1', el bus se muestrea 3 veces y si SAM='0', el bus se muestrea 1 vez. EJEMPLO DE CÁLCULO DE MIS VALORES (BTR0 y BTR1): Queremos “bit-rate = 400 KBit/s” por lo que si “bit-rate = 1/tbit” pues “tbit = 2500 ns”.

Memoria Descriptiva

44

Calculamos “tscl = 2 x tCLK x (32 x BRP.5 + 16 x BRP.4 + 8 x BRP.3 + 4 x BRP.2 + 2 x BRP.1 + BRP.0 + 1)” si fosc=16MHz à “tCLK=1/fosc = 62’5 ns” y “BPR = 0x01” à tscl = 250 ns. Como SJW=0x00 à “tSYNCSEG = tscl x (2 x SJW.1 + SJW.0 + 1) = 250 ns”. Si “tbit = tSYNCSEG + tTSEG1 + tTSEG2 = 2500 ns” y “tSYNCSEG = 250 ns” à escogemos para que funcione bien “tTSEG1 = 2 x tTSEG2”, entonces: “maximum tolerated propagation delay = 1500 ns” ”minimum requested propagation delay = 750 ns” y tenemos que “TSEG1 = 0x05 à tTSEG1 = tscl x (8 x TSEG1.3 + 4 x TSEG1.2 + 2 x TSEG1.1 + TSEG1.0 + 1) = 1500 ns” y “TSEG2 = 0x20 à tTSEG2 = tscl x (4 x TSEG2.2 + 2 x TSEG2.1 + TSEG2.0 + 1) = 750 ns

h) Output Control Register (OCR)

Memoria Descriptiva

45

Interpretación de los bits OCMODE:

OCMODE.1 OCMODE.0 DESCRIPCIÓN 0 0 bi-phase output mode 0 1 test output mode 1 0 normal output mode 1 1 clock output mode

Normal output mode: En modo de salida normal la secuencia del bit (TXD) se envía vía TX0 y TX1. Los niveles de tensión en los pines TX0 y TX1 dependen de la programación por OCTPx, OCTNx (float, pull-up, pull-down, push-pull) y la polaridad de la salida programada por OCPOLx. Clock output mode: El pin TX0 está igual que en modo de salida normal. Sin embargo, la secuencia de datos a TX1 es substituida por el reloj de la transmisión (TXCLK). El flanco de subida del reloj, indica el inicio de un período de bit. El ancho del pulso es 1 x tscl.

Bi-phase output mode El modo de salida bifásico en contraste con el modo de salida normal la representación del bit varía en el tiempo y cambio de estado. Si los controladores del bus no están asociados con la línea de bus por un transformador, la trama de bits no permite tener un componente de D.C. Durante bits recesivos se desactivan todas las salidas (flotando). Los bits dominantes se envían con los niveles que se alternan en TX0 y TX1, es decir el primer bit dominante se envía en TX0, el segundo se envía en TX1, y el tercero se envía en TX0 otra vez, etc. En la figura mostramos un ejemplo de la configuración en modo de sincronización bifásica de salida:

Memoria Descriptiva

46

Test output mode En modo de Test de salida el nivel conectado con RX se refleja en TXn con el siguiente flanco positivo de reloj (fosc/2), que corresponde a la polaridad programada en el registro de control de salida. La tabla muestra la relación entre los bits del registro de control de la salida y los pines TX0 y TX1.

- X = no importa el valor. - TPX es la salida del transistor del chip, conectada a VDD. - TNX es la salida del transistor del chip, conectada a VSS. - TXX es el nivel de la salida serie en los pines TX0 o TX1. Es necesaria cuando el nivel de salida en el CAN bus es dominante TXD = 0 y recesivo cuando TXD = 1. La secuencia de bit (TXD) se envía vía TX0 y TX1. Los niveles de tensión en las salidas de los pines, depende de lo programado en OCTP, OCTN (float, pull-up, pull-down, push-pull) y la polaridad de salida programada por OCPOL. Finalmente nosotros en el proyecto hemos configurado el registro de modo que TX1 sea flotante, TX0 como push/pull y le hemos dicho que queremos el modo normal de salida. i) Clock Divider Register (CDR)

CAN mode: CDR.7 define el modo CAN. Si CDR.7 es “0” el controlador opera en modo BasicCAN, si por el contrario es “1” el controlador opera en modo PeliCAN. CBP: Activando CDR.6 permitimos el CAN comparator bypass de la entrada del CAN. Esto solo es posible en modo reset. Es útil en caso que el SJA1000 esté conectado con un circuito externo del PCA82C250. Se reduce el retraso interno del SJA1000, que dará lugar a una posible longitud máxima más larga que el bus. Si se fija CBP, sólo RX0 está activo. La entrada RX1 se debe conectar con un nivel definido por ejemplo VSS.

Memoria Descriptiva

47

RXINTEN: Este bit me permite que la salida TX1 se dedique a recibir la interrupción de salida. Cuando un mensaje recibido pasa el filtro de aceptación con éxito, un pulso de interrupción por recepción con la longitud de un bit, se hace salir siempre en el pin TX1. La etapa de salida de la transmisión debe funcionar en modo de salida normal. La polaridad y la salida son programables a través del registro de control de salida. Un acceso de escritura solo se puede hacer en modo reset. CLKOUT OFF: Bit que me habilita o deshabilita la señal de reloj de salida CLKOUT del SJA1000. El acceso a escritura solo es posible hacerlo en modo reset. CD.2 a CD.0: Estos bits son accesibles sin ninguna restricción en modo reset ni modo de operación normal. Se usan para definir la frecuencia del pin externo CLCKOUT. Podemos escoger entre diferentes frecuencias según indicamos en la Tabla.

6.5.1.2. Transmit Buffer / Receive Buffer Los datos que se transmitirán en el bus CAN, se cargan en el área de memoria del SJA1000, llamada "Transmit Buffer". Los datos recibidos del bus CAN, se almacenan en el área de memoria del SJA1000, llamada "Receive Buffer". Estos Buffers (almacenadores intermedios), contienen 2, 3 o 5 bytes para la información del identificador y de la trama de información (dependiendo del modo y tipo del trama) y hasta 8 bytes de datos. La definición y composición de los bits de las distintas palabras enviadas del mensaje se muestran en otro punto, ya que aquí nos centraremos mas en los bytes enviados en general. - En Modo BasicCAN: Los Buffers tiene 10 bytes de tamaño (ver Tabla 3).

Memoria Descriptiva

48

§ 2 bytes para el identificador. § Hasta 8 bytes de datos.

Tabla 3: Disposición de RxBuffer y del TxBuffer en Modo BasicCAN

6.5.1.3. Filtro de aceptación (Acceptance Filter) en modo BasicCAN El regulador independiente SJA1000, contiene un filtro muy versátil de aceptación llamado “Acceptance Filter”, que permite un chequeo automático de los bytes del identificador y de datos. Usando este método de filtración tan efectivo, los mensajes o un grupo de mensajes no destinados para algún nodo CAN (pueden haber muchos módulos y el mensaje se filtra para que lo reciba el nodo que nosotros queremos) se pueden bloquear y no dejar nunca pasar el mensaje al Receive Buffer de ese nodo, por el contrario, si que dejaremos que pase el mensaje en el modulo que deseemos. Con esta herramienta nos será posible reducir la carga de proceso del microcontrolador. El filtro se controla mediante los registros “Acceptance Code”(ACR) y “Acceptance Mask”(AMR), según la programación que nosotros hagamos. Los datos recibidos se comparan bit a bit con el valor contenido en el registro del código de la aceptación (acceptance code). El registro de aceptación de la máscara (acceptance mask), define las posiciones de bit, que serán relevantes para la comparación (0 = relevante, 1 = no relevante). Para aceptar un mensaje todos los bits recibidos relevantes, tienen que estar en la misma posición que los bits respectivos del registro “Acceptance Code”. Este modo se ha implementado en el SJA1000 como sustituto del anterior modo empleado en el PCA82C200. Así pues, el filtro de aceptación es similar y cumple con las mismas posibilidades del anterior filtro y además se adapta a cualquiera de los dos dispositivos (SJA1000 y PCA82C200). Ejemplo del “Acceptance Filter” en modo BasicCAN: Los 8 bits mas significativos del identificador, se comparan con los valores de estos registros (Veamos la Figura 8). Así los grupos de ocho identificadores se pueden definir siempre para poder ser aceptado por cualquier nodo del CAN.

Memoria Descriptiva

49

En las posiciones de bits del AMR que hay un "1", se permite cualquier valor de identificador. Las 3 posiciones mas bajas ID2-ID0 ya están aceptadas por defecto. Así en este ejemplo, tenemos 26 = 64 identificadores diferentes son aceptados. Los otras posiciones de bits se ponen al valor que tengamos en el ACR.

6.5.2. Funciones para la comunicación CAN Los pasos que se seguirán para establecer la comunicación vía bus CAN son:

• Después de alimentar el sistema:

- Adecuar y acoplar (conexión y software adecuado) el microcontrolador 8051 con el hardware y software del regulador SJA1000.

- Adecuar y preparar el regulador CAN SJA1000, para la comunicación dependiendo del modo seleccionado, filtro de aceptación, bit timing (sincronización de las tramas de bits), etc. Todo esto debe hacerse cada vez que haya un reset de hardware del SJA1000.

• Durante el proceso principal de la aplicación:

- Preparar los mensajes a transmitir y activa el SJA1000 para la transmisión. - Actuar ante mensajes recibidos por el regulador SJA1000. - Actuar ante posibles errores producidos durante la comunicación.

La Figura 11, muestra el diagrama de flujo general del programa de nuestra aplicación. En los siguientes apartados mostraremos los diferentes diagramas de flujos, que nos sirven para controlar el SJA1000 y así hacer una comunicación mas eficiente.

Memoria Descriptiva

50

Figura 11. Flujo general del programa 6.5.2.1. Inicialización Según lo dicho anteriormente, el regulador SJA1000, tiene que haber sido configurado y inicializado justo después de alimentar el circuito y nada mas producirse el reset por hardware y antes de empezar la comunicación CAN. además de esto, el SJA1000 se puede configurar de nuevo (re-iniciar) mientras el microcontrolador opera, ya que puede enviar la petición “reset request” por software. El diagrama de flujo de esta secuencia, se muestra en la Figura 12. Después de dar tensión al microcontrolador, este funciona con su propia rutina de inicialización y al acabar dicha rutina o bien en ella misma, se incorporará la rutina de inicio para el SJA1000. Siempre es aconsejable hacer primero la inicialización del micro. La parte del programa que configura las líneas de control (Figura 11), es específica del microcontrolador utilizado y por lo tanto no se puede cambiar su ubicación en la secuencia. Para describir el proceso de Inicialización observamos la Figura 12. Tal y como se indica, nada mas alimentar el SJA1000, este obtiene un pulso de reset (nivel BAJO) en el pin 17

Aplicación de proceso específico de Reset

Power on y Reset del Micro 8951

Espera hasta que SJA1000 cargue sus características

Configurar líneas de control (interrupciones, reset, chip select, etc.) para la comunicación entre el

SJA1000 y el micro 8951

Inicializar SJA1000 para comunicación bus CAN

Procesar main y interrupción de la aplicación y hacer

“Transmisión” o “Recepción”

Fin del programa

Memoria Descriptiva

51

(Reset), permitiéndole entrar en el Reset Mode. Antes de preparar los registros del SJA1000, el microcontrolador deberá comprobar, leyendo la bandera del reset/request mode, si el SJA1000 ha alcanzado el Reset Mode, porque los registros, que obtienen la información necesaria para la configuración, solo se pueden escribir durante el Reset Mode. A continuación mostramos los registros de control del SJA1000, que ha de configurar el microcontrolador, siempre en Reset Mode:

• Registro de Modo (solo en modo PeliCAN), seleccionando el modo de operación para esta utilidad:

- Modo del filtro de aceptación. - Self Test Mode (Modo autoprueba). - Listen Only Mode.

• El Clock Divider Register, definiendo:

- Si se utiliza el BasicCAN o el modo PeliCAN - Si se permite el pin de CLKOUT - Si el Comparador Bypass de entrada de CAN esta activado o no. - Si se utiliza la salida TX1 como Receive interrupt output.

• Los Registros Acceptance Code y Acceptance Mask:

- Definiendo el código de aceptación, para saber que mensajes serán recibidos. - Definiendo la máscara de aceptación, para que los bits relevantes del mensaje se

comparen con los bits correspondientes del código de aceptación.

• Los Bus Timing Registers (registros de sincronización del bus):

- Definiendo la velocidad de transmisión de bits en el bus (bit-rate). - Definiendo un punto de muestra en un período de bit (bit sample point). - Definiendo el número de muestras tomadas en un periodo de un bit.

• Output Control Register (Registro de control de la salida):

- Definiendo el modo de salida utilizado del bus CAN, mediante los pines TX0 y TX1. Modo de salida normal (Normal Output Mode), modo de salida de reloj (Clock Output Mode), modo de salida bifásico (Bi-Phase Output Mode) o modo de salida de prueba (Test Output Mode).

- Definiendo el tipo de conexión de salida para TX0 y TX1, Float, Pull-down, Pull-up o Push/Pull y polaridad.

Después de todo el proceso anterior y una vez transferida todo esta información al segmento de control del SJA1000, se cambia el modo de operación suprimiendo la bandera de Reset mode / Request. Entonces comprobamos, que la bandera realmente ya ha sido quitada y entramos en el modo de operación indicado antes de seguir el flujo del programa. Esto se hace leyendo la bandera mediante un bucle o lazo.

Memoria Descriptiva

52

NO

SI

NO

SI

Figura 12. Diagrama de flujo de “Inicialización del SJA1000”

Comienza la inicialización o reconfiguración

Modo Reset activado?

Modo Normal activo?

Fin de configuración

Deshabilitar la interrupción externa CAN del 8951

Entrar en Modo Reset

Configurar clock divider register: 1.PeliCan o BasicCan 2.CAN input comparator bypass 3.CLK OUT control y frecuencia 4.uso de TX1

Configurar código de aceptación y registro de máscara

Configurar bus timing registers

Configurar output control register

Entra en Modo Operación Normal

Si usado: habilita interrupciones CAN y la del microcontrolador

Memoria Descriptiva

53

Siguiendo con la explicación anterior, la bandera de Reset mode / Request no se puede quitar mientras alguna secuencia del reset por hardware todavía esté pendiente de ejecutarse (nivel Bajo en pin 17), porque éste forzará a la bandera de Reset mode / Request para "Reset / Present". Así pues, este lazo continuo, se utiliza para intentar limpiar la bandera y comprobar si el Reset Mode ha sido abandonado con éxito. Después entrando en el Operating Mode (Mode de Operación), las interrupciones del SJA1000, pueden ser permitidas, si conviene. 6.5.2.2. Transmisión La transmisión de un mensaje la hace íntegramente el regulador SJA1000, según las especificaciones del protocolo CAN. El microcontrolador tendrá que transferir el mensaje transmitido en el “Transmit Buffer” del SJA1000 y fijar la bandera "Transmit Request" (petición de transmisión), en el Registro del Comandos (Command Register). El proceso de transmisión se puede controlar de dos maneras, bien por una petición de interrupción del SJA1000 o por las banderas “Polling Status Flags” en el segmento de control del SJA1000. En nuestro proyecto utilizamos el primer método. Transmisión controlada por Interrupción: Según el proceso principal del SJA1000, tal y como viene indicado en la Figura 13, la interrupción producida por transmisión del SJA1000 y la interrupción externa utilizada por el microcontrolador (INT0) para la comunicación con el SJA1000, se habilitan antes del comienzo de una transmisión, para así ser esta controlada por la interrupción. La interrupción habilita las banderas que están situadas en el registro de control (Control Register), para el modo BasicCAN. Mientras el SJA1000 esta transmitiendo un mensaje, el “Transmit Buffer” estará bloqueado para la escritura. así el microcontrolador tiene que comprobar la bandera "Transmit Buffer Status" (TBS) del registro de estado (Status Register), y así poner un mensaje nuevo en el “Transmit Buffer”.

• Si “Transmit Buffer” bloqueado:

- El microcontrolador almacena el nuevo mensaje temporalmente en su propia memoria y fija una bandera, indicando que un mensaje está esperando para ser transmitido. El programador decidirá que hacer con estos mensajes almacenados temporalmente. También se puede crear un software que nos permita almacenar varios mensajes, que mas tarde serán transmitidos. El inicio de la transmisión de un mensaje, se efectuará entonces, durante la rutina de servicio a la interrupción, que se inicia al acabar la transmisión actual. Lo entenderemos mejor si observamos la Figura 13.

- Acerca de la recepción de una interrupción por parte del SJA1000 (Observar la Figura 13), el microcontrolador comprueba el tipo de interrupción. Si era una interrupción por transmisión, lo comprueba, y a continuación mira si tiene que ser transmitidos mas mensajes o no. Un mensaje que esta esperando, se copia del almacenador temporal al “Transmit Buffer”, y la bandera que me indica si hay mas mensajes para su transmisión se borra. La bandera de petición de

Memoria Descriptiva

54

transmisión, "Transmit Request" (TR) del registro del comando (Command Register) se activa, y hará que el SJA1000 comience la transmisión.

• Si “Transmit Buffer” activo:

- El microcontrolador escribe el nuevo mensaje en el “Transmit Buffer” y fija la

bandera petición de la transmisión “Transmit Request” (TR) del registro del comando (Command Register), que hará que el SJA1000 comience la transmisión. Al acabar una transmisión correcta, una interrupción por transmisión “Transmit Interrupt”, se genera por el SJA1000.

Procesado de main: Transmisión de un mensaje

NO

SI

Figura 13a. Transmisión de un mensaje

Transmit Buffer Status activado?

Almacena temporalmente el mensaje para ser transmitido

Activa bandera de mensaje futuro

Activa Transmisión Request bit

Escribe mensaje en Transmit Buffer

Preparación: habilita interrupción por transmisión CAN

Memoria Descriptiva

55

NO

SI NO

SI

Figura 13b. Transmisión de un mensaje (controlado por interrupción) Transmisión por Polling Controlled: En la Figura 14, vemos el diagrama de flujo de una transmisión controlada por Polling. La interrupción por transmisión del regulador SJA1000, no es válida para este tipo de control de la transmisión. Mientras el SJA1000 está transmitiendo un mensaje, el “Transmit Buffer” estará bloqueado para la escritura. Así pues, el microcontrolador, tendrá que comprobar la bandera “Transmit Buffer Status” (TBS), en el registro de estado (Status Register), para ver si un nuevo mensaje se puede poner en el “Transmit Buffer”

• Si “Transmit Buffer” bloqueado:

- Preguntamos (Polling) al Status Register continuamente hasta que el “Transmit Buffer” se lance, mientras, el microcontrolador espera.

Mensaje futuro para ser transmitido?

Flag CAN transmit?

Borra bandera de mensaje futuro

Copia mensaje del almacén temporal al Transmit Buffer

Activa Transmisión Request bit

Inicio

Memoria Descriptiva

56

• Si “Transmit Buffer” activo: - El microcontrolador escribe el nuevo mensaje en el “Transmit Buffer” y fija la

bandera petición de transmisión, “Transmit Request“ (TR) del registro de comandos “Command Register”, lo que hará que el SJA1000 comience la transmisión.

NO

SI

Figura 14. Transmisión de un mensaje (controlado por polling)

6.5.2.3. Abortar Transmisión La transmisión de un mensaje, que fue anteriormente solicitado, se puede abortar usando el comando “Abort Transmisión” fijado en el bit correspondiente en el “Command Register”. Esta característica se puede utilizar por ejemplo, para transmitir un mensaje urgente antes del mensaje normal, que se ha escrito en el “Transmit Buffer” previamente, pero que no fue transmitido con éxito hasta este momento. La Figura 15 muestra el diagrama de flujo utilizado, en el caso de transmisión controlada por interrupción, “Transmit Interrupt”. El flujograma ilustra la situación, en que un mensaje será abortado, para transmitir un mensaje de prioridad más alta. Otras razones que produzcan el abortar un mensaje, puede que requieran un flujograma algo distinto de este. El flujograma actual, puede ser derivado hacia el modelo de flujograma de una transmisión controlada por Polling. En caso de que un mensaje todavía esté esperando ser atendido, debido a diversas razones, el “Transmit Buffer”, será bloqueado (véase el flujograma de la Figura 15). Si se solicita una transmisión de un mensaje urgente, el bit de abortar transmisión, “Abort Transmisión”, se fija en el registro del comando “Command Register”. Cuando el mensaje que estaba esperando para ser servido, se ha transmitido con éxito o se ha abortado, se activa el

Transmit Buffer Status activado?

Activa Transmisión Request bit

Carga el mensaje a transmitir en el Transmit Buffer

Hace otras tareas o simplemente vuelve al bucle

Memoria Descriptiva

57

“Transmit Buffer” y se genera una interrupción por transmisión. Durante el flujograma de la interrupción, la bandera de transmisión completada “Transmisión Complete” del registro de estado, “Status Register”, tiene que ser comprobada, para ver si la transmisión anterior se ha producido con éxito o no. El estado "incompleto" indica que la transmisión fue abortada. En este caso el microcontrolador puede funcionar con una rutina especial, que se encargará de las transmisiones abortadas, por ejemplo, repita la transmisión del mensaje abortado y compruebe después si es correcto.

Procesado de main: Transmisión de un mensaje

NO

SI

NO

SI

Figura 15a. Aborto de Transmisión de un mensaje

Transmit Buffer Status activado?

El mensaje tiene prioridad alta?

Preparación: habilita interrupción por transmisión CAN

Escribe mensaje en Transmit Buffer

Activa bandera de mensaje

Almacena temporalmente el mensaje para ser transmitido

Activa Transmisión Request bit

activa Abort Transmisión bit

Memoria Descriptiva

58

NO

SI NO

SI

NO

SI

Figura 15b. Aborto de Transmisión de un mensaje (controlado por interrupción) 6.5.2.4. Recepción El regulador SJA1000 de CAN, hace la recepción la de los mensajes íntegramente, según las especificaciones del protocolo de comunicaciones bus CAN. Los mensajes recibidos se ponen en el “Receive Buffer” (ver capítulo del Transmit Buffer / Receive Buffer). Cuando tengamos un mensaje listo para ser transferido por el microcontrolador, se señala con la bandera "RBS" (Receive Buffer Status Flag), del registro de estado “Status Register”, y

Mensaje futuro para ser transmitido?

Flag CAN transmit?

Transmisión incomplete?

Procesado de aplicación especifica: reaccionar acorde con lo definido en Abort Transmision

Copia mensaje del almacen temporal al Transmit Buffer.

Borra bandera de mensaje futuro

Activa Transmisión Request bit

Activa Transmisión Request bit

Inicio

Memoria Descriptiva

59

por la bandera de interrupción por recepción "RI" (Receive Interrupt Flag), si la interrupción esta permitida. El microcontrolador tiene que transferir el mensaje a su memoria local para mensajes, activa el “Receive Buffer” y actúa sobre el contenido del mensaje. El proceso de transferencia se puede controlar por una petición de la interrupción del SJA1000 o por las banderas de estado de “Polling”, en el segmento del control del SJA1000. Recepción por Polling Controlled: El flujograma de la Recepción controlada por Polling se muestra en la Figura 16. La interrupción por recepción del regulador SJA1000, se deshabilita para este tipo de control de la recepción. El microcontrolador lee el registro de estado del SJA1000 regularmente, comprobando si la bandera de estado del “Receive Buffer Status” (RBS), indica que por lo menos se ha recibido un mensaje.

• Si la bandera de estado del “Receive Buffer Status” indica un cero, es que no se ha recibido ningún mensaje:

- Entonces, el microcontrolador continúa con su tarea actual hasta que una nueva

petición para comprobar el estado del “Receive Buffer Status” se genere.

• Si la bandera de estado del “Receive Buffer Status” indica un uno lógico, es que se han recibido unos o más mensajes:

- Entonces, el microcontrolador recibe el primer mensaje del SJA1000 y envía un

“Release Receive Buffer” después de haber fijado la bandera correspondiente en el registro del comando. El microcontrolador, puede procesar cada mensaje recibido antes de comprobar si hay otros mensajes, según lo indicado en la Figura 16. También es posible comprobar inmediatamente si hay otros mensajes, haciendo un Polling (preguntar continuamente) del estado de “Receive Buffer Status” y procesando juntos mas tarde, todos los mensajes recibidos. En este caso la memoria local para mensajes del microcontrolador, tiene que ser bastante grande para poder almacenar más de un mensaje antes de que se procesen. Después transfiere y procesa uno o todos los mensajes, y el microcontrolador podrá continuar con otras tareas.

Memoria Descriptiva

60

pregunta: mensajes recibidos?

NO

Continua con

SI otras tareas

Figura 16. Recepción de un mensaje (controlado por polling) Recepción controlada por Interrupción: Según el proceso principal del SJA1000, tal y como se indica en la Figura 17, la interrupción por recepción del SJA1000 y la interrupción externa del microcontrolador (INT0), usada para la comunicación con el SJA1000, se habilitan antes de la recepción de un mensaje, en este caso de recepción controlada por interrupción. La bandera que permite la interrupción está situada en el registro de control “Control Register”. Si el SJA1000 ha recibido un mensaje, que ha pasado el filtro de aceptación y se ha colocado en la pila de recepción, se genera una interrupción por recepción. Así el microcontrolador puede reaccionar inmediatamente, transfiriendo el mensaje recibido en su memoria de mensajes y enviar un “Release Receive Buffer” y luego fija la bandera correspondiente "RRB" del registro de comando. Otros mensajes de la pila de recepción generarán una nueva interrupción por recepción, así que no es necesario leer todos los mensajes disponibles en la pila durante una interrupción. El contrario a esta solución es proceder a leer todos los mensajes disponibles inmediatamente tal y como se indica la Figura 18. Después de activar el Receive Buffer, el “Receive Buffer Status” (RBS), del registro de estado, se comprueba para saber si hay mas mensajes y están disponibles para leerse dentro del lazo. Según vemos en la Figura 17, el proceso íntegro de recepción se puede hacer durante la rutina de la interrupción, sin una interacción con el programa principal. Si es factible, incluso la respuesta a mensajes se puede hacer en la interrupción también.

Proceso de aplicación específica para recibir un mensaje

Receive Buffer Status=lleno?

Activa el Receive Buffer RRB = activado

Lee un mensaje nuevo desde el Receive Buffer y lo salva

Memoria Descriptiva

61

Flujo del main Recepción de mensajes ----------------------------------------------------------------------------------------------------------

NO

SI

Figura 17. Recepción de un mensaje (controlado por Interrupción) Tratamiento de los datos sobrantes (Data Overrun Handling): En el caso en que la pila de recepción (Receive FIFO) se llene y en cambio se sigan recibiendo mensajes, se le indicará al microcontrolador que hay datos sobrantes, fijando el “Data Overrun Status” en el registro de estado “Status Register” y si está permitida la Data Overrun Interrupt, esta vendrá generada por el SJA1000.

Flag CAN Receive?

Proceso de aplicación específica para recibir un mensaje

Preparación: Habilita CAN Receive Interrupt

Activa el Receive Buffer RRB = activado

Lee un mensaje nuevo desde el Receive Buffer y lo salva

Inicio

Memoria Descriptiva

62

Funcionando dentro de una hipotética situación de datos sobrantes, el microcontrolador se empezará a sobrecargar extremadamente, pues no tenía el suficiente tiempo para traerse los mensajes recibidos del ”Receive Buffer”. Esos datos se pierden, causando posiblemente inconsistencias en el sistema. Un sistema normalmente se debe diseñar de tal manera que los mensajes recibidos se transfieran y se procesen rápidamente, para evitar esta condición de Data Overrun. Un manejador de excepciones que se ocupe de un proceso específico, debe ser ejecutado por el microcontrolador si las situaciones de datos sobrantes no pueden ser evitadas. La Figura 18 muestra el flujograma del programa, en caso de que una interrupción por datos sobrantes deba de ser atendida. Después, transfiriendo el mensaje que causó la interrupción por recepción, y activando el “Receive Buffer”, se comprueba si otros mensajes están disponibles en la pila de recepción (Receive FIFO), leyendo el estado del “Receive Buffer Status”. Así todos los mensajes pueden traerse de la pila de recepción mas pronto. Por supuesto leyendo un mensaje y quizás procesándolo durante la interrupción, se hará mas rápido, que si toma el SJA1000 para recibir un nuevo mensaje. Otra cosa que podría pasar, es que el microcontrolador estuviera por siempre jamás en la interrupción que lee los mensajes. Al detectar un dato sobrante comenzamos con una excepción que actuará sobre esta situación. Hay dos posibles situaciones sobre las que actuar:

• Un dato sobrante se produce junto con interrupción por recepción:

- Los mensajes puede que se perdieran.

• Un dato sobrante se produce, pero ninguna interrupción por recepción ha sido detectada:

- Los mensajes puede que se perdieran. La interrupción por recepción pudo haber

sido deshabilitada. Tanto el programador del proyecto como el propio microcontrolador deben reaccionar en estas situaciones. Una manejador de excepción equivalente se puede hacer también en una recepción controlada por Polling.

Flujo del main Recepción de mensajes

Preparación: Habilita CAN Receive Interrupt y Data

Overrun Interrupt

Memoria Descriptiva

63

NO

SI

NO

SI

NO

SI

Figura 18. Data Overrun y recepción de un mensaje (controlado por interrupción)

Proceso de aplicación específica para recibir un mensaje

Flag CAN Receive?

Receive Buffer Status = vacío?

Proceso de aplicación específica: Reaccionar acorde con lo definido

en la estrategia “Data Overrun”

Flag Data Overrun?

Lee un mensaje nuevo desde el Receive Buffer y lo salva

Activa el Receive Buffer RRB = activado

Borra Data Overrun (bit de comando CD0 = borrar)

Inicio

Memoria Descriptiva

64

7. Acerca del microcontrolador P89C51 RC2 7.1. Introducción La Familia de 8951 es variada, y se encuentra en diversas presentaciones, la selección de uno o de otro tipo de microcontrolador dependerá principalmente de las necesidades a satisfacer. Voy a hablar de manera particular del 8051 el cual se presenta en tres versiones, con ROM interna (8051) la cual es programada directamente por el fabricante, con EPROM interna (8751) que puede ser programada por el usuario y sin PROM ni EPROM (8031),cuando el programa se selecciona de manera externa. El 8051 está basado en los microprocesadores de 8 bits, contiene entre otras cosas internamente, un puerto de control, el cual a su vez contiene; un puerto serie, dos entradas para interrupciones externas, las señales de RD y WR para la toma o almacenamiento de datos externos en RAM, la señal de PSEN para la lectura de instrucciones almacenadas en EPROM externa. Gracias a estas tres señales el 8051 puede direccionar 64 K de programa y 64K de datos separadamente, es decir un total de 128Kb. Además cuenta con 128 bytes de memoria RAM interna. Además el 8051 puede generar la frecuencia (Baud Rate) de Transmisión/Recepción de datos por el puerto serie de manera automática partiendo de la frecuencia del oscilador general, por medio de la programación del Timer 1. Dicha frecuencia de transmisión puede ser cambiada en cualquier momento con solo cambiar el valor almacenado en el control o también se puede duplicar o dividir la frecuencia con solo escribir sobre el bit 7 (SMOD) del registro de control (PCON). Características del 8051:

• 1 CPU de 8 bits como parte central. • 32 líneas bidireccionales de entrada y salida (4 puertos) • 128 bytes de memoria RAM • 2 Controladores / Timers de 16 bits • 1 UART completo • 5 estructuras de interrupción con dos niveles de prioridad • 1 circuito de reloj • 64 Kbytes de espacio para programa y 64 Kbytes de espacio para datos.

Memoria Descriptiva

65

7.2. Distribución de la memoria A continuación veremos de manera más detallada el espacio destinado al programa de trabajo. 7.2.1. Localidades asignadas a las Interrupciones La tabla 1, muestra las localidades que han sido asignadas por el fabricante, para dar servicio a las rutinas de interrupción.

7.2.2. Memoria de programa interna y externa Cuando se utilizan elementos de la familia del 8051 con memoria interna ROM (o 16K), esta puede ser accesada mediante la conexión de la línea EA =1 (Vcc). Si la memoria interna es de 4 Kbytes y EA = 1, el CPU seleccionará internamente el ROM, desde 0000H hasta 0FFFH y de manera externa automáticamente a partir de 1000H hasta FFFFH. Por el contrario, si la línea EA = 0, el CPU seleccionará de forma externa el ROM, desde la dirección 0000H hasta FFFFH. En el caso del 8031 ésta línea se conecta siempre a 0 Volts (Vss). La línea PSEN (Program Store Enable), que sirve para leer el ROM externo, es activado en todas las búsquedas (Fetches) del programa. PSEN no se activa en búsquedas (fetches) del ROM interno. La fig. 1.3 muestra un conexionado a una EPROM externo.

Memoria Descriptiva

66

7.2.3. Memoria de datos (Data Memory) El espacio de memoria RAM interno está dividido en tres espacios, el primer bloque es referido como la parte baja de 128 bytes, el segundo (se tiene sólo en algunas versiones del 8051 y 8052), la parte alta de 128 bytes y el tercero, llamado espacio SFR (Registros de Funciones Especiales). Las direcciones de la Memoria Interna de Datos siempre son de un byte (de 00H a FFH). Sin embargo los modos de direccionamiento para la memoria interna pueden acomodar hasta 384 bytes, como se ve en la versión 8052, lo cual es posible debido a que el modo de direccionamiento directo accede un espacio de memoria diferente físicamente al permitido por el modo de direccionamiento indirecto.

Los primeros 128 bytes, son presentados en todos los dispositivos de la familia 8051, que está mapeados como se presenta en la fig 1.5.

Memoria Descriptiva

67

Como se puede apreciar en la figura anterior, los 128 bytes más bajos son divididos en 4 bloques de 8 registros cada uno, que contienen los valores de los registros R0 A R7, los bloques pueden ser seleccionados mediante la escritura en los bits 3 y 4 del registro PSW (palabra del estado del programa), el cual veremos más adelante. La utilización de registros permiten un uso más eficiente del espacio de códigos debido a que sus direccionamientos son de 8 bits únicamente. Como ya habíamos mencionado anteriormente, existen algunas versiones del 8051, como el 8052, que contienen 128 bytes de memoria interna que puede ser direccionada indirectamente. Por otro lado, todas las versiones del 8051 contienen un espacio de 128 bytes en la parte alta de la memoria que son direccionados directamente, en este espacio se localizan los Registros de Funciones Especiales (SFR). Estos registros especiales, tienen sus localidades bien establecidas, y son utilizados por el microcontrolador para realizar las distintas operaciones internas que ejecuta el microcontrolador, así como también para el control y acceso de los diferentes puertos de entrada y salida. 7.3. Localización de los Registros Especiales En el capítulo anterior habíamos visto que los SFR se encuentran en la parte alta (128 bytes) de la memoria RAM interna del 8051. Direcciones de los SFR:

Memoria Descriptiva

68

7.3.1. Registro de la palabra de estado del programa (PSW) El registro de palabra del estado del programa contiene algunos bits que reflejan el estado del CPU en ese instante:

Este registro como ya se vio, reside en el espacio SFR. El registro contiene; el bit de Carry, El bit Auxiliar (para operaciones BCD), los dos bits de selección del banco de registros, la bandera de overflow, el bit de paridad y dos banderas sin definir. El bit de Paridad refleja el número de 1’s, en el acumulador: P=1, si el Acumulador contiene un número impar de 1’s. P=0, si el Acumulador contiene un número par de 1’s, es decir el número de 1’s, en el acumulador más P es siempre par. 7.3.2. Registro de control de potencia En la figura tenemos el registro PCON, el cual a excepción de la bandera SMOD, sirve para controlar, principalmente el consumo de energía, el cual es utilizado sólo por los dispositivos fabricados con la tecnología CHMOS que permite disminuir dicho consumo de energía, en estados de espera. La bandera PCON.7 (SMOD) sirve para dividir la frecuencia de transmisión o de recepción por el puerto serie, proporcionada ya sea, por la fase 2 de los estados, (1/2 de la frecuencia del oscilador en la transmisión serie en modo 2), o bien, por el timer 1 en los modos 1 y 3.

Memoria Descriptiva

69

7.3.3. Registro de Interrupciones Las interrupciones son controladas mediante la escritura en los registros IE (Interruption Enable) e IP (Interruption Priority) los cuales son físicamente representados en la figura.

7.3.3.1. Registro Habilitador de Interrupciones (IE) La desactivación general de las interrupciones es efectuada mediante la escritura de un 0 lógico, en la bandera EA (IE.7). Con la bandera EA=1, el 8051 está en condiciones de aceptar interrupciones, aunque la verdadera aceptación es realizada cuando se escribe un 1 lógico, en la bandera de la interrupción correspondiente del registro de interrupciones.

Memoria Descriptiva

70

7.3.3.2. Registro de Prioridad de las Interrupciones (IP) El 8051 tiene dos planos de prioridad para trabajar las interrupciones, llamadas alto y bajo, respectivamente. En la inicialización, todas las interrupciones trabajan en el plano de baja prioridad. Para pasar del plano de baja prioridad al de alta, es necesario escribir un 1 lógico en las banderas correspondientes a las interrupciones que se desean aumentar de prioridad, ubicadas dentro del registro IP.

Aunque los registros de control de los puertos del Timer / Contador y Serie pertenecen a los registros de funciones especiales les vamos a dedicar un capítulo completo a cada uno de ellos debido a la importancia que presentan para el desarrollo e interconexión con sistemas periféricos. 7.4. Diseño del entorno del microcontrolador 7.4.1. Diseño de las salidas en paralelo Nosotros las utilizaremos para controlar los Leds que me indican el estado de los pulsadores. Se conectaran directamente al puerto 1 (proporciona una corriente de 10 mA) interponiendo una resistencia serie. Para lo que nos demanda el Led necesitaremos utilizar un transistor amplificador:

Calcular con el transistor en saturación ya que cuando en el pin es “1” el Led brilla:

Rlim = (Vcc – Vled – Vqsat) / Iled = (5 V – 1’7 V – 0’2 V) / 20 mA = 155 Ohms (7)

Memoria Descriptiva

71

7.4.2. Diseño de las entradas en paralelo Nosotros utilizaremos la entrada del puerto 1 para la lectura de los pulsadores que hemos puesto para enviar señal. Para comprobar el estado de una línea de entrada, basta con conectarla a una entrada y a masa.

• Si el conmutador está abierto, la entrada está a nivel lógico alto • Si el conmutador está cerrado, la entrada está a nivel lógico bajo

7.4.3. Diseño de las señales de Reset La mayoría de los microcontroladores utilizan una circuitería de inicialización automática cuando se conecta la alimentación. Los microcontroladores disponen de una entrada de reset:

– sensible a nivel alto (el nuestro) – sensible a nivel bajo

Se puede añadir un pulsador manual de reset

Memoria Descriptiva

72

7.4.4. Diseño de las señales de Reloj El Reloj es un elemento fundamental en los microcontroladores. Todos los microcontroladores tienen integrado un oscilador y sólo necesitan un elemento externo para fijar la frecuencia (dentro de las indicadas por el fabricante) Para que funcione el reloj interno:

– Cristal de cuarzo. Referencia de tiempo muy estable – Resonador cerámico. Más barato pero no tan exacto – Generador externo de señales – En ocasiones basta con una resistencia (PIC de Microchip)

Memoria Descriptiva

73

8. Código comentado Fichero ‘canbus.c’ (programa ‘main’) Este fichero es la raíz de nuestro programa y lo distinguimos como programa principal. En el hemos declarado todas las funciones que utilizaremos posteriormente. La forma correcta del programa ‘main’ es hacerlo de forma que solo hagamos llamadas a funciones que después en ellas nos ejecutan las instrucciones que nosotros deseamos para nuestra comunicación. Lo primero que hacemos es incluir (“include files”) las librerías que utilizaremos en el programa ya sea la ‘stdio.h’ que es la que contiene funciones necesarias para nuestra programación en c, como la ‘reg51.h’ que es la librería de nuestro modelo de microprocesador 89c51 la cual contendrá todos los registros de memoria de micro mapeados en sus respectivas direcciones. Por último en cuanto a librerías tenemos la ‘defines.h’ que es la que nosotros hemos hecho y en la cual hemos declarado todos los registros, direcciones, parámetros y demás que llamaremos a la hora de utilizar el sja1000, el 89c51, y la comunicación bus Can. Declaramos la variable entera ‘cont_in’ más tarde utilizada para el contador de interrupciones del timer 1, que en nuestro programa en un principio no utilizaremos pero que para posteriores aplicaciones que quisiéramos hacer pues ya lo tendremos declarado. A continuación declaramos las funciones externas en el programa principal, las cuales son todas ya que como hemos explicado en el inicio, para tener un ’main’ elegante pues hemos escrito todas las funciones en otro fichero llamado ‘funciones.c’. También programamos la rutina de servicio a la interrupción del timer 1, de tal forma que cada vez que se produce una interrupción reiniciamos el valor del contador TH1 y TL1 (parte alta y parte baja, respectivamente), del registro del contador del timer al valor que hemos calculado de tal forma que la interrupción se produzca en el tiempo que necesitemos. Una vez hechos los includes, las declaraciones y la preparación del timer procedemos a escribir el programa principal en el orden adecuado, es decir, primero inicializamos el mircrocontrolador, más tarde activamos la máscara que permite la utilización de la irq del timer 1 y activamos el registro que la habilita por si acaso la necesitamos en alguna aplicación. El siguiente paso consiste en configurar el sja1000 de la forma que se nos indica en el pdf del controlador Can. Esta configuración es obligatoria al iniciar el programa ya que sino el dispositivo puede funcionar de forma errónea. Una vez efectuado estos pasos iniciamos lo que es la ejecución de la comunicación propiamente dicha. Llegado este punto tenemos que explicar que hay dos programas ‘main’, que son idénticos pero con una pequeña diferencia debida a que no serán las mismas órdenes las que le demos a la placa transmisora (más tarde lo explicaremos, pero es la que tiene pulsadores), que a la placa receptora (es la que contiene las luces led). Es decir, que en el programa principal a la hora de programar dejaremos la función transmisión o recepción según sea la placa y la función que no utilicemos la pondremos con dos barras “ // “ para que se ignore esa orden.

Memoria Descriptiva

74

Aquí se acaba el programa principal, ya veremos que es bastante sencillo y esquemático lo cual nos va muy bien a la hora de detectar errores futuros en nuestra programación y también para la fácil comprensión de un futuro usuario. #include <defines.h> /* incluimos lo definido en "defines.h" */ #include <reg51.h> /* libreria del 89c51 que mapea regs y ports */ #include <stdio.h> int cont_int; /* DECLARACIÓN DE LAS FUNCIONES EXTERNAS EN EL PROGRAMA PRINCIPAL */ void inicializa(void); /* secuencia inicial que configura el micro */ void irq_timer1_on(void); /* preparamos la IRQ del timer1 */ void ini_sja1000(void); /* configuración del sja1000, obligada */ void transmision(void); /* rutina transmisión CAN del 8951àsja1000 */ void recepcion(void); /* rutina de recepción CAN del sja1000à8951 */ void prueba_botones(void); /* programa para probar botones y 8951 */ void juego_leds(void); /* programa para probar leds y 8951 */ timer1_int() interrupt 3 /* rutina de servicio a la irq del timer1 */ TH1 = 0xE5; /* reinicia el valor del contador timer1 (parte alta) */ TL1 = 0xF5; /* reinicia el valor del contador timer1 (parte baja) */ cont_int++; /* incrementa el contador de interrupciones */ main() /* programa principal */ inicializa(); /* secuencia inicial que configura el micro 8951 */ irq_timer1_on(); /* preparamos IRQ del timer1 */ ini_sja1000(); /* configuración del sja1000, obligada al inicio */ transmision(); /* rutina de transmisión CAN del 8951 al sja1000 */ //recepcion(); /* rutina de recepción CAN del sja1000 al 8951 */ /* fin del programa principal */ Fichero ‘funciones.c’ (contiene las funciones externas de nuestro programa): 1) ini_SJA1000 Esta función es de obligado cumplimiento cada vez que iniciemos al SJA1000. Comenzamos diciéndole al microcontrolador que la interrupción INT0 que nos envía externamente tendrá máxima prioridad y estará activada por nivel alto. Lo siguiente será habilitar al SJA1000 mediante la entrada CS negada. Deshabilitamos todas las interrupciones del 8951 y la interrupción externa. A continuación es importante configurar la forma de direccionamiento para memoria exterior mediante el registro AUXR. Esto se hace para indicarle que ALE se activará solo a un acceso de memoria exterior. Debido a nuestra forma de comunicarnos del 8951 hacia el SJA1000 esto es necesario para que cumpla con la secuencia correcta de escritura y lectura en el controlador. Llegados a este punto ya estamos listos para comenzar con la verdadera inicialización la cual no olvidemos la hacemos poniendo al SJA1000 en modo RESET mediante el registro de control.

Memoria Descriptiva

75

Lo primero será configurar el Clock Divider Register cuyos valores justificamos en la memoria, deshabilitamos las interrupciones de CAN, definimos el código de aceptación y el registro de máscaras (filtros), configuramos el Bus Timing, las CAN Outputs (TX0, TX1). Aquí se acaba la inicialización y por lo tanto devolvemos al controlador SJA1000 al modo de operación normal y permitimos todas las interrupciones. #include <reg51.h> #include <defines.h> extern int cont_int; /* INICIALIZACIÓN DEL SJA1000 */ void ini_sja1000(void) /* configuración del sja1000, obligada */ /* DEFINE PRIORIDADES Y ACTIVACIÓN DE LA INTERRUPCIÓN EXTERNA 0 */ PX0 = PRIORIDAD_ALTA; /* define prioridad alta de INT0 (externa) */ IT0 = INTNIVELACT; /* INT0 activada por nivel, IT0=0 por nivel, IT0=1 por flanco */ /* ACTIVA LA COMUNICACIÓN CON EL SJA1000 */ CS = ACTIVA_N; /* CS es negado. Habilita el SJA1000 */ /* LA INICIALIZACIÓN DE LOS REGISTROS DEL SJA1000 SE HACE EN 'MODE RESET' TAL Y COMO SE ESPECIFICA EN EL DATASHEET */ /* COMENZAMOS LA INICIALIZACIÓN */ /* DESHABILITAR INTERRUPCIONES */ EA = DESACTIVA; /* deshabilita todas las interrupciones del 8951 */ SJAINTEN = DESACTIVA; /* deshabilita la INT0 externa (8951)*/ /* CONFIGURACIÓN DEL DIRECCIONAMIENTO PARA MEMORIA EXTERIOR */ AUXR = AUXR|0x03; /* ALE se activa solo durante un acceso a mem ext */ /* SE ACTIVA EL RESET MODE, RR_bit="1" (al encender la placa mediante el 'reset' del pin 17 del sja1000) */ while((ModeControlReg & RR_bit ) == CLRBYTE) /* nos aseguramos que el RR_bit=1 */ ModeControlReg = ModeControlReg | RR_bit ; /* CONFIGURAMOS EL CLOCK DIVIDER REGISTER */ /* por defecto tenemos clockDivideReg = "00000000" */ /* escogemos BasicCAN CANMode_bit = "0" */ /* bypass CAN input comparator as extern transceiver is used CBP=1 */ /* seleccionamos el divisor de frecuencia CD.2/CD.1/CD.0 = "000" => fclkout = fosc/2 */ ClockDivideReg = (CANMode_bit | CBP_bit | DivBy2) & 0x7F; /* DESHABILITA INTERRUPCIONES DE CAN */ InterruptEnReg = CLRINTENSJA;

Memoria Descriptiva

76

/* DEFINIMOS ACCEPTANCE CODE & MASK */ AcceptCodeReg = CLRBYTE; /* solo dependemos de la mascara */ AcceptMaskReg = PASATODO; /* con la mascara a "1", identificador ok */ /* CONFIGURA EL BUS TIMING */ /* bit-rate = 400 Kbit/s, 16 MHz, el bus es muestreado 1 vez SAM_bit="0" */ BusTiming0Reg = SJW | Presc; BusTiming1Reg = TSEG2 | TSEG1; /* CONFIGURAR LAS CAN OUTPUTS: TX1 como flotante, TXO como Push/Pull, normal output mode */ OutControlReg = Tx1Float | Tx0PshPull | NormalMode; /* YA ACABAMOS LA INICIALIZACIÓN, ACTIVAMOS EL 'NORMAL MODE' */ /* habilitar las interrupciones de CAN, pero no las CAN del sja1000 */ /* borrar el RR_bit (para modo normal), seleccionar filtro doble aceptación, apagar SelfTestMode y ListenOnlyMode, poner en 'wake up'*/ do /* esperamos hasta que RR_bit=0 */ ModeControlReg = CLRBYTE; while ((ModeControlReg & RR_bit ) != CLRBYTE); /* HABILITAR TODAS LAS INTERRUPCIONES */ SJAINTEN = ACTIVA; /* EX0, permite interrupción externa del sja1000 */ EA = ACTIVA; /* permite todas las interrupciones */ /* FIN DE LA INICIALIZACIÓN DEL SJA10000 */ 2) Transmisión La transmisión de datos solo la utilizaremos en la placa que contiene los botones, es decir, la que transmite datos. Mediante una serie de condiciones establecidas conseguimos que la placa solo transmita cuando realmente haga falta, es decir, al pulsar un botón y así que el resto del tiempo este sin trabajar, centrándonos más en la sistemática de transmisión explicamos que esta se inicia cuando se activa el Transmit Buffer Status (TBS_BIT), a continuación enviamos el identificador y seguidamente los datos que son simplemente una copia negada de el puerto 1 de esta placa. Una vez introducido todo esta ya en sus Buffers comenzamos la transmisión habilitando el Bit de Set Transmision Request del registro de comandos y antes de terminar esta función comprobamos que finalice correctamente la transmisión mediante los Bits TS y TCS. /* TRANSMISIÓN DE DATOS */ void transmision(void) /* programa transmite si pulsa un botón */ int nopulsado=0; unsigned char P1_old; while(1) while (nopulsado == 1) /* si botón pulsado transmite sino nada */ /* COMIENZA PROTOCOLO CAN */

Memoria Descriptiva

77

while((StatusReg & TBS_bit ) != TBS_bit ); /* espera */ /* TBS_bit es activado por hardware, yo no puedo activarlo, indica si el mensaje puede ser escrito en el buffer */ /* ENVIO DE DATOS (Este formato de envio de tramas es solo para BasicCAN mode) */ TxBuffer1 = 0x00; /* ID1 = 00, (0000 0000) */ TxBuffer2 = 0x01; /* ID2 = 01, (0000 0001) */ /* (DLC=1), solo transmito un byte de datos */ TxBuffer3 = ~P1; /* transmitimos lo que hay en P1 negado */ P1_old=P1; /* hago copia para saber si ha cambiado el futuro*/ nopulsado=0;

/* inicio para saber despues si esta cambiando el byte datos */ /* Indicamos que se puede comenzar la transmisión */ CommandReg = TR_bit; /* mensaje listo para ser transmitido */ while (((StatusReg & TS_bit) != TS_bit) & ((StatusReg & TCS_bit) != TCS_bit)); /* espera mientras transmite datos, transmit status bit */ /* espera mientras no se completa la transmisión */ if (P1 != P1_old) nopulsado=1; /* compara el nuevo y viejo byte */ /* FIN DE TRANSMISIÓN DE DATOS */ 3) Recepción Esta función únicamente será utilizada por la placa receptora, es decir, la de los Leds y solo entraremos en ella una vez se haya recibido una interrupción por parte del SJA1000 diciéndonos que ha recibido algo y lo ha cargado en los Buffers. La función en si consiste en primero que todo permitir interrupción por recepción correcta. El siguiente paso es salvar los interrupt flags por si en un futuro nos hacen falta para restablecer, comprobamos si se ha activado la interrupción por recepción y si es así y mirando que coincida el identificador, pues recogemos y reflejamos en el puerto 1 (en este caso la salida donde se encuentran los Leds), el contenido del Buffer que guardaba los datos del mensaje. Y para acabar borramos la interrupción por recepción para que en un futuro se vuelva a detectar un nuevo mensaje recibido. /* RECEPCIÓN DE DATOS */ void recepcion(void) /* programa recibe trama si pulsado un botón */ unsigned char CANInterrupt; while (1) InterruptEnReg = RIE_bit; /* permito irq por recepción correcta */ /* 2. parte de la rutina del servicio de la interrupción 0 */ /* leemos el Interrupt Register del SJA1000 y salvo temporalmente, todos los interrupt flags son limpiadas */ CANInterrupt = InterruptReg;

Memoria Descriptiva

78

/* comprobamos si hay Receive Interrupt y leemos uno o todos los mensajes recibidos */ do while ((InterruptReg & 0x01) == SI); /* irq receive detectada */ if ((RxBuffer1 == 0x00) && (RxBuffer2 == 0x01)) /* miro que sea el modulo 0 (ID=0) el que envia 1 data byte */ P1 = RxBuffer3; /* si es asi, recibo la informacion y la coloco en los leds */ /* conseguimos el contenido del Receive Buffer del SJA1000 y almaceno el mensaje en la memoria interna del controlador, es posible decodificar inmediatamente la información de la trama y la longitud del código de datos y adaptar el fetch (traer datos) apropiadamente */ /* se activa el Receive Buffer, ahora el Receive Interrupt flag se borra, otro mensaje generará una nueva interrupción */ CommandReg = RRB_bit; /* cargamos el Receive Buffer */ /* FIN DE RECEPCIÓN DE DATOS */ /* OTRAS FUNCIONES DEL MAIN */ 4) Inicializa Esta inicialización simplemente la hacemos para darle unos valores iniciales a los registros importantes del micro y hacer una copia de seguridad de ellos. Por ejemplo, le damos los valores adecuados a todos los registros que tengan relación con el contador de interrupciones del Timer 1, que tendremos preparado por si en un futuro nos hiciera falta. void inicializa(void) /* secuencia inicial configura el micro 8951 */ PCON = PCONV; IE = IEV; IP = IPV; TCON = TCONV; TMOD = TMODV; TH1 = TH1V; TL1 = TL1V; cont_int = 0; /* cont de irq del timer 1, incrementa 1 cada 10ms */ /* preparamos la IRQ del timer1 por si la necesitamos en alguna aplicación */ void irq_timer1_on(void) ET1 = 1; /* activa interrupción del timer 1 */ TR1 = 1; /* activamos el timer 1 */ EA = 1; /* permite todas las interrupciones */

Memoria Descriptiva

79

5) prueba_botones A la hora de empezar a familiarizarme con el hardware hemos construido varias funciones para saber si funcionaba correctamente y seguía mis instrucciones el microcontrolador, entre estas funciones esta, prueba botones que simplemente se encarga de poner a 0 todo el P2 cada vez que pulso uno de los pulsadores de la placa emisora, en segundo lugar esta la función juego leds la cual se encarga de hacer correr un Bit a través del puerto 1 y cada vez que yo ponga a 0 uno de los Bits del puerto 2 pues en el puerto 1 se me vea reflejado que Bit es mediante su iluminación. Aquí hemos utilizado el contador de interrupciones para hacer correr el Bit. /* programa para comprobar que la placa de botones y el 8951 funcionan correctamente */ void prueba_botones(void) while (1) /* poner a 0 todo el P2 y asi comprobamos que cada botón funciona bien */ if (P1 == 0xFD) P2=0x00; if (P1 == 0xFB) P2=0x00; if (P1 == 0xF7) P2=0x00; if (P1 == 0xEF) P2=0x00; if (P1 == 0xDF) P2=0x00; if (P1 == 0xFF) P2=0xFF; /* reiniciamos a 0xFF todo el P2 */ /* programa para comprobar que la placa de leds y el 8951 funcionan correctamente */ void juego_leds(void) int i=0; unsigned char out0=0x80, out1; out1=out0; while (1) /* probamos encender leds poniendo "1's" manuales en patillas del P2 */

if (P2 == 0xFE) P1=0x01; if (P2 == 0xFD) P1=0x02; if (P2 == 0xFB) P1=0x04; if (P2 == 0xF7) P1=0x08; if (P2 == 0xEF) P1=0x10; if (P2 == 0xDF) P1=0x20; if (P2 == 0xBF) P1=0x40; if (cont_int >= 10) /* simultaneamente mientras no pongo "1's" los leds van corriendo hacia un lado 1 led/seg */ cont_int=0; P1 = out1; out1=(out1>>1); i++; if (i == 9) out1=out0; i=1;

Memoria Descriptiva

80

Fichero ‘defines.h’ (programa ‘main’) /* REGISTROS Y DEFINICIONES DE LOS BITS DEL SJA1000 Y DEL 8951 */ /* DEFINICIONES DE REGISTROS A LOS QUE ACCEDE DIRECTAMENTE EL 8951 */ #define XBYTE ((unsigned char volatile xdata *) 0) /* P2 */ sbit P2_7 = 0xA7; sfr AUXR = 0x8E; /* REGISTROS DE MODO & CONTROL */ #define ModeControlReg XBYTE[0] #define RR_bit 0x01 /*reset mode=1,1->0 operating mode (request) bit*/ /* REGISTROS DE INTERRUPCIÓN ENABLE & CONTROL */ #define InterruptEnReg XBYTE[0] #define RIE_bit 0x02 /* permite interrupció por recepció correcta */ #define TIE_bit 0x04 /* permite interrupció por transmisió correcta */ #define EIE_bit 0x08 /* permite Error Interrupt */ #define OIE_bit 0x10 /* permite interrupció por datos Overrun */ /* REGISTRO DE COMANDO */ #define CommandReg XBYTE[1] #define TR_bit 0x01 /*petició de transmisió,transmission request bit*/ #define AT_bit 0x02 /*abortar transmisión, abort transmission bit */ #define RRB_bit 0x04 /* habilita receive buffer bit */ #define CDO_bit 0x08 /* limpia el bit(DOS), data overrun state */ #define GTS_bit 0x10 /*goto sleep (BasicCAN mode),"0" opera normal*/ /* REGISTRO DE ESTADO */ #define StatusReg XBYTE[2] #define RBS_bit 0x01 /* datos recibidos en RXFIFO */ #define DOS_bit 0x02 /* parte de mensaje perdido por tamaño excesivo*/ #define TBS_bit 0x04 /* podemos transmitir datos al buffer */ #define TCS_bit 0x08 /* transmisión completa status bit */ #define RS_bit 0x10 /* recibiendo datos, receive status bit */ #define TS_bit 0x20 /* transmitiendo datos, transmit status bit */ #define ES_bit 0x40 /* estado erroneo, error status bit */ #define BS_bit 0x80 /* sja1000 no esta implicado en uso del bus */ /* REGISTRO DE INTERRUPCIONES */ #define InterruptReg XBYTE[3] #define RI_bit 0x01 /* interrupción por recepción */ #define TI_bit 0x02 /* interrupción por transmisión */ #define EI_bit 0x04 /* interrupción de error ó peligro */ #define DOI_bit 0x08 /* interrupción por desbordamiento de datos */ #define WUI_bit 0x10 /* interrucpión al despertar el 8951 */ /* BUS TIMING REGISTERS */ #define BusTiming0Reg XBYTE[6] #define BusTiming1Reg XBYTE[7] #define SAM_bit 0x80 /* '1'=el bus se muestrea 3 veces, '0'= 1 vez */

Memoria Descriptiva

81

/* OUTPUT CONTROL REGISTERS */ #define OutControlReg XBYTE[8] /* OCMODE1, OCMODE0 */ #define BiPhaseMode 0x00 /* bi-phase output mode */ #define NormalMode 0x02 /* normal output mode */ #define ClkOutMode 0x03 /* clock output mode */ /* configuración del pin de salida TX1 */ #define OCPOL1_bit 0x20 /* bit control de polaridad de salida */ #define Tx1Float 0x00 /* configurado como flotante */ #define Tx1PullDn 0x40 /* configurado como pull-down */ #define Tx1PullUp 0x80 /* configurado como pull-up */ #define Tx1PshPull 0xC0 /* configurado como push/pull */ /* configuración del pin de salida TX0 */ #define OCPOL0_bit 0x04 /* bit control de polaridad de salida */ #define Tx0Float 0x00 /* configurado como flotante */ #define Tx0PullDn 0x08 /* configurado como pull-down */ #define Tx0PullUp 0x10 /* configurado como pull-up */ #define Tx0PshPull 0x18 /* configurado como push/pull */ /* ACCEPTANCE CODE & MASK REGISTERS */ #define AcceptCodeReg XBYTE[4] #define AcceptMaskReg XBYTE[5] /* RX-BUFFER (palabras que se reciben) */ #define RxBuffer1 XBYTE[20] #define RxBuffer2 XBYTE[21] #define RxBuffer3 XBYTE[22] #define RxBuffer4 XBYTE[23] #define RxBuffer5 XBYTE[24] #define RxBuffer6 XBYTE[25] #define RxBuffer7 XBYTE[26] #define RxBuffer8 XBYTE[27] #define RxBuffer9 XBYTE[28] #define RxBuffer10 XBYTE[29] /* TX-BUFFER (palabras que se transmiten) */ #define TxBuffer1 XBYTE[10] #define TxBuffer2 XBYTE[11] #define TxBuffer3 XBYTE[12] #define TxBuffer4 XBYTE[13] #define TxBuffer5 XBYTE[14] #define TxBuffer6 XBYTE[15] #define TxBuffer7 XBYTE[16] #define TxBuffer8 XBYTE[17] #define TxBuffer9 XBYTE[18] #define TxBuffer10 XBYTE[19] /* CLOCK DIVIDER REGISTER (CDR) */ #define ClockDivideReg XBYTE[31] #define DivBy1 0x07 /* "CD=111", CLKOUT = fOSC */ #define DivBy2 0x00 /* "CD 000", CLKOUT = 1/2 fOSC, LA QUE USAMOS */ #define ClkOff_bit 0x08 /* "1" CLKOUT OFF, "0" CLKOUT ON */ #define RXINTEN_bit 0x20 /* pin TX1 usado para recibir interrupción */ #define CBP_bit 0x40 /* CAN comparator bypass control bit */ #define CANMode_bit 0x80 /* "0"=BasicCAN, "1"PeliCan */ /********************************************************************/

Memoria Descriptiva

82

/* DEFINICIONES */ /* MICROCONTROLADOR/SJA1000 */ #define CS P2_7 /* ChipSelect del SJA1000 */ #define SJAINTINP INT0 /* interrupció externa 0 (desde el SJA1000) */ #define SJAINTEN EX0 /* permite la interrupción externa INT0 */ /* CONSTANTES */ #define SI 1 #define NO 0 #define ACTIVA 1 #define DESACTIVA 0 #define ACTIVA_N 0 #define DESACTIVA_N 1 #define INTNIVELACT 0 #define INTFLANCOACT 1 #define PRIORIDAD_BAJA 0 #define PRIORIDAD_ALTA 1 #define CLRBYTE 0x00 #define PASATODO 0xFF /* BORRA REGISTRO ACTIVACIÓN INTERRUPCIÓN */ #define CLRINTENSJA CLRBYTE | RR_bit /* Borra registro de permitir */ /*interrupcions y no toca RR_bit */ /* DEFINIMOS BUS TIMING */ /* - bit-rate: 400 KBit/s, (Bit/seg = 1/tbit), (tbit = tSYNCSEG + tTSEG1 + tTSEG2 = 2500 ns) - oscillator frequency : 16 MHz (fosc, tCLK=1/fosc) - maximum tolerated propagation delay : 1500 ns - minimum requested propagation delay : 750 ns */ #define Presc 0x01 /* tscl = 2 x tCLK x(32 x BRP.5 + 16 x BRP.4 + 8 x BRP.3 + 4 x BRP.2 + 2 x BRP.1 + BRP.0 + 1) */ #define SJW 0x00 /* tSJW = tscl x (2 x SJW.1 + SJW.0 + 1) */ #define TSEG1 0x05 /* tTSEG1 = tscl x (8 x TSEG1.3 + 4 x TSEG1.2 + 2 x TSEG1.1 + TSEG1.0 + 1) */ #define TSEG2 0x20 /* tTSEG2 = tscl x (4 x TSEG2.2 + 2 x TSEG2.1 + TSEG2.0 + 1) */ /* tSYNCSEG = 1 x tscl = 250 ns */ /* MICROCONTROLADOR */ #define PCONV (PCON & 0x7F) /* desactiva el PCON.7, bit SMOD */ #define IEV 0 /* deshabilitar máscaras de irq's EA=0 y las irq's */ #define IPV 0 /* desactiva los niveles de prioridades de las irq's */ #define TCONV (TCON & 0x00) /* no activamos ninguna interrupción */ /* CONFIGURACIÓN DE LOS TIMERS 1 Y 0 */ #define TMODV 0x11 /* timer 1 y 0 configurados:GATE=0, TIMER, MODO=1 (timer 16 bits) */ #define TH1V 0xE5 #define TL1V 0xF5 /* ponemos en el contador T=(1/(Fosc/12))*2 = tiempo de cada tic, y como queremos que irq se active cada 10ms pues 0'01/T = número de tics que quiero que cuente. Resulta 6.666'66 osea 65536-6666'66=58869 = 0xE5F5 */

Memoria Descriptiva

83

8.1 Como crear un proyecto nuevo en Keil Uvision Pasos para crear un proyecto en Keil U.vision:

1) Arrancar el programa y cerrar todo lo que se te haya abierto por defecto ya sean proyectos o ficheros.

2) Creamos el proyecto nuevo: project --> new project.

3) Le damos un nombre.uv2 y guardamos.

4) Escogemos el chip utilizado: data base (yo use el 8xc51rc2) y aceptar.

5) Project --> targets, groups, files (por si tenemos alguna cosa que añadir de otro

proyecto, normalmente nada y no hacemos este paso).

6) Project --> options for target `target 1': canviamos el reloj (mhz) y en pestaña 'output' decimos que nos de un *.hex de salida (create hex file).

7) Último paso crear el fichero donde escribiré el código: file --> new: le damos un

nombre.c.

8) Para compilar el proyecto le damos a: translate.... depués a build target y por último a rebuild all targets..... (estas pestañas esta como botones arriba a la derecha, tercera línea.

9) Fin

Memoria Descriptiva

84

9. Bibliografía http://www.can.bosch.com/index.html http://www.can-cia.de/can/ Philips semiconductors: Data sheets http://www.semiconductors.philips.com. http://www.keil.com/dd/chip/3216.htm http://www.mailingelectronica.com/ http://electronred.iespana.es/electronred/Diodo.htm#led http://www.mundomicro.com.ar/index.html http://www.amidata.es/es;/session_timeout.htm

PLANOS

Planos

86

1. Planos 1.1. Introducción En este apartado nuestro objetivo será mostrar de una forma detallada y precisa, todos los planos necesarios para la correcta realización de este proyecto. También se detallan los esquemas electrónicos, placas de los circuitos impresos y situación de los componentes en las mismas placas. Todo este trabajo se ha realizado con la herramienta de diseño “ORCAD Family Release 9.2”, primero utilizando el subprograma “Capture” el cual nos deja montar el circuito electrónico como un simple esquema y posteriormente utilizando el subprograma “Layout” el cual ya se centra en las placas y su circuito impreso, reordenando yo las pistas de la forma que mas me convenga y dándoles su configuración de grosor dependiendo de la intensidad que vaya a pasar por cada pista.

Planos

87

1.2. Esquemas eléctricos PLACA 1: RECEPTORA

R28120

R1610k

C30.1u

R2710k

VCC1

+

1

R12150

XTAL116KHz

C120.1u

R1150

HI

R24150

C710u

0

0

0

Q3BC547

R42k

C610u

0

HI

R294k7

R224k7

D4

DIODE

R114k7

C20.1u

HI

HI

DB9

CONNECTOR DB9

594837261

R710k

Q6BC547

DL6

0

0

SJA1000123456789

1011121314

2827262524232221201918171615

Rlim170

R610k

HI

HI

R94k7

R2150

DL3

R510k

HI

Q1BC547

0

HI

R304k7

0

0

HI

0

HI

R158k2

R1810k

C10.33u

R23150

PB1

1

4

2

3

Q7BC547

R254k7

R402k

C130.1u

GND1

-

1

R1710k

0

C80.1u

Q4BC547

0

HI

C140.1u

DL8

0

0

HI

C50.1u

D8

HI

R2610k

C915p

0

R104k7

0

0

HI

0

C1015p

0

DL2

P89C51 RC2123456789

1011121314151617181920

4039383736353433323130292827262524232221Q5

BC547

0

0

Q2BC547

0

0

R14150

Q8BC547

C110.1u

PCA82C250

1 2 3 45678

R3150

0

HI

HI

R82k

0

C40.1u

HI

HI

R1910k

C150.1u

DL7

0

0

DL9

DL4

U1L7805CV

1 3

2

IN OUT

GN

D

SW1

DL5

R214k7 0

HI

0

R13150

0

R204k7

MAX232

MAX232

1345

1615

26

129

1110

138

147

C1+C1-C2+C2-

VC

CG

NDV+

V-

R1OUTR2OUT

T1INT2IN

R1INR2IN

T1OUTT2OUT

DL1

Planos

88

PLACA 2: EMISORA

R28120

R1610k

C30.1u

R910k

PUSH8

VCC1+

1

XTAL116KHz

C120.1u

HI

PUSH3

C710u

0

0

0

0

Q2BC547

0

R42k

C610u

R1010k

0

0

D4

DIODE

PUSH2

R294k7

C20.1u

HI

HI

DB9

CONNECTOR DB9

594837261

0

R2610k

0

SJA1000123456789

1011121314

2827262524232221201918171615

Rlim170

R2710k

HI

PUSH7

R24150

R710k

DL2

HI

PUSH6

PUSH4

0

0

0

0

R158k2

C10.33u

PUSH5

R510k

PB1

1

4

2

3

R310k

R254k7

R402k

C130.1u

GND1

-

1

C80.1u

R610k

0

HI

0

C140.1u

PUSH1

0

HI

C50.1u

D8

SW2

HI

C915p

R304k7

0

0

HI

0

C1015p

DL1

P89C51 RC2123456789

1011121314151617181920

4039383736353433323130292827262524232221

R210k

0

Q1BC547

0

C110.1u

PCA82C250

1 2 3 45678

R23150

HI

R82k

0

C40.1u

HI

SW3

HI

C150.1u

0

DL9

U1L7805CV

1 3

2

IN OUT

GN

D

SW1

R110k

0

HI

0

0

MAX232

MAX232

1345

1615

26

129

1110

138

147

C1+C1-C2+C2-

VC

CG

NDV+

V-

R1OUTR2OUT

T1INT2IN

R1INR2IN

T1OUTT2OUT

Planos

89

1.3. Circuitos impresos PLACA 1: RECEPTORA

cara inferior de la placa

cara superior de la placa

Planos

90

PLACA 2: EMISORA

cara inferior de la placa

cara superior de la placa

Planos

91

1.4. Componentes PLACA 1: RECEPTORA

situación de los componentes

PLACA 2: EMISORA

situación de los componentes

Planos

92

1.5. Acabados de las placas electrónicas

PLACA 1: RECEPTORA

PLACA 2: EMISORA

Planos

93

2. Manual de ORCAD Capture. 2.1. Introduccion a ORCAD Capture Permite realizar esquemas de circuitos y preparar toda la información generada para la simulación o la ejecución de circuitos impresos. Esta última posibilidad es la que nosotros vamos a estudiar en este módulo. Para empezar conoceremos el entorno visual de Capture y posteriormente aprenderemos como se trabaja en el mediante un proyecto ejemplo. 2.2. Descripcion de ORCAD Capture Cuando seleccionamos y entramos en el programa, aparece la pantalla tal y como se muestra en la figura 1.

Figura 1

Cuando iniciemos un nuevo proyecto o abramos uno existente aparecerán además otras ventanas que configuran el contenido del programa. Estas son:

• El administrador de diseños (Design Manager). • El editor de páginas de esquemas (Schematic Page Editor).

• El editor de componentes (Part Editor).

• El informe de la Sesión (Session Log). (En la figura 1).

Planos

94

2.2.1. El Administrador de Proyectos Recoge y organiza todos los recursos necesarios para el proyecto. Estos recursos incluyen carpetas de esquemas, librerías de componentes, componentes, ficheros VHDL e informes de salida (Outputs).

Carpetas en el Administrador de proyectos (Figura 2)

Design Resources: Muestra la carpeta Design (sonda lógica.dsn) con las carpetas de esquema de diseño (Schematic) que contiene además la página de esquemas (Sonda Lógica). Además tiene la carpeta Design Cache que contiene los componentes utilizados en el proyecto. Library: Muestra los ficheros de librerías de componentes del esquema que se han añadido al proyecto. Outputs: Muestra la salida de las herramientas de procesamiento de Capture en forma de informes generados conforme se utilizan dichas herramientas. Esta descripción corresponde a la pestaña File del administrador de proyectos. La pestaña Hierarchy: Al seleccionarla, el administrador de proyectos mostrará la relación jerárquica entre las carpetas de esquemas de proyecto y las páginas de esquemas. Esta pestaña se utilizará cuando, más adelante, estudiemos los diseños jerárquicos.

Planos

95

2.2.2. El Editor de Esquemas (Figura 3) Se utiliza para visualizar y editar páginas de esquemas. Se pueden colocar componentes, hilos, buses, y dibujar gráficos. El editor de esquemas tiene dos paletas de herramientas: una para la ventana del editor de páginas de esquemas y otra para la ventana del editor de componentes.

Figura 3

Paleta de herramientas del editor de páginas de esquemas (Figura 4)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1. Select. Selecciona objetos. Es el modo normal. 2. Part. Selecciona componentes de una librería para su posicionado (Shift+P). 3. Wire. Dibuja hilos. (Shift+W). 4. Net Alias. Coloca alias (nombres) a hilos y buses. 5. Bus. Dibuja buses. 6. Junction. Coloca puntos de unión. 7. Bus Entry. Coloca una entrada a un bus. 8. Power. Coloca símbolos de alimentación. 9. Ground. Coloca símbolos de tierra. 10. Hierarchical Block. Dibuja bloques jerárquicos. 11. Hierarchical Port. Coloca puertos jerárquicos en páginas de esquemas. 12. Hierarchical Pin. Coloca pines jerárquicos. 13. Off Page Connector. Coloca conectores de salida de página.

Planos

96

14. No Connect. Coloca símbolos de no conectados en pines. 15. Line. Dibuja Líneas. 16. Polyline. Dibuja poli líneas. 17. Rectangle. Dibuja rectángulos. 18. Ellipse. Dibuja elipses. 19. Arc. Dibuja arcos. 20. Text. Permite introducir textos en el editor de página de esquemas.

Todos estos iconos representan comandos que se encuentran en el menú Place de Capture. De esta forma, también se pueden ejecutar dichos comandos desde allí. 2.2.3. El Editor de Componentes (Figura 5) Se utiliza para crear y editar componentes. Más adelante estudiaremos en profundidad este editor, ahora sólo nos limitaremos a conocer su descripción, pero no como se utiliza. El aspecto de la pantalla cuando llamamos a este editor se observa en la figura.

Figura 5

Paleta de herramientas del editor de componentes (Figura 6) El primer grupo de iconos son las herramientas eléctricas, y el segundo grupo son las herramientas de dibujo. Estas últimas son las mismas que las que aparecen en el punto anterior, por ello no se van a describir de nuevo, ya que, lo que allí aparece es válido para este editor. Selecciona objetos. Es el modo normal.

Figura 6 1 2 3 4

1. Select. Selecciona objetos. Es el modo normal. 2. IEEE Symbol. Coloca símbolos IEEE en un componente.

Planos

97

3. Pin. Coloca pines a un componente. 4. Pin Array. Coloca múltiples pines en un componente.

2.2.4. Informe de la Sesión (Sesion Log) (Figura 7)

Figura 7 Muestra un listado con todos los eventos que se hayan producido durante la sesión actual de Capture. Esto incluye mensaje de las herramientas utilizadas. Se puede buscar información en el informe utilizando el comando Find en el menú Edit. 2.2.5. La Barra de Estado (Figura 8) Está localizada en la parte inferior de la zona de sesión de Capture. Informa de las acciones actuales, números de elementos seleccionados, escala de zoom y posición, mediante coordenadas, del puntero.

Figura 8

1 2 3

Planos

98

1. Campo Izquierdo. Presenta descripciones de las herramientas seleccionadas o elementos del menú, preguntas realizadas por el sistema, o el estado actual.

2. Campo Central. Presenta el número de elementos seleccionados en el editor de páginas de esquemas o en el editor de componentes.

3. Campo Derecho. Muestra la escala actual y la posición del puntero. 2.3. Crear un proyecto de ORCAD Capture Crea un directorio que se denomine PROYECTOS en el disco duro del ordenador. Ahí guardarás todos los proyectos que hagas durante el curso, distribuidos en subdirectorios. En el menú FILE selecciona NEW y “pincha” en Project. Esta operación es equivalente a

pulsar el icono que tiene el aspecto de la figura. Aparecerá un cuadro de diálogo que completarás con los datos siguientes:

- NAME: Ejemplo - Location : C:\ Mis Documentos\Proyectos\Ejemplo

y elige la opción "PCBoard Wizard". Al aceptar (OK) en el cuadro de diálogo pasarás a la siguiente ventana: elige la opción Enable Project Simulation, pulsa en siguiente, pasarás al cuadro de diálogo PCB Project Wizard, esta ventana permite la elección de las librerías de componentes necesarias en el proyecto. Basta con señalarlas y pulsar el botón ADD (añadir). Añade las siguientes librerías, connec~1.olb, regu-la~1.olb. En el cuadro blanco de la ventana fíjate como se encuentran las librerías anteriores. Pulsa Finalizar. Seguidamente observarás como aparece en pantalla el Administrador de proyectos. Analizamos la información que nos da: La carpeta Design Resources contiene las siguientes subcarpetas:

- fuente de alimentación.DSN, que es el nombre de nuestro proyecto. Este contiene además la subcarpeta SCHEMATIC1 que incluye las páginas de esquemas (en nuestro caso una sola) y que denominaremos “fa” mediante el comando Rename que emerge al pulsar el botón derecho del ratón sobre PAGE1.

- Design Cache. En esta subcarpeta se incluirán todos los componentes que

utilicemos en el proyecto. En este momento solo tendrás Title-Block0 que es el único “componente” que se encuentra en la página del Editor de Esquemas.

- Library. Observa como contiene las librerías que elegiste en el paso anterior.

Puedes abrir cualquier librería para ver su contenido. Podrás visualizar los componentes, bien para verlo simplemente o para modificarlo, pero, desde esta subcarpeta, no podrás extraerlo para situarlo en Editor de Esquemas.

- Outputs y Referenced Projects. En este momento son subcarpetas vacías.

Conforme avances en la realización del proyecto veremos como aparecen unos ficheros llamados Informes de Salida.

Planos

99

3. Manual de ORCAD Layout 3.1. Introduccion a ORCAD Layout Antes de crear la placa es necesario crear el diseño en la Sesión de Layout. El proyecto de OrCAD Capture lo pasaremos a Layout siguiendo el método descrito en la gráfica siguiente.

3.2. Creacion de un Proyecto con ORCAD Layout Cuando se abre un diseño nuevo, Layout obliga a elegir:

- Una plantilla de placa que contiene: el borde de la placa y las reglas de diseño de la plantilla de diseño de la plantilla de tecnología. OrCAD recomienda seleccionar DEFAULT.TCH (contiene los siguientes parámetros, entre otros: nodos de 62Mils; pistas de 12Mils; espaciado de 12Mils que corresponden a 1.57mm, 0.3048mm y 0.3048mm, respectivamente, teniendo en cuenta que 1 milésima de pulgada equivale a 0.0254mm).

Planos

100

- Una lista de conexiones (*.MNL) que describe los componentes y las interconexiones de un esquema.

Para conseguir todo esto seguirás el siguiente itinerario:

1. File ⇒ New. 2. En el cuadro de diálogo “Load Template File” elegirás la plantilla de tecnología

“DEFAULT.TCH” que se encuentra en: C:\ProgramFiles\OrCAD\LAYOUT\DATA.

3. A continuación en el cuadro de diálogo “Load Netlist Source” localizarás el archivo

de Netlist (*.MNL) generado en Capture correspondiente al diseño de la fuente de alimentación.

4. En el cuadro de diálogo Save File As, escribirás un nombre para el diseño de Layout con extensión de placa (*.MAX).

5. Pasarás a la utilidad de Layout “Automatic ECO Utility” que se encargará de leer todos los ficheros creados sobre este proyecto en Capture, dándonos la posibilidad de completar los Footprints que falten en el diseño. Lee los archivos *.max, *.mnl, *.Lis (report files) y *.err; los footprints que no se encuentran se pueden buscar manualmente (Link existing footprint to component....) o hacerlos. Una vez que se ha completado este paso los componentes se encuentran en la pantalla de diseño, preparados para la creación de la placa.

3.3. Parámetros de la placa 3.3.1. El Borde de la placa

1. Tool⇒Dimension⇒Move Datum (para situar el origen de coordenadas en la pantalla).

2. Botón Obstacle de la barra de herramientas. 3. Menú automático⇒New. 4. Menú automático⇒Properties (Obstacle type:BOARD OUTLINE; Obstacle layer:

GLOBAL LAYER). 5. Trazado de la placa con el ratón.

3.3.2. Fijar Unidades de Medida

1. OPTIONS⇒System Settings. 2. Seleccionar en el cuadro de diálogo: MILS (milésimas de pulgada). 3. OK.

3.3.3. Fijar la Rejilla

1. OPTIONS⇒System Settings. 2. Se dejará lo que aparece por defecto en el cuadro, en principio. En el cuadro de

diálogo System Settings:

Planos

101

§ Visible grid: rejilla visible. § Detail grid: rejilla en detalle. § Place grid: rejilla de posicionamiento (para el posicionado de

componentes). § Routing grid: rejilla de trazado (para trazado de pistas). § Via grid: rejilla para cambios de cara.

3. OK.

3.4. La Barra de Herramientas de Layout . LA BARRA DE HERRAMIENTAS DE LAYOUT

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

1. Library Manager.- abre el gestor de librerías. Equivalente al comando Open en el menú File.

2. Delete.- Borra aquello que se halla seleccionado. Equivalente al comando Delete en

el menú File.

3. Find.- Presenta la caja de diálogo Find Coordinate o Reference Designator, que puede ser utilizada para especificar coordenadas o designadores de referencias. Equivalente al comando Find/Goto en el menú Edit.

4. Edit.- Presenta la caja de diálogo apropiada, dependiendo de lo que se haya

seleccionado. Equivalente al comando Properties en el menú Edit.

5. Spreadsheet.- Presenta una lista de las hojas de cálculo disponibles. Equivalente al comando Database Spreadsheet en el menú View.

6. Zoom In.- Aumenta áreas seleccionadas de la placa. Equivalente al comando Zoom

In en el menú View.

7. Zoom Out.- Disminuye áreas seleccionadas de la placa. Equivalente al comando Zoom Out en el menú View.

8. Zoom All.- Aumenta la vista de la placa de modo que pueda verla por entero.

Equivalente al comando Zoom All en el menú View.

9. Query.- Muestra la ventana Query, que lista las propiedades del objeto. Equivalente al comando Query Window en el menú View.

10. Component.- Permite seleccionar, añadir, mover, editar y borrar componentes.

Equivalente al comando Component ⇒Select Tool en el menú Tool.

11. Pin.- Permite seleccionar, añadir, mover, editar o borrar pines. Equivalente a seleccionar Pin⇒Select Tool en el menú Tool.

Planos

102

12. Obstacle.- Permite seleccionar, añadir, mover, editar o borrar obstáculos.

Equivalente a seleccionar Obstacle⇒Select Tool en el menú Tool.

13. Text.- Permite seleccionar, añadir, mover, editar o borrar textos. Equivalente a seleccionar Text⇒Select Tool en el menú Tool.

14. Connection.- .- Permite seleccionar, añadir, mover, editar o borrar conexiones.

Equivalente a seleccionar Connection⇒Select Tool en el menú Tool.

15. Error.- Permite seleccionar marcadores de error debidos a violaciones en las reglas de diseño y espaciado. Equivalente a seleccionar Error⇒Select Tool en el menú Tool.

16. Color.- Presenta la hoja de cálculo Color, en la que se puede cambiar los colores de

las capas u objetos o su visibilidad (visible o invisible). Equivalente al comando Colors en el menú Options.

17. Online DRC.- Habilita el chequeo de las reglas de diseño en línea. Equivalente a

seleccionar la opción Activate Online DRC en el cuadro de diálogo User Preferences. El estado del DRC en línea puede verse en la barra de títulos de la ventana, que puede mostrar o DRC ON o DRC OFF.

18. Reconnect.- Habilita el modo de reconexión, que puede utilizarse para mostrar u

ocultar pistas o conexiones. Equivalente a seleccionar la opción Instantaneous Reconnection Mode en el cuadro de diálogo User Preferences. Solo puede utilizarse durante el posicionado de componentes, antes de realizar cualquier trazado de pistas.

19. Auto Path Route.- Habilita el modo de trazado auto path, que puede utilizarse para

trazar y colocar cambios de cara de modo interactivo. Equivalente a seleccionar la opción Auto Path Route Mode en la caja de diálogo Route Settings.

20. Shove track.- Habilita el modo shove track, que puede utilizarse para trazar las

pistas manualmente y cambiar sus posiciones. Equivalente a seleccionar la opción Edit Segment Mode en el cuadro de diálogo Route Settings.

21. Edit Segment.- Habilita el modo Edit Segment, que puede utilizarse para

seleccionar pistas existentes y cambiar sus posiciones, mientras que Layout ajusta de forma automática los ángulos y tamaños de los segmentos adyacentes para mantener su conectividad. Equivalente a seleccionar la opción Çedit Segment Mode en el cuadro de diálogo Route Settings.

22. Add/edit route.- Habilita el modo add/edit route, que puede utilizarse para trazar

manualmente las pistas. Equivalente a seleccionar la opción Add/Edit Route Mode en el cuadro de diálogo Route Settings.

23. Refresh All.- Minimiza las conexiones, rellena cobre y vuelve a calcular las

estadísticas de la placa. Equivalente a seleccionar Refresh, después All desde el menú Auto.

Planos

103

24. Design Rule Check.- Ejecuta el chequeo de las reglas de diseño utilizando las

opciones seleccionadas en el cuadro de diálogo Check Design Rules ( a la que se accede seleccionando Design Rule Check desde el menú Auto). Equivalente a seleccionar el botón OK en el cuadro de diálogo Check Design Rules.

PRESUPUESTO

Presupuesto

105

1. Presupuesto y Mediciones 1.1. Introducción El siguiente presupuesto contiene la totalidad de nuestro proyecto, desde los componentes utilizados, hasta el gasto en horas de diseño, trabajo en laboratorio, la programación de las tarjetas e inclusive el redactado del informe del proyecto.

Presupuesto

106

1.2. Mediciones 1.2.1. Mediciones del Material Electrónico PLACA 1: RECEPTORA Resistencias Total Unidades 120 Ω ± 5% 1 150 Ω ± 5% 8 170 Ω ± 5% 1 2 kΩ ± 5% 3 4k7 Ω ± 5% 9 8k2 Ω ± 5% 1 10 kΩ ± 5% 9 Condensadores Total Unidades 15 pf Cerámico 2 0’1 µf Electrolítico, 63 V 7 0’1 µf Poliéster 3 0’33 µf Poliéster 1 10 µf Electrolítico, 63 V 2 Semiconductores y Elementos Discretos Total Unidades Diodo 1N4003 Plástico, DO-204AL 2 Diodo LED Rojo, 3mm, Vdirecta = 1’7 V 9 Transistor BC547 NPN transistor, encapsulado TO-92 8 Circuitos Integrados y Oscilador Total Unidades Cristal Oscilador 16 MHz, CMAC SK 1 Regulador de Tensión L7805CV 5 V, 1 A, TO-220 package 1 Transmisor / Receptor, Interfaz Serie MAX232 DIP-16 package 1 Microcontrolador P89c51 RC2 BN/01 DIP-40 package 1 Stand-Alone Controler Can SJA1000 N1 DIP-28 package 1 Can Controler Interface PCA82C250/N4 DIP-8 package 1 Pulsadores y Conmutadores Total Unidades Pulsador de plástico Negro Cuadrado 4 patas 1 Switch Conmutador Palanca de 2 canales 3 patas 1 Zócalos y disipadores Total Unidades Zócalo para Circuito Integrado 40 pins, DIP-40 1 Zócalo para Circuito Integrado 28 pins, DIP-28 1 Zócalo para Circuito Integrado 16 pins, DIP-16 1 Zócalo para Circuito Integrado 8 pins, DIP-8 1

Presupuesto

107

Disipador para L7805CV 1 Conectores, Accesorios y Otros Total Unidades Placa Circuito Impreso Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm 1 Patas para placa Metálica con tuerca y pata roscada 4 Regleta de 2 Vias Negra, Aprieta con tornillo 2 Conector DB9 Hembra para PCB 1 Conector DB9 Macho para cable 1 Cable conector PC/PCB Conector PC 1 Cable para CAN 2 Hilos entrelazados 30cm 1 Cable para alimentación 5 m Cable de 2 Hilos 1 PLACA 2: EMISORA Resistencias Total Unidades 120 Ω ± 5% 1 150 Ω ± 5% 2 170 Ω ± 5% 1 2 kΩ ± 5% 3 4k7 Ω ± 5% 3 8k2 Ω ± 5% 1 10 kΩ ± 5% 11 Condensadores Total Unidades 15 pf Cerámico 2 0’1 µf Electrolítico, 63 V 7 0’1 µf Poliéster 3 0’33 µf Poliéster 1 10 µf Electrolítico, 63 V 2 Semiconductores y Elementos Discretos Total Unidades Diodo 1N4003 Plástico, DO-204AL 2 Diodo LED Rojo, 3mm, Vdirecta = 1’7 V 3 Transistor BC547 NPN transistor, encapsulado TO-92 2 Circuitos Integrados y Oscilador Total Unidades Cristal Oscilador 16 MHz, CMAC SK 1 Regulador de Tensión L7805CV 5 V, 1 A, TO-220 package 1 Transmisor / Receptor, Interfaz Serie MAX232 DIP-16 package 1 Microcontrolador P89c51 RC2 BN/01 DIP-40 package 1 Stand-Alone Controler Can SJA1000 N1 DIP-28 package 1 Can Controler Interface PCA82C250/N4 DIP-8 package 1

Presupuesto

108

Pulsadores y Conmutadores Total Unidades Pulsador de plástico Negro Cuadrado 4 patas 9 Switch Conmutador Palanca de 2 canales 3 patas 3 Zócalos y disipadores Total Unidades Zócalo para Circuito Integrado 40 pins, DIP-40 1 Zócalo para Circuito Integrado 28 pins, DIP-28 1 Zócalo para Circuito Integrado 16 pins, DIP-16 1 Zócalo para Circuito Integrado 8 pins, DIP-8 1 Disipador para L7805CV 1 Conectores, Accesorios y Otros Total Unidades Placa Circuito Impreso Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm 1 Patas para placa Metálica con tuerca y pata roscada 4 Regleta de 2 Vias Negra, Aprieta con tornillo 2 Conector DB9 Hembra para PCB 1 1.2.2. Mediciones de Mano de Obra Montaje y Test Concepto Actividad Total Horas Elaboración placas circuitos impresos 6 Montaje componentes en sus respectivas placas 8 Grabación de todos los dispositivos programables 2 Test y validación de targetas electrónicas 6 TOTAL: 22 1.2.3. Mediciones Ingenieria de Diseño Total Horas 20 semanas x 30 horas/semana 600

Presupuesto

109

1.3. Presupuesto 1.3.1. Presupuesto del Material Electrónico Precios Unitarios del Material Electrónico PLACA 1: RECEPTORA Resistencias Precio Unitario (€) 120 Ω ± 5% 0’04 150 Ω ± 5% 0’04 170 Ω ± 5% 0’04 2 kΩ ± 5% 0’04 4k7 Ω ± 5% 0’04 8k2 Ω ± 5% 0’04 10 kΩ ± 5% 0’04 Condensadores Precio Unitario (€) 15 pf Cerámico 0’03 0’1 µf Electrolítico, 63 V 0’05 0’1 µf Poliéster 0’11 0’33 µf Poliéster 0’19 10 µf Electrolítico, 63 V 0’06 Semiconductores y Elementos Discretos Precio Unitario (€) Diodo 1N4003 Plástico, DO-204AL 0’08 Diodo LED Rojo, 3mm, Vdirecta = 1’7 V 0’17 Transistor BC547 NPN transistor, encapsulado TO-92 0’11 Circuitos Integrados y Oscilador Precio Unitario (€) Cristal Oscilador 16 MHz, CMAC SK 2’25 Regulador de Tensión L7805CV 5 V, 1 A, TO-220 0’54 Transmisor / Receptor, Interfaz Serie MAX232 DIP-16 package 2’75 Microcontrolador P89c51 RC2 BN/01 DIP-40 package 14’94 Stand-Alone Controler Can SJA1000 N1 DIP-28 package 6’25 Can Controler Interface PCA82C250/N4 DIP-8 package 2’41 Pulsadores y Conmutadores Precio Unitario (€) Pulsador de plástico Negro Cuadrado 4 patas 1’45 Switch Conmutador Palanca de 2 canales 3 patas 1’82 Zócalos y disipadores Precio Unitario (€) Zócalo para Circuito Integrado 40 pins, DIP-40 0’85 Zócalo para Circuito Integrado 28 pins, DIP-28 0’82

Presupuesto

110

Zócalo para Circuito Integrado 16 pins, DIP-16 0’71 Zócalo para Circuito Integrado 8 pins, DIP-8 0’50 Disipador para L7805CV 1’20 Conectores, Accesorios y Otros Precio Unitario (€) Placa Circuito Impreso Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm 13’90 Patas para placa Metálica con tuerca y pata roscada 0’15 Regleta de 2 Vias Negra, Aprieta con tornillo 0’25 Conector DB9 Hembra para PCB 1’25 Conector DB9 Macho para cable 1’45 Cable conector PC/PCB Conector PC 2’50 Cable para CAN 2 Hilos entrelazados 30cm 0’25 Cable para alimentación 5 m Cable de 2 Hilos 2’35 PLACA 2: EMISORA Resistencias Precio Unitario (€) 120 Ω ± 5% 0’04 150 Ω ± 5% 0’04 170 Ω ± 5% 0’04 2 kΩ ± 5% 0’04 4k7 Ω ± 5% 0’04 8k2 Ω ± 5% 0’04 10 kΩ ± 5% 0’04 Condensadores Precio Unitario (€) 15 pf Cerámico 0’03 0’1 µf Electrolítico, 63 V 0’05 0’1 µf Poliéster 0’11 0’33 µf Poliéster 0’19 10 µf Electrolítico, 63 V 0’06 Semiconductores y Elementos Discretos Precio Unitario (€) Diodo 1N4003 Plástico, DO-204AL 0’08 Diodo LED Rojo, 3mm, Vdirecta = 1’7 V 0’17 Transistor BC547 NPN transistor, encapsulado TO-92 0’11 Circuitos Integrados y Oscilador Precio Unitario (€) Cristal Oscilador 16 MHz, CMAC SK 2’25 Regulador de Tensión L7805CV 5 V, 1 A, TO-220 0’54 Transmisor / Receptor, Interfaz Serie MAX232 DIP-16 package 2’75 Microcontrolador P89c51 RC2 BN/01 DIP-40 package 14’94 Stand-Alone Controler Can SJA1000 N1 DIP-28 package 6’25 Can Controler Interface PCA82C250/N4 DIP-8 package 2’41

Presupuesto

111

Pulsadores y Conmutadores Precio Unitario (€) Pulsador de plástico Negro Cuadrado 4 patas 1’45 Switch Conmutador Palanca de 2 canales 3 patas 1’82 Zócalos y disipadores Precio Unitario (€) Zócalo para Circuito Integrado 40 pins, DIP-40 0’85 Zócalo para Circuito Integrado 28 pins, DIP-28 0’82 Zócalo para Circuito Integrado 16 pins, DIP-16 0’71 Zócalo para Circuito Integrado 8 pins, DIP-8 0’50 Disipador para L7805CV 1’20 Conectores, Accesorios y Otros Precio Unitario (€) Placa Circuito Impreso Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm 13’90 Patas para placa Metálica con tuerca y pata roscada 0’15 Regleta de 2 Vias Negra, Aprieta con tornillo 0’25 Conector DB9 Hembra para PCB 1’25

Presupuesto

112

Presupuesto del Material Electrónico PLACA 1: RECEPTORA Concepto Material Cantidad Precio Unitario (€) Presupuesto (€) Resistencia 120 Ω 1 0’04 0’04 Resistencia 150 Ω 8 0’04 0’32 Resistencia 170 Ω 1 0’04 0’04 Resistencia 2 kΩ 3 0’04 0’12 Resistencia 4k7 Ω 9 0’04 0’36 Resistencia 8k2 Ω 1 0’04 0’04 Resistencia 10 kΩ 9 0’04 0’36 Condensador 15 pf 2 0’03 0’06 Condensador 0’1 µf 7 0’05 0’35 Condensador 0’1 µf 3 0’11 0’33 Condensador 0’33 µf 1 0’19 0’19 Condensador 10 µf 2 0’06 0’12 Diodo 1N4003 2 0’08 0’16 Diodo LED 9 0’17 1’53 Transistor BC547 8 0’11 0’88 Cristal Oscilador 16 MHz 1 2’25 2’25 Regulador de Tensión L7805CV 1 0’54 0’54 Interfaz Serie MAX232 1 2’75 2’75 Microcontrolador P89c51 RC2 BN/01 1 14’94 14’94 Controler Can SJA1000 N1 1 6’25 6’25 Controler Interfaz PCA82C250/N4 1 2’41 2’41 Pulsador de plástico Negro Cuadrado 1 1’45 1’45 Switch Conmutador Palanca 1 1’82 1’82 Zócalo para Circuito Integrado 1 0’85 0’85 Zócalo para Circuito Integrado 1 0’82 0’82 Zócalo para Circuito Integrado 1 0’71 0’71 Zócalo para Circuito Integrado 1 0’50 0’50 Disipador para L7805CV 1 1’20 1’20 Placa Circuito Impreso 1 13’90 13’90 Patas para placa 4 0’15 0’60 Regleta de 2 Vias 2 0’25 0’50 Conector DB9 1 1’25 1’25 Conector DB9 1 1’45 1’45 Cable conector PC/PCB 1 2’50 2’50 Cable para CAN 1 0’25 0’25 Cable para alimentación 1 2’35 2’35

+ ---------

TOTAL: 64’19

Presupuesto

113

PLACA 2: EMISORA Concepto Material Cantidad Precio Unitario (€) Presupuesto (€) Resistencia 120 Ω 1 0’04 0’04 Resistencia 150 Ω 2 0’04 0’08 Resistencia 170 Ω 1 0’04 0’04 Resistencia 2 kΩ 3 0’04 0’12 Resistencia 4k7 Ω 3 0’04 0’12 Resistencia 8k2 Ω 1 0’04 0’04 Resistencia 10 kΩ 11 0’04 0’44 Condensador 15 pf 2 0’03 0’06 Condensador 0’1 µf 7 0’05 0’35 Condensador 0’1 µf 3 0’11 0’33 Condensador 0’33 µf 1 0’19 0’19 Condensador 10 µf 2 0’06 0’12 Diodo 1N4003 2 0’08 0’16 Diodo LED 3 0’17 0’51 Transistor BC547 2 0’11 0’22 Cristal Oscilador 16 MHz 1 2’25 2’25 Regulador de Tensión L7805CV 1 0’54 0’54 Interfaz Serie MAX232 1 2’75 2’75 Microcontrolador P89c51 RC2 BN/01 1 14’94 14’94 Controler Can SJA1000 N1 1 6’25 6’25 Controler Interfaz PCA82C250/N4 1 2’41 2’41 Pulsador de plástico Negro Cuadrado 9 1’45 13’05 Switch Conmutador Palanca 3 1’82 5’46 Zócalo para Circuito Integrado 1 0’85 0’85 Zócalo para Circuito Integrado 1 0’82 0’82 Zócalo para Circuito Integrado 1 0’71 0’71 Zócalo para Circuito Integrado 1 0’50 0’50 Disipador para L7805CV 1 1’20 1’20 Placa Circuito Impreso 1 13’90 13’90 Patas para placa 4 0’15 0’60 Regleta de 2 Vias 2 0’25 0’50 Conector DB9 1 1’25 1’25

+ ---------

TOTAL: 70’80

PLACA 1: 64’19 PLACA 2: 70’80

+ ---------

SUMA TOTAL: 134’99 El presupuesto parcial del Material Electrónico es de CIENTO TREINTA Y CUATRO EUROS CON NOVENTA Y NUEVE CÉNTIMOS

Presupuesto

114

1.3.2. Presupuesto del Montaje y Test Se prevee que el montaje y test de las targetas electrónicas las lleve a cabo un técnico especialista con un sueldo base de 20 €/hora. Concepto Cantidad Precio Unitario (€) Presupuesto (€) Mano de obra 22 horas 20 440 Material usado 1 42 42

+ ---------

TOTAL: 482 El material usado se refiere al material necesario para el montaje de las placas y tareas propias de la obtención del fotolito y de la placa del circuito impreso: láminas transparentes, tinta, líquidos de ataque y revelado, brocas para taladrar placas, estaño de soldadura, etc. El presupuesto parcial del Montaje y Test de la targeta Electrónica es de CUATRO CIENTOS OCHENTA Y DOS EUROS. 1.3.3. Presupuesto Ingenieria de Diseño El diseño de este proyecto se ha realizado durante 20 semanas (2/2004 – 7/2004) a tiempos semanales de 30 horas, y con un sueldo base estimado para el ingeniero técnico de 18 €/hora. Concepto Cantidad Precio Unitario (€) Presupuesto (€) Mano de obra 600 horas 18 10.800 Material usado (software) 1 300 300

+ -----------

TOTAL: 11.100 El presupuesto parcial de la Ingenieria de Diseño del proyecto elaborado es de ONCE MIL CIEN EUROS.

Presupuesto

115

1.3.4. Presupuesto Total Una vez ya hecho el desglose de gastos parciales, se puede pasar a calcular el presupuesto total del proyecto. Presupuesto del Material Electrónico 134’99 Presupuesto del Montaje y Test 482’00

Presupuesto Ingenieria de Diseño 11.100’00

+ ---------------

Suma de presupuestos parciales 11.716’99 Beneficio Industrial 6% 703’02 Gastos generales 13% 1.523’21

+ ---------------

Presupuesto de ejecución por contrato 13.943’22 I.V.A. 16% 2.230’92

+ ---------------

Presupuesto Total del proyecto 16.174’14 El presupuesto Total de facturación del proyecto asciende a la cantidad de DIECISÉIS MIL CIENTO SETENTA Y CUATRO EUROS CON CATORCE CÉNTIMOS.

Tarragona a 11 de Septiembre de 2004

Firmado: Jose Antonio López Fresno

Ingeniero Técnico Industrial

PLIEGO DE CONDICIONES

Pliego de Condiciones

117

1. Pliego de Condiciones 1.1. Introducción El objetivo de este apartado es especificar las condiciones generales, técnicas, facultativas, económicas y administrativas para la correcta realización de este proyecto.

Pliego de Condiciones

118

1.2. Condiciones generales 1.2.1. Descripción La disposición de este montaje es la necesaria y suficiente para la realización de un periférico que se comunique con otro utilizando el bus de comunicaciones CAN. 1.2.2. Ejecución Primeramente se adjuntará la obra según las condiciones que se distinguen; después la empresa adjudicataria, guiándose por este proyecto realizará la ejecución de la obra. En caso que se necesite o se crea conveniente efectuar algún cambio, la empresa se pondrá en contacto con el autor del proyecto y llegarán a un acuerdo por escrito para realizar los cambios o modificaciones oportunas. 1.2.3. Recepción La finalización del montaje y entrega del sistema tendrán que efectuarse en un plazo de 30 días a contar a partir del día de la fecha de adjudicación de la obra. Se tendrá en cuenta la posible modificación de la fecha por imprevistos, falta de material, etc. 1.2.4. Responsabilidad El constructor o empresa adjudicataria es el único responsable de la ejecución del proyecto, al cual se ha comprometido por libre voluntad, sin tener derecho a la indemnización por el incremento de precios de las diferentes unidades, ni por maniobras erróneas que se comentan durante su realización. La administración presenta, entonces, un papel pasivo limitándose a aceptar la oferta que se le ha hecho y a de atender a dicha oferta, como perfectamente meditada y responsabilizada, para ser cumplida con seriedad y absoluta fe. El adjudicatario es responsable también delante de los tribunales de los accidentes que por inexperiencia, negligencia o deseo inmoderado de lucro sobrevengan, así como posibles incumplimientos de las disposiciones legales vigentes. 1.2.5. Modificaciones Si la empresa adjudicataria desea por su parte realizar alguna modificación, no básica, tendrá que darla a conocer por escrito al departamento correspondiente y en la adquisición de la firma.

Pliego de Condiciones

119

Si se considera razonable y se acepta, será confirmada por escrito, así como las nuevas condiciones económicas que mutuamente se acepten. Si todo lo anterior no se realizar tal y como se ha especificado, no se aceptará ninguna modificación. Si por decisión de la dirección de la oficina técnica se introdujeran mejoras, presupuestos adicionas o reformas de adjudicatario, queda obligado a ejecutarlo con la baja correspondiente conseguida en la baja de adjudicación. 1.2.6. Mantenimiento Se dará opción al ejecutor, en su día y a través de un contrato con banda, a la conservación y mantenimiento del equipo. También tendrá preferencia en la obra de ampliación que en el futuro pueda producirse. 1.2.7. Supervisión La firma se reserva el derecho a supervisar y controlar la marcha del equipo, tanto en el período de fabricación como en el de montaje, a través de sus técnicos que en todo momento tendrán acceso libre a las dependencias y planos, y estarán además facultados para rechazar en cualquier momento determinados materiales y sugerir la utilización de otros similares. 1.2.8. Transporte Los gastos de transportes, embalajes y aseguración de los equipos, hasta el punto de destino, correrán a cargo de la empresa adjudicataria. 1.2.9. Anulación del contrato La anulación del contrato solo podrá ser llevada a cabo por alguna de las causas siguientes:

• Muerte o incapacitación del contratista. • Fallo de la empresa contratista. • Modificación del proyecto por alguna alteración del menos de un 25% del valor

contratado. • Modificación del volumen de la obra en más de un 40%. • El no cumplimiento de las fechas por parte del contratista. • La suspensión durante 2 meses de las obras ya comenzadas. • Abandono de la obra sin causa justificada.

Pliego de Condiciones

120

1.3. Condiciones técnicas 1.3.1. Generalidades Las características técnicas serán, mediante mutuo acuerdo, rectificadas en caso de necesidad imperiosa. De no ser así, cumplirán las condiciones eléctricas y de parámetros señaladas en este documento, así como también las condiciones de seguridad señaladas. 1.3.2. Normativa aplicada Para la fabricación y instalación del sistema diseñado en este proyecto se tendrán en cuenta las normas que establezcan los fabricantes de aparatos electrónicos. 1.3.3. Utilización Si alguna vez alguna operación no consta en el cuadro de características del equipo electrónico, tendrá que ponerse una especial atención en el diseño del circuito para evitar cualquier sobrecarga, debida a condiciones desfavorables de funcionamiento. No se han de utilizar dispositivos electrónicos en circunstancias en que se puedan dar situaciones de funcionamiento no controladas por el fabricante. 1.3.4. Valores límites Estos son los valores límites de funcionamiento y de condiciones ambientales de funcionamiento aplicables en cualquier dispositivo electrónico de un tipo especificado, tal como lo definen los datos publicados, los cuales y en la peor de las circunstancias o condiciones, no han de exceder de estos límites. Estos son los valores elegidos por el fabricante para asegurar el buen funcionamiento del dispositivo, declinando toda responsabilidad por cambios del equipo o ambientales, debidos a las variaciones de las características del dispositivo en consideración y de todos los otros circuitos a los cuales está conectado. El fabricante de equipos deberá realizar el diseño de manera que no sobrepase, ni inicialmente, ni durante toda su vida útil, ningún valor considerado por el fabricante como límite ni en las condiciones normales, ni en los peores casos de trabajo y ambiente. 1.3.5. Circuitos integrados Los circuitos integrados estarán integrados en los planos y no podrán ser sustituidos por otros modelos que no tengan las mismas características.

Pliego de Condiciones

121

1.3.6. Transistores y diodos Los transistores y diodos utilizados serán los especificados en los planos, o es su defecto, modelos equivalentes. Se verificarán estas condiciones conforme a las medidas siguientes:

• Medida de los valores límites. • Medida de los parámetros de trabajo.

Las medidas de las tensiones, corrientes y potencias, se harán mediante un montaje de prueba que facilite y permita suministrar en cada casa y a cada uno de los transistores, las tensiones deseadas y disponiendo así mismo de aparatos de medida de tensiones y corrientes que nos permitan controlar en cada momento las tensiones y corrientes que circulen por el transistor. Si durante alguna de las pruebas realizadas resultase algún componente dañado, sin haberse sobrepasado los límites específicos y los daños fuesen de carácter permanente, no implicarían ningún compromiso para la firma en cuestión, siendo la responsabilidad enteramente de la empresa o casa adjudicada. 1.3.7. Resistencias Las resistencias serán de los valores óhmicos especificados. Todas las resistencias serán de 0.25W y con una tolerancia del 5%, excepto las fijadas en los planos que lo indiquen de otra forma. Las pruebas a realizar con todas ellas consistirán en:

• Medida de los valores de tolerancias. • Medida de disipación y voltaje.

Para estas pruebas se clasificarán:

• Potencia nominal. • Resistencias ajustables. • Potenciómetros.

La medida de los valores de resistencia y tolerancia se extenderán a todas las resistencias y en todas deberán mantener su tolerancia dentro de un límite comprendido entre el 0.5 y el 5% según el tipo a que corresponda. Las medidas de potencias se realizarán sometiendo las resistencias a tensiones adecuadas para que su disipación sea la que indique el fabricante. Se verán sometidas a esta tensión durante un tiempo de seis horas para que permita ver con suficiencia su variación de resistencia en el tiempo.

Pliego de Condiciones

122

1.3.8. Condensadores Todos los condensadores serán de los valores capacitivos especificados en los planos. Su tensión máxima también se especifica en los planos. Los condensadores electrolíticos serán de montaje vertical o horizontal según las especificaciones de los planos. Es necesario poner especial atención en no invertir la polaridad en el momento de montarlos. 1.3.9. Circuitos impresos Las placas de circuitos impresos deberán tener un aislamiento superficial igual o superior a 10M y serán de fibra de vidrio presensibilizados positivamente una a una cara y dos a doble cara. Sus dimensiones serán las necesarias para que puedan contener los esquemas. La hoja de cobre a de tener un grosor normalizado de 0.075 mm, para las pistas de señal y de 0.076 mm para las pistas de alimentación. La separación mínima entre pistas será de 1.14 mm, mientras que el taladrado se realizará con una broca de 1 mm o inferior. La realización de los circuitos impresos se hará a partir de los planos, respetando estrictamente el diseño de las pistas. Las placas estarán cobreadas por las dos caras, de tal manera que las conexiones se puedan hacer por dichas caras aunque los elementos activos solo estarán en una de las caras. Los conectores, encargados de realizar las conexiones entre el exterior y las placas, así como las conexiones entre ellas, se revisaran para garantizar el correcto contacto con las placas y se imprimirán una serie de indicaciones para su correcta colocación. Una vez soldados los componentes y comprobados, se procederá a la aplicación de una capa de barniz especial para evitar la posible oxidación del cobre con el paso del tiempo. 1.3.10. Montaje y cableado interno En un futuro y después de la presentación del proyecto, todas las placas a realizar este montaje irán en el interior de cajas con unas características apropiadas de aislamiento ante posibles interferencias, acciones ambientales externas y otros factores negativos para el funcionamiento del sistema. El conexionado entre placas y otros elementos se realizará sin alterar el orden indicado en los planos. Para la conexión externa se utilizará cable conectado con los conectores normalizados según los estándares de los puertos serie.

Pliego de Condiciones

123

1.3.11. Alimentación del montaje Las tensiones de alimentación del montaje serán +5V y GND. Tal como se indica en los planos correspondientes, el conector de alimentación y tendrá 2 cables que corresponden a la tensión de alimentación y masa. La fuente de alimentación que me suministrará entre 5 y 20 V dispone de un porta fusibles con un fusible rápido de 0.5 A.

Pliego de Condiciones

124

1.4. Condiciones facultativas 1.4.1. Generalidades La disposición de este montaje a de ser la necesaria y suficiente para la realización del proyecto. 1.4.2. Dirección La dirección y control de la ejecución de este proyecto estará a cargo de un técnico designado por la propiedad. El facultativo de la propiedad tendrá en todo lo que afecte a las relaciones con el contratista las funciones siguientes:

• Hacer que se ejecuten todas las partes del proyecto de manera que se ajusten al mismo y dentro de los plazos fijados en el contrato y plazos parciales fijados posteriormente, exigiendo al contratista el cumplimiento de todas las condiciones contractuales.

• Definir aquellas prescripciones técnicas que el presente Pliegue de Condiciones deje a su decisión.

• Resolver todas las cuestiones técnicas que surjan por lo que hace referencia a la interpretación de planos o del presente Pliegue de Condiciones, características de los materiales; forma de ejecución de unidades constructivas, medición y abonos, etc.; siempre que no se modifiquen las condiciones del contrato.

• Estudiar las incidencias o problemas planteados que impidan el normal cumplimiento del contrato o aconsejen su modificación, tramitando en su caso las propuestas correspondientes.

• Obtener de los organismos interesados los permisos necesarios para la ejecución de este proyecto.

• Acreditar al contratista las obras realizadas conforme lo dispuesto en el contrato y legislación vigentes.

El director podrá prohibir la participación en la ejecución de todo aquel personal que no cumpla las ordenes dadas por la dirección, cometa faltas de respeto o incurra en faltas por omisión que perturben la buena marcha de la ejecución. 1.4.3. Realización El personal encargado del montaje deberá ser lo suficientemente especializado para llevar a cabo este montaje, según las exigencias y normas dictadas en el proyecto siguiente. La realización de este montaje será tal y como se indica en los planos de este proyecto. Si a juicio del director técnico fuesen necesario cualquier modificación, se debería redactar el consiguiente proyecto reformado, el cual se considerará a partir del día de la fecha como parte integrante del proyecto primitivo.

Pliego de Condiciones

125

En caso de contradicción entre los planos y las prescripciones técnicas, prevalece el preescrito en estas últimas. En cualquier caso lo mencionado en el pliegue de condiciones y excluido en los planos y viceversa deberá ser ejecutado como si estuviera expuesto en ambos documentos, siempre que a juicio del director queden las unidades suficientemente definidas. 1.4.4. Materiales Todos los materiales que se utilicen deberán cumplir con rigor las condiciones necesarias a juicio del director técnico, quien dentro de un criterio de ecuanimidad y justicia se reserva el derecho de ordenar, retirar o reemplazar, si a su juicio perjudicasen de alguna manera a cualquier medida de seguridad del montaje. 1.4.5. Construcción El proceso de construcción será el siguiente:

• Adquisición de todos los componentes. • Montaje según las características. • Comprobación a posteriori de todo el montaje. • Prueba final del funcionamiento.

La ejecución del montaje se llevará a termino hasta su completa finalización con estricta sujeción a todas las condiciones especificadas en esta sección del proyecto y del técnico encargado de la instalación. Por otra parte no se dará por acabado el montaje hasta haber conseguido un ajuste de todos los elementos, el cual se exige para obtener un rendimiento y características de funcionamiento adecuados.

Pliego de Condiciones

126

1.5. Condiciones Económicas 1.5.1. Mediciones La forma de realizar la medición y las unidades de medida a utilizar serán las descritas en el presente Pliegue de Condiciones, aplicando cuando no se prevea unidad o se prevean diversas la que fije la dirección de obra. Todas las medidas se harán siguiendo las unidades del sistema métrico decimal. Los excesos que resulten de medir la obra realmente ejecutada, en relación con lo proyectado no serán de abonamiento si estos excesos son evitables; hasta la Dirección podrá exigir que se corrija lo ejecutado para que se corresponda exactamente con lo proyectado. Aunque estos excesos sean a juicio del director inevitables no serán de abonamiento si los mismos forman parte de los trabajos auxiliares necesarios para la ejecución de la unidad, ni tampoco si estos excesos están incluidos en el precio de la correspondiente unidad. Cuando los excesos inevitables no estén en algunas de las suposiciones anteriores serán de abonamiento al contratista en los precios unitarios aplicados en el resto de la unidad. Si lo ejecutado tiene dimensiones inferiores a lo proyectado, sea por orden de la Dirección o por error de ejecución, la medición para el abonamiento será la mediación de lo realmente ejecutado. Las piezas y unidades sueltas se valorarán como tal aplicando la medida apropiada según los precios que figuren en el mercado. 1.5.2. Precios unitarios El precio unitario que aparece en letra en el apartado de precios unitarios del presupuesto será el que se aplicará en las mediaciones para obtener el importe de ejecución material de cada unidad de obra. La descripción de las operaciones y materiales necesarios para ejecutar la unidad que figura en los correspondientes artículos del presente pliegue no es exhaustiva, sino simplemente enunciativa, para la mejor comprensión de los conceptos que se incluyen en cada unidad. Por este motivo, las operaciones o materiales no relacionados pero necesarios para ejecutar en su totalidad la unidad de obra forman parte de la unidad y consecuentemente se considerarán incluidas en el precio unitario correspondiente. 1.5.3. Pagos Al suscribir el contrato, la empresa adjudicataria percibirá el 35% del total del presupuesto y al dar por finalizada la instalación percibirá otro 35%. El 30% restante quedará como garantía durante 6 meses.

Pliego de Condiciones

127

Si transcurrido este período no se ha detectado ninguna anomalía se abonará esa cantidad y en su momento se considerarán finalizadas las obligaciones existentes entre las dos empresas o entidades. 1.5.4. Multas En caso que no se cumplan los términos de montaje concretados, se reducirá el 0.01% del total del importe por cada día que exceda dicho plazo. 1.5.5. Revisión de precios El adjudicatario de este montaje podrá solicitar la revisión del precio unitario, siempre y cuando este se considere superior al 10% del presupuesto. Igualmente se tendrá derecho por parte de la administración, en caso contrario.

Pliego de Condiciones

128

1.6. Condiciones administrativas Para la adjudicación de este proyecto se abrirá concurso o subasta pública mediante anuncios durante 6 días consecutivos y podrán presentarse todas las empresas o entidades, radicadas dentro del territorio del estado o comunidad que lo solicite. 1.6.1. Adjudicación y contratos El departamento de adjudicación de la firma decidirá dentro de un plazo de 15 días a partir de la determinación de entrega de ofertas la adjudicación de la instalación y montaje. Para este fin, se tendrán en cuenta los puntos siguientes:

• Importe económico. • Plazo de entrega. • Condiciones de garantía de las ofertas. • Circunstancias dignas de consideración.

La empresa adjudicataria subscribirá el contrato ante notario, donde aparte de los extremos legales y los correspondientes a las condiciones económicas que se indiquen, también se notificará el plazo de entrega y conformidad con la sanción que pueda derivarse de su incumplimiento. 1.6.2. Entrega de proyecto El adjudicatario tendrá derecho tan pronto como reciba la orden de adjudicación a disponer de una copia completa de cada uno de los documentos de este proyecto. Los originales les serán facilitados por el autor a su domicilio o oficina, sin que pueda sacarlos de allí. Cuando el adjudicatario o delegados obtengan las copias, las dejara en manos del autor del trabajo, que una vez comprobado la exactitud de la copia lo certificará bajo su propia firma.