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

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Committer:
Yo_Robot
Date:
Sat Mar 24 17:37:20 2012 +0000
Revision:
3:8d5a9e3cd680
Parent:
2:a1b556d78a7f
Child:
4:552beeda4722
Programa para probar diferentes configuraciones del PTO. v1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yo_Robot 3:8d5a9e3cd680 1 /// Codigo Fuente para configurar al
Yo_Robot 3:8d5a9e3cd680 2
Yo_Robot 3:8d5a9e3cd680 3 #include "setup.h"
Yo_Robot 3:8d5a9e3cd680 4 #include "mbed.h"
Yo_Robot 3:8d5a9e3cd680 5
Yo_Robot 3:8d5a9e3cd680 6
Yo_Robot 3:8d5a9e3cd680 7 // Esta variable global determina
Yo_Robot 3:8d5a9e3cd680 8 // los incrementos del Preescaler
Yo_Robot 3:8d5a9e3cd680 9 extern uint32_t PRESCALER_STEP;
Yo_Robot 3:8d5a9e3cd680 10
Yo_Robot 3:8d5a9e3cd680 11 // Salida Serial de mbed
Yo_Robot 3:8d5a9e3cd680 12 extern Serial pc;
Yo_Robot 3:8d5a9e3cd680 13
Yo_Robot 3:8d5a9e3cd680 14
Yo_Robot 3:8d5a9e3cd680 15 /** @brief: Esta función configura al Timer2
Yo_Robot 3:8d5a9e3cd680 16 * para que las salidas p5 y p6 del mbed
Yo_Robot 3:8d5a9e3cd680 17 * se alternen cada vez que se iguala al
Yo_Robot 3:8d5a9e3cd680 18 * registro MR2 y MR3.
Yo_Robot 3:8d5a9e3cd680 19 */
Yo_Robot 3:8d5a9e3cd680 20 void Setup_PTO_Timer2()
Yo_Robot 3:8d5a9e3cd680 21 {
Yo_Robot 3:8d5a9e3cd680 22 // Encender Timer2 (PCONP[22])
Yo_Robot 3:8d5a9e3cd680 23 LPC_SC->PCONP |= 1 << 22;
Yo_Robot 3:8d5a9e3cd680 24
Yo_Robot 3:8d5a9e3cd680 25 // Resetear y parar el Timer
Yo_Robot 3:8d5a9e3cd680 26 LPC_TIM2->TCR = 0x2;
Yo_Robot 3:8d5a9e3cd680 27 LPC_TIM2->CTCR = 0x0;
Yo_Robot 3:8d5a9e3cd680 28
Yo_Robot 3:8d5a9e3cd680 29 // Establecer el Preescaler inicial 0.5 seg
Yo_Robot 3:8d5a9e3cd680 30 LPC_TIM2->PR = 100;
Yo_Robot 3:8d5a9e3cd680 31
Yo_Robot 3:8d5a9e3cd680 32 // Calcular el periodo
Yo_Robot 3:8d5a9e3cd680 33 uint32_t periodo = ( SystemCoreClock / 4000 );
Yo_Robot 3:8d5a9e3cd680 34
Yo_Robot 3:8d5a9e3cd680 35 // Establecer los Registros de Coincidencia
Yo_Robot 3:8d5a9e3cd680 36 // ( Match Register )
Yo_Robot 3:8d5a9e3cd680 37 LPC_TIM2->MR2 = periodo;
Yo_Robot 3:8d5a9e3cd680 38 LPC_TIM2->MR3 = periodo * 2;
Yo_Robot 3:8d5a9e3cd680 39
Yo_Robot 3:8d5a9e3cd680 40 LPC_TIM2->MCR |= 1 << 10; // Resetear Timer en MR3
Yo_Robot 3:8d5a9e3cd680 41
Yo_Robot 3:8d5a9e3cd680 42 LPC_TIM2->EMR |= 15UL << 8; // Alternar Pin MAT2.2
Yo_Robot 3:8d5a9e3cd680 43 // y MAT2.3
Yo_Robot 3:8d5a9e3cd680 44
Yo_Robot 3:8d5a9e3cd680 45 LPC_PINCON->PINSEL0 |= 15UL << 16; //Activar MAT2.2
Yo_Robot 3:8d5a9e3cd680 46 // y MAT2.3 como salidas
Yo_Robot 3:8d5a9e3cd680 47
Yo_Robot 3:8d5a9e3cd680 48 // Arrancer el Timer 2
Yo_Robot 3:8d5a9e3cd680 49 LPC_TIM2->TCR = 1;
Yo_Robot 3:8d5a9e3cd680 50
Yo_Robot 3:8d5a9e3cd680 51 }
Yo_Robot 3:8d5a9e3cd680 52
Yo_Robot 3:8d5a9e3cd680 53
Yo_Robot 3:8d5a9e3cd680 54 /** @brief: Esta es la rutina que maneja las interrupciones
Yo_Robot 3:8d5a9e3cd680 55 * seriales, al recibir un caracter.
Yo_Robot 3:8d5a9e3cd680 56 */
Yo_Robot 3:8d5a9e3cd680 57 void ISR_Serial()
Yo_Robot 3:8d5a9e3cd680 58 {
Yo_Robot 3:8d5a9e3cd680 59 int newValue;
Yo_Robot 3:8d5a9e3cd680 60 char command;
Yo_Robot 3:8d5a9e3cd680 61
Yo_Robot 3:8d5a9e3cd680 62 pc.scanf( "%d-%c", &newValue, &command ) ;
Yo_Robot 3:8d5a9e3cd680 63 pc.printf("\n %d-%c \n", newValue, command );
Yo_Robot 3:8d5a9e3cd680 64
Yo_Robot 3:8d5a9e3cd680 65 if( command == 'p')
Yo_Robot 3:8d5a9e3cd680 66 setPrescaler( newValue );
Yo_Robot 3:8d5a9e3cd680 67 else if( command == 'm')
Yo_Robot 3:8d5a9e3cd680 68 setMR2( newValue );
Yo_Robot 3:8d5a9e3cd680 69 else if( command == 'n')
Yo_Robot 3:8d5a9e3cd680 70 setMR3( newValue );
Yo_Robot 3:8d5a9e3cd680 71 else if( command == 'a')
Yo_Robot 3:8d5a9e3cd680 72 startTimer2();
Yo_Robot 3:8d5a9e3cd680 73 else if( command == 's')
Yo_Robot 3:8d5a9e3cd680 74 stopTimer2();
Yo_Robot 3:8d5a9e3cd680 75
Yo_Robot 3:8d5a9e3cd680 76
Yo_Robot 3:8d5a9e3cd680 77 }
Yo_Robot 3:8d5a9e3cd680 78
Yo_Robot 3:8d5a9e3cd680 79
Yo_Robot 3:8d5a9e3cd680 80 /** @brief: Esta Funcion cambia el preescaler
Yo_Robot 3:8d5a9e3cd680 81 * directamente
Yo_Robot 3:8d5a9e3cd680 82 */
Yo_Robot 3:8d5a9e3cd680 83 void setPrescaler( int newValue)
Yo_Robot 3:8d5a9e3cd680 84 {
Yo_Robot 3:8d5a9e3cd680 85 LPC_TIM2->PR = newValue;
Yo_Robot 3:8d5a9e3cd680 86 }
Yo_Robot 3:8d5a9e3cd680 87
Yo_Robot 3:8d5a9e3cd680 88
Yo_Robot 3:8d5a9e3cd680 89 void setMR2( int newValue )
Yo_Robot 3:8d5a9e3cd680 90 {
Yo_Robot 3:8d5a9e3cd680 91 LPC_TIM2->MR2 = newValue;
Yo_Robot 3:8d5a9e3cd680 92 }
Yo_Robot 3:8d5a9e3cd680 93
Yo_Robot 3:8d5a9e3cd680 94
Yo_Robot 3:8d5a9e3cd680 95 void setMR3( int newValue )
Yo_Robot 3:8d5a9e3cd680 96 {
Yo_Robot 3:8d5a9e3cd680 97 LPC_TIM2->MR3 = newValue;
Yo_Robot 3:8d5a9e3cd680 98 }
Yo_Robot 3:8d5a9e3cd680 99
Yo_Robot 3:8d5a9e3cd680 100 void startTimer2()
Yo_Robot 3:8d5a9e3cd680 101 {
Yo_Robot 3:8d5a9e3cd680 102 // Arrancer el Timer 2
Yo_Robot 3:8d5a9e3cd680 103 LPC_TIM2->TCR = 1;
Yo_Robot 3:8d5a9e3cd680 104 }
Yo_Robot 3:8d5a9e3cd680 105
Yo_Robot 3:8d5a9e3cd680 106 void stopTimer2()
Yo_Robot 3:8d5a9e3cd680 107 {
Yo_Robot 3:8d5a9e3cd680 108 // Arrancer el Timer 2
Yo_Robot 3:8d5a9e3cd680 109 LPC_TIM2->TCR = 0x2;
Yo_Robot 2:a1b556d78a7f 110 }