Mostrando las entradas con la etiqueta Microcontroladores. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Microcontroladores. Mostrar todas las entradas

lunes, 27 de junio de 2022

Comunicación inalámbrica con módulos de rf de 433mhz ejemplo | Comunicación serial PIC 16F628A rs232 y pic c compiler| Sensor de humedad de suelo con microcontrolador | Pluviometro | Sensores de nivel de agua aplicación

 Explicación de este proyecto (proyectos con pic 16f628a):


En el presente trabajo se muestra un ejemplo de aplicación de la comunicación serial entre 2 pics o microcontroladores haciendo uso también de los módulos de radiofrecuencia 433 MHz, para una comunicación inalámbrica uart o rs232. Lo que consiste esta aplicación es un sensor o detector de lluvia, sensor de humedad de suelo. Se hace uso también del programa pic c o ccs compiler.


Lo que cabe destacar es la simpleza del sensor principal o transmisor, ya que detecta la humedad mediante un cambio de estado en uno de los pines del microcontrolador PIC 16F628A. Se hace uso principalmente de unos electrodos o puntas, que se pueden introducir en la tierra para alertar si está húmeda, o usarlos solamente para la detección de caídas de gotas de agua, se detecta también el cambio de nivel de agua en algún recipiente. Una vez que se ha detectado lo antes mencionado, se envía una notificación de manera inalámbrica hacia el dispositivo receptor a través de un radio-enlace o comunicación inalámbrica mediante radiofrecuencia de 433 MHz, se uso de unos módulos (transmisor y receptor) muy simples que hoy en día son muy conocidos.


Para los módulos de radiofrecuencia 433MHz, en el transmisor solo hay que identifica tres pines VCC, GND y DATA, se le a soldado una antena externa al mismo, es muy simple y tiene una longitud de 17 cm correspondiente a la cuarta parte de la longitud de onda. En el módulo rf receptor sin embargo no fue fácil encontrar un pin disponible para soldar una antena externa, sin embargo funciona de manera adecuada sin esta.


En lo que respecta al dispositivo receptor, al recibir la notificación mediante el módulo rf, esta es detectada mediante otro microcontrolador, pic 16f628, y este a su vez nos da una alerta visual y auditiva, al encender y apagar un led de color azul, y al accionar un relé que a su vez activa un timbre o buzzer externo, que puede requerir una mayor potencia para ser accionado.


En la primera prueba, se introduce el sensor en tierra seca y en tierra mojada, la conductividad a través de la tierra mojada es muy buena. Luego se fijan los electrodos en dentro de un recipiente, el cual es llenado poco a poco con agua, hasta que esta toca los electrodos y de la misma forma se envía una alerta hacia el dispositivo receptor. Por ultimo se comprueba el funcionamiento como detector de lluvia.


Los datos a destacar son el bajo consumo por parte del módulo transmisor, ya que solo usa dos baterías tipo botón de 3 voltios, logrando un alcance aproximado de 25 metros a la redonda, claro esto con algo de obstáculos u obstrucción para la señal inalámbrica.


Acá abajo se dejan adjuntos los archivos hexadecimales en CCS compiler, para cada uno de los microcontroladores respectivos. Descárgalos aquí.


A continuación también verán los respectivos diagramas:


Comunicación inalámbrica rs232 con pic c
Dispositivo receptor RX





Comunicación inalámbrica rs232 con pic c
Dispositivo transmisor TX


En el siguiente video también veras con mas detalle todos los materiales, las pruebas y funcionamiento del respectivo proyecto.




viernes, 26 de noviembre de 2021

Nueva placa de desarrollo Arduino Uno mini de edición limitada | Arduino uno características técnicas




En una publicación del 24 de noviembre del 2021 en el blog de Arduino, se menciona el lanzamiento al mercado de una nueva versión de lo que es una de las más icónicas placas de desarrollo o de hardware libre, el Arduino Uno, esto como señalan, en conmemoración de sus ya más de 10 millones de unidades vendidas, desde su lanzamiento en el año 2010. La nueva edición del dispositivo en sí misma no cambia mucho en lo que respecta a funcionalidad, sin embargo, el cambio más notable es su reducido tamaño. Mencionan también que no se trata de un dispositivo que es solamente funcional, sino que también puede ser coleccionado, es por eso que llama la atención su simpático acabado con colores dorado y negro, y así también la elegancia de su empaque y en su interior también se puede encontrar una tarjeta que tiene las firmas de los mimos creadores o fundadores del proyecto Arduino, el énfasis como señalan es para tratar de llegar a los coleccionistas y seguidores más serios, aunque igualmente está disponible para todos, pero se trata de una edición limitada, por lo cual también dicen que pueden hacer los pedidos de las unidades por adelantado.

Otra diferencia del Arduino Uno normal, es el puerto USB ya que ahora al reducir su tamaño se ha adaptado un puerto USB tipo C, ya que esto también podría ser muy útil, y así podríamos reciclar algunos cables de este tipo que ya no estemos usando, o los tengamos de sobra.

Volviendo al tamaño, este es aproximadamente la cuarta parte del que tiene el Arduino Uno Rev 3, las dimensiones del Arduino Uno es de 68.6 × 53.4 y las del mini son 34.2 × 26.7.

Otro aspecto que personalmente llama la atención es la modificación del conector principal de la energía, ya que ahora se dispone solamente de dos orificios, los mismos que vienen indicados como VIN y GND.




En fin, sé que parecerá algo reiterativo, pero mostraré las características técnicas principales de Arduino uno mini que son las mismas del Arduino Uno Rev 3:

- Voltaje de entrada: de 6 a 12 voltios

- Voltaje de operación del módulo: 5 voltios

- Microcontroladores que están en la placa: ATmega328P (proceso principal), ATmega16U2 (USB-serial)

- Entrada USB (Arduino mini): USB-C

- Características de proceso principal: 2KB de memoria RAM, 32 KB de memoria flash, 8 bit, 16 MHz y 1 KB de memoria EEPROM. 

- Corriente por cada pin: 20 mA (40 mA máxima)

- Comunicación: UART, I2C, SPI

- Temperatura recomendada de operación: de -40° C hasta 85°C

- Pines, entradas y salidas: 14 I/O digitales, 6 entradas analógicas, 6 pines para PWM.

- 4 Leds indicadores incorporados: RX, TX, L, ON

- Dimensiones (Arduino mini): 26.7 milímetros de ancho, 34.2  milímetros de largo

- Peso estimado (Arduino mini): 8.05 gramos

- Consumo de energía: de 55 a 500 mAh


Otro aspecto notable es la sustitución del típico microcontrolador ATmega 328 P por uno SMD, con lo cual logran reducir el tamaño de la placa, pero se tiene la desventaja que si este se daña o se quema será más complicado sustituirlo. Aunque la verdad ya muchos productos de Arduino tienen ya este montaje SMD de los microcontroladores.

Otra pequeña desventaja del nuevo producto desde mi forma de ver es el precio, ya que este ronda los 45 dólares comprando directamente al fabricante, y por ejemplo el Arduino uno Rev 3 ronda los 19.55 $, es la misma funcionalidad pero con el precio más elevado, pero para coleccionistas podría tener un gran valor sentimental sin importar el precio. 


Referencias (podrán ver con más detalle las características en los siguientes links): 

https://blog.arduino.cc/2021/11/24/introducing-the-arduino-uno-mini-limited-edition-pre-orders-now-open/

https://store-usa.arduino.cc/products/uno-mini-le

martes, 16 de noviembre de 2021

Interrupciones con PIC 16F628A fáciles | Proyectos con PIC 16F628A | Interrupción externa PIC RB0/int | Interrupciones PIC C compiler | Luces led intermitente a pila | Secuencia de leds con PIC 16F628A




