Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Files at this revision

API Documentation at this revision

Comitter:
Yo_Robot
Date:
Sat Mar 24 17:37:20 2012 +0000
Parent:
2:a1b556d78a7f
Child:
4:552beeda4722
Commit message:
Programa para probar diferentes configuraciones del PTO. v1.0

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
setup.cpp Show annotated file Show diff for this revision Revisions of this file
setup.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Mar 24 04:40:21 2012 +0000
+++ b/main.cpp	Sat Mar 24 17:37:20 2012 +0000
@@ -1,33 +1,34 @@
-// El siguiente código sirve de ejemplo para 
-// establecer un tren de impulsos y controlar
-// su frecuencia.
- 
-#include "mbed.h"
-#include "setup.h"
-
-Serial     pc( USBTX, USBRX );
-DigitalOut myled( LED1 );
-
-void Setup_PTO_Timer2();
-void ISR_Serial();
-
-uint32_t PRESCALER_STEP;  //Steps for the preescaler
-
-int main() {
-    
-
-    pc.printf( "Teclee 'w' para aumentar, 's' para disminuir, 'z' cambia los pasos " );
-    PRESCALER_STEP = 50UL;
-    //The default prescaler will be 0.05 sec
-
-    Setup_PTO_Timer2();
-    pc.attach( &ISR_Serial );
-    
-    uint32_t period = ( uint32_t LPC_TIM2->PR );
-    pc.printf( "\Period = %d", period );
-    
-    while(1) {
-   
-    
-     }
+// El siguiente código sirve de ejemplo para 
+// establecer un tren de impulsos y controlar
+// su frecuencia.
+ 
+#include "mbed.h"
+#include "setup.h"
+
+Serial     pc( USBTX, USBRX );
+
+void Setup_PTO_Timer2();
+void ISR_Serial();
+
+int main() {
+    
+
+    pc.printf( "\n Ingrese un numero entero seguido de un comando\n luego presione enter por ejemplo: 500-p  " );
+    pc.printf( "\n Comandos:" );
+    pc.printf( "\n p = para cambiara el prescaler por el numero ingresado" );
+    pc.printf( "\n m = para cambiara el valor de MR2 por el numero ingresado:" );
+    pc.printf( "\n n = para cambiara el valor de MR2 por el numero ingresado:" );
+    pc.printf( "\n a = Inicia el timer, no importa el numero" );
+    pc.printf( "\n s = Detiene el timer, no importa el numero" );
+    
+    Setup_PTO_Timer2();
+    pc.attach( &ISR_Serial );
+
+    uint32_t prescaler = (uint32_t ) LPC_TIM2->PR ;
+    pc.printf( "\n\nPreescaler Actual = %d\n\n", prescaler );
+
+    while(1) {
+   
+    
+     }
 }
\ No newline at end of file
--- a/setup.cpp	Sat Mar 24 04:40:21 2012 +0000
+++ b/setup.cpp	Sat Mar 24 17:37:20 2012 +0000
@@ -1,108 +1,110 @@
-/// Codigo Fuente para configurar al 
-
-#include "setup.h"
-#include "mbed.h"
-
-
-// Esta variable global determina
-// los incrementos del Preescaler
-extern uint32_t PRESCALER_STEP; 
-
-// Salida Serial de mbed
-extern Serial pc;
-
-
-/** @brief: Esta función configura al Timer2
- *  para que las salidas p5 y p6 del mbed
- *  se alternen cada vez que se iguala al
- *  registro MR2 y MR3.
- */
-void Setup_PTO_Timer2()
-{
-	// Encender Timer2 (PCONP[22])
-    LPC_SC->PCONP |= 1 << 22; 
-
-    // Resetear y parar el Timer
-    LPC_TIM2->TCR  = 0x2; 
-    LPC_TIM2->CTCR = 0x0; 
-
-    // Establecer el Preescaler inicial 0.5 seg
-    LPC_TIM2->PR = 100;
-
-    // Calcular el periodo 
-    uint32_t periodo = ( SystemCoreClock / 4000 ); 
-
-	// Establecer los Registros de Coincidencia
-	// ( Match Register )
-    LPC_TIM2->MR2 = periodo;
-    LPC_TIM2->MR3 = periodo * 2;
-    
-    LPC_TIM2->MCR |= 1 << 10;    // Resetear Timer en MR3
-    
-    LPC_TIM2->EMR |= 15UL << 8;  // Alternar Pin MAT2.2 
-                                //      y MAT2.3
-
-    LPC_PINCON->PINSEL0 |= 15UL << 16;  //Activar  MAT2.2 
-                                       // y MAT2.3 como salidas
-
-    // Arrancer el Timer 2
-    LPC_TIM2->TCR = 1;
-
-}
-
-
-/** @brief: Esta es la rutina que maneja las interrupciones
- *  seriales, al recibir un caracter.
- */
-void ISR_Serial()
-{
-    char c = pc.getc();
-
-    if( c == 'w')
-       setPeriodUp();
-    else if( c == 's')
-       setPeriodDown();
-    
-    else if( c == 'z')
-    {
-        float newStep;
-        pc.printf("\nIntroducir nuevo paso: ");
-        pc.scanf( "%d", &newStep );
-        setPeriodStep( newStep );
-    }
-
-}
-
-
-/** @brief: Esta Funcion incrementará el preescaler
- *  del timer en un paso.
- */
-void setPeriodUp()
-{
-	// Es muy dícil llegar a un límite superior
-	// de 4294967295 para los 32bit del preescaler
-	// Pero quizás haga falta chequear el
-
-	LPC_TIM2->PR += PRESCALER_STEP; 
-}
-
-
-/** @brief: Esta Funcion decrementará el preescaler
- *  del timer en un paso.
- */
-void setPeriodDown()
-{
-	uint32_t prescaler = (uint32_t ) LPC_TIM2->PR ;
-
-	if( prescaler > PRESCALER_STEP )
-	   LPC_TIM2->PR -= PRESCALER_STEP;
-}
-
-
-/** @brief: Esta Funcion Cambiara los pasos en los que
- *  se aumenta o disminuye el Preescaler.
- */
-void setPeriodStep( uint32_t newStep )
-{
-	PRESCALER_STEP = newStep;
+/// Codigo Fuente para configurar al 
+
+#include "setup.h"
+#include "mbed.h"
+
+
+// Esta variable global determina
+// los incrementos del Preescaler
+extern uint32_t PRESCALER_STEP; 
+
+// Salida Serial de mbed
+extern Serial pc;
+
+
+/** @brief: Esta función configura al Timer2
+ *  para que las salidas p5 y p6 del mbed
+ *  se alternen cada vez que se iguala al
+ *  registro MR2 y MR3.
+ */
+void Setup_PTO_Timer2()
+{
+    // Encender Timer2 (PCONP[22])
+    LPC_SC->PCONP |= 1 << 22; 
+
+    // Resetear y parar el Timer
+    LPC_TIM2->TCR  = 0x2; 
+    LPC_TIM2->CTCR = 0x0; 
+
+    // Establecer el Preescaler inicial 0.5 seg
+    LPC_TIM2->PR = 100;
+
+    // Calcular el periodo 
+    uint32_t periodo = ( SystemCoreClock / 4000 ); 
+
+    // Establecer los Registros de Coincidencia
+    // ( Match Register )
+    LPC_TIM2->MR2 = periodo;
+    LPC_TIM2->MR3 = periodo * 2;
+    
+    LPC_TIM2->MCR |= 1 << 10;    // Resetear Timer en MR3
+    
+    LPC_TIM2->EMR |= 15UL << 8;  // Alternar Pin MAT2.2 
+                                //      y MAT2.3
+
+    LPC_PINCON->PINSEL0 |= 15UL << 16;  //Activar  MAT2.2 
+                                       // y MAT2.3 como salidas
+
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 1;
+
+}
+
+
+/** @brief: Esta es la rutina que maneja las interrupciones
+ *  seriales, al recibir un caracter.
+ */
+void ISR_Serial()
+{
+    int newValue;
+    char command;
+
+    pc.scanf( "%d-%c", &newValue, &command ) ;
+    pc.printf("\n %d-%c \n", newValue, command );
+
+    if( command == 'p')
+       setPrescaler( newValue );
+    else if( command == 'm')
+        setMR2( newValue );
+    else if( command == 'n')
+        setMR3( newValue );
+    else if( command == 'a')
+        startTimer2();
+    else if( command == 's')
+        stopTimer2();
+
+
+}
+
+
+/** @brief: Esta Funcion cambia el preescaler
+ *  directamente
+ */
+void setPrescaler( int newValue)
+{
+    LPC_TIM2->PR = newValue; 
+}
+
+
+void setMR2( int newValue )
+{
+    LPC_TIM2->MR2 = newValue;
+}
+
+
+void setMR3( int newValue )
+{
+    LPC_TIM2->MR3 = newValue;
+}
+
+void startTimer2()
+{
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 1;
+}
+
+void stopTimer2()
+{
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 0x2;
 }
\ No newline at end of file
--- a/setup.h	Sat Mar 24 04:40:21 2012 +0000
+++ b/setup.h	Sat Mar 24 17:37:20 2012 +0000
@@ -7,9 +7,10 @@
 void Setup_PTO_Timer2();
 void ISR_Serial();
 
-void setPeriodUp();
-void setPeriodDown();
-void setPeriodStep( uint32_t newStep );
-
+void setPrescaler( int newValue );
+void setMR2( int newValue );
+void setMR3( int newValue );
+void stopTimer2();
+void startTimer2();
 
 #endif
\ No newline at end of file