Você está na página 1de 7

PARTE VII PROGRAMAS DAS EXPERINCIAS

EXPERINCIA 07 - Comunicao HID/USB com PIC

;************************************** ;* Disciplina de Microprocessadores e Microcontroladores * ;* Exerccio 07 Comunicao HID/USB com PIC ;* Software MikroC * ;* Prof. Carlos Henrique Pantaleo * ;**************************************

unsigned char userWR_buffer[64]; unsigned char userRD_buffer[64]; void main() { char recebe; ADCON1 = 0x0F; trisa.ra1=0; trisb.rb0=1; HID_Enable(&userRD_buffer, &userWR_buffer); while (1) { if (portb.rb0==0) { userWR_buffer[0]='1'; while (!HID_Write(&userWR_buffer, 1)); } else { userWR_buffer[0]='0'; while (!HID_Write(&userWR_buffer, 1)); } recebe=hid_read(); if (recebe!=0) { if(userRD_buffer[0]=='A') porta.ra1=1; if(userRD_buffer[0]=='B') porta.ra1=0; } Delay_ms(1000); } } void interrupt(void) { HID_InterruptProc(); }

//Buffer de transmisso serial //Buffer de recepo serial

//Configura os pinos de forma digital //Configura o pino do LED como sada //Configura o pino do boto como entrada //Inicializa a USB

//Carrega byte a ser enviado para o PC //Envia e aguarda finalizar o envio do //byte pela USB

//Carrega byte a ser enviado para o PC //Envia e aguarda finalizar o envio do //byte pela USB //Verifica se h algum byte no //buffer de recepo //H algum byte para receber? // o 'A'? //Sim, ento liga o LED // o 'B'? //Sim, ento desliga o LED //Delay para atualizao

//Tratamento da interrupo de USB

Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

EXPERINCIA 08 Comunicao HID/USB com Conversor ADC


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // * Disciplina de Lab. de Aplicao de Microcontroladores * // * Exerccio 08 Comunicao HID/USB com ADC * // * Software MikroC * // * Prof. Carlos Henrique Pantaleo * // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

unsigned char readbuff[64] absolute 0x500;

// Buffers utilizados como RAM

unsigned char writebuff[64] absolute 0x540; // para USB int adc; int cnt; char text[7];

void interrupt(){ USB_Interrupt_Proc(); } // Servio USB s feito dentro da interrupo

void main(void){

ADCON0 = 0b0000000; ADCON1 = 0b0001110;

// Habilita porta AN0 como analgica // Deixa todas as outras portas como digital, Vdd como referncia // positiva e Vss como negativa

CMCON = 0;

// Desabilita comparadores

HID_Enable(&readbuff,&writebuff); // Habilita comunicao HID ADC_Init(); TRISA = 1; PORTA = 0; for(cnt=0;cnt<64;cnt++) { writebuff[cnt] = 0; } while(1){ adc = ADC_Read(0); IntToStr(adc,text); strcpy(writebuff,text); while(!HID_Write(&writebuff,64)); Delay_ms(500); } } // L valor analgico na porta AN0 // Transforma o valor inteiro em String // Copia a string para o buffer // Envia os dados para a porta USB // Inicializa modulo ADC // Porta A como entrada // zerar Port A

Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

EXPERINCIA 09 Comunicao HID com acionamento PWM


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // * Disciplina de Lab. de Aplicao de Microcontroladores * // * Exerccio 09 Comunicao HID com acionamento PWM * // * Software MikroC * // * Prof. Carlos Henrique Pantaleo * // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * unsigned char readbuff[64] absolute 0x500; unsigned char writebuff[64] absolute 0x540; int adc; int x; int cnt; int pwm; float temp; int recebe; char text[7]; void interrupt(){ USB_Interrupt_Proc(); } void main(void) { ADCON0 = 0b0000000; ADCON1 = 0b0001110; // Buffers utilizados como RAM // para USB

// Servio USB s feito dentro da interrupo

// Habilita porta AN0 como analgica // Deixa todas as outras portas como // digital, Vdd como referencia positiva e Vss como negativa // Desabilita comparadores

CMCON = 0x07;

HID_Enable(&readbuff,&writebuff); ADC_Init(); PWM1_Init(5000); PWM2_Init(5000); TRISA = 1; PORTA = 0; TRISC = 0; PORTC = 0; for(cnt=0;cnt<64;cnt++) { writebuff[cnt] = 0; } PWM1_Start(); PWM1_Set_Duty(0); PWM2_Start(); PWM2_Set_Duty(0); while(1){ adc = ADC_Read(0); IntToStr(pwm,text); strcpy(writebuff,text); while(!HID_Write(&writebuff,64)); temp = adc*0.249; pwm = temp; recebe = HID_Read(); if (recebe != 0) { if(readbuff[0] == 'A'){ x = 1; } if(readbuff[0] == 'B'){

// Habilida comunicao HID // Inicializa modulo ADC // Inicializa modulo PWM1 com 5kHz // Inicializa modulo PWM2 com 5kHz // Porta A como entrada // zerar porta A //Porta D como sada //zerar porta D

// Limpar buffer de escrita // Inicia o PWM1 // Seta como zero a taxa do PWM1 // Inicia o PWM2 // Seta como zero a taxa do PWM2 // Le valor analgico na porta AN0 // Transforma o valor inteiro em String // Copia a string para o buffer // Envia os dados para a porta USB // Converter 10-bits para 8-bits //Verifica se h algum byte no buffer de recepo //H algum byte para receber? // o 'A'?

// o 'B'?

Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

x = 2; } } if(x==1){ PWM1_Set_Duty(pwm); PWM2_Set_Duty(0); } if(x==2){ PWM1_Set_Duty(0); PWM2_Set_Duty(pwm); } Delay_ms(500); } } //Sim, Motor Sentido Anti-horrio //Sim, Motor Sentido Anti-horrio

Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

