Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:ecd33165145b, committed 2019-04-19
- Comitter:
- nmirandal
- Date:
- Fri Apr 19 20:45:47 2019 +0000
- Parent:
- 1:8596494b7d9d
- Commit message:
- RTC and PID
Changed in this revision
diff -r 8596494b7d9d -r ecd33165145b ds3231.lib --- a/ds3231.lib Fri Apr 05 19:38:58 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/users/nmirandal/code/ds3231/#5166909a461b
diff -r 8596494b7d9d -r ecd33165145b ds3231_RTC.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ds3231_RTC.lib Fri Apr 19 20:45:47 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/nmirandal/code/ds3231/#5166909a461b
diff -r 8596494b7d9d -r ecd33165145b main.cpp --- a/main.cpp Fri Apr 05 19:38:58 2019 +0000 +++ b/main.cpp Fri Apr 19 20:45:47 2019 +0000 @@ -1,18 +1,33 @@ +/*************** + + +ESTE PROGRAMA PUEDE SER USADO PARA CONFIGURAR UN RELOJ DE TIEMPO REAL DS3231 O +PARA COFIGURAR UN CONTROL PID PARA UN CIRCUITO RCRC CONECTADO EN EL PIN PTE30. +EL PROGRAMA FUE DISEÑADO PARA APERAR CON UNA APLICACIÓN DE ANDROID CREADA EN +APP INVENTOR QUE PUEDE CONECTARSE CON LA TARJETA FRDM-KL25Z A TRAVÉZ DE UN +MÓDULO DE BLUETOOTH CONECTADO EN EL PUERTO SERIAL UART2. CUANDO EL CELILAR SE +CONECTA PARA CONFIGURAR EL CONTROL PID, LA TARJETA ENVÍA LAS MEDIDAS DEL VOLTAJE +DE SALIDA DEL CIRCUITO. TANTO EN EL MODO RTC COMO EN EL MODO PID, LOS DATOS +SE MUESTRAN EN UNA PANTALLA LDC. + +NEFER MIRANDA LLORENTE +PROGRAMA DE INGENIERÍA DE CONTROL +UNIVERSIDAD NACIONAL DE COLOMBIA - SEDE MEDELLÍN + + +***************/ + + + + #include "mbed.h" #include <stdio.h> -#include "ds3231.h" +#include "ds3231_RTC.h" #include "TextLCD.h" Serial master(USBTX,USBRX);// Tx, Rx Computador Serial GSM(PTE22,PTE23);// Tx, Rx Módulo de bluetooth -Ds3231 rtc(A4, A5); - - -/* -DigitalOut LedVerde(LED2); -DigitalOut LedRojo(LED1); -DigitalOut LedAzul(LED3); -*/ +Ds3231 rtc(A4, A5); // puerto I2C1 de la frdm-kl25z int vo, hb, lb; @@ -29,15 +44,15 @@ ds3231_calendar_t fecha= {AAAA,MM,DD,wd};//{años,mes,días,dia de semana} -AnalogIn input(PTB1); // voltage measurement -AnalogOut u_control(PTE30);// Input voltage for the circuit -DigitalOut LedVerde(LED2); +AnalogIn input(PTB1); // puerto para medir el voltaje del circuito +AnalogOut u_control(PTE30);// puerto a través del cual se aplica una entrada al circuito +DigitalOut LedVerde(LED2); // led indicador de estado del circuito -TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // rs, e, d4-d7 +TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // conexión ldc (rs, e, d4-d7) Timer k,t,rtc_t; -//########### Reads a incoming chain of characters ############################# +//## Esta rutina lee una cadena de caracteres disponible en el puerto serial GSM ###### void get_chain() { j=0; @@ -59,7 +74,7 @@ } } -//############### Removes all the data in the buffer ########################### +//###### Esta función limpia la variable chain ######## void reset_var() { for (int i=0; i<sizeof(chain); i++) { @@ -68,18 +83,20 @@ } -//########### This function configures the RTC ################################ +//#### Esta función configura el reloj de tiempo real cuando se recibe un nuevo +//#### dato de fecha y hora a través de bluetooth### void set_rtc() { ds3231_time_t hora = {HH, mm, ss, am_pm, 1}; ds3231_calendar_t fecha= {AAAA%100,MM,DD,wd}; - if(!rtc.set_calendar(fecha)) { + if(!rtc.set_calendar(fecha)) { // se ejcuta si la configuración de la fecha es exitosa + // se imprime en la terminal del pc la fecha y hora a la cual se configuró el RTC master.printf("\r\n\r\n Reloj Configurado el %d / %d / %d ",DD,MM,AAAA); - if(!rtc.set_time(hora)) { + if(!rtc.set_time(hora)) { // se ejcuta si la configuración de la hora es exitosa if(hora.am_pm)master.printf("a las %d:%d:%d PM\r\n\r\n\r\n",HH,mm,ss); else master.printf("a las %d:%d:%d AM\r\n\r\n\r\n",HH,mm,ss); } @@ -88,10 +105,13 @@ } -//############## This function processes the received data depending on what -//############## it's suppoused to be for ##################################### +/* La función request() se encarga de interpretar el dato que se ha recibido +a través del puerto serial GSM, este puede tener la función de configurar el +modulo RTC, configurar un control PID, activar o desactivar la señal de entrada +del circuito RCRC, o notificar si el celular se ha conectado o desconectado a +través de bluetooth. - +*/ void request() { lcd.cls(); @@ -150,7 +170,10 @@ } } -//############### This is a function which manages the incoming data ########### +/* +Esta función es una ISR para recibir datos a través del puerto serial GSM + +*/ void in_data() { @@ -168,7 +191,7 @@ -//########################################## Main starts here ################## + @@ -191,32 +214,15 @@ while(1) { - vo = input.read_u16(); - vo_hb=vo/256; //calculo la cifra mas significativa - vo_lb=vo-vo_hb*256; //calculo la cifra menos significativa + vo = input.read_u16();// medición del voltaje de salida del circuito RCRC + vo_hb=vo/256; + vo_lb=vo-vo_hb*256; GSM.putc(vo_hb); - GSM.putc(vo_hb); //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios - - /* - vo_lb=vo&0xFF; - vo_hb=vo>>8; - GSM.putc(vo_lb); - GSM.putc(vo_hb); + GSM.putc(vo_hb); // envío de los datos al celular por bluetooth - if(vo<256) { //debo generar dos casos a APP inventor solo me recibe hex asi: 0xhhhh (4 cifras) - GSM.putc(0); //si el numero es hasta 255 se le ponen dos ceros adelante a la secuencia de bits - GSM.putc(vo); //luego la cifra menos significativa - } - if(vo>255) { //pero si es mayor a 255 las cifras deben ser convertidas a un hex de dos bytes de la siguiente forma - vo_hb=vo/256; //calculo la cifra mas significativa - vo_lb=vo-vo_hb*256; //calculo la cifra menos significativa - GSM.putc(vo_hb); - GSM.putc(vo_hb); //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios - } - - */ - if(t.read()>T && PID) { - if(control=='N') { + if(t.read()>T && PID) { // PID indica que el celular se ha conectado por bluetooth + // en la pantalla de configuración del PID. + if(control=='N') { // si se recibió el comando para activar la acción de control, se ejecuta esta parte. e=sp-1.0*input; q0=Kp+Ki*T/2.0+Kd/T; @@ -243,14 +249,14 @@ t.reset(); t.start(); - } else if (t.read()>T && PID) { + } else if (t.read()>T && !PID) { u=0.0; LedVerde=1.0; - }// end for if(t.read()>T) + }// end for if(t.read()>T && PID) - if(rtc_t.read()>=1.0 && CLK) { + if(rtc_t.read()>=1.0 && CLK) {// se muestra la fecha y hora en el lcd se recibió el comando para leer el tiempo desde el RTC rtc.get_calendar(&fecha); rtc.get_time(&hora); @@ -281,7 +287,7 @@ rtc_t.start(); - } else if (rtc_t.read()>=0.1 && PID) { + } else if (rtc_t.read()>=0.1 && PID) { // se muestra el voltaje medido y el setpoint en el lcd si se recibió el comando de PID lcd.locate(0,0); lcd.printf("Voltaje: %.2f V",3.3*input.read()); @@ -290,8 +296,8 @@ rtc_t.stop(); rtc_t.reset(); rtc_t.start(); - } else if(rtc_t.read()>=1.0 && !PID && !CLK) { - // lcd.cls(); + } else if(rtc_t.read()>=1.0 && !PID && !CLK) { // si no se recibió ningún comando, no se hace nada. + }//end for if(rtc_t.read()>=1.0)