sábado, 25 de mayo de 2019

MICROCONTROLADORES

LABORATORIO N°11

Programación de Arduino




I.  COMPETENCIAS ESPECIFICAS DE LA SESIÓN:
  • Programar la tarjeta Arduino UNO utilizando el lenguaje gráfico y comparar con lenguaje de texto.
  • Recibir datos de la tarjeta arduino en el monitor serie.
  • Realizar programación básica utilizando el software mencionado.
II. MATERIALES Y EQUIPO:
  •  Arduino instalado. 
  • Tarjeta ARDUINO UNO
  • Componentes accesorios.
  • Guía de Laboratorio.
  • PC con Software
III. MARCO TEÓRICO:


Arduino Uno es una placa electrónica basada en el microcontrolador ATmega328. Cuenta con 14 entradas/salidas digitales, de las cuales 6 se pueden utilizar como salidas PWM (Modulación por ancho de pulsos) y otras 6 son entradas analógicas. Además, incluye un resonador cerámico de 16 MHz, un conector USB, un conector de alimentación, una cabecera ICSP y un botón de reseteado. La placa incluye todo lo necesario para que el microcontrolador haga su trabajo, basta conectarla a un ordenador con un cable USB o a la corriente eléctrica a través de un transformador.

Características técnicas de Arduino Uno r3:
  • Microcontrolador: ATmega328
  • Voltage: 5V
  • Voltage entrada (recomendado): 7-12V
  • Voltage entrada (limites): 6-20V
  • Digital I/O Pins: 14 (de los cuales 6 son salida PWM)
  • Entradas Analogicas: 6
  • DC Current per I/O Pin: 40 mA
  • DC Current parar 3.3V Pin: 50 mA
  • Flash Memory: 32 KB (ATmega328) de los cuales 0.5 KB son utilizados para el arranque
  • SRAM: 2 KB (ATmega328)
  • EEPROM: 1 KB (ATmega328)
  • Clock Speed: 16 MHz
Introducción general a una placa Arduino
Mirando a la placa desde la parte de arriba, este es el esquema de lo que puedes ver (los componentes de la placa con los que puedes interactuar en su uso normal están resaltados):
arduino_board


Empezando según las agujas del reloj:
  • Terminal de referencia analógica (naranja)
  • Tierra digital (verde claro)
  • Terminales digitales 2-13 (verde)
  • Terminales digitales 0-1/ E/S serie – TX/RX (verde oscuro) – Estos pines no se pueden utilizar como e/s digitales (digitalRead() y digitalWrite()) si estás utilizando comunicación serie (por ejemplo Serial.begin).
  • Botón de reinicio – S1 (azul oscuro)
  • Programador serie en circuito «In-circuit Serial Programmer» o «ICSP» (azul celeste).
  • Terminales de entrada analógica 0-5 (azul claro)
  • Terminales de alimentación y tierra (alimentación: naranja, tierras: naranja claro)
  • Entrada de alimentación externa (9-12VDC) – X1 (rosa)
  • Selector de alimentación externa o por USB (coloca un jumper en los dos pines mas cercanos de la alimentación que quieras) – SV1 (púrpura). En las versiones nuevas de Arduino la selección de alimentacion es automática por lo que puede que no tengas este selector.
  • USB (utilizado para subir programas a la placa y para comunicaciones serie entre la placa y el ordenador; puede utilizarse como alimentación de la placa) (amarillo).
Entradas y salidas digitales/analógicas

Un sistema electrónico es cualquier disposición de componentes electrónicos con un conjunto definido de entradas y salidas. Una placa Arduino, por tanto, puede pensarse de forma simplificada como un sistema que acepta información en forma de señal de entrada, desarrolla ciertas operaciones sobre ésta y luego produce señales de salida

En los sistemas electrónicos, una magnitud física variable se representa generalmente mediante una señal eléctrica que varía de manera tal que describe esa magnitud. Por lo general, se hace referencia a las señales continuas como señales analógicas, mientras que asociamos las señales discretas a señales digitales: el ejemplo más claro es el de las señales binarias, donde la señal sólo pueden tomar dos niveles, 0 o 1.

Arduino incorpora terminales digitales (señales discretas) pero de tal forma que tenemos un gran abanico de valores con los que trabajar (por ejemplo, 255 valores de luz en un fotosensor, siendo 0 ausencia de luz y 254 el máximo valor lumínico).

Imagen relacionada

Terminales Digitales

Las terminales digitales de una placa Arduino pueden ser utilizadas para entradas o salidas de propósito general a través de los comandos de programación pinMode(), digitalRead(), y digitalWrite(). Cada terminal tiene una resistencia pull-up que puede activarse o desactivarse utilizando digitalWrite() (con un valor de HIGH o LOW, respectivamente) cuando el pin esta configurado como entrada. La corriente máxima por salida es 40 mA.
  • Serial: 0 (RX) y 1 (TX). Utilizado para recibir (RX) y transmitir (TX) datos serie TTL.
  • Interruptores externos.
  • PWM: 3, 5, 6, 9, 10, y 11. Proporcionan salidas PWM de 8 bit con la función analogWrite(). En placas con ATmega8, las salidas PWM solo están disponibles en los pines 9, 10, y 11.
  • Reset BT: 7. (solo en Arduino BT) Conectado a la línea de reset del módulo bluetooth.
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estas terminales soportan comunicación SPI.
  • LED: 13. En el Diacemila y el LilyPad hay un led en placa conectado al pin digital 13.

Pines Analógicos



Los pines de entrada analógicos soportan conversiones analógico-digital (ADC) de 10 bit utilizando la función analogRead(). Las entradas analógicas pueden ser también usadas como pines digitales: entrada analógica 0 como pin digital 14 hasta la entrada analógica 5 como pin digital 19. Las entradas analógicas 6 y 7 (presentes en el Mini y el BT) no pueden ser utilizadas como pines digitales.

  • I2C: 4 (SDA) y 5 (SCL). Soportan comunicaciones I2C (TWI) utilizando la librería Wire (documentación en la página web de Wiring).

Pines de alimentación

  • VIN: Es el voltaje de entrada a la placa Arduino cuando se está utilizando una fuente de alimentación externa.
  • 5V : La alimentación regulada utilizada para alimentar el microcontrolador y otros componentes de la placa. Esta puede venir de VIN a través de un regulador en placa o ser proporcionada por USB u otra fuente regulada de 5V.
  • 3V3: Una fuente de 3.3 voltios generada por el chip FTDI de la placa.
  • GND: Pines de tierra.
IV DESARROLLO EN CLASE:



const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin1 = 5;
const int analogOutPin2 = 6;
const int analogOutPin3 = 9;
const int analogOutPin4 = 10;// Analog output pin that the LED is attached to

float sensorValue = 0;        // value read from the pot
float outputValue = 0; 
float Voltaje = 0;
int estado;

float posicion1 = 0.25*1023;
float posicion2 = 0.50*1023;
float posicion3 = 0.75*1023;
float posicion4 = 1023;

float intensidad1 = 0.10*1023;
float intensidad2 = 0.30*1023;
float intensidad3 = 0.70*1023;
float intensidad4 = 1023;

void setup() {
  Serial.begin(9600);
}

void loop() {
  
  sensorValue = analogRead(analogInPin);
  Voltaje = sensorValue*25/1023;

  if (sensorValue >=0 && sensorValue <= posicion1) {
    estado = 1;
  }
  if (sensorValue > posicion1 && sensorValue <= posicion2) {
    estado = 2;
  }
  if (sensorValue > posicion2 && sensorValue <= posicion3) {
    estado = 3;
  }
  if (sensorValue > posicion3 && sensorValue <= posicion4) {
    estado = 4;
  }
switch (estado) {
 case 1 :
Serial.println("10%")
analogWrite(analogOutPin1,intensidad1);
analogWrite(analogOutPin2,0);
analogWrite(analogOutPin3,0);
analogWrite(analogOutPin4,0);
 break; 

 case 2 :
Serial.println("30%")
analogWrite(analogOutPin2,intensidad2);
analogWrite(analogOutPin1,0);
analogWrite(analogOutPin3,0);
analogWrite(analogOutPin4,0);
 break; 

 case 3 :
Serial.println("70%")
analogWrite(analogOutPin3,intensidad3);
analogWrite(analogOutPin1,0);
analogWrite(analogOutPin2,0);
analogWrite(analogOutPin4,0);
 break; 

 case 4 :
Serial.println("100%")
analogWrite(analogOutPin4,intensidad4);
analogWrite(analogOutPin3,0);
analogWrite(analogOutPin2,0);
analogWrite(analogOutPin1,0);
 break; 
}
  delay (100);
  Serial.println("Voltaje: ");
  Serial.println(Voltaje);
  delay (1000);
  

  }

