Moderadores: andre_luis, 51, guest2003, Renie
/*----------------------------------------------------------------------|
| |
|----------------------------------------------------------------------*/
/*----------------------------------------------------------------------|
| Definição de entradas |
|----------------------------------------------------------------------*/
/*----------------------------------------------------------------------|
| Declaração de variáveis |
|----------------------------------------------------------------------*/
unsigned short userWR_buffer[64], userRD_buffer[64];
/*----------------------------------------------------------------------|
| Declaração de Interrupções |
|----------------------------------------------------------------------*/
void interrupt(){
HID_InterruptProc();
}
/*----------------------------------------------------------------------|
| Função "Main" |
|----------------------------------------------------------------------*/
void main(){
int i;
/*----------------------------------------------------------------------|
| Configuração das Portas de I/O
|----------------------------------------------------------------------*/
// 0=saida, 1=entrada
// PortA
TRISA = 0b00000001;
// PortA.0 usado como entrada no AD
// PortB
TRISB = 0b00000001;
// PortC
TRISC = 0b11111111;
// PortC.4 e PortC.5 são usados pelo USB, seus valores (I/O) são setados
// quando a comunicação é feita.
// PortD
TRISD = 0b00000000;
// PortE
TRISE = 0b00000111;
/*----------------------------------------------------------------------|
| Configuração dos Registradores do A/D |
|----------------------------------------------------------------------*/
ADCON0= 0b00000001;
/*----------------------------------------------------------------------|
AD ON e Canal 0 Selecionado
ADCON0.0 = ADCON0.ADON = 1, significa que o módulo conversor está habilidato.
ADCON0.1 = ADCON0.GO = 0 (livre); = 1 (convertendo);
ADCON0.5~2 = ADCON0.CHS3~0 = bits de seleção do canal analógico.
ADCON0.CHS3~0 = 0000 = Channel 0 = AN0 = PartA.0
ADCON0.7-6 = Não Implementado, lido como 0.
|----------------------------------------------------------------------*/
ADCON1= 0b00001110;
/*----------------------------------------------------------------------|
Canal 0 como Analógico e GND e VCC como referencia
ADCON1.3~0 = ADCON1.PCFG3~0 = 1110,
assim AN0 = Entrada Analógica e AN12~1 = E/S Digital
ADCON1.4 = ADCON1.VCFG0 = Vref + (fonte) (Config. da Referencia de Voltagem)
0 = Vdd; 1 = Vref + (AN3)
ADCON1.5 = ADCON1.VCFG1 = Vref - (fonte) (Config. da Referencia de Voltagem)
0 = Vss; 1 = Vref - (AN2)
ADCON1.7-6 = Não Implementado, lido como 0.
|----------------------------------------------------------------------*/
ADCON2= 0b10110101;
/*----------------------------------------------------------------------|
FOSC/16, 16*TAD , Valor justificado a direita
ADCON2.2~0 = Seletor da Frequencia do Conversor A/D
101 = Fosc/16
ADCON2.5~3 = Seletor do tempo de Aquisição do A/D
110 = Tad * 16
ADCON2.6 = Não Implementado, lido como 0.
ADCON2.7 = Seleção do formato do Resultado do A/D
0 = justificado a esquerda; 1 = a direita;
|----------------------------------------------------------------------*/
HID_Enable(&userRD_buffer, &userWR_buffer); // Inicializa a USB
Delay_ms(2000); // Aguarda 2 segundos, tempo dado ao computador para tratar
// a conexão do dispositivo USB
// Laço infinito
while (1){
for (i=0; i<64; i++){
adcon0.go_done=1; //Inicializa a conversão
while(adcon0.go_done); //Aguarda finalizar a conversão
userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD
}
//Envia os dados, logo após entra em um delay de 1ms.
while(!Hid_Write(&userWR_buffer, 64));
//Esse delay é devido à comunicação INTERRUPT, usada pela Classe HID
}
// Laço Infinito FIM
}
for (i=0; i<32; i++)
{
adcon0.go_done=1; //Inicializa a conversão
while(adcon0.go_done); //Aguarda finalizar a conversão
userWR_buffer[2*i] = ADRESL; //Armazena a parte baixa do AD
userWR_buffer[2*i+1] = ADRESH; //Armazena a parte alta do AD
}
for (i=0; i<64; i++){
adcon0.go_done=1; //Inicializa a conversão
while(adcon0.go_done); //Aguarda finalizar a conversão
userWR_buffer[i] = ADRESL; //Armazena a parte baixa do AD
i++;
userWR_buffer[i] = ADRESH; //Armazena a parte alta do AD
}
void interrupt(){
HID_InterruptProc();
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante