Memoria Proyecto bus CAN - deeea

Anuncio
NODO DE COMUNICACIÓN
BASADO EN EL BUS CAN
AUTOR: Jose Antonio López Fresno
DIRECTOR: Ernest Gil Dolcet
DATA: Septiembre / 2004
ÍNDICE
Índice
Índice
.............................................................................................
2
MEMORIA DESCRIPTIVA
1. Antecedentes ...................................................................................
9
2. Titular
9
.............................................................................................
3. Objetivo del proyecto
.................................................................. 10
4. Otras posibles soluciones a mi problema
5. Descripción del Bus CAN
5.1. Qué es el CAN Bus
................................... 11
.............................................................. 14
............................................................................ 14
5.2. Características principales de protocolo CAN
5.3. Conceptos del Bus CAN
............................. 14
................................................................... 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
5.6. Explicación funcional del Can-Bus
5.7. Mensajes y tipos de Tramas
5.8. Formatos de Trama
.............................. 18
................................................. 20
............................................................ 21
.......................................................................... 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?
5.10. CAN en el mercado actual
6. Descripción del proyecto
6.1. Introducción
......................... 26
............................................................. 26
.............................................................. 28
...................................................................................... 28
3
Índice
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
7.1. Introducción
.............................. 64
..................................................................................... 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
4
Índice
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
9. Bibliografía
............................. 83
................................................................................... 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
2. Manual de ORCAD Capture
............................................... 92
...................................................... 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
3. Manual de ORCAD Layout
........................................ 98
........................................................ 99
3.1. Introducción a ORCAD Layout
...................................................... 99
3.2. Creación de un Proyecto con ORCAD Layout
3.3. Parámetros de la placa
.............................. 99
.................................................................... 100
5
Índice
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
1.1. Introducción
1.2. Mediciones
......................................................... 105
.................................................................................... 105
....................................................................................... 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
1.1. Introducción
................................................................ 117
.................................................................................... 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
6
Índice
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
7
MEMORIA DESCRIPTIVA
Memoria Descriptiva
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.
9
Memoria Descriptiva
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.
10
Memoria Descriptiva
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.
11
Memoria Descriptiva
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.
12
Memoria Descriptiva
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.
13
Memoria Descriptiva
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).
14
Memoria Descriptiva
•
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:
15
Memoria Descriptiva
Tabla 1. Velocidad-Distancia en CAN
Velocidad
1 Mbps
800 Kbps
500 Kbps
250 Kbps
125 Kbps
50 Kbps
20 Kbps
10 Kbps
Tiempo de Bit
1 µS
1,25 µS
2 µS
4 µS
8 µS
20 µS
50 µS
100 µS
Longitud Máxima
30 m
50 m
100 m
250 m
500 m
1000 m
2500 m
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.
16
Memoria Descriptiva
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.
17
Memoria Descriptiva
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
18
Memoria Descriptiva
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
19
Memoria Descriptiva
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:
20
Memoria Descriptiva
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”.
21
Memoria Descriptiva
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.
22
Memoria Descriptiva
5V
valor recesivo
0V
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.
23
Memoria Descriptiva
•
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
1bit
Identif. RTR IDE r0 DLC
11bit
1bit 1bit 1bit 4bit
datos
0...8*8 bits
CRC
15bit
ACK
2bit
EOF+IFS
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
24
Memoria Descriptiva
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
25
Memoria Descriptiva
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.
26
Memoria Descriptiva
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.
27
Memoria Descriptiva
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.
28
Memoria Descriptiva
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).
29
Memoria Descriptiva
funciones establecidas en el PCA82C200:
Interface flexible del microcontrolador
Driver de salida CAN programable
CAN bit-rates hasta de 1 Mbit/s
Permite interconectar la mayoría de los
microprocesadores o microcontroladores
Interface para toda clase de physical layers.
El SJA1000 cubre cualquier bit-rate,
incluyendo de alta velocidad
Las funciones mejoradas del PCA82C200:
CAN 2.0B (pasivo)
64 byte Receive FIFO
24 MHz fclock
Receive Comparator Bypass
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)
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)
Un acceso más rápido del microprocesador
y mas opciones de bit-timing del CAN
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í.
30
Memoria Descriptiva
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
31
Memoria Descriptiva
“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
32
Memoria Descriptiva
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
33
Memoria Descriptiva
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
34
Memoria Descriptiva
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.
35
Memoria Descriptiva
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.
36
Memoria Descriptiva
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
37
Memoria Descriptiva
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.
38
Memoria Descriptiva
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 ;
39
Memoria Descriptiva
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)
40
Memoria Descriptiva
b) Registro de Comando (CMR)
c) Registro de Estado (SR)
41
Memoria Descriptiva
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).
42
Memoria Descriptiva
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 resincronizació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)
tTSEG1 = tscl x (8 x TSEG1.3 + 4 x TSEG1.2 + 2 x TSEG1.1 + TSEG1.0 + 1)
tTSEG2 = tscl x (4 x TSEG2.2 + 2 x TSEG2.1 + TSEG2.0 + 1)
(4)
(5)
(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”.
43
Memoria Descriptiva
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)
44
Memoria Descriptiva
Interpretación de los bits OCMODE:
OCMODE.1
0
0
1
1
OCMODE.0
0
1
0
1
DESCRIPCIÓN
bi-phase output mode
test output mode
normal output mode
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:
45
Memoria Descriptiva
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, pushpull) 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.
46
Memoria Descriptiva
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).
47
Memoria Descriptiva
§
§
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.
48
Memoria Descriptiva
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.
49
Memoria Descriptiva
Power on y Reset del Micro 8951
Aplicación de proceso específico
de Reset
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
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
50
Memoria Descriptiva
(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:
-
•
El Clock Divider Register, definiendo:
-
•
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):
-
•
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:
-
•
Modo del filtro de aceptación.
Self Test Mode (Modo autoprueba).
Listen Only Mode.
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.
51
Memoria Descriptiva
Comienza la inicialización o reconfiguración
Deshabilitar la interrupción externa CAN del
8951
Entrar en Modo Reset
NO
Modo Reset activado?
SI
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
Modo Normal activo?
SI
Si usado: habilita interrupciones CAN y la
del microcontrolador
Fin de configuración
Figura 12. Diagrama de flujo de “Inicialización del SJA1000”
52
NO
Memoria Descriptiva
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
53
Memoria Descriptiva
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
Preparación: habilita interrupción por
transmisión CAN
NO
Transmit Buffer
Status activado?
SI
Escribe mensaje en Transmit Buffer
Almacena temporalmente el mensaje
para ser transmitido
Activa Transmisión Request bit
Activa bandera de mensaje futuro
Figura 13a. Transmisión de un mensaje
54
Memoria Descriptiva
Inicio
Flag CAN transmit?
NO
SI
Mensaje futuro para
ser transmitido?
NO
SI
Borra bandera de mensaje futuro
Copia mensaje del almacén temporal al
Transmit Buffer
Activa Transmisión Request bit
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.
55
Memoria Descriptiva
•
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.
Transmit Buffer
Status activado?
NO
Hace otras tareas o
simplemente vuelve al bucle
SI
Carga el mensaje a transmitir en el
Transmit Buffer
Activa Transmisión Request bit
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
56
Memoria Descriptiva
“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
Preparación: habilita interrupción por
transmisión CAN
NO
Transmit Buffer
Status activado?
SI
Escribe mensaje en Transmit Buffer
Almacena temporalmente el mensaje
para ser transmitido
Activa Transmisión Request bit
Activa bandera de mensaje
NO
El mensaje tiene
prioridad alta?
SI
activa Abort Transmisión bit
Figura 15a. Aborto de Transmisión de un mensaje
57
Memoria Descriptiva
Inicio
NO
Flag CAN transmit?
SI
NO
Mensaje futuro para
ser transmitido?
SI
Copia mensaje del almacen temporal al
Transmit Buffer.
Borra bandera de mensaje futuro
NO
Transmisión
incomplete?
SI
Activa Transmisión Request
bit
Activa Transmisión Request
bit
Procesado de aplicación
especifica: reaccionar acorde con
lo definido en Abort Transmision
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
58
Memoria Descriptiva
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.
59
Memoria Descriptiva
pregunta:
mensajes recibidos?
Receive Buffer
Status=lleno?
SI
NO
Continua con
otras tareas
Lee un mensaje nuevo desde el Receive
Buffer y lo salva
Activa el Receive Buffer
RRB = activado
Proceso de aplicación específica
para recibir un mensaje
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.
60
Memoria Descriptiva
Flujo del main
Recepción de mensajes
Preparación:
Habilita CAN Receive Interrupt
----------------------------------------------------------------------------------------------------------
Inicio
Flag CAN Receive?
NO
SI
Lee un mensaje nuevo desde el Receive
Buffer y lo salva
Activa el Receive Buffer
RRB = activado
Proceso de aplicación específica
para recibir un mensaje
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.
61
Memoria Descriptiva
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
62
Memoria Descriptiva
Inicio
Flag CAN Receive?
NO
SI
Lee un mensaje nuevo desde el Receive
Buffer y lo salva
Activa el Receive Buffer
RRB = activado
Proceso de aplicación específica
para recibir un mensaje
NO
Receive Buffer Status
= vacío?
SI
Flag Data Overrun?
NO
SI
Proceso de aplicación específica:
Reaccionar acorde con lo definido
en la estrategia “Data Overrun”
Borra Data Overrun (bit de comando CD0 =
borrar)
Figura 18. Data Overrun y recepción de un mensaje (controlado por interrupción)
63
Memoria Descriptiva
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.
64
Memoria Descriptiva
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.
65
Memoria Descriptiva
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.
66
Memoria Descriptiva
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:
67
Memoria Descriptiva
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.
68
Memoria Descriptiva
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.
69
Memoria Descriptiva
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
70
(7)
Memoria Descriptiva
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
71
Memoria Descriptiva
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)
72
Memoria Descriptiva
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.
73
Memoria Descriptiva
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.
74
Memoria Descriptiva
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)
RR_bit=1 */
{
ModeControlReg = ModeControlReg | RR_bit ;
}
/* nos aseguramos que el
/* 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;
75
Memoria Descriptiva
/* 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 */
76
Memoria Descriptiva
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;
77
Memoria Descriptiva
/* 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 */
}
78
Memoria Descriptiva
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;
79
Memoria Descriptiva
}
}
}
}
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
#define TI_bit 0x02 /* interrupción
#define EI_bit 0x04 /* interrupción
#define DOI_bit 0x08 /* interrupción
#define WUI_bit 0x10 /* interrucpión
por recepción */
por transmisión */
de error ó peligro */
por desbordamiento de datos */
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 */
80
Memoria Descriptiva
/* 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 */
#define
#define
#define
#define
#define
OCPOL1_bit
Tx1Float
Tx1PullDn
Tx1PullUp
Tx1PshPull
0x20
0x00
0x40
0x80
0xC0
/*
/*
/*
/*
/*
/*
configuración del pin de salida TX1 */
bit control de polaridad de salida */
configurado como flotante */
configurado como pull-down */
configurado como pull-up */
configurado como push/pull */
#define
#define
#define
#define
#define
OCPOL0_bit
Tx0Float
Tx0PullDn
Tx0PullUp
Tx0PshPull
0x04
0x00
0x08
0x10
0x18
/*
/*
/*
/*
/*
/*
configuración del pin de salida TX0 */
bit control de polaridad de salida */
configurado como flotante */
configurado como pull-down */
configurado como pull-up */
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 */
/********************************************************************/
81
Memoria Descriptiva
/* 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 */
82
Memoria Descriptiva
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
83
Memoria Descriptiva
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
84
PLANOS
Planos
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.
86
Planos
1.2. Esquemas eléctricos
PLACA 1: RECEPTORA
HI
D4
1
R2
150
R1
150
BC547
Q3
R5
10k
+
IN
DIODE
C1
0.33u
OUT
Q1
GND1
0
1
0
R10
4k7
0
0
HI
R9
4k7
0
HI
4
R19
10k
DL4
R13
150
R18
10k
R12
150
C6
10u
PB1
2
R17
10k
D8 R16
10k
BC547
BC547
Q6
HI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
3
1
R14
150
C4
0.1u
C5
0.1u
BC547
Q5
Q4
R22
4k7
R21
4k7
R4
2k
R8
2k
P89C51 RC2
HI
DL5
R40
2k
-
0
HI
DL6
C3
0.1u
SW1
BC547
Q2
R11
4k7
0
DL9
C2
0.1u
R20
4k7
0
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
SJA1000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
HI
BC547
R6
10k
HI
R7
10k
0
3
HI
R3
150
1
0
Rlim
170
U1
L7805CV
HI
VCC1
HI
HI
DL1
GND
HI
DL2
2
HI
DL3
R15
8k2
0
C7
10u
0
0
0
0
0
0
HI
0
0
0
XTAL1
16KHz
HI
HI
0
DL7
C8
0.1u
HI
C10
15p
1
2
3
4
DL8
C9
15p
0
C11
0.1u
C12
0.1u
13
8
BC547
Q7
11
10
R30
4k7
0
0
R29
4k7
0
0
HI
C14
0.1u
PCA82C250
1
3
4
5
2
6
C13
0.1u
C15
0.1u
0
87
R1OUT
R2OUT
T1IN
T2IN
C1+
C1C2+
C2V+
V-
T1OUT
T2OUT
15
BC547
Q8
R1IN
R2IN
MAX232
12
9
14
7
0
DB9
5
9
4
8
3
7
2
6
1
0
MAX232
0
R25
4k7
CONNECTOR DB9
8
7
6
5
R26
10k
16
R23
150
VCC
R27
10k
GND
R24
150
R28
120
Planos
PLACA 2: EMISORA
HI
HI
0
HI
HI
1
1
IN
VCC1
R26
10k
R24
150
+
DIODE
C1
0.33u
OUT
HI
DL9
C3
0.1u
C2
0.1u
SW1
R4
2k
R8
2k
C4
0.1u
C5
0.1u
BC547
GND1
0
1
R30
4k7
0
0
P89C51 RC2
0
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0
R1
10k
PUSH1
R2
10k
PUSH2
SW2
4
3
C6
10u
PB1
HI
0
R40
2k
-
SW3
1
2
R3
10k
PUSH3
D8 R16
10k
R5
10k
PUSH4
0
R6
10k
PUSH5
R7
10k
PUSH6
R9
10k
PUSH7
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
SJA1000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
HI
Q1
R29
4k7
HI
Q2
R15
8k2
0
C7
10u
0
0
0
0
C9
15p
C8
0.1u
HI
C10
15p
1
2
3
4
0
XTAL1
16KHz
HI
0
0
0
R10
10k
PCA82C250
16
PUSH8
11
10
HI
C14
0.1u
C13
0.1u
C15
0.1u
C11
0.1u
C12
0.1u
1
3
4
5
2
6
0
88
R1OUT
R2OUT
T1IN
T2IN
C1+
C1C2+
C2V+
V-
T1OUT
T2OUT
12
9
14
7
0
DB9
5
9
4
8
3
7
2
6
1
0
MAX232
0
R25
4k7
CONNECTOR DB9
8
7
6
5
R1IN
R2IN
MAX232
VCC
13
8
GND
0
15
0
0
3
HI
BC547
R27
10k
HI
D4
R23
150
Rlim
170
U1
L7805CV
GND
DL1
2
DL2
R28
120
Planos
1.3. Circuitos impresos
PLACA 1: RECEPTORA
cara inferior de la placa
cara superior de la placa
89
Planos
PLACA 2: EMISORA
cara inferior de la placa
cara superior de la placa
90
Planos
1.4. Componentes
PLACA 1: RECEPTORA
situación de los componentes
PLACA 2: EMISORA
situación de los componentes
91
Planos
1.5. Acabados de las placas electrónicas
PLACA 1: RECEPTORA
PLACA 2: EMISORA
92
Planos
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).
93
Planos
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.
94
Planos
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.
95
Planos
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.
96
Planos
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
97
Planos
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.
98
Planos
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).
99
Planos
-
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:
100
Planos
§
§
§
§
§
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.
101
Planos
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.
102
Planos
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.
103
PRESUPUESTO
Presupuesto
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.
105
Presupuesto
1.2. Mediciones
1.2.1. Mediciones del Material Electrónico
PLACA 1: RECEPTORA
Resistencias
120 Ω
150 Ω
170 Ω
2 kΩ
4k7 Ω
8k2 Ω
10 kΩ
Total Unidades
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
1
8
1
3
9
1
9
Condensadores
15 pf
0’1 µf
0’1 µf
0’33 µf
10 µf
Total Unidades
Cerámico
Electrolítico, 63 V
Poliéster
Poliéster
Electrolítico, 63 V
2
7
3
1
2
Semiconductores y Elementos Discretos
Diodo 1N4003
Diodo LED
Transistor BC547
Total Unidades
Plástico, DO-204AL
Rojo, 3mm, Vdirecta = 1’7 V
NPN transistor, encapsulado TO-92
2
9
8
Total Unidades
Circuitos Integrados y Oscilador
Cristal Oscilador
Regulador de Tensión L7805CV
Transmisor / Receptor, Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Stand-Alone Controler Can SJA1000 N1
Can Controler Interface PCA82C250/N4
16 MHz, CMAC SK
5 V, 1 A, TO-220 package
DIP-16 package
DIP-40 package
DIP-28 package
DIP-8 package
Pulsadores y Conmutadores
1
1
1
1
1
1
Total Unidades
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca de 2 canales
4 patas
3 patas
Zócalos y disipadores
1
1
Total Unidades
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
40 pins, DIP-40
28 pins, DIP-28
16 pins, DIP-16
8 pins, DIP-8
106
1
1
1
1
Presupuesto
Disipador para L7805CV
1
Conectores, Accesorios y Otros
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
Conector DB9
Cable conector PC/PCB
Cable para CAN
Cable para alimentación
Total Unidades
Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm
Metálica con tuerca y pata roscada
Negra, Aprieta con tornillo
Hembra para PCB
Macho para cable
Conector PC
2 Hilos entrelazados 30cm
5 m Cable de 2 Hilos
1
4
2
1
1
1
1
1
PLACA 2: EMISORA
Resistencias
120 Ω
150 Ω
170 Ω
2 kΩ
4k7 Ω
8k2 Ω
10 kΩ
Total Unidades
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
1
2
1
3
3
1
11
Condensadores
15 pf
0’1 µf
0’1 µf
0’33 µf
10 µf
Total Unidades
Cerámico
Electrolítico, 63 V
Poliéster
Poliéster
Electrolítico, 63 V
2
7
3
1
2
Semiconductores y Elementos Discretos
Diodo 1N4003
Diodo LED
Transistor BC547
Total Unidades
Plástico, DO-204AL
Rojo, 3mm, Vdirecta = 1’7 V
NPN transistor, encapsulado TO-92
Circuitos Integrados y Oscilador
2
3
2
Total Unidades
Cristal Oscilador
Regulador de Tensión L7805CV
Transmisor / Receptor, Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Stand-Alone Controler Can SJA1000 N1
Can Controler Interface PCA82C250/N4
107
16 MHz, CMAC SK
5 V, 1 A, TO-220 package
DIP-16 package
DIP-40 package
DIP-28 package
DIP-8 package
1
1
1
1
1
1
Presupuesto
Pulsadores y Conmutadores
Total Unidades
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca de 2 canales
4 patas
3 patas
Zócalos y disipadores
Total Unidades
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Disipador para L7805CV
40 pins, DIP-40
28 pins, DIP-28
16 pins, DIP-16
8 pins, DIP-8
Conectores, Accesorios y Otros
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
9
3
1
1
1
1
1
Total Unidades
Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm
Metálica con tuerca y pata roscada
Negra, Aprieta con tornillo
Hembra para PCB
1
4
2
1
1.2.2. Mediciones de Mano de Obra Montaje y Test
Concepto Actividad
Total Horas
Elaboración placas circuitos impresos
Montaje componentes en sus respectivas placas
Grabación de todos los dispositivos programables
Test y validación de targetas electrónicas
6
8
2
6
TOTAL: 22
1.2.3. Mediciones Ingenieria de Diseño
Total Horas
600
20 semanas x 30 horas/semana
108
Presupuesto
1.3. Presupuesto
1.3.1. Presupuesto del Material Electrónico
Precios Unitarios del Material Electrónico
PLACA 1: RECEPTORA
Resistencias
120 Ω
150 Ω
170 Ω
2 kΩ
4k7 Ω
8k2 Ω
10 kΩ
Precio Unitario (€)
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
0’04
0’04
0’04
0’04
0’04
0’04
0’04
Condensadores
15 pf
0’1 µf
0’1 µf
0’33 µf
10 µf
Precio Unitario (€)
Cerámico
Electrolítico, 63 V
Poliéster
Poliéster
Electrolítico, 63 V
0’03
0’05
0’11
0’19
0’06
Semiconductores y Elementos Discretos
Diodo 1N4003
Diodo LED
Transistor BC547
Precio Unitario (€)
Plástico, DO-204AL
Rojo, 3mm, Vdirecta = 1’7 V
NPN transistor, encapsulado TO-92
0’08
0’17
0’11
Precio Unitario (€)
Circuitos Integrados y Oscilador
Cristal Oscilador
Regulador de Tensión L7805CV
Transmisor / Receptor, Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Stand-Alone Controler Can SJA1000 N1
Can Controler Interface PCA82C250/N4
16 MHz, CMAC SK
5 V, 1 A, TO-220
DIP-16 package
DIP-40 package
DIP-28 package
DIP-8 package
Pulsadores y Conmutadores
2’25
0’54
2’75
14’94
6’25
2’41
Precio Unitario (€)
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca de 2 canales
4 patas
3 patas
Zócalos y disipadores
1’45
1’82
Precio Unitario (€)
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
40 pins, DIP-40
28 pins, DIP-28
109
0’85
0’82
Presupuesto
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Disipador para L7805CV
16 pins, DIP-16
8 pins, DIP-8
Conectores, Accesorios y Otros
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
Conector DB9
Cable conector PC/PCB
Cable para CAN
Cable para alimentación
0’71
0’50
1’20
Precio Unitario (€)
Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm
Metálica con tuerca y pata roscada
Negra, Aprieta con tornillo
Hembra para PCB
Macho para cable
Conector PC
2 Hilos entrelazados 30cm
5 m Cable de 2 Hilos
13’90
0’15
0’25
1’25
1’45
2’50
0’25
2’35
PLACA 2: EMISORA
Resistencias
120 Ω
150 Ω
170 Ω
2 kΩ
4k7 Ω
8k2 Ω
10 kΩ
Precio Unitario (€)
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
± 5%
0’04
0’04
0’04
0’04
0’04
0’04
0’04
Condensadores
15 pf
0’1 µf
0’1 µf
0’33 µf
10 µf
Precio Unitario (€)
Cerámico
Electrolítico, 63 V
Poliéster
Poliéster
Electrolítico, 63 V
Semiconductores y Elementos Discretos
Diodo 1N4003
Diodo LED
Transistor BC547
0’03
0’05
0’11
0’19
0’06
Precio Unitario (€)
Plástico, DO-204AL
Rojo, 3mm, Vdirecta = 1’7 V
NPN transistor, encapsulado TO-92
Circuitos Integrados y Oscilador
0’08
0’17
0’11
Precio Unitario (€)
Cristal Oscilador
Regulador de Tensión L7805CV
Transmisor / Receptor, Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Stand-Alone Controler Can SJA1000 N1
Can Controler Interface PCA82C250/N4
110
16 MHz, CMAC SK
5 V, 1 A, TO-220
DIP-16 package
DIP-40 package
DIP-28 package
DIP-8 package
2’25
0’54
2’75
14’94
6’25
2’41
Presupuesto
Pulsadores y Conmutadores
Precio Unitario (€)
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca de 2 canales
4 patas
3 patas
Zócalos y disipadores
Precio Unitario (€)
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Disipador para L7805CV
40 pins, DIP-40
28 pins, DIP-28
16 pins, DIP-16
8 pins, DIP-8
Conectores, Accesorios y Otros
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
1’45
1’82
0’85
0’82
0’71
0’50
1’20
Precio Unitario (€)
Doble cara (Fibra de Vidrio) 11’7 x 9’8 cm
Metálica con tuerca y pata roscada
Negra, Aprieta con tornillo
Hembra para PCB
111
13’90
0’15
0’25
1’25
Presupuesto
Presupuesto del Material Electrónico
PLACA 1: RECEPTORA
Concepto Material
Cantidad
Resistencia 120 Ω
Resistencia 150 Ω
Resistencia 170 Ω
Resistencia 2 kΩ
Resistencia 4k7 Ω
Resistencia 8k2 Ω
Resistencia 10 kΩ
Condensador 15 pf
Condensador 0’1 µf
Condensador 0’1 µf
Condensador 0’33 µf
Condensador 10 µf
Diodo 1N4003
Diodo LED
Transistor BC547
Cristal Oscilador 16 MHz
Regulador de Tensión L7805CV
Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Controler Can SJA1000 N1
Controler Interfaz PCA82C250/N4
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Disipador para L7805CV
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
Conector DB9
Cable conector PC/PCB
Cable para CAN
Cable para alimentación
1
8
1
3
9
1
9
2
7
3
1
2
2
9
8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
2
1
1
1
1
1
112
Precio Unitario (€)
0’04
0’04
0’04
0’04
0’04
0’04
0’04
0’03
0’05
0’11
0’19
0’06
0’08
0’17
0’11
2’25
0’54
2’75
14’94
6’25
2’41
1’45
1’82
0’85
0’82
0’71
0’50
1’20
13’90
0’15
0’25
1’25
1’45
2’50
0’25
2’35
Presupuesto (€)
0’04
0’32
0’04
0’12
0’36
0’04
0’36
0’06
0’35
0’33
0’19
0’12
0’16
1’53
0’88
2’25
0’54
2’75
14’94
6’25
2’41
1’45
1’82
0’85
0’82
0’71
0’50
1’20
13’90
0’60
0’50
1’25
1’45
2’50
0’25
2’35
+
--------TOTAL: 64’19
Presupuesto
PLACA 2: EMISORA
Concepto Material
Cantidad
Resistencia 120 Ω
Resistencia 150 Ω
Resistencia 170 Ω
Resistencia 2 kΩ
Resistencia 4k7 Ω
Resistencia 8k2 Ω
Resistencia 10 kΩ
Condensador 15 pf
Condensador 0’1 µf
Condensador 0’1 µf
Condensador 0’33 µf
Condensador 10 µf
Diodo 1N4003
Diodo LED
Transistor BC547
Cristal Oscilador 16 MHz
Regulador de Tensión L7805CV
Interfaz Serie MAX232
Microcontrolador P89c51 RC2 BN/01
Controler Can SJA1000 N1
Controler Interfaz PCA82C250/N4
Pulsador de plástico Negro Cuadrado
Switch Conmutador Palanca
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Zócalo para Circuito Integrado
Disipador para L7805CV
Placa Circuito Impreso
Patas para placa
Regleta de 2 Vias
Conector DB9
1
2
1
3
3
1
11
2
7
3
1
2
2
3
2
1
1
1
1
1
1
9
3
1
1
1
1
1
1
4
2
1
Precio Unitario (€)
0’04
0’04
0’04
0’04
0’04
0’04
0’04
0’03
0’05
0’11
0’19
0’06
0’08
0’17
0’11
2’25
0’54
2’75
14’94
6’25
2’41
1’45
1’82
0’85
0’82
0’71
0’50
1’20
13’90
0’15
0’25
1’25
PLACA 1:
PLACA 2:
Presupuesto (€)
0’04
0’08
0’04
0’12
0’12
0’04
0’44
0’06
0’35
0’33
0’19
0’12
0’16
0’51
0’22
2’25
0’54
2’75
14’94
6’25
2’41
13’05
5’46
0’85
0’82
0’71
0’50
1’20
13’90
0’60
0’50
1’25
+
--------TOTAL: 70’80
64’19
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
113
Presupuesto
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
Mano de obra
Material usado
22 horas
1
Precio Unitario (€)
20
42
Presupuesto (€)
440
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
Mano de obra
Material usado (software)
600 horas
1
Precio Unitario (€)
18
300
Presupuesto (€)
10.800
300
+
----------TOTAL: 11.100
El presupuesto parcial de la Ingenieria de Diseño del proyecto elaborado es de ONCE MIL
CIEN EUROS.
114
Presupuesto
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
Suma de presupuestos parciales
Beneficio Industrial
Gastos generales
+
--------------11.716’99
6%
703’02
13%
1.523’21
+
--------------13.943’22
Presupuesto de ejecución por contrato
I.V.A.
11.100’00
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
115
PLIEGO DE CONDICIONES
Pliego de Condiciones
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.
117
Pliego de Condiciones
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.
118
Pliego de Condiciones
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.
119
Pliego de Condiciones
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.
120
Pliego de Condiciones
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.
121
Pliego de Condiciones
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.
122
Pliego de Condiciones
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.
123
Pliego de Condiciones
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.
124
Pliego de Condiciones
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.
125
Pliego de Condiciones
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.
126
Pliego de Condiciones
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.
127
Pliego de Condiciones
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.
128
Descargar