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:19:39 2012 +0000
Revision:
12:c02b08dacc45
Parent:
9:6976ac1a430e
Child:
14:039d070732d5
v0.3 Ethernet RPC. Mismos 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 12:c02b08dacc45 18 extern DigitalOut pin_son; // SON
Yo_Robot 12:c02b08dacc45 19 extern DigitalOut pin_dir; // SIGN+
Yo_Robot 12:c02b08dacc45 20 extern InterruptIn pin_alm; // ALM
Yo_Robot 12:c02b08dacc45 21 extern AnalogOut aout; // +-10V
Yo_Robot 3:8d5a9e3cd680 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 8:958dfe5052b9 51 // y MAT2.3 como salidas
Yo_Robot 8:958dfe5052b9 52
Yo_Robot 6:b4dae934e1ea 53 }
Yo_Robot 6:b4dae934e1ea 54
Yo_Robot 12:c02b08dacc45 55 void ISR_Serial()
Yo_Robot 12:c02b08dacc45 56 {
Yo_Robot 12:c02b08dacc45 57 int value; // Nuevo Valor
Yo_Robot 12:c02b08dacc45 58 char command; // Comando al que aplicar el nuevo valor
Yo_Robot 12:c02b08dacc45 59
Yo_Robot 12:c02b08dacc45 60 pc.scanf( "%d-%c", &value, &command ) ;
Yo_Robot 12:c02b08dacc45 61 pc.printf("\n %d-%c \n", value, command );
Yo_Robot 12:c02b08dacc45 62
Yo_Robot 12:c02b08dacc45 63 // Establecer nueva frecuencia
Yo_Robot 12:c02b08dacc45 64 if( command == 'H')
Yo_Robot 12:c02b08dacc45 65 setPTO( value );
Yo_Robot 12:c02b08dacc45 66
Yo_Robot 12:c02b08dacc45 67 else if( command == 'K' )
Yo_Robot 12:c02b08dacc45 68 setPTO( value * 1000 );
Yo_Robot 12:c02b08dacc45 69
Yo_Robot 12:c02b08dacc45 70 // Nuevo voltaje de salida
Yo_Robot 12:c02b08dacc45 71 // Alguna formula para calcular el Vout necesario
Yo_Robot 12:c02b08dacc45 72 // -100% a +100%
Yo_Robot 12:c02b08dacc45 73 else if( command == 'A')
Yo_Robot 12:c02b08dacc45 74 aout = (float)( value + 100.0 ) / 200.0;
Yo_Robot 12:c02b08dacc45 75
Yo_Robot 12:c02b08dacc45 76
Yo_Robot 12:c02b08dacc45 77 // Cambiar la direccion
Yo_Robot 12:c02b08dacc45 78 else if( command == 'D')
Yo_Robot 12:c02b08dacc45 79 pin_dir = value;
Yo_Robot 12:c02b08dacc45 80
Yo_Robot 12:c02b08dacc45 81
Yo_Robot 12:c02b08dacc45 82 //Encender el Servo
Yo_Robot 12:c02b08dacc45 83 else if( command == 'S')
Yo_Robot 12:c02b08dacc45 84 pin_son = value;
Yo_Robot 12:c02b08dacc45 85
Yo_Robot 12:c02b08dacc45 86 //else if( command == 'E')
Yo_Robot 12:c02b08dacc45 87 // setDir( value );
Yo_Robot 12:c02b08dacc45 88
Yo_Robot 12:c02b08dacc45 89 }
Yo_Robot 12:c02b08dacc45 90
Yo_Robot 12:c02b08dacc45 91
Yo_Robot 12:c02b08dacc45 92 void setPTO( int freq )
Yo_Robot 12:c02b08dacc45 93 {
Yo_Robot 12:c02b08dacc45 94 if( freq != 0 )
Yo_Robot 12:c02b08dacc45 95 {
Yo_Robot 12:c02b08dacc45 96 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 12:c02b08dacc45 97 setMR2( getMRvalue( freq ) );
Yo_Robot 12:c02b08dacc45 98 startTimer2();
Yo_Robot 12:c02b08dacc45 99
Yo_Robot 12:c02b08dacc45 100 }else{
Yo_Robot 12:c02b08dacc45 101
Yo_Robot 12:c02b08dacc45 102 stopTimer2();
Yo_Robot 12:c02b08dacc45 103 LPC_TIM2->TC = 0x00; //Resetear Timer
Yo_Robot 12:c02b08dacc45 104 }
Yo_Robot 12:c02b08dacc45 105 }
Yo_Robot 12:c02b08dacc45 106
Yo_Robot 12:c02b08dacc45 107 void setPTO_eth( char * input, char * output )
Yo_Robot 12:c02b08dacc45 108 {
Yo_Robot 12:c02b08dacc45 109 int freq = atoi( input );
Yo_Robot 12:c02b08dacc45 110
Yo_Robot 12:c02b08dacc45 111 if( freq != 0 ){
Yo_Robot 12:c02b08dacc45 112 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 12:c02b08dacc45 113 setMR2( getMRvalue( freq ) ); // Cambiar frefuencia
Yo_Robot 12:c02b08dacc45 114 startTimer2(); // Iniciar Timer
Yo_Robot 12:c02b08dacc45 115 sprintf( output, "Ok, Freq = %d", freq );
Yo_Robot 12:c02b08dacc45 116
Yo_Robot 12:c02b08dacc45 117 }else{
Yo_Robot 12:c02b08dacc45 118 stopTimer2();
Yo_Robot 12:c02b08dacc45 119 LPC_TIM2->TC = 0x00; // Resetear Timer
Yo_Robot 12:c02b08dacc45 120 sprintf( output, "Ok, ALTO" );
Yo_Robot 12:c02b08dacc45 121 }
Yo_Robot 12:c02b08dacc45 122 }
Yo_Robot 12:c02b08dacc45 123
Yo_Robot 12:c02b08dacc45 124
Yo_Robot 12:c02b08dacc45 125 void ISR_Alarm()
Yo_Robot 12:c02b08dacc45 126 {
Yo_Robot 12:c02b08dacc45 127 pin_son = 0 ;
Yo_Robot 12:c02b08dacc45 128 stopTimer2();
Yo_Robot 12:c02b08dacc45 129 aout = 0.5 ;
Yo_Robot 12:c02b08dacc45 130
Yo_Robot 12:c02b08dacc45 131 pc.printf( "\n\n ERROR: ALARMA \n\n " );
Yo_Robot 12:c02b08dacc45 132
Yo_Robot 12:c02b08dacc45 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 12:c02b08dacc45 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 8:958dfe5052b9 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 12:c02b08dacc45 164
Yo_Robot 12:c02b08dacc45 165 // **** Funciones Liberia Ethernet ***** //
Yo_Robot 12:c02b08dacc45 166
Yo_Robot 12:c02b08dacc45 167 void setAout_eth( char * input, char * output )
Yo_Robot 12:c02b08dacc45 168 {
Yo_Robot 12:c02b08dacc45 169 int vout = atoi( input );
Yo_Robot 12:c02b08dacc45 170 aout = (float)( vout + 100 ) / 200;
Yo_Robot 12:c02b08dacc45 171 sprintf( output, " Ok, Aout = %f ", aout.read() );
Yo_Robot 12:c02b08dacc45 172 }
Yo_Robot 12:c02b08dacc45 173
Yo_Robot 12:c02b08dacc45 174
Yo_Robot 12:c02b08dacc45 175
Yo_Robot 12:c02b08dacc45 176 void setDir_eth ( char * input, char * output )
Yo_Robot 12:c02b08dacc45 177 {
Yo_Robot 12:c02b08dacc45 178 int value = atoi( input );
Yo_Robot 12:c02b08dacc45 179
Yo_Robot 12:c02b08dacc45 180 pin_dir = value;
Yo_Robot 12:c02b08dacc45 181
Yo_Robot 12:c02b08dacc45 182 if( value == 0 )
Yo_Robot 12:c02b08dacc45 183 sprintf( output,"Derecha" );
Yo_Robot 12:c02b08dacc45 184 else
Yo_Robot 12:c02b08dacc45 185 sprintf( output,"Izquierda" );
Yo_Robot 12:c02b08dacc45 186 }
Yo_Robot 12:c02b08dacc45 187
Yo_Robot 12:c02b08dacc45 188
Yo_Robot 12:c02b08dacc45 189
Yo_Robot 12:c02b08dacc45 190 void setSON_eth ( char * input, char * output )
Yo_Robot 12:c02b08dacc45 191 {
Yo_Robot 12:c02b08dacc45 192 int value = atoi( input );
Yo_Robot 12:c02b08dacc45 193
Yo_Robot 12:c02b08dacc45 194 pin_son = value;
Yo_Robot 12:c02b08dacc45 195
Yo_Robot 12:c02b08dacc45 196 if( value == 0 )
Yo_Robot 12:c02b08dacc45 197 sprintf( output,"Servo OFF" );
Yo_Robot 12:c02b08dacc45 198 else
Yo_Robot 12:c02b08dacc45 199 sprintf( output,"Servo ON" );
Yo_Robot 12:c02b08dacc45 200
Yo_Robot 12:c02b08dacc45 201 }
Yo_Robot 12:c02b08dacc45 202
Yo_Robot 12:c02b08dacc45 203
Yo_Robot 12:c02b08dacc45 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 }