Presentamos un proyecto el cual hace uso de un microcontrolador pequeño, 16F628A, y que además solamente funciona a pilas, y es muy práctico de implementar y ocupa poco espacio. Se pone énfasis sobre todo en el uso de las interrupciones externas por RB0, mediante el programa CCS o PIC C Compiler. Más concretamente lo que consiste este proyecto, es en un circuito de luces led intermitentes o también conocido como flasher o circuito de destello, la función que cumplen esta clase de luces intermitentes principalmente, es la de servir como distractores o disuasivos para hacer pensar que existe una alarma activada, y en verdad esto sí ocurre con los vehículos que tienen alarmas, pero se lo puede usar también en una casa, y encenderlo en la noche y ponerlo cerca de una ventana para que sea visible, y así de alguna forma hacer pensar a personas que quieren irrumpir en nuestro hogar, que hay una alarma activa. Otro uso que se les puede dar es el de indicadores visibles, sobre todo cuando vamos en bicicleta por la noche y está obscuro, con lo cuál cualquier otra persona que va en bicicleta, o que esté desplazándose en otro vehículo, o que simplemente esté caminando hacia nosotros, se de cuenta de nuestra presencia. Si se desea se puede crear una secuencia específica y acordar esto con alguna otra persona para identificarse mutuamente fácilmente, que se yo, a manera de juego, o simplemente como una pequeña herramienta de aviso en cubierto, en fin. 

Una interrupción lo que hace es interrumpir un programa que está en ejecución, o que puede ser tomado en cuenta como principal, para poner en funcionamiento un segundo programa, ya que los microcontroladores se basan en esto para poder ejecutar diferentes programas, es decir el microcontrolador como tal no puede ejecutar varias procesos en paralelo o al mismo tiempo, tiene que ocurrir una interrupción para poder cambiar de programa o proceso. Así mismo hay diferentes formas en que se producen estas interrupciones, y por ende se las activa mediante diferentes sentencias o comandos en el código que se graba en el microcontrolador. Tales interrupciones pueden ser internas o externas. Las internas se dan por cambios en procesos internos del microcontrolador como en la memoria, los temporizadores, el CPU, las externas se dan por cambios externos, y estos cambios son detectados mediante los pines del microcontrolador, pero cada pin o grupos de pines atenderán diferentes tipos de interrupciones en específico, se puede ver también el datasheet de cada tipo de microcontrolador para tener una idea. 

En el siguiente vídeo podrán ver con más detalle su implementación, los materiales y el código o programa que se cargará en el microcontrolador, para generar la secuencia de las luces led.



Del vídeo anterior lo que podemos resumir, es que se hace uso de las interrupciones externas mediante el pin RB0, y lo que hace esta interrupción es un cambio de secuencia, y así mismo luego de haberse activada la segunda secuencia mediante la interrupción, se puede retornar a la primera secuencia mediante el accionamiento del interruptor. Pero retornar al programa inicial después de la interrupción pueda que no sea tan fácil como parece, para retornar al programa principal hay que poner las sentencias adecuadas, ya que como en otros proyectos consultados, una vez que se interrumpe el programa principal y se ejecuta la interrupción más de una vez, para ejecutar más de un programa secundario, simplemente no se retorna al programa principal, y simplemente la interrupción se queda funcionando entre los programas secundarios. Por tal motivo siempre es importante tratar de implementar los prototipos de manera física y comprobar que el funcionamiento es el mismo que en la simulación.

Todos los archivos adjuntos para la implementación de este pequeño proyecto están en el siguiente enlace:

Archivo hexadecimal y simulación (Aquí) 👈


En fin, se trata de un proyecto muy simple, que pretende usar las interrupciones con el fin más práctico posible, aplicado a situaciones más reales y de uso más cotidiano.

Otro uso que se les puede dar a esta clase de circuitos de luces led es el de una simple decoración, y si se desea personalizar o cambiar la secuencia ya establecida en este proyecto, usarlos en tiendas, negocios, o en nuestra sala como luces navideñas, etc. Poner luces personalizadas también puede ser una forma de realzar la presentación de un determinado sitio, o tratar de llamar más la atención.