VÍDEO


CONCLUSIONES 
  • Se concluye que en el monitor serie se pudo mostrar tanto el valor que incrementaba y disminuía como los mensajes destinados a mostrarse en ciertos valores que se indicaron en la programación realizada, para ello se utilizó las funciones Serial.print y Serial.println las cuales nos permiten escribir caracteres ASCII en el puerto Serial.
  • Se concluye que la función de Arduino pinMode permite configurar a cada pin, de forma individual, como entrada o como salida; en la programación realizada se le configuró como entrada para recepcionar el cambio de señal ocasionada al presionar el pulsador
OBSERVACIONES

  • Se observo que para variar el rango de 1023 a 255 se utilizo el comando map para variar o cambiar de rango de brillo de la Luz .
  • Se observó que para lograr el establecer la intensidad de brillo en el porcentaje indicado también fue necesario proponer los datos que muestren la posición del potenciómetro.
  • Se observo que tenemos que ir por otros recurso si o hay diferentes formas de programar para llegar ala solución 
BIBLIOGRÁFIA

http://www.iescamp.es/miarduino/2016/01/21/placa-arduino-uno/
https://www.google.com/search?q=entradas+de+arduino+digitales+y+analogicos&rlz=1C1CHBF_esPE837PE837&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjz6-3rv7niAhVEw1kKHY0EAjwQ_AUIDygB&biw=1366&bih=625#imgrc=ANqvGHREcRWrkM:
https://www.xataka.com/basics/que-arduino-como-funciona-que-puedes-hacer-uno

MICROCONTROLADORES

LABORATORIO 10

Programación de Arduino


I.  COMPETENCIAS ESPECIFICAS DE LA SESIÓN:

  • Programar la tarjeta Arduino UNO utilizando el lenguaje gráfico y comparar con lenguaje de texto.
  • Recibir datos de la tarjeta arduino en el monitor serie.
  • Realizar programación básica utilizando el software mencionado.
II. MATERIALES Y EQUIPO:
  •  Arduino instalado. 
  • Tarjeta ARDUINO UNO
  • Componentes accesorios.
  • Guía de Laboratorio.
  • PC con Software
III. MARCO TEÓRICO:

   ARDUINO: 

Arduino es una compañía de fuente abierta y hardware abierto así como un proyecto y comunidad internacional que diseña y manufactura placas de desarrollo de hardware para construir dispositivos digitales y dispositivos interactivos que puedan detectar y controlar objetos del mundo real. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Los productos que vende la compañía son distribuidos como Hardware y Software Libre, bajo la Licencia Pública General de GNU (GPL) y la Licencia Pública General Reducida de GNU (LGPL),​permitiendo la manufactura de las placas Arduino y distribución del software por cualquier individuo. Las placas Arduino están disponibles comercialmente en forma de placas ensambladas o también en forma de kits hazlo tu mismo.

Los diseños de las placas Arduino usan diversos microcontroladores y microprocesadores. Generalmente el hardware consiste de un microcontrolador Atmel AVR, conectado bajo la configuración de "sistema mínimo" sobre una placa de circuito impreso a la que se le pueden conectar placas de expansión (shields) a través de la disposición de los puertos de entrada y salida presentes en la placa seleccionada. Las shields complementan la funcionalidad del modelo de placa empleada, agregando circuiteria, sensores y módulos de comunicación externos a la placa original. La mayoría de las placas Arduino pueden ser energizadas por un puerto USB o un puerto barrel Jack de 2.5mm. La mayoría de las placas Arduino pueden ser programadas a través del puerto serie que incorporan haciendo uso del Bootloader que traen programado por defecto. El software de Arduino consiste de dos elementos: un entorno de desarrollo (IDE) (basado en el entorno de processing y en la estructura del lenguaje de programación Wiring), y en el cargador de arranque (bootloader, por su traducción al inglés) que es ejecutado de forma automática dentro del microcontrolador en cuanto este se enciende. Las placas Arduino se programan mediante un computador, usando comunicación serie.

