Buscar este blog

Información semanal de las clases de electrónica y las sucesivas prácticas realizadas por Guillermo Cayetano Espejo alumno del Ciclo de Grado Superior de Manteniemintos Electronicos de 2º Curso del CIFPN1 (Peñacastillo,Santander) Dpto:Electricidad y Electrónica

sábado, 22 de octubre de 2016

Bus I2C



Esta semana hemos visto teoría casi toda la semana y también se nos presentó la practica 2 (si contamos la placa como la 1), así que empezare explicando por encima dicha práctica (ya que creare una entrada exclusiva para dicha práctica) y luego comentare la teoría dada durante la semana.

-Practica del I2C:

Vamos a seguir el guion de un página de Internet el cual añado a continuación el enlace:


En la página de internet viene la práctica desarrollada y más o menos explicada, lo que nosotros debemos hacer es realizar dicha práctica simulándola en Proteus y conocer todo lo que se hace, ya sean comandos, dispositivos, reglas…etc.

También tendremos que saber cómo lo simula Proteus y que significa cada método que utiliza y que significan los datos que obtiene. Es decir debemos conocer el funcionamiento al completo del chip ( o chips) que manejamos y conocer como está siendo simulado.

Para saber cómo funcionan los chips habrá que indagar en sus respectivos PDFs.

- Teoría de la semana:

Hablamos de los chips que se trabajaran en la práctica anteriormente mencionada y de sus protocolos y demás características.
            -El BUS I2C: Es un bus de comunicación serie, se creó para comunicar chips en placa, se comunica mediante dos líneas que son SDA, que incluye los datos y SCL que es la señal de reloj. Al solo haber una línea de datos solo se podrá comunicar de uno en uno.

Hay que destacar que entre chips se comunica mediante dos líneas ya que utiliza la referencia (GND) de los chips que comunica, sin embargo si utilizáramos esta comunicación para comunicar dos placas habría que incluir una tercera línea de referencia (GND).

Este tipo de comunicación funciona con maestros y esclavos, es decir, uno es el maestro ( el micro en nuestro caso), que es el que decide con quien se comunica, esto no quiere decir que no pueda ser receptor, puede tanto recibir como emitir datos sin embargo es el quien controla la comunicación en cualquier momento puede cortar la comunicación con ese chip y empezar a comunicarse con otro, eso si, siempre de uno en uno.

Esta comunicación sigue una pauta estricta:

Primero se envía un bit de condición de start (S) que inicia la comunicación.

Después se envían 7 bits que son la dirección a donde se dirige la comunicación.

Luego otro bit que indica si es lectura o escritura.

Y por último se envía un bit de reconocimiento para ver si el chip a recibido lo anterior.

Después se enviaría el dato en cuestión y otro bit de reconocimiento.

Si se quisiera cambiar de chip esclavo o de acción se utilizaría la condición de inicio repetida.

La diferencia entre un esclavo y un maestro es que este ultimo tiene “cerebro” por eso suele ser el micro-controlador.

El I2C como hemos mencionado antes tiene un reloj propio, este reloj es de una velocidad de KHz, mientras que el reloj del micro es de 16 MHz, esto quiere decir que al mandar una instrucción al I2C, mientras se ejecuta, el micro sigue ejecutando instrucciones ya que es mucho mas rápido.

Al comunicar dos chips por un BUS I2C, se colocan do resistencias PULL UP en sus líneas de comunicación, esto sirve para que si en las líneas no hay datos, se pongan a nivel alto y pueda haber cambios en esas líneas.

La capacidad del BUS I2C está limitada por el número de chips ya que al ser direcciones de 7 bits solo podrá ofrecer 2^7  direcciones es decir solo puede conectar con 128 chips diferentes. También está limitado por la capacidad total de los chips esta no puede superar los 400pF.

Cada Chip tiene su propio protocolo de comunicación basado en I2C.

En la práctica utilizamos el chip DS162 para medir la temperatura, este chip responde a una serie de comandos que explicare a continuación.

Command Set (Conjunto de comandos):  El DS1621 lee y escribe la información como se muestra en la figura:





Para escribir el maestro emitirá la dirección del esclavo y pondrá el bit de lectura/escritura a cero, enviara el bit de reconocimiento y seguidamente mandara un byte de protocolo de comandos, otro bit de reconocimiento y el byte de datos. Si se va a leer, el maestro debe enviar el byte de protocolo de comandos como antes y seguidamente la condición de inicio repetida y  otra vez el byte de control (supongo que es el byte con la dirección) esta vez con el bit de escritura/lectura a 1 para permitir leer los datos del DS1621.
           
·        Read Temperature(AAh*): Lee el resultado del último valor de temperatura convertido. El DS1621 manda dos bytes.* La h indica que es formato hexadecimal.
·        Acess TH (A1h): Si el bit escritura/lectura está a 0, este comando escribe en el registro TH. Después de enviar este comando se enviaran dos bytes (mismo formato de antes) los cuales fijaran un límite de temperatura para el funcionamiento de Tout. Si el valor de escritura/lectura es 1, simplemente e leerá el valor que tenga almacenado ese registro.
·        Acess TL (A2h): Igual que TH pero con el límite de temperatura baja.
·        Acess Config (Ah): Si la lectura/escritura es 0, este comando escribe en el registro de configuración, el siguiente byte enviado después del comando será el valor que será escrito en el registro de configuración. Si la lectura/escritura es 1, el byte siguiente será la lectura del byte almacenado en el registro de configuración.
·        Read Counter (A8h): Lee el valor de Count_Remain, este comando solo es válido solo si la lectura/escritura es 1.
·        Read Slope (A9h): Lee el valor de Count_Per_C, este comando solo es válido solo si la lectura/escritura es 1.
·        Start Convert T (EEh): Este comando inicia la conversión de temperatura, no necesita datos, en modo un disparo convertirá y transformara la temperatura y después el DS1621 permanecerá en espera, en modo continuo este comando iniciara la conversión continua de temperatura.
·        Stop Convert T (22h): Este comando detiene la conversión de temperatura, no necesita datos, puede ser utilizado para detener al DS1621 en el modo de conversión continua, tras enviar este comando la medida de temperatura actual será completada y el DS1621 permanecerá en espera hasta que se envié el comando Start Conver T para reanudar el funcionamiento continuo.


Para comunicarnos con el BUS I2C utilizaremos la librería wire.h
Vamos a descomponer la línea de código siguiente:
#include <Wire.h>
·        # : La almohadilla indica que son directivas, es decir instrucciones para el compilador.
·        Include: directiva que le dice al compilador que busque, en este caso la librería Wire.
·        <…> : Si ponemos la librería entre estos signos de mayor y menor, le indicamos que busque la librería en el sitio que tengamos por defecto. Si quisiéramos buscar la librería en otro sitio escribiríamos entre comillas””, la ruta donde se encuentre la librería. Si ponemos solo comillas “” ( y el nombre de la librería, nos la buscara donde este guardando nuestro programa ,el archivo .ino .
En Proteus podemos ver donde guarda las librerías por defecto en System Setting.
Int : define una variable de tipo entero, que ocupa 16 bits (2 bytes) esto quiere decir 65536 combinaciones diferentes por lo que, en positivos solo abarcara un rango de números de 0 a 65535 y en negativos de -32767 a 32768 ( el 0 cuenta como positivo).

          Int dirección=0x48

La línea de arriba lo que hace es asignar a dirección un numero de tipo entero en formato hexadecimal (0x número, indica formato hex).

Variable Global: Se guarda en la SRAM( 2k), cada dirección ocupa un byte por lo tanto solo se podrán tener 2048 direcciones (en teoría).

Cuando tenemos el siguiente formato de código:

            Serial.beguin

            Lo que se encuentra a la izquierda del punto es una clase y lo que está a la                     derecha es un método o función de esa clase.

En Proteus Cuando simulas se habilitan varios modos, uno es el modo Debug, en le cual se puede encontrar el compilador (AVR complidaor de Atmel) esa pestaña nos da opción de ver una serie de cosas que explicare a continuación:

1.     Código Fuente: Es el programa que escribimos nosotros, el programa principal.

2.     Variables: Las variables que hemos definido en el programa, globales y locales. En este modo nos aparecerá la siguiente configuración en la SRAM :
****0138   40
La primera columna es la dirección de la variable, pero solo los 4 últimos dígitos, la columna contigua es el valor en decimal.

3.     Registros CPU: Incluye los puertos (Registros I/O), Conversores analógicos-digitales, temporizadores… etc.

4.     Memoria de datos: Es la RAM más concretamente es la SRAM.

5.     Memoria EEPROM: Es donde guardaremos lo que no queremos perder al dejar de alimentar.

6.     Memoria de programa: Es la memoria Flash.

7.     Registros I/O: Los puertos de los Registros de la CPU de una manera más detallada.

Extensiones: .elf y .hex son las que se compilan para llevarlas al micro la primera la utiliza Proteus, y la hex hace falta un programador para llevarla al micro                       ( ArduinoUSBtinyISP).

            .elf: Extensión que Proteus utiliza para simular y depurar.

.hex: Igual que la extensión .elf con la salvedad de que no depura, solo simula y no puedes ver los registros ni los recursos.

En el ID en herramientas, hay una opción que es quemar bootloder, que nos mete el firware al micro si nos hace falta.

Formato IntelHexadecimal
            Ej: :10000000…..(16bits)….00

Los dos primeros bits indican el número de datos que se van a enviar en hexadecimal en este caso 10 en hex es 16 en dec.

Los cuatro siguientes la dirección de grabado.

Los dos siguientes el tipo de línea, si es 00 se puede grabar, si es 01 se acaba el grabado.

Los 16 bits siguientes son el dato y los dos últimos son el cheksum que comprueba si se a enviado correctamente.

RISC: Conjunto de instrucciones reducidas.
Ortogonal: El micro puede hacer movimientos entre registros.
Harvard: Puedes acudir al BUS de datos y al de direcciones “a la vez”( no es estrictamente a la vez pero si de manera muy rápida).
En Proteus al abrir el I2C saldra un cuadro como el siguiente:


La primera columna es el momento en el que empieza la instrucción y la segunda en la que acaba, si los restas tienes el tiempo que le llevo hacerlo.

La tercera columna (S) indica el bit de inicio.

La Cuarta columna (90 o 91) es la dirección y el bit de escritura/lectura todo junto, en hexadecimal deberás pasarlo a binario y el bit LSB será el de escritura/lectura y los demás la dirección.

La siguiente columna (A) es el bit de reconocimiento.

La siguiente él es byte de datos (el comando por ejemplo) en hexadecimal.

La siguiente columna es el bit de reconocimiento (A) aunque puede ser un (N) de no reconocimiento es quiere decir que el maestro a interrumpido la comunicación.

El último bit es el de paro.

El Micro-controlador tiene 32 registros de propósito general.



lunes, 10 de octubre de 2016

Diseño Arduino Layout


Esta entrada esta dedicada principalmente a continuar el diseño de una placa PCB, se centra en traspasar el esquemático de la placa a el Layout, es decir trasladar el esquemático con todos los componentes, a lo que sería el diseño final de la placa.
También  se ve algo de teoría, que agrupare  en el último punto.
-Desarrollo de la Placa (Arduino Nano):

Una vez que hemos acabado el esquemático en Proteus (entrada "Atmega 328-P"), buscamos el código y coste de cada componente e imprimimos una lista de materiales y coste como la siguiente:



Después de esto abrimos el Layout en Proteus, en una de las pestañas que Proteus llama Ares (en rojo) y salía la sugiente pantalla
En esta nueva ventana de trabajo es donde vamos a implementar el esquemático en una placa, tiene sus propias herramientas y recursos, y tenemos todos los componentes que hemos utilizado en el esquemático, de tal forma que al irlos poniendo, Proteus los va eliminando de la lista de la izquierda.

Este modo funciona con capas, es decir podemos activar o desactivar las capas que deseemos ver o no ver, por ejemplo si solo queremos ver lo que hay en la parte superior de nuestra placa (top), pues desactivaremos la capa que tiene todo los de la parte inferior (bottom). Pose muchas capas caracterizadas cada una por un color, pero en nuestro caso solo trabajaremos con algunas.
-Top Copper: En esta capa aparecerán las pistas, pats, conexiones y componentes de la capa top.
-Bottom Copper: Igual que la Top Copper pero en la Bottom.
-Top Silk: Serigrafía en la top.
-Bottom Silk: Serigrafía en la Bottom.
-Ratsnest: Conexiones pendientes de hacer.
-Force Vectors: Vectores que indican a los componentes la mejor posición para ponerse.
Al colocar los componentes se llenara todo de Ratsnest ya que aún no se ha realizado ninguna conexión.



Estas conexiones se pueden realizar a mano o automáticamente ya que Proteus provee de una herramienta llamada Auto-router, que establece las pistas y las vías según mejor le parezca a el siguiendo unas normas prestablecidas.

Las normas que siguen son las siguientes:



Establecemos como mínima distancia entre pads, entre pads y pistas y entre pistas un mínimo de 5 th, lo que equivale a 0,125mm.
Estas son las reglas que sigue Proteus, pero nosotros tenemos además otras limitaciones como por ejemplo el número de vías, y que estas no estén debajo de chips integrados.
También se intentan  algunas disposiciones para el mejor funcionamiento de la placa como por ejemplo, poner el chip Atmega en el centro de la placa y colocar el oscilador los más de cerca de él. Y intentar hacer las pistas lo más cortas posibles.
A parte de lo anteriormente mencionado cada uno debera hacer el diseño que más le parezca.

-Teoría:
Circuito impreso PCB
·         Sustrato de fibra de vidrio: Buen aislante y no muy caro.
·         PCB como un condensador (cobre-aislante-cobre).
·         En atas frecuencias los condensadores se hacen en placa.
·         Serigrafía: Letras de la placa (Nosotros las haremos en cobre).
·         Sustratos en multicapa son muy finos.
·          
Capas Anchura:
·         Sustrato 1.5 mm.
·         Cobre de 35 micrómetros.
Clases de PCBs:
·         Radiofrecuencia
·         Digital de alta frecuencia
·         Analógicas de altas prestaciones
·         Aplicaciones generales
·         Analógicas de aplicaciones generales
Componentes del PCB:
·         Drill: Agujero.
·         Pad: Zona de cobre para soldar componente.
·         Track: Pista entre dos Pads.
·         Vía: Conexión entre capas.
·         Net: Conexiona completa.
·         Ratnest: Conexión entre pads que falta por hacer.
·         Mascara de soldadura (Solder): Salva las pistas de ser soldadas (Parte verde de la placa).
·         Guard (Clearance): Distancia entre pads y el solder(mascara).
A más categoría menos distancia entre pistas, pats y vías.
Reglas básicas:
·         Todos los componentes del mismo tipo en la misma posición.
·         Conectores en el exterior.
·         Si hay dos masas, hay dos circuitos, separar ambos circuitos.
·         Señal de reloj aislada, no meter entre pines.
·         Si ha componentes que generen calor no pegar a la placa e intentar colocarlos en la top.
Cama de pinchos: Para testear placas por sus puntos de test (PT), para comprobar su funcionamiento.
Consideraciones:
·         Pistas cortas
·         Si la señal de reloj es de alta frecuencia, si se conmutan muchas salidas I/O, la GND puede elevar la tensión, y si trabajas en TTL puedes perder el nivel 0 y se puede degradar la señal.
·         Vías con remaches (Problema),hay que tener en cuenta el  número de vías y siempre ha de ser menor que las que le hayan salido a Luis (Profesor).
·         Intentar no hacer ángulos de 90º ni demasiado agudos.
·         Pistas de VCC y GND de 1 mm de ancho por lo menos.
·          
Para calcular las resistencias de las pistas y la máxima intensidad admisible existen tablas en internet, que se pueden interpretar fácilmente:

Aunque como norma general en una pista de 0.5 mm de sección y 35 micrómetros de alto, circula 1 Amperio de corriente.

Para evitar interferencias electromagnéticas o Diafonías ( Capacitivas e inductivas)  que son acoplamientos electromagnéticos entre pistas cercanas se cruzan los cables para compensar las intensidades inducidas.
Datos Prácticos:
·         Ancho de pista: 40 Th Power y 20 Th la señal.
·         Diámetro taladros: 0.85mm  como mínimo.
·         Mínima distancia entre pistas, pats… etc. serán 10 TH.
·         No remachar, solo presionar sino pueden romperse las pistas.
·         Para condensadores BYPASS no hace falta que sean polarizados.

 Para mas infromación visitar los siguientes enlaces:
Diseño de placa de circuito impreso (PCB)

 



domingo, 2 de octubre de 2016

Diseño Arduino y personalización de componentes


Semana del 26-30 de Septiembre:
Esta semana hemos hecho principalmente el esquemático de la placa de Arduino Nano en el Proteus 8, también hemos visto algo de teoría sobre la marcha, así que primero hare una explicación de todo lo hecho en Proteus y luego resumiré toda la teoría dada en la semana en un solo apartado al final.
Arduino Nano:
Para hacer nuestra propia placa arduino nano, nos guiábamos del esquemático oficial que proporcionaba la compañía Atmel en su página que es el siguiente:





Nosotros seguimos este esquema, de una manera bastante exhaustiva, sin embargo debíamos personalizar los componentes de acuerdo a nuestras necesidades ya que en algunos casos los que ofrecía este esquemático eran demasiado pequeños, por lo que los sustituimos por algunos un poco más grandes para poder realizar su soldadura posteriormente a la hora de montar la placa físicamente.
A continuación mostrare los pasos para personalizar un componente:
Lo primero de todo es coger un componente de la librería que sea parecido al que queramos y asegurarnos también de que el componente que queremos hacer tiene huella, para ello la buscamos en el layout.
Una vez que nos hemos asegurado de que tiene huella y tenemos un componente parecido al que queremos, lo primero que hacemos es sacarlo al esquemático y descomponerlo.








Al descomponerlo nos quedara algo así:

Pinchando en esa larga lista que ha salido podemos cambiar las características del bloque como el código y el coste entre otras cosas, si quisiéremos modificar el bloque, añadirle más pines, cambiarle de forma etc… seria en este modo cuando habría que hacerlo antes de convertirlo en dispositivo.

Cuando terminamos de hacer los cambios pinchamos en ‘Make a Device’ seleccionando todo el bloque en un recuadro.


Nos saldrá una pantalla como la siguiente donde pondremos, darle nombre al dispositivo, la referencia del prefijo* y más características sobre sus propiedades.


Si damos a siguiente nos aparecerá la siguiente pantalla donde deberemos introducir la huella que queramos (Package).


Pinchando en Add/edit nos llevara a la siguiente pantalla, donde podremos asignar una huella a nuestro dispositivo.

Si le damos a Add arriba, nos llevara a buscar la huella (Package) que ya previamente habíamos buscado, así que la seleccionamos y le damos a Assing Package(s) .
Esto nos llevara a la anterior imagen, donde pincharemos Next hasta llegar a la última en la que nos aparecerá donde queremos guardar nuestro dispositivo en que librería y subcategoría y de que tipo es. En nuestro caso la guardaremos siempre en nuestra librería personal en sub categoría personal, y el tipo depende de que dispositivo sea pondremos SMT** o None. También tendremos la opción de dar una breve descripción del dispositivo.
Con esto hemos visto con personalizar un dispositivo, para el cual teníamos una huella, ahora veremos cómo crear un dispositivo y una huella para él.
Para ello debemos entrar en la siguiente pantalla (Layout), y seleccionar el dispositivo que queramos personalizar en la tercera pestaña en la columna de la izquierda.


El proceso es similar al anterior, con la salvedad de que aquí no haremos un dispositivo (make a device), sino una huella (make a package), con lo que la guardaremos y se la podremos añadir al dispositivo que creemos en el esquemático.
*Referencias de dispositivos:
·        Condensadores: C
·        Microchips: U
·        Conectores: J
·        Resistencias: R
·        Diodos: D
·        Pulsadores: SW
·        Cristales: X
**SMT: Es la tecnología a la que hace referencia el SMD que son los dispositivos de montaje superficial.
Resumen Teoría:
-La impedancia de un seguidor de tensión teóricamente es infinita, en la realidad es del orden de entre 1M y 10 M.
-Componentes 1206 hace referencia al tamaño del componente.
-El Atmega 328 tiene un cristal interno de 16 Mhz aun que puede soportar como máximo uno de 20 MHz.
 -Para poner un oscilador externo seguir el siguiente esquema:


-ICSP: Técnica para programar el programa sin tener que sacar el chip, se basa en unos pines que se utilizan en un BUS de comunicaciones (SPI).
            Los pines son los siguientes:
                        -MISO: Maestro entrada, esclavo salida.
                        -MOSI: Maestro salida, esclavo entrada.
                        -SCK: Reloj del BUS SPI.
-También vimos algunas relaciones de distancias entre pulgadas y mm.
            40TH-1mm
            100TH-100 milésimas de pulgada
            1 pulgada (inch)-2.54cm
            100 milésimas de pulgada-2.54mm
            50 milésimas de pulgada-1.27 mm
-Nible: Es la mitad de un byte es decir 4 bits.
-Función de algunos pines:
VCCIO: Todos los registros de entrada y salidas van por ese pin.
            NC: Pin no conectado.
            AGND: Cloaca de todos los pines analógicos.
            DSR, DCD, CTS: Pines de la comunicación RS232.

-Cuanto más alta la frecuencia, más bajo el condensador para el BYPASS.