Muchas personas también piden aprender realizar esta clase de proyectos sin el uso de circuitos integrados, por tal motivo en una siguiente publicación se realizará un proyecto similar.

viernes, 5 de noviembre de 2021

Como colocar el PIC en el quemador | ¿Cómo grabar un PIC en pickit2? | ¿Cómo se graba un microcontrolador PIC cualquiera ? | Como grabar un PIC 16F877A | Como grabar un PIC 16F628A


¿Cómo se graba un microcontrolador PIC cualquiera ?


Los microcontroladores PIC son sin lugar a dudas, uno de los primeros dispositivos que usábamos al momento de adentrarnos en este fascinante mundo de la programación y la electrónica, en nuestros inicios tal vez ya sea cursando alguna materia de electrónica digital o microcontroladores en la secundaria, en algún instituto, o en la universidad, o por afición propia, etc. Lo cierto es que aunque son unos dispositivos podría decirse básicos, hay mucha gente que los sigue usando o programando, aunque hoy en día ya es más común tener a la mano un  Arduino o una Raspberry, o el ESP32, por citar algunos de los dispositivos más modernos, pero vuelvo a recordar se los sigue usando, y se envían tareas o proyectos que aún hacen uso de estos dispositivos. Desde mi punto de vista una ventaja de los PIC frente al Arduino común y corriente, puede ser el consumo de energía, ya que podría rondar los micro watts en modo activo, y los nano watts en modo de bajo consumo (solamente el microcontrolador), y además que para proyectos muy básicos como secuencias de leds, control muy simple y automático de relés, o proyectos de control o de electrónica que no requieren mucho procesamiento de información y espacio físico, basta y sobra usar un pequeño microcontrolador ya sea de la serie 16F, o para algo un poco más complejo un 18F, etc. 

Por tal motivo y por el uso que se les sigue dando a los microcontroladores PIC, es muy importante aprender a programarlos de la manera correcta, o mejor dicho, grabar de la manera adecuada el archivo hexadecimal en la memoria del mismo, hay que aprender a conectar de manera adecuada sus patas o pines, con los pines respectivos del grabador, ya que a diferencia de un Arduino, este último es más sencillo de grabar, ya que este tiene la facilidad de ya tener incorporado un terminal USB, y solo se lo conecta al computador por medio de un cable USB, sin recurrir a un grabador externo.

En el siguiente video se muestra el proceso para poder grabar un microcontrolador PIC, este proceso se lo puede usar para toda la gama de estos microcontroladores, empezando por los de gama baja y media la serie 10F, 12F, 16F, 18F hasta los más complejos como son los dsPIC.




Del anterior video se puede observar que se usó un grabador de tipo genérico, aunque la verdad se puede hacer este mismo proceso, usando un grabador original. También se usó como ejemplo un PIC 16F877A y un PIC 16F628A, sin embargo y volviendo a aclarar se puede aplicar este mismo proceso para todo tipo de microcontrolador PIC. Lo que se hace básicamente es colocar los pines de manera externa, para eso conectamos los pines respectivos del microcontrolador a los pines del grabador como se observa en el video. La manera más fácil de hacerlo es colocar las patas del microcontrolador a los zócalos que vienen por defecto en el grabador, pero esto es válido solo para los PICs que tienen 40 pines o patas. En ese caso nos valemos de otros terminales y nos toca conectar estos terminales de manera externa y usando cables. El microcontrolador para este caso se lo colocó en un protoboard, y aquí se conectan o se vinculan los pines del microcontrolador con los del quemador.