Arduino Uno - R3.jpg
      HARDWARE:


Arduino es un hardware libre. Los diseños de referencia de hardware se distribuyen bajo licencia Creative Commons Attribution Share-Alike 2.5 y están disponibles en el sitio web de Arduino. Los esquemáticos y archivos de montaje de componentes (PCBs) para algunas versiones de placas también están disponibles.



Aunque los diseños de hardware y software están disponibles bajo licencias de copyleft, los desarrolladores han solicitado que el nombre Arduino sea exclusivo del producto oficial y no se use para trabajos derivados sin antes solicitar permiso. El documento de política oficial sobre el uso del nombre Arduino enfatiza que el proyecto está abierto a incorporar el trabajo de otros en el producto oficial.​Varios productos compatibles con Arduino lanzados comercialmente han evitado incluir el nombre del proyecto Arduino en sus dispositivos al emplear nombres que terminan en «-duino».



La mayoría de las placas Arduino constan de un microcontrolador AVR Atmel-8 bits (ATmega8, ATmega168, ATmega328, ATmega1280, ATmega2560), cada microncontrolador consta de diversas cantidades de memoria flash, pines y funciones. Las placas utilizan pines/cabezales hembra de una o dos hileras que facilitan las conexiones e incorporación en otros circuitos.​



 Características de un Microcontrolador:

  • Velocidad del reloj u oscilador
  • Tamaño de palabra
  • Memoria: SRAM, Flash, EEPROM, ROM, etc..
  • I/O Digitales
  • Entradas Analógicas
  • Salidas analógicas (PWM)
  • DAC (Digital to Analog Converter)
  • ADC (Analog to Digital Converter)
  • Buses
  • UART
  • Otras comunicaciones.
IV. DESARROLLO EN CLASE 


Incremente un número en 150 unidades cada vez que se presione un pulsador y decremento de  dicho número en 50 unidades cada vez que se presione otro pulsador. Si el valor del número supera 1000 unidades, mostrar en el monitor serie la primera línea: “valor máximo”. Si el valor llega a ser menor o igual a 10, mostrar “valor mínimo”.



int Valvule = 0;  
 int Cuenta = 0; 
void setup() {
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  if (digitalRead(2)==HIGH){

     Valvule = Valvule +150;
     Serial.println(Valvule);
     delay(300);
  }

  if ( Valvule == 1050){
    
     Serial.println("valor maximo");
     delay(900);
     digitalWrite(13,HIGH);
     digitalWrite(12,LOW);  
  }

   if (digitalRead(3)==HIGH){

     Valvule = Valvule - 50;
     Serial.println(Valvule);
     delay(300);
     Cuenta = Cuenta + 1;
   }
   
if ( Valvule == 0 && Cuenta > 1){
    
     Serial.println("valor minimo");
     digitalWrite(13,LOW);
     digitalWrite(12,HIGH);  
     Cuenta= 0;
 }
}



VÍDEO 






CONCLUSIONES 
  • Se concluye que en el siguiente laboratorio de programación con arduino, se necesito declarar una variable mas para poder realizar el ejerció ya que  nos ayuda para establecer una condición  importante para que se pare de contar.
  • Se concluye que el Monitor serial nos ayuda a observar los valores de salida de nuestra programación, es decir no va mostrar cada cambio que le hagamos a nuestro programa si hacemos que disminuya una variable o si aumenta pero es porque declaramos las funciones Serial.print o Serial.println. 
  • Se concluye que si es una entrada entradas y salidas digitales las tenemos de declarar y para eso Arduino nos ayuda con el con el comando pinMode y después tienes que escribir si es salida o entrada ( INPUT  o OUTPUT ).
     
OBSERVACIONES
  • Se observó, que la variable que agregamos Cuenta fue necesario para poder que salga en el Monitor Serial " valor mínimo" ya se que la utilizamos en una condición. 
  • Se observó, que en el monitor serie se muestra el mensaje de valor máximo respectivamente hasta que se presione el pulsador que desciende el valor, como posible solución se puede mencionar que fue necesario trabajar con los estados en que se encuentren los pines donde se conectó los pulsadores.
BIBLIOGRÁFICA 

