Académique Documents
Professionnel Documents
Culture Documents
strcpy(writebuff,enviar);
while(!HID_Write(&writebuff,64));
}
//void enviar(int envio)
//{
//alta=envio>>8;
//baja=envio&0xFF;
//UART1_Write(alta);
//Delay_ms(50);
//UART1_Write(baja);
//Delay_ms(50);
//}
//int recibir_16bit()
//{ int temp;
//while(UART1_Data_Ready()==0);
//alta=UART1_Read();
//while(UART1_Data_Ready()==0);
//baja=UART1_Read();
//temp=alta;
//temp=(temp<<8)+baja;
//return(temp);
//}
void main()
{
ANSELC=0x0000; //Configuracionde E/S digitales
ANSELD=0x0000; //Configuracionde E/S digitales
ANSELE=0x0000; //RE6 como entrada analogica
CORCONbits.IPL3=0; //la interrupcin de la CPU es de nivel 7 o menor
SRbits.IPL=0; //interrupcin de la CPU es de nivel 0
INTCON1bits.NSTDIS=0; //interrupcin anidadas activada
INTCON2bits.GIE=1; //interrupciones habilitadas
InitMCU();
HID_Enable(&readbuff,&writebuff); //inicializamos en mdulo usbhid
delay_ms(2000);
//SPI1
TRISDbits.TRISD8=1;//PIN42 CONF COMO ENTRADA PARA SDI MAESTRO
TRISDbits.TRISD0=0;//PIN46 CONF COMO SALIDA PARA SDO MAESTRO
TRISFbits.TRISF3=0;//PIN33 CONF COMO SALIDA PARA SCK MAESTRO
SPI1_Init_Advanced(_SPI_MASTER,_SPI_16_BIT,_SPI_PRESCALE_SEC_8,_SPI_PRESCAL
E_PRI_64,_SPI_SS_DISABLE,_SPI_DATA_SAMPLE_MIDDLE,_SPI_CLK_IDLE_LOW,_SPI_ACTIVE_2
_IDLE);
RPOR0bits.RP64R=5; //Serial Salida de Datos SDO1 EN EL PIN 46
RPOR8bits.RP99R=6; // CAMBIO DE ENTRADA O DE SALIDA DE RELOJ SCK1 EN EL PIN
46
RPINR20bits.SDI1R=72; //SDI1 SERIAL ENTRADA DE DATOS PIN 42
//TRISCbits.TRISC14=1;
//TRISDbits.TRISD1=0;
//RPOR0bits.RP65R=1; //U1TX EN EL PIN 49
//RPINR18bits.U1RXR=0X003E; //U1RX EN EL PIN 48
//UART1_Init(9600);
// CONFIGURANDO EL ADC
IEC0bits.AD1IE=1;
//HABILITACION DE INTERRUPCION
IFS0bits.AD1IF=0;
//BANDERA DE INTERRUPCION ADC
ANSELB=0x1F00; // RB8-RB11 analogicos
//comparador habilitado
//salida interna del comparador
//salida no invertida sera c1out=1 cuando V+ >V//interrupcion deshabilitada
//Entrada Vin+ se conecta internamente al Voltaje de
//Pin de entrada VIN- del comparador se conecta a pi
//filtro digital
//PIN 12 DEL DSPIC ENTRADA ANALOGICA
CM2CONbits.CON=1;
//comparador habilitado
CM2CONbits.COE=0;
//salida interna del comparador
CM2CONbits.CPOL=0;
//salida no invertida sera c1out=1 cuando V+ >VCM2CONbits.EVPOL=0; //interrupcion deshabilitada
CM2CONbits.CREF=1;
//Entrada Vin+ se conecta internamente al Voltaje de
CVrefin
CM2CONbits.CCH=0;
//Pin de entrada VIN- del comparador se conecta a pin
C2IN2CM2FLTRbits.CFLTREN=0;
ANSELBbits.ANSB2=1; //PIN 14 DEL DSPIC ENTRADA ANALOGICA
CM3CONbits.CON=1;
CM3CONbits.COE=0;
CM3CONbits.CPOL=0;
CM3CONbits.EVPOL=0;
CM3CONbits.CREF=1;
//comparador habilitado
//salida interna del comparador
//salida no invertida sera c1out=1 cuando V+ >V//interrupcion deshabilitada
//Entrada Vin+ se conecta internamente al Voltaje de CV
refin
CM3CONbits.CCH=0;
3IN2CM3FLTRbits.CFLTREN=0;
ANSELDbits.ANSD6=1;// PIN 54 DEL DSPIC ENTRADA ANALOGICA
cont2=0;
while(1)
{
MENU:
enviar_texto("###################");
enviar_texto("MENU");
enviar_texto("1.MOTORES");
enviar_texto("2.EJE MANUAL");
enviar_texto("3.POTENCIOMETROS Y ALARMA");
enviar_texto("4.VALOR ANALOGICO POR PC");
enviar_texto("####################");
//enviar();
T3conbits.TON=0;
delay_ms(20);
AD1CON1bits.ADON =0;
flag=0;
vueltas=0;
valor_anterior=0;
valor_actual=0;
recorrido=0;
while(!HID_Read()); //Espero una cadena por el hiperterminal
delay_ms(1000);
Tecla=readbuff[0];
switch(Tecla)
{
case 49:
T3CONbits.TON=1;
// TMR3 ON
Delay_ms(10);
AD1CON1bits.ADON=1; // ON ADC
enviar_texto("CONTROL DE MOTORES POR POTENCIOMETROS ")
;
enviar_texto("PRESIONE S PARA SALIR ");
while (!HID_Read())
{
Tecla=readbuff[0];
delay_ms(1000);
//ADC 1
adc1_U= adc_valor;
SPI1_Write(adc1_U);
delay_ms(100);
//ADC 2
adc2_U= adc_valor2;
SPI1_Write(adc2_U);
delay_ms(100);
//ADC 3
adc3_U= adc_valor3;
SPI1_Write(adc3_U);
delay_ms(100);
adc4_U= adc_valor4;
SPI1_Write(adc4_U);
delay_ms(100);
if(Tecla==83)
{
goto MENU;
Delay_ms(1000);
}
}
break;
case 50:
T3CONbits.TON=1;
// TMR3 ON
Delay_ms(10);
AD1CON1bits.ADON=1; // ON ADC
enviar_texto("DATOS DEL MOTOR ");
while (!HID_Read())
{
Tecla=readbuff[0];
adc1_U= adc_valor;
adc2_U= adc_valor2;
adc3_U= adc_valor3;
adc4_U= adc_valor4;
SPI1_Write(adc1_U);
delay_ms(100);
SPI1_Write(adc2_U);
delay_ms(100);
SPI1_Write(adc3_U);
delay_ms(100);
SPI1_Write(adc4_U);
delay_ms(100);
if(cont2=0)
{
cuadratura_alta=SPI1_Read(buffer);
valor_actual=cuadratura_alta;
delay_ms(100);
CONT2=1;
cuadratura_baja = SPI1_Read(buffer);
valor_actual= (valor_actual<<16) + cuadratura_baja;
contador=0;
}
if (cont2=1)
{
pv=SPI1_Read(buffer);
delay_ms(100);
cont2=0;
}
vueltas=pv;
valor_actual=cuadratura_alta;
valor_actual=(valor_actual<<16)+cuadratura_baja;
recorrido=valor_actual;
recorrido=recorrido*2.35619; //se divide el poscnt entre
4
//luego se multiplica por (2.pi.r)/4
enviar_texto2("DIST:");
sprintf(writebuff,"%10.3f",recorrido);
enviar_texto2(writebuff);
enviar_texto2(" VUELTAS:");
inttostr(vueltas,writebuff);
enviar_texto(writebuff);
enviar_texto2("SENTIDO:");
if(valor_anterior<valor_actual)
{
enviar_texto("DERECHA ");
}
if(valor_anterior>valor_actual)
{
enviar_texto("IZQUIERDA ");
}
valor_anterior=valor_actual;
Delay_ms(1000);
enviar_texto("PRESIONE S PARA SALIR ");
if(Tecla==83)
{
goto MENU;
Delay_ms(1000);
}
}
break;
case 51:
T3conbits.TON=1;
delay_ms(20);
AD1CON1bits.ADON =1;
while (!HID_Read())
{
Tecla=readbuff[0];
delay_ms(1000);
voltaje1 = adc_valor*0.003225806;
voltaje2 = adc_valor2*0.003225806;
voltaje3 = adc_valor3*0.003225806;
voltaje4 = adc_valor4*0.003225806;
resistencia1 = (adc_valor*19.5503421309872
9)/1000;
resistencia2 = (adc_valor2*19.550342130987
29)/1000;
resistencia3 = (adc_valor3*19.550342130987
29)/1000;
resistencia4= (adc_valor4*19.5503421309872
9)/1000;
if (CMSTATbits.C1OUT==0)enviar_texto("POTEN
1: NIVEL SUPERADO");
or el hiperterminal
delay_ms(1000);
Tecla=readbuff[0]; //CARGAMOS EL BUFFER
DE ESCRITURA EN TECLA
if(Tecla<65 || Tecla>80)
{
if(Tecla==83) // SI TECLA ES IGUAL A "S"
VOLVEMOS AL MENU
{
goto MENU;
Delay_ms(1000);
}
else
{
enviar_texto("TECLA INVALIDA");
}
}
else
{
CVRCONbits.CVR=Tecla-64;
}
}
break;
default:
enviar_texto("TECLA INVALIDA");
Delay_ms(1000);
break;
}
}
}