EXPERINCIA 10 Comunicao HID com Interrupes


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // * Disciplina de Lab. de Aplicao de Microcontroladores * // * Exerccio 09 Comunicao HID com Interrupes * // * Software MikroC * // * Prof. Carlos Henrique Pantaleo * // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

1: unsigned char readbuff[64] absolute 0x500; // Buffers utilizados como RAM 2: unsigned char writebuff[64] absolute 0x540; // para USB 3: 4: int adc; 5: int x; 6: int y; 7: int cnt; 8: int pwm; 9: float temp; 10: int recebe; 11: char text[7]; 12: 13: void interrupt(){ 14: USB_Interrupt_Proc(); // Servio USB s feito dentro da 15: // interrupo 16: if(INTCON.INT0IF){ 17: y = x; 18: x = 3; // Tratamento da Interrupcao 19: pwm = 0; 20: 21: INTCON.INT0IF = 0; // Desativar Interrupt 22: } 23: } 24: 25: void main(void){ 26: 27: ADCON0 = 0b0000000; // Habilida porta AN0 como analgica 28: ADCON1 = 0b0001110; // Deixa todas as outras portas como 29: // digital, Vdd como referencia 30: // positiva e Vss como negativa 31: 32: CMCON = 0x07; // Desabilita comparadores 33: INTCON = 0b1101000; // Ativa INTERRUPT 34: INTCON2 = 0b1000000; 35: 36: 37: HID_Enable(&readbuff,&writebuff); // Habilida comunicao HID 38: ADC_Init(); // Inicializa modulo ADC 39: PWM1_Init(5000); // Inicializa modulo PWM1 com 5kHz 40: PWM2_Init(5000); // Inicializa modulo PWM2 com 5kHz 41: 42: 43: TRISA = 1; // Porta A como entrada 44: PORTA = 0; // zerar porta A 45: 46: TRISB = 1; // Porta B como Entrada 47: PORTB = 0; // zerar porta B 48: 49: TRISC = 0; //Porta C como sada
Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

50: PORTC = 0; //zerar porta C 51: 52: 53: for(cnt=0;cnt<64;cnt++) 54: { 55: writebuff[cnt] = 0; // Limpar buffer de escrita 56: } 57: 58: PWM1_Start(); // Inicia o PWM1 59: PWM1_Set_Duty(0); // Seta como zero a taxa do PWM1 60: PWM2_Start(); // Inicia o PWM2 61: PWM2_Set_Duty(0); // Seta como zero a taxa do PWM2 62: 63: while(1){ 64: 65: adc = ADC_Read(0); // Le valor analogico na porta AN0 66: IntToStr(pwm,text); // Transforma o valor inteiro em String 67: strcpy(writebuff,text); // Copia a string para o buffer 68: 69: while(!HID_Write(&writebuff,64)); // Envia os dados para a porta USB 70: 71: temp = adc*0.249; 72: pwm = temp; // Converter 10-bits para 8-bits 73: 74: recebe = HID_Read(); //Verifica se h algum byte no buffer de recepo 75: 76: if (recebe != 0) //H algum byte para receber? 77: { 78: if(readbuff[0] == 'A'){ // o 'A'? 79: x = 1; 80: } 81: if(readbuff[0] == 'B'){ // o 'B'? 82: x = 2; 83: } 84: } 85: 86: if(x==1){ 87: PWM1_Set_Duty(pwm); //Sim, Motor Sentido Antihorario 88: PWM2_Set_Duty(0); 89: } 90: 91: if(x==2){ 92: PWM1_Set_Duty(0); //Sim, Motor Sentido Antihorario 93: PWM2_Set_Duty(pwm); 94: } 95: 96: if(x==3){ 97: PWM1_Set_Duty(0); // PARA TUDO 98: PWM2_Set_Duty(0); 99: 100: writebuff[0] = 'E'; 101: writebuff[1] = 'M'; 102: writebuff[2] = 'E'; 103: writebuff[3] = 'R'; // Escrita de Emergencia 104: writebuff[4] = 'G'; 105: writebuff[5] = 'E'; 106: writebuff[6] = 'N'; 107: writebuff[7] = 'C'; 108: writebuff[8] = 'I';
Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

09: writebuff[9] = 'A'; 110: writebuff[10] = '-'; 111: writebuff[11] = '-'; 112: writebuff[12] = '-'; 113: writebuff[13] = '-'; 114: writebuff[14] = '-'; 115: writebuff[15] = '-'; 116: 117: 118: while(!HID_Write(&writebuff,64)); // Envia os dados para a porta USB 119: } 120: 121: if(PORTB.B1){ 122: x = y; // Destravar programa 123: } 124: 125: Delay_ms(500); 126: } 127: }

Centro de Engenharias e Cincias Exatas CECE Curso de Engenharia Eltrica - EE Av. Tancredo Neves, 6731 - Caixa Postal 1511 - CEP 85856-970 Foz do Iguau Paran e-mail eng_pantaleao@yahoo.com.br Home Page: www.unioeste-foz.br/ee/

Você também pode gostar