http://arduino.cl/que-es-arduino/
https://es.wikipedia.org/wiki/Arduino
https://www.xataka.com/basics/que-arduino-como-funciona-que-puedes-hacer-uno
.

MICROCONTROLADORES

LABORATORIO 09
Programación de Arduino utilizando MBlock

I.  COMPETENCIAS ESPECIFICAS DE LA SESIÓN:
  • Programar la tarjeta Arduino UNO utilizando el lenguaje gráfico y comparar con lenguaje de texto.
  • Recibir datos de la tarjeta arduino en el monitor serie.
  • Realizar programación básica utilizando el software mencionado.
II. MATERIALES Y EQUIPO:
  •  Arduino instalado. 
  • Tarjeta ARDUINO UNO
  • Componentes accesorios.
  • Guía de Laboratorio.
  • PC con Software
III. MARCO TEÓRICO:

¿QUE ES ARDUINO ?

Arduino es una plataforma de desarrollo basada en una placa electrónica de hardware libre que incorpora un microcontrolador re-programable y una serie de pines hembra, los que permiten establecer conexiones entre el microcontrolador y los diferentes sensores y actuadores de una manera muy sencilla (principalmente con cables dupont).

Modelo del Microcontrolador:

El microcontrolador que lleva la placa Arduino UNO es el modelo ATmega328P de la marca Atmel. La «P» del final significa que este chip incorpora la tecnología «Picopower» (propietaria de Atmel), la cual permite un consumo eléctrico ligeramente menor comparándolo con el modelo equivalente sin «Picopower», ATmega328 (sin la «P»). Aunque el ATmega328P pueda trabajar a un voltaje menor y consumir menos corriente que el ATmega328, ambos modelos son funcionalmente idénticos, es decir, pueden ser remplazados el uno por el otro.


Al igual que ocurre con el resto de microcontroladores usados en otras placas Arduino, el ATmega328P tiene una arquitectura de tipo AVR, arquitectura desarrollada por Atmel y en cierta medida «competencia» de otras arquitecturas como por ejemplo la PIC del fabricante Microchip. Mas concretamente, el ATmega328P pertenece a la subfamilia de microcontroladores «megaAVR». Otras subfamilias de la arquitectura AVR son la «tinyAVR» (cuyos microcontroladores son mas limitados y se identifica con el nombre ATtiny) y la «XMEGA»(cuyos microcontroladores son mas capaces y se identifican con el nombre de ATxmega).

¿QUE ES MBLOCK?

es un entorno gráfico de programación por bloque para Arduino, que permite introducir de forma sencilla la programación y robótica en el aula. Se compone de 5 partes principalmente:

1. Grupo de instrucciones clasificadas por colores en las siguientes categorías:

  • Movimiento: Conjunto de instrucciones relacionadas con el control de los pines de la tarjeta de Arduino, así como el control del movimiento de cualquier personaje del escenario.
  • Apariencia: Instrucciones orientadas a modificar el aspecto de los personajes de nuestra aplicación. Para el caso de Arduino, es un conjunto de instrucciones que apenas se utiliza.
  • Sonido: Conjunto de instrucciones relacionadas con la elaboración de aplicaciones musicales, emitiendo sonidos y notas musicales.
  • Lápiz: Scratch nos ofrece la posibilidad de que los personajes dejen un rastro durante sus movimientos por el escenario como si arrastrase un lápiz durante su trayectoria.
  • Control: Las instrucciones incluídas en esta sección son impresindibles para crear la lógica de nuestros programas. Incluyen condicionales, bucles y llamadas de procedimientos.
    2. Instrucciones de programación: Las instrucciones de cada grupo corresponden a instrucciones de programación.
    3. Editor: Es la parte principal donde estructuramos y programamos nuestro programa.
  • Programas: Se compone de todas las instrucciones que hace funcionar el código que programemos.
  • Disfraces: Cada objeto puede tener diferentes apariencias o disfraces para utilizar a lo largo de nuestro programa.
  • Sonido: También es posible añadir o grabar sonidos y guardarlos para futuros usos.

3. Escenario o ventana principal: Es el resultado de nuestro programa.
4. Objetos y sprites: Distinguimos principalmente los objetos de tipo Arduino y Sprites.

  • Los objetos de tipo arduino son aquellos que interactuán con Arduino.
  • Los sprites son similares al entorno de scratch y no interactúan con Arduino.


