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:
Fri Apr 06 02:15:47 2012 +0000
Revision:
11:30408c8f722a
Parent:
10:0ebc4955cbe7
v0.3 Serial No RPC. Se igualan los archivos setup.h y setup.cpp para serial y ethernet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yo_Robot 4:552beeda4722 1 /**
Yo_Robot 4:552beeda4722 2 * @brief Tren de impulsos con Timer2
Yo_Robot 4:552beeda4722 3 * @file setup.cpp
Yo_Robot 4:552beeda4722 4 * @author Ernesto Palacios
Yo_Robot 4:552beeda4722 5 *
Yo_Robot 4:552beeda4722 6 * Created on 25 de Marzo de 2012
Yo_Robot 4:552beeda4722 7 *
Yo_Robot 4:552beeda4722 8 * Licencia GPL v3.0
Yo_Robot 4:552beeda4722 9 * http://www.gnu.org/licenses/gpl-3.0.html
Yo_Robot 4:552beeda4722 10 */
Yo_Robot 4:552beeda4722 11
Yo_Robot 3:8d5a9e3cd680 12
Yo_Robot 3:8d5a9e3cd680 13 #include "setup.h"
Yo_Robot 3:8d5a9e3cd680 14 #include "mbed.h"
Yo_Robot 3:8d5a9e3cd680 15
Yo_Robot 3:8d5a9e3cd680 16 // Salida Serial de mbed
Yo_Robot 3:8d5a9e3cd680 17 extern Serial pc;
Yo_Robot 7:d9aca501126f 18 extern DigitalOut pin_son; // SON
Yo_Robot 7:d9aca501126f 19 extern DigitalOut pin_dir; // SIGN+
Yo_Robot 7:d9aca501126f 20 extern InterruptIn pin_alm; // ALM
Yo_Robot 7:d9aca501126f 21 extern AnalogOut aout; // +-10V
Yo_Robot 6:b4dae934e1ea 22
Yo_Robot 3:8d5a9e3cd680 23
Yo_Robot 4:552beeda4722 24 void setTimer2()
Yo_Robot 3:8d5a9e3cd680 25 {
Yo_Robot 3:8d5a9e3cd680 26 // Encender Timer2 (PCONP[22])
Yo_Robot 3:8d5a9e3cd680 27 LPC_SC->PCONP |= 1 << 22;
Yo_Robot 3:8d5a9e3cd680 28
Yo_Robot 3:8d5a9e3cd680 29 // Resetear y parar el Timer
Yo_Robot 3:8d5a9e3cd680 30 LPC_TIM2->TCR = 0x2;
Yo_Robot 3:8d5a9e3cd680 31 LPC_TIM2->CTCR = 0x0;
Yo_Robot 3:8d5a9e3cd680 32
Yo_Robot 4:552beeda4722 33 // Establecer el Preescaler en cero
Yo_Robot 4:552beeda4722 34 // SIn Preesclaer
Yo_Robot 4:552beeda4722 35 LPC_TIM2->PR = 0;
Yo_Robot 3:8d5a9e3cd680 36
Yo_Robot 4:552beeda4722 37 // Calcular el periodo Inicial
Yo_Robot 4:552beeda4722 38 uint32_t periodo = ( SystemCoreClock / 400 );
Yo_Robot 3:8d5a9e3cd680 39
Yo_Robot 3:8d5a9e3cd680 40 // Establecer los Registros de Coincidencia
Yo_Robot 3:8d5a9e3cd680 41 // ( Match Register )
Yo_Robot 3:8d5a9e3cd680 42 LPC_TIM2->MR2 = periodo;
Yo_Robot 4:552beeda4722 43 LPC_TIM2->MR3 = periodo; // Legacy, salidas identicas
Yo_Robot 3:8d5a9e3cd680 44
Yo_Robot 4:552beeda4722 45 LPC_TIM2->MCR |= 1 << 7; // Resetear Timer en MR2
Yo_Robot 3:8d5a9e3cd680 46
Yo_Robot 3:8d5a9e3cd680 47 LPC_TIM2->EMR |= 15UL << 8; // Alternar Pin MAT2.2
Yo_Robot 3:8d5a9e3cd680 48 // y MAT2.3
Yo_Robot 3:8d5a9e3cd680 49
Yo_Robot 3:8d5a9e3cd680 50 LPC_PINCON->PINSEL0 |= 15UL << 16; //Activar MAT2.2
Yo_Robot 11:30408c8f722a 51 // y MAT2.3 como salidas
Yo_Robot 11:30408c8f722a 52
Yo_Robot 6:b4dae934e1ea 53 }
Yo_Robot 6:b4dae934e1ea 54
Yo_Robot 6:b4dae934e1ea 55 void ISR_Serial()
Yo_Robot 6:b4dae934e1ea 56 {
Yo_Robot 7:d9aca501126f 57 int value; // Nuevo Valor
Yo_Robot 7:d9aca501126f 58 char command; // Comando al que aplicar el nuevo valor
Yo_Robot 6:b4dae934e1ea 59
Yo_Robot 7:d9aca501126f 60 pc.scanf( "%d-%c", &value, &command ) ;
Yo_Robot 7:d9aca501126f 61 pc.printf("\n %d-%c \n", value, command );
Yo_Robot 6:b4dae934e1ea 62
Yo_Robot 6:b4dae934e1ea 63 // Establecer nueva frecuencia
Yo_Robot 7:d9aca501126f 64 if( command == 'H')
Yo_Robot 7:d9aca501126f 65 setPTO( value );
Yo_Robot 7:d9aca501126f 66
Yo_Robot 7:d9aca501126f 67 else if( command == 'K' )
Yo_Robot 7:d9aca501126f 68 setPTO( value * 1000 );
Yo_Robot 7:d9aca501126f 69
Yo_Robot 7:d9aca501126f 70 // Nuevo voltaje de salida
Yo_Robot 7:d9aca501126f 71 // Alguna formula para calcular el Vout necesario
Yo_Robot 7:d9aca501126f 72 // -100% a +100%
Yo_Robot 7:d9aca501126f 73 else if( command == 'A')
Yo_Robot 10:0ebc4955cbe7 74 aout = (float)( value + 100.0 ) / 200.0;
Yo_Robot 7:d9aca501126f 75
Yo_Robot 7:d9aca501126f 76
Yo_Robot 7:d9aca501126f 77 // Cambiar la direccion
Yo_Robot 7:d9aca501126f 78 else if( command == 'D')
Yo_Robot 7:d9aca501126f 79 pin_dir = value;
Yo_Robot 7:d9aca501126f 80
Yo_Robot 7:d9aca501126f 81
Yo_Robot 7:d9aca501126f 82 //Encender el Servo
Yo_Robot 7:d9aca501126f 83 else if( command == 'S')
Yo_Robot 7:d9aca501126f 84 pin_son = value;
Yo_Robot 7:d9aca501126f 85
Yo_Robot 7:d9aca501126f 86 //else if( command == 'E')
Yo_Robot 7:d9aca501126f 87 // setDir( value );
Yo_Robot 6:b4dae934e1ea 88
Yo_Robot 7:d9aca501126f 89 }
Yo_Robot 7:d9aca501126f 90
Yo_Robot 7:d9aca501126f 91
Yo_Robot 7:d9aca501126f 92 void setPTO( int freq )
Yo_Robot 7:d9aca501126f 93 {
Yo_Robot 7:d9aca501126f 94 if( freq != 0 )
Yo_Robot 7:d9aca501126f 95 {
Yo_Robot 7:d9aca501126f 96 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 7:d9aca501126f 97 setMR2( getMRvalue( freq ) );
Yo_Robot 7:d9aca501126f 98 startTimer2();
Yo_Robot 7:d9aca501126f 99
Yo_Robot 7:d9aca501126f 100 }else{
Yo_Robot 6:b4dae934e1ea 101
Yo_Robot 7:d9aca501126f 102 stopTimer2();
Yo_Robot 7:d9aca501126f 103 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 7:d9aca501126f 104 }
Yo_Robot 7:d9aca501126f 105 }
Yo_Robot 7:d9aca501126f 106
Yo_Robot 11:30408c8f722a 107 void setPTO_eth( char * input, char * output )
Yo_Robot 11:30408c8f722a 108 {
Yo_Robot 11:30408c8f722a 109 int freq = atoi( input );
Yo_Robot 11:30408c8f722a 110
Yo_Robot 11:30408c8f722a 111 if( freq != 0 ){
Yo_Robot 11:30408c8f722a 112 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 11:30408c8f722a 113 setMR2( getMRvalue( freq ) ); // Cambiar frefuencia
Yo_Robot 11:30408c8f722a 114 startTimer2(); // Iniciar Timer
Yo_Robot 11:30408c8f722a 115 sprintf( output, "Ok, Freq = %d", freq );
Yo_Robot 11:30408c8f722a 116
Yo_Robot 11:30408c8f722a 117 }else{
Yo_Robot 11:30408c8f722a 118 stopTimer2();
Yo_Robot 11:30408c8f722a 119 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 11:30408c8f722a 120 sprintf( output, "Ok, ALTO" );
Yo_Robot 11:30408c8f722a 121 }
Yo_Robot 11:30408c8f722a 122 }
Yo_Robot 11:30408c8f722a 123
Yo_Robot 11:30408c8f722a 124
Yo_Robot 7:d9aca501126f 125 void ISR_Alarm()
Yo_Robot 7:d9aca501126f 126 {
Yo_Robot 7:d9aca501126f 127 pin_son = 0 ;
Yo_Robot 7:d9aca501126f 128 stopTimer2();
Yo_Robot 7:d9aca501126f 129 aout = 0.5 ;
Yo_Robot 7:d9aca501126f 130
Yo_Robot 7:d9aca501126f 131 pc.printf( "\n\n ERROR: ALARMA \n\n " );
Yo_Robot 7:d9aca501126f 132
Yo_Robot 6:b4dae934e1ea 133 }
Yo_Robot 6:b4dae934e1ea 134
Yo_Robot 4:552beeda4722 135 int getMRvalue( int fout )
Yo_Robot 3:8d5a9e3cd680 136 {
Yo_Robot 4:552beeda4722 137 int toRegister;
Yo_Robot 4:552beeda4722 138
Yo_Robot 11:30408c8f722a 139 toRegister = (24000000 /(fout*2.0) ) -1;
Yo_Robot 4:552beeda4722 140 return toRegister;
Yo_Robot 3:8d5a9e3cd680 141 }
Yo_Robot 3:8d5a9e3cd680 142
Yo_Robot 3:8d5a9e3cd680 143
Yo_Robot 3:8d5a9e3cd680 144 void setMR2( int newValue )
Yo_Robot 3:8d5a9e3cd680 145 {
Yo_Robot 4:552beeda4722 146 LPC_TIM2->MR2 = newValue; // Las dos salidas son identicas
Yo_Robot 4:552beeda4722 147 LPC_TIM2->MR3 = newValue; // Para testear el programa.
Yo_Robot 3:8d5a9e3cd680 148 }
Yo_Robot 3:8d5a9e3cd680 149
Yo_Robot 3:8d5a9e3cd680 150
Yo_Robot 3:8d5a9e3cd680 151
Yo_Robot 3:8d5a9e3cd680 152 void startTimer2()
Yo_Robot 3:8d5a9e3cd680 153 {
Yo_Robot 11:30408c8f722a 154 // Arrancer el Timer 2
Yo_Robot 3:8d5a9e3cd680 155 LPC_TIM2->TCR = 1;
Yo_Robot 3:8d5a9e3cd680 156 }
Yo_Robot 3:8d5a9e3cd680 157
Yo_Robot 3:8d5a9e3cd680 158 void stopTimer2()
Yo_Robot 3:8d5a9e3cd680 159 {
Yo_Robot 4:552beeda4722 160 // Detener el Timer 2
Yo_Robot 3:8d5a9e3cd680 161 LPC_TIM2->TCR = 0x2;
Yo_Robot 4:552beeda4722 162 }
Yo_Robot 4:552beeda4722 163
Yo_Robot 6:b4dae934e1ea 164
Yo_Robot 11:30408c8f722a 165 // **** Funciones Liberia Ethernet ***** //
Yo_Robot 11:30408c8f722a 166
Yo_Robot 11:30408c8f722a 167 void setAout_eth( char * input, char * output )
Yo_Robot 11:30408c8f722a 168 {
Yo_Robot 11:30408c8f722a 169 int vout = atoi( input );
Yo_Robot 11:30408c8f722a 170 aout = (float)( vout + 100 ) / 200;
Yo_Robot 11:30408c8f722a 171 sprintf( output, " Ok, Aout = %f ", aout.read() );
Yo_Robot 11:30408c8f722a 172 }
Yo_Robot 11:30408c8f722a 173
Yo_Robot 11:30408c8f722a 174
Yo_Robot 11:30408c8f722a 175
Yo_Robot 11:30408c8f722a 176 void setDir_eth ( char * input, char * output )
Yo_Robot 11:30408c8f722a 177 {
Yo_Robot 11:30408c8f722a 178 int value = atoi( input );
Yo_Robot 11:30408c8f722a 179
Yo_Robot 11:30408c8f722a 180 pin_dir = value;
Yo_Robot 11:30408c8f722a 181
Yo_Robot 11:30408c8f722a 182 if( value == 0 )
Yo_Robot 11:30408c8f722a 183 sprintf( output,"Derecha" );
Yo_Robot 11:30408c8f722a 184 else
Yo_Robot 11:30408c8f722a 185 sprintf( output,"Izquierda" );
Yo_Robot 11:30408c8f722a 186 }
Yo_Robot 11:30408c8f722a 187
Yo_Robot 11:30408c8f722a 188
Yo_Robot 11:30408c8f722a 189
Yo_Robot 11:30408c8f722a 190 void setSON_eth ( char * input, char * output )
Yo_Robot 11:30408c8f722a 191 {
Yo_Robot 11:30408c8f722a 192 int value = atoi( input );
Yo_Robot 11:30408c8f722a 193
Yo_Robot 11:30408c8f722a 194 pin_son = value;
Yo_Robot 11:30408c8f722a 195
Yo_Robot 11:30408c8f722a 196 if( value == 0 )
Yo_Robot 11:30408c8f722a 197 sprintf( output,"Servo OFF" );
Yo_Robot 11:30408c8f722a 198 else
Yo_Robot 11:30408c8f722a 199 sprintf( output,"Servo ON" );
Yo_Robot 11:30408c8f722a 200
Yo_Robot 11:30408c8f722a 201 }
Yo_Robot 6:b4dae934e1ea 202
Yo_Robot 6:b4dae934e1ea 203
Yo_Robot 6:b4dae934e1ea 204
Yo_Robot 4:552beeda4722 205 /* LEGACY FUNCTIONS
Yo_Robot 4:552beeda4722 206 *
Yo_Robot 5:c5aea1eb10bb 207 * El codigo actual no hace referencia a estas funciones
Yo_Robot 5:c5aea1eb10bb 208 * sin embargo no hay problema en definirlas.
Yo_Robot 4:552beeda4722 209 */
Yo_Robot 4:552beeda4722 210 void setMR3( int newValue )
Yo_Robot 4:552beeda4722 211 {
Yo_Robot 4:552beeda4722 212 LPC_TIM2->MR3 = newValue;
Yo_Robot 4:552beeda4722 213 }
Yo_Robot 4:552beeda4722 214
Yo_Robot 4:552beeda4722 215
Yo_Robot 4:552beeda4722 216 void setPrescaler( int newValue)
Yo_Robot 4:552beeda4722 217 {
Yo_Robot 4:552beeda4722 218 LPC_TIM2->PR = newValue;
Yo_Robot 4:552beeda4722 219 }