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.
Fork of Ticker_HelloWorld by
Revision 4:a60b811bfe1e, committed 2017-04-13
- Comitter:
- AdrianMA
- Date:
- Thu Apr 13 14:11:53 2017 +0000
- Parent:
- 3:5dc3a82c48f6
- Child:
- 5:8e7123e9b75b
- Commit message:
- Programa que implementa un cronometro a partir del multiplexado de 6 displays de 7 segmentos, utilizando el sistema de desarrollo NXP FRDM-KL46
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/constantes.h Thu Apr 13 14:11:53 2017 +0000 @@ -0,0 +1,13 @@ +# define SUBIND_INIC_HEX2CHAR 0 //Valor del subindice inicial para colocar el primer digito extraido en la cadena de caracteres +#define FALSO 0 //Bandera para condición logica falsa +#define VERDADERO 1 //Bandera para condición logica verdadera +#define MAX_CARACTERES 16 //Espacio reservado para la cadena de caracteres resultante de conversión de valores a cadena de caracteres +#define CARACTER_CERO '0' //Caracter "Cero" utilizado en codgo Ascii +#define SIGNO_MAGNITUD '-' //Caracter "signo menos" utilizado en codgo Ascii +#define DIGITOS_D7S_ANODO 10 //Numero de digitos contenido en la tabla de datos para un display tipo anodo comun +#define MUX_D7S 6 //Numero de displays a multiplexar +#define DECENAS_MS 9 //cuantificacion de ms para generar decenas de ms +#define MS2SEG 99 //Cantidad de decenas de ms para formar un segundo +#define SEG2MIN 59 //Cantidad de segundos para generar minutos +#define MIN 99 //Cantidad de minutos para reset del contador + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fnc_usuario.h Thu Apr 13 14:11:53 2017 +0000
@@ -0,0 +1,39 @@
+/******************************************************************************/
+/*------------------------------------------------------------------------------
+Función de usuario para separar de una variable tipo entera sus digitos que la
+integran
+
+*Parametros de entrada:
+-int número: variable a la que se le van a separar sus digitos
+-int *digito_a: variable apuntador(variable pasada por referencia) para almacenar
+el digito de las unidades separado de la variable número
+-int *digito_b: variable apuntador(variable pasada por referencia) para almacenar
+el digito de las decenas separado de la variable número
+
+*Parametro de salida: NINGUNO
+
+------------------------------------------------------------------------------*/
+void num2dig(int numero,int *digito_a,int *digito_b){//inicio de la función num2dig
+ int num;//variable para almacenamiento y manipulación de el valor numerico a convertir
+ int ant;//variable auxiliar para la conversión de datos
+ int dummy=0;
+ /*segmento de codigo no util para el trabajo, solo se incerta para eliminar warning*/
+ *digito_a=dummy;
+ *digito_b=dummy;
+ dummy=(*digito_a);
+ dummy=(*digito_b);
+ /*fin segmento de codigo no util para el trabajo*/
+
+ num=numero;//Asignación del valor de conversión para su manipulación del algoritmo
+ if(num>=0x0A){//inicio if-1 //Pregunta si el valor es mayor o igual a díez
+ ant=num; //Guardado del valor numerico para su posterior manipulación
+ num=num/0x0A; //División entre 0x0A, para conocer cuantas decenas contiene el número en cuestion
+ *digito_a=(ant-num*0x0A); //Almacenaje de las unidades, a partir de la eliminación de las decenas de la cantidad
+ *digito_b=num; //Almacenaje de las decenas del número
+ }//fin if-1
+ else{//inicio else-1 //Condición en caso de que el número a separar sea menor a 0x0A
+ *digito_a=num; //Almacenaje de las unidades del número a separar
+ *digito_b=0; //Almacenaje de la nulidad de decenas
+ }//fin else-1
+ }//fin de la función num2dig
+/******************************************************************************/
--- a/main.cpp Fri Jan 13 21:08:14 2017 +0000
+++ b/main.cpp Thu Apr 13 14:11:53 2017 +0000
@@ -1,35 +1,117 @@
-/* mbed Example Program
- * Copyright (c) 2006-2014 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "mbed.h"
-
-Ticker flipper;
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-
-void flip() {
- led2 = !led2;
-}
-
-int main() {
- led2 = 1;
- flipper.attach(&flip, 2.0); // the address of the function to be attached (flip) and the interval (2 seconds)
-
- // spin in a main loop. flipper will interrupt it to call flip
- while(1) {
- led1 = !led1;
- wait(0.2);
- }
-}
\ No newline at end of file
+/* mbed Program: Proyecto Cronometro mediante multiplexado de D7S */
+#include "mbed.h"//Libreria para elementos básicos de mbed-OS
+#include "constantes.h"//Libreria de cabecera para almacenamiento de constantes
+#include "fnc_usuario.h"//Libreria para declaración de funciones de usuario
+
+/******************************************************************************/
+//Declaración para la utilización de hardware del sistema
+Ticker imp_d7s; //Interrupción temporizada para impresión en D7S multiplexados
+Ticker temp_cronometro; //Interrupción temporizada para cuantificación del tiempo del sistema
+DigitalOut led1(PTD5); //TEstigo led Verde
+DigitalOut led2(PTE29); //Testigo Led Rojo
+DigitalIn sw_arranque(PTD4); //Entrada digital para iniciar la cuantificacion de tiempo del sistema
+DigitalIn sw_paro(PTD2); //Entrada digital para parar la cuantificación de tiempo del sistema
+DigitalIn sw_reset(PTA13); //Entrada digital para reseteo de variables del sistema
+BusOut pines_disp7S(PTA17, PTB9, PTA7,PTA6,PTA14,PTA16,PTA15,PTC16); //Pines reservados para la impresión de información en los segmentos de los display
+BusOut pines_transist(PTC9,PTC8,PTA5,PTA4,PTA12,PTD3); //pines reservados para el control de transistores para conmutar displays
+
+/******************************************************************************/
+//Variables utilizadas para la logica del sistma
+int contador_digitos; //Contador para la impresión de datos en los displays
+int contador_ms; //Contador para cuantificacion de milisegundos
+int contador_decms; //Contador para cuantificacion de decenas de milisegundos
+int contador_seg; //Contador para cuantificacion de segundos
+int contador_min; //Contador para cuantificacion de minutos
+int impresion_d7s[6]; //Vector para almacenar información de los digitos a imprimir en D7S
+bool band_arranque; //Bandera para arranque del sistema
+
+
+/******************************************************************************/
+//Tablas para control de grupos de pines, D7S y multiplexado
+int cod_disp7s[DIGITOS_D7S_ANODO]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //Codigo para vizualización de D7S de anodo comun
+int codigo_transist[MUX_D7S]={0x01,0x02,0x04,0x08,0x10,0x20}; //Tabla para despliegue del digito 0 al 5
+int codigo_transist_2[MUX_D7S]={0x20,0x10,0x08,0x04,0x02,0x01}; //Tabla para despliegue del digito 5 al 0
+
+
+/******************************************************************************/
+//Rutina de Atención a la Interrupción para realizar la impresión de datos en el multiplexado de los D7S
+void impres_d7s() {//inicio ISR para impresión de D7S
+ pines_disp7S=cod_disp7s[(impresion_d7s[contador_digitos])]; //Asignación de codigos para despliegue de datos en pines de segmentos de D7S
+ pines_transist=codigo_transist_2[contador_digitos]; //Asignación de codigo para la conmutación de D7S
+ contador_digitos--; //Contador decremental para variable de control de conmutación de D7S
+ if(contador_digitos<0) //Condición para numeros menores a cero, reset de variable contadora
+ contador_digitos=5; //Reset de variable contadora para inicio en D7S #5
+}//fin ISR para impresión de D7S
+
+
+/******************************************************************************/
+//Rutina de Atención a la Interrupción para la cuantificación del tiempo del sistema
+void conteo_tiempo(){//inicio ISR para cuantificación de tiempos
+ if(band_arranque==VERDADERO){ //Condición de arranque de la cuantificación del sistema
+ contador_ms++;} //Variable contadora para cuantificacion de milisegundos del sistema
+ led1 = !led1; //luz testigo para indicación de trabajo en el MCU
+
+}//fin ISR para cuantificación de tiempos
+
+/******************************************************************************/
+int main() {//inicio funcion principal
+/*----------------------------------------------------------------------------*/
+//Inicialización de variables y vinculacion de ISR a los servicios de interrupción
+ imp_d7s.attach(&impres_d7s, 0.001); //viculación de la función de interrupción a la ISR para la vinculación de la impresión de datos en el D/S
+ temp_cronometro.attach(&conteo_tiempo,0.001); //viculación de la función de interrupción a la ISR para la cuantificación de tiempo
+ contador_digitos=5; //Inicialización de la variable contadora para impresión de los displays
+ band_arranque=FALSO; //Inicialización de variable para el control de inicio de operación del sistema
+
+/*----------------------------------------------------------------------------*/
+//Inicio looop de trabajo iterativo
+
+ while(1) {//inicio loop de trabajo
+
+ if(sw_arranque==VERDADERO){//Inicio if-1 //Pregunta por el estado del boton arranque
+ band_arranque=VERDADERO; //Habilitación de la bandera de arranque del sistema
+ wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor
+ }//fin if-1
+
+ if(sw_paro==VERDADERO){//Inicio if-2 //Pregunta por el estado del boton paro
+ band_arranque=FALSO; //Deshabilitación de la bandera de arranque del sistema
+ wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor
+ }
+ if(sw_reset==VERDADERO){//Inicio if-3 //Pregunta por el estado del boton paro
+ band_arranque=FALSO; //Deshabilitación de la bandera de arranque del sistema
+ contador_ms=0; //Reset contador de milisegundos
+ contador_decms=0; //Reset contador de decenas de milisegundos
+ contador_seg=0; //Reset contador de segundos
+ contador_min=0; //Reset contador de minutos
+
+ for(int i=0;i<6;i++){ //Loop para reseteo de variable para impresion de información en D7S
+ impresion_d7s[i]=0; //Limpieza de dato para D7S
+ }
+ wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor
+ }//fin if-3
+
+ //Sección de cuantificación de decenas de milisegundo
+ if(contador_ms>DECENAS_MS){//inicio if-4 //condicion para el incremento de decenas de milisegundos
+ contador_decms++; //Incremento de variable contadora de decenas de milisegundos
+ num2dig(contador_decms,&impresion_d7s[0],&impresion_d7s[1]); //Transformación del contador de decenas de milisegundos a digitos y almacenaje para despliegue en D7S
+ contador_ms=0; //Reset contador de milisegundos
+ }//fin if-4
+ //Sección de cuantificación de segundos
+ if(contador_decms==MS2SEG){//inicio if-5 //condicion para el incremento de segundos
+ contador_seg++; //Incremento de variable contadora de segundos
+ num2dig(contador_seg,&impresion_d7s[2],&impresion_d7s[3]); //Transformación del contador de segundos a digitos y almacenaje para despliegue en D7S
+ contador_decms=0; //Reset contador de decenas de milisegundos
+ }//fin if-5
+ //Sección de cuantificación de minutos
+ if(contador_seg==SEG2MIN){//inicio if-6 //condicion para el incremento de minutos
+ contador_min++; //Incremento de variable contadora de minutos
+ num2dig(contador_min,&impresion_d7s[4],&impresion_d7s[5]); //Transformación del contador de minutos a digitos y almacenaje para despliegue en D7S
+ contador_seg=0; //Reset contador de decenas de segundos
+ }//fin if-6
+ //Candado para la cuantificación de minutos
+ if(contador_min==MIN){//inicio if-7 //Condicion para el reset de minutos
+ contador_min=0; //Reset de la variable contadora de minutos
+ }//fin if-7
+
+ }//fin loop de trabajo
+
+}//Fin función principal
\ No newline at end of file