DESARROLLO EN CLASE :

Primero creamos El disfraz para poder ayudar nos a entender nuestro programación que va ser de un semáforo y van a variar esto colores según lo correspondiente .




Después hemos programado en mBlock y donde la programación es en bloques pero esta se puede pasar a lenguaje arduino 

jueves, 25 de abril de 2019

MICRO CONTROLADORES

LABORATORIO NR°7
 Manejo del Timer y las Interrupciones 


I. COMPETENCIAS ESPECIFICAS: 
  • Conocer el funcionamiento y la configuración de las interrupciones.
  • Conocer el funcionamiento y la configuración del Timer cero.
  • Aplicar estos conocimientos en la realización de un cronometro.
II.MARCO TEÓRICO:

  TIMER: 

El timer es un objeto de programación tiene como funcionalidad ejecutar una función o bloque de código cada cierto tiempo. Esto tiene muchas aplicaciones ya que no depende de la acción por parte de usuario para ejecutar cierto código. Por ejemplo podemos hacer que nuestro programa cheque una tabla de una base de datos y muestre la información actualizada en pantalla cada minuto. También se puede hacer que cuente tiempo.

También es un dispositivo, con frecuencia programable, que permite medir el tiempo. Cuando trascurre el tiempo configurado se hace saltar una alarma o alguna otra función a modo de advertencia, al igual es un elemento que ofrece la posibilidad de usar cualquier dispositivo eléctrico de forma programada, activarlo y desactivarlo a las horas que queremos, sin necesidad de estar presentes. Es una buena forma de ahorrar con un aparato como un termo eléctrico, por ejemplo.
TAREA A RESOLVER :
  1. Al presionar pulsador en D0, incrementar SEGUNDOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).
  2. Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
  3. Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.

PROGRAMACIÓN :

#include <16f877a.h>             // Incluimos archivo con PIC a utilizar
#device adc=8                    // Utilizamos 8 bits de RESOLUCIÓN de lectura 
#use delay (clock=20M)           // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles

#define LCD_ENABLE_PIN        PIN_D3   //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN            PIN_D2   //pantalla LCD
#define LCD_RW_PIN            PIN_A0   
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>                 // Incluimos librería para manejar Pantalla LCD

int centesimas=0,segundos=0,minutos=0;
void BIP();
int encendido =0;

#int_TIMER0                      // FUNCION DE INTERRUPCION POR
void TIMER(VOID)                 // DESBORDAMIENTO DEL TIMER 0
{
 ++centesimas;                 // incrementar una centésima
   if (centesimas>99)
      {
      --segundos;                // si llegamos a 100, incrementar un segundo
      centesimas=0;
      }
   if (segundos==-1)
      {
      --minutos;                 // si llegamos a 60, incrementar un minuto
      segundos=59;
      }
   if (segundos==0)              // si llegamos a 3 minutos, hacer alguna acción
      {
      segundos=0;
      disable_interrupts (GLOBAL);          //habilita interrupcion de timer0
      // agregar cualquier otra acción necesaria.
      }
   
   set_timer0 (61);              //reinicar cuenta desde 61

void main ()
{
   lcd_init () ;                                                                        // Inicializamos pantalla LCD
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);   //configuracion del timer0
   set_timer0 (61);                                                                // interrupción cada centésima
   enable_interrupts (INT_TIMER0);                                  //habilita interrupcion de timer0
   disable_interrupts (GLOBAL);                 
   
   printf (lcd_putc, "\f***CRONOMETRO***") ;              // Mandamos mensaje por única vez
   
   WHILE (true)
   {
      lcd_gotoxy(2,2);
      Printf(lcd_putc,"Tiempo %02u:%02u",minutos, segundos);
      
     IF (!input(PIN_D0))        
      {
         delay_ms(500); 
         minutos= ++ minutos;
         segundos=0;
         disable_interrupts (GLOBAL);
      }
       IF (!input(PIN_D1))       
      {
         delay_ms(500); 
         segundos= --segundos;
         enable_interrupts (GLOBAL);
         segundos=0;    
         encendido =1;
      }
     
       IF (minutos==0 && segundos==0 && encendido==1 )
   { 
      minutos=0;
      segundos=0;
      encendido=0;
      disable_interrupts (GLOBAL);
      }
      
    }
}

VÍDEO 

CONCLUSIONES 


  • Se concluye que los Timer para los PICs tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones.
  • El registro TMR0 del timer0 en el PIC está formado por 8 bits por lo que se puede contar desde 0 hasta 255.
  • El circuito utilizado para el ejemplo del uso del Timer como contador.



MICRO CONTROLADORES

LABORATORIO NR°6
 Lectura de Entradas  Analógicas y Sensores de temperatura 



I. COMPETENCIA ESPECIFICA DE LA SESIÓN:
  • Lecturas analógicas de un canal del PIC.
  • Configuración de un Sensor de Temperatura.
  • Lectura analógica en una pantalla LCD.

ll. MARCO TEÓRICO :

Sensores de temperatura:


Los sensores de temperatura son dispositivos que transforman los cambios de temperatura en cambios en señales eléctricas que son procesados por equipo eléctrico o electrónico. Hay tres tipos de sensores de temperatura, los termistores, los RTD y los termopares.
El sensor de temperatura, típica mente suele estar formado por el elemento sensor, de cualquiera de los tipos anteriores, la vaina que lo envuelve y que está rellena de un material muy conductor de la temperatura, para que los cambios se transmitan rápidamente al elemento sensor y del cable al que se conectarán el equipo electrónico.

Termistor: El termistor está basado en que el comportamiento de la resistencia de los semiconductores es variable en función de la temperatura. Existen los termistores tipo NTC y los termistores tipo PTC. En los primeros, al aumentar la temperatura, disminuye la resistencia. En los PTC, al aumentar la temperatura, aumenta la resistencia.
.
RTD: Un RTD es un sensor de temperatura basado en la variación de la resistencia de un conductor con la temperatura. Los metales empleados normalmente como RTD son platino, cobre, níquel y molibdeno.


Temopar: El termopar, también llamado termocupla y que recibe este nombre por estar formado por dos metales, es un instrumento de medida cuyo principio de funcionamiento es el efecto termoceléctrico.Un material termoeléctrico permite transformar directamente el calor en electricidad, o bien generar frío cuando se le aplica una corriente eléctrica.El termopar genera una tensión que está en función de la temperatura que se está aplicando al sensor. Midiendo con un voltímetro la tensión generada, conoceremos la temperatura.
Resultado de imagen para sensores de temperaturaImagen relacionada

 Como funcionamiento un sensor de temperatura  ?

Un sensor es un objeto capaz de detectar magnitudes físicas o químicas llamadas variables de instrumentación, que pueden ser la intensidad lumínica, la temperatura, distancia, aceleración, etc. El sensor de temperatura empleado más habitualmente es el sensor termopolar. Está formado por mecanismos muy sencillos constituidos por dos materiales metálicos de diferente naturaleza unidos mediante uniones llamadas unión fría y unión caliente. El grado de temperatura que detectan estas uniones genera una diferencia de potencial estrechamente dependiente de la naturaleza de los materiales. El sensor térmico transforma esta diferencia de potencial en una señal eléctrica.


Que son entradas Analógicas ?


Una señal eléctrica analógica es aquella en la que los valores de la tensión o voltaje varían constantemente y pueden tomar cualquier valor. En el caso de la corriente alterna, la señal analógica incrementa su valor con signo eléctrico positivo (+) durante medio ciclo y disminuye a continuación con signo eléctrico negativo (–) en el medio ciclo siguiente.

Un sistema de control (como un microcontrolador) no tiene capacidad alguna para trabajar con señales analógicas, de modo que necesita convertir las señales analógicas en señales digitales para poder trabajar con ellas.
La señal digital obtenida de una analógica tiene dos propiedades fundamentales:
  • Valores. Que valor en voltios define 0 y 1. En nuestro caso es tecnología TTL (0– 5V).

  • Resolución analógica: nº de bits que usamos para representar con una notación digital .
En el caso de un arduino Uno, el valor de 0 voltios analógico es expresado en digital como B0000000000 (0) y el valor de 5V analógico es expresado en digital como B1111111111 (1023). Por lo tanto todo valor analógico intermedio es expresado con un valor entre 0 y 1023, es decir, sumo 1 en binario cada 4,883 mV.

Resultado de imagen para que son entradas analogicas
lcd_gotoxy(): Nos da la posicion de acceso al LCD. por ejemplo: lcd_gotoxy(1,1), esto nos indica la primera posición de la primera linea y si fuera (1,2) seria primera posición de la segunda linea. 

#DEVICE: permite definir al PIC con el que se realizara.

setup_adc(ADC_CLOCK_INTERNAL):  modo para la configuración del modula AD correspondiente a los 7:6 del ADCON0.  

setup_adc_ports(AN0): Es el valor de las entradas analógicas correspondiente a los bit 3-0 del ADCON1. 


TAREA A REALIZAR 

1.Realice los cambios sugeridos a continuación y muestre sus resultados
  • Donde dice “#device adc=8” cambie por “#device adc=10”; convierta la variable “lectura” en entero de 16 bits y la línea printf cambie “%4u” por “%4lu”. ¿Cuál es el cambio mostrado en la pantalla LCD? ¿por qué?.
  • Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable “lectura” a variable tipo float y configure su forma de mostrarse en el LCD. Luego, en la función While(true), añada la instrucción “lectura = lectura / 204.6”. Cambie las instrucciones para que en la pantalla del LCD aparezca algo así “Tension: 3.456 v”.
  • Finalmente agregue una condición IF para que si el valor de voltaje supera 4.5 voltios, mostrar el mensaje “WARNING” en la primera línea del LCD.

#include <16f877a.h>             // Incluimos archivo con PIC a utilizar
#device adc=10                    // Utilizamos 8 bits de RESOLUCION de lectura 
#use delay (clock=20M)           // Indicamos al compilador que trabajaremos a 20Mhz
#fuses HS, NOPROTECT, NOWDT      // Configuración básica de los fusibles

#define LCD_ENABLE_PIN        PIN_D3   //Definimos los pines a ser utilizados por la
#define LCD_RS_PIN            PIN_D2   //pantalla LCD
#define LCD_RW_PIN            PIN_A0   
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>                 //
float lectura=0;

void main ()
{
   lcd_init () ;                       // Inicializamos pantalla LCD
   printf (lcd_putc, "\fLECTURA ANALOGICA") ;  // Mandamos mensaje por única vez

   //Configuración del puerto analógico
   setup_adc_ports (AN0_AN1_AN3);
   setup_adc (ADC_CLOCK_INTERNAL);
   set_adc_channel (3); //lectura del canal analogico 3
   delay_us (20);
   
   WHILE (true)
   {
      lectura = read_adc (); 
      lectura = lectura / 204.6;  // Leemos Canal A0
      delay_ms (20) ;               // esperamos para una correcta lectura
      lcd_gotoxy(1,2);              // ubicamos cursos en LCD
      printf (lcd_putc, " Tension : %1.1f", lectura); // imprimimos valor
      delay_ms(100);  
      IF (lectura > 4.5)
      {
       lcd_gotoxy(1,1);
       printf(lcd_putc,"      WARNING     ");// esperamos
      }
      ELSE 
      {
       lcd_gotoxy(1,1);
       printf(lcd_putc," LECTURA ANALOGICA ");// esperamos
      }
      
    }
}


VÍDEO DE EXPLICACIÓN: 



CONCLUSIONES:
  • Se concluyo que nos servir de mucho las entradas analógicas del PIC 16F877A, las cuales convertimos a digitales para poder leerlas en una pantalla LCD.
  • Se concluyo que se puede simular un sensor de temperatura con un potenciómetro conectado a una fuente de 5 voltios.
  • Se concluyo que cada tipo de variables debemos utilizar según sea nuestra necesidad.
  • Se conoció el funcionamiento de un Display LCD en la tarjeta PIC16F877A.
OBSERVACIONES: 
  • Se observo que el convertidor analógico digital (adc) puede trabajar a una resolución de 8 bits, con la cual puede contarse de 0 hasta 255 y con una resolución de 10 bits, de 0 a 1023.
  • Se observo señal analógica de entrada la obtuvimos a partir de un potenció metro colocado en configuración divisor de tensión de 0 a 5 voltios.
  • Tambien se oBservo que setup_adc_ports(x,x) es donde nuestra variables analógicas toman valor  correspondiente a los 3-0 bits. 
  • El LCD es un dispositivo electrónico que sirve para mostrar información que deseamos ver.