Es muy importante realizar este tipo de conexiones que se muestran en el video, debido a que si se tiene un microcontrolador con mayor número de pines, o menor que el número de ranuras disponibles en el zócalo que tiene por defecto el quemador, pueden llegar a ser afectados cualquiera de los dos, o el microcontrolador o el quemador, pero en algunos casos es el mismo programa Pickit el que nos informa que la conexión está mal hecha o que simplemente no reconoce el microcontrolador que está conectado al quemador. En otras ocasiones pueda que una mala conexión, ni siquiera genere aviso previo mediante el programa, sino que simplemente se termine quemando algo, o tal vez dañando incluso el terminal USB del computador.

Hay que tener en cuenta también el estado del microcontrolador, ya que bien podemos pensar que esta mal hecha la conexión, y el problema podría ser un microcontrolador defectuoso, por eso hay que compararlo con otro que está en buen estado. Además un microcontrolador en mal estado pueda que termine perjudicando también al quemador de alguna forma.

Algo más que puedo añadir, es que debemos verificar que nuestro computador reconozca de manera adecuada todos los dispositivos USB que a ella se conecten, esta puede ser también una de las razones por la que a veces no es detectado correctamente nuestro quemador, o peor aún lo detecta pero en cambio el programa Pickit da un aviso de no reconocer correctamente el microcontrolador siempre. Entonces siempre es bueno verificar el estándar USB que se está usando, ya sea por ejemplo el 2.0 o 3.0, y que todos los dispositivos sean compatibles en base a este estándar. Además hay que verificar que los drivers de USB funcionen correctamente, que estén habilitados de manera adecuada los terminales USB para que la computadora los reconozca, y habilitar los respectivos puertos COM de manera correcta para el respectivo terminal USB.


En los siguientes enlaces podrás ver proyectos haciendo uso del pic 16f628a, haz clic sobre ellos:

- Proyectos con pic 16f628a (interrupción)  👈

- Proyectos con pic 16f628a (sensor de humedad)  👈

viernes, 11 de octubre de 2019

Simulación en Proteus I2C y glcd (sensor de luz)

Pequeño proyecto de Semáforo empleando I2C en Proteus-PICC


Se tiene como ejercicio planteado implementar un circuito, en el que se aplique la comunicación I2C, mediante algún dispositivo que cumpla el papel de esclavo y que sirva para realizar la comunicación I2C, como maestro se tiene al pic 18F4550 y como esclavo a un sensor de luz I2C.

Se procede a simular el circuito en Proteus antes de implementarlo físicamente, el circuito a implementar se refiere a unos semáforos que se accionan de acuerdo a un sensor de luz de comunicación serial I2C, el circuito se mostrará a continuación:



Semáforo i2c en Proteus y Picc 1
Fig1. Simulación del circuito I2C en Proteus


                     
Se ve 6 focos conectados al pic 18F4550, tres están conectados a los pines A0, A1 y A2, y los otros tres están conectaos a los pines C5, C6 y C7,se tiene un elemento para comunicación serial I2C que vendría a representar al sensor de luz que se implementará más adelante en el circuito físico. Se tiene también una pantalla GLCD, para verificar el encendido y apagado del semáforo.

Posteriormente se procede a crear el código para este problema planteado,  en el programa PICC, para generar el código hexadecimal que será cargado al microcontrolador, este código se detallará más adelante. Luego que se carga el código en el pic18F4550, se procede a correr la simulación, vemos que el GLCD se enciende, se ve también una pequeña ventana en la esquina superior izquierda, la misma que indica la transferencia de información, por medio de la comunicación I2C.



Semáforo i2c en Proteus y Picc 2
Fig2. Mostrando el inicio de la comunicación I2C, y funcionamiento GLCD.



Después de pulsar el botón BOT1, hasta que se cumpla condición 1000L que aparece en a pantalla GLCD,  los semáforos empiezan a funcionar, el motivo por el que se colocó BOT1, fue para imitar el funcionamiento del sensor de luz I2C, ya que el elemento I2Cque aparece en la simulación, no se comporta igual que un sensor de luz, es decir no es accionado por luz, y por eso fue necesario usar el botón BOT1. El semáforo de la izquierda empieza en rojo, y el semáforo de la derecha empieza en verde.


                                                                                                                                                  
Semáforo i2c en Proteus y Picc 3
Fig3. Primera secuencia de los semáforos




Luego se ve en el semáforo del a derecha que este cambia a color amarillo después de un instante de tiempo, mientras que el semáforo de la izquierda permanece en rojo.



Semáforo i2c en Proteus y Picc 4
Fig4. Segunda secuencia de los semáforos



Después de un pequeño instante de tiempo   el semáforo de la izquierda cambia a verde, y el de la derecha cambia a rojo y se repite el ciclo de nuevo entre los dos semáforos.




Semáforo i2c en Proteus y Picc 5
Fig5. Última secuencia de los semáforos



El código del programa creado en PICC, para resolver el ejercicio planteado se muestra a continuación:

#include <18F4550.h>
#device adc=8

#FUSES NOWDT,WDT128, XT,NOPROTECT,NOBROWNOUT                    //No Watch Dog Timer

#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12                    //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4                  //System Clock by 4
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES ICPRT

#use delay(clock=4M)
#use i2c(Master,Fast,sda=PIN_B0,scl=PIN_B1)


#include <GLCD1.C>

   

#include <BH1750.c>

#use i2c(Master,Fast,sda=PIN_B0,scl=PIN_B1)

int16  set_point=50, luminosidad=0;
char texto1[]="sensor luz i2c ", texto2[]="prender semaforo", texto_sp[8], texto_tp[8];

void main()
{
   port_b_pullups(TRUE);
   setup_adc_ports(AN0_TO_AN1|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_ccp1(CCP_PWM_FULL_BRIDGE|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
 
   output_low(PIN_C1);
 
   GLCD_init(1);     //Inicializo el GLCD, encendido.
   GLCD_fillScreen(0);        //Limpio la pantalla
 
   GLCD_rect(5,5,123,59,0,1);
   glcd_text57(7,10,texto1,1,1);
 
 
   glcd_text57(20,20,texto2,1,1);
   sprintf(texto_sp,"%lu L",set_point);
   glcd_text57(55,32,texto_sp,1,1); 
 
   while(1)
   {
    //Lectura del sensor 
      luminosidad = (get_lux_value(cont_H_res_mode1,100));
   
   
      if (luminosidad > 1000) luminosidad = 1000;
 
      while (luminosidad<=set_point) // si es menor q el setpoint envia encender las luces
      {
         
   output_a(0b00000001);
   output_c(0b00100000);delay_ms(9000);
   if (input(PIN_E0)==1){break;}
 
   output_a(0b00000001);
   output_c(0b01000000);delay_ms(3000);
   if (input(PIN_E0)==1){break;}
 
   output_a(0b00000100);
   output_c(0b10000000); delay_ms(9000);
    if (input(PIN_E0)==1){break;}
 
   output_a(0b00000010);
   output_c(0b10000000); delay_ms(3000);
   if (input(PIN_E0)==1){break;}
   
      }
   
      if (input(PIN_E0)==1)
      {
         output_low(PIN_C1);
        output_low(PIN_C2);
        output_low(PIN_C4);
        glcd_text57(55,32,texto_sp,1,0);
         set_point=set_point+50;
       
       
         if (set_point>1000) set_point=0;
         sprintf(texto_sp,"%lu L",set_point);
         glcd_text57(55,32,texto_sp,1,1);

      }
      //GLCD_rect(80,45,115,55,1,0); //borro dato anterior de la glcd
   
      output_low(PIN_C0);
        output_low(PIN_C2);
        output_low(PIN_C4);
   
      glcd_text57(20,45,texto_tp,1,0);
      sprintf(texto_tp,"%lu L",luminosidad); //Paso de entero a string
      glcd_text57(20,45,texto_tp,1,1);
      delay_ms(50);
   }
}


Mira también, da clic sobre los siguientes enlaces: