Moderadores: andre_luis, 51, guest2003, Renie
Jorge_Francisco escreveu:Bom, usava a USB aqui com interrupção do PORTB e não acontecia problema algum, no caso usava para um odômetro.
Vou ver se acho os códigos, vou começar a cobrar hein,sacanagem,uhauhauhauh.
void interrupt()
{
Hid_InterruptProc ();
if (intcon.int0if)
{
intcon.int0if=0;
for(indice = 0; indice < 32; indice++) //Endereça o MUX e faz a leitura do AD
{
portd=a;//Endereça o MUX
userWR_buffer[2*indice] = ADRESL; //Armazena a parte baixa do AD
userWR_buffer[2*indice+1]= ADRESH; //Armazena a parte alta do AD
}//fim do for
//Envia os 64 Bytes
while(!Hid_Write(&userWR_buffer, 64));
}
}
void main(void)
{
// configuração da direção dos pinos de I/O
//0=saida, 1=entrada
TRISA = 0b00000001; // usado para o AD
TRISB = 0b00000001; // Pino B0 como entrada para o pulso do odômetro
TRISC = 0b11111111 ; // Usado pela USB
TRISD = 0b00000000; // Endereçamento do MUX
TRISE = 0b00000111;
//Configuração do AD
ADCON0= 0b00000001;// AD ON e Canal 0 Selecionado
ADCON1= 0b00001110 ;// Canal 0 como Analógico e GND e VCC como referencia
ADCON2= 0b10110101;// FOSC/16,16*TAD,Valor justificado a direita
INTCON= 0b10010000;//Interrupção Global Ativa e Interrupção Externa Ativa
Hid_Enable(&userRD_buffer, &userWR_buffer);//Ativa o modo HID
Delay_ms(2000);//2 segundos de pausa
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Rotina principal *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
while (1)
{
}//fim do while
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fim do Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
}
Jorge_Francisco escreveu:- Meu microcontrolador está com fonte externa;(O meu também)
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;(Também uso)
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;(também uso eletrolítico, mas de 10uF e o capacitor de 220nF que está do datasheet)
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.(Coloco um resistor de 1k5 no D+ para full-speed)
ffcprog escreveu:Jorge_Francisco escreveu:- Meu microcontrolador está com fonte externa;(O meu também)
- Estou usando um capacitor de Poliéster de 100nF entre VCC e GND da USB;(Também uso)
- O capacitor que liga o pino VUSB ao terra é um eletrolitico de 1uFx50V;(também uso eletrolítico, mas de 10uF e o capacitor de 220nF que está do datasheet)
- E o pinos D+ e D- são ligados direto do conector aos pinos do PIC.(Coloco um resistor de 1k5 no D+ para full-speed)
Fonte externa. Sem problema.
Desde que, o pic fique de olho no VDD do conector USB, para executar o usb_init apenas com a certeza do conector presente.
A biblioteca usb da mikroe, liga o Fsen "resistor interno de 1,5K entre D+ e VUSB".
O capacitor entre VDD e VSS do cabo usb, pode ser de alguns uF.
D+ e D-, pode ser ligado diretamente aos pinos do PIC, desde que tenha certeza de que o pic vai inicializar em HZ nestes pinos.
Resistor externo de 1,5K para VDD e D+, não é necessario...
ffcprog
void main()
{
unsigned short cont_seg,i;
char recebe;
/***********************************
* Configuração dos SFRs *
***********************************/
T0CON = 0b01001111; //Configura Timer0
INTCON = 0B100000000; //Desliga Interrupções - Liga Geral
INTCON2 = 0b10000000; //Desliga Pull-Ups
INTCON3 = 0;
IPR1 = 0;
IPR2 = 0;
PIE1 = 0;
PIE2 = 0;
PIR1 = 0;
PIR2 = 0;
RCON.IPEN = 0; //Desabilita Prioridade nas Interrupções.
SPPCON=0;
CCP1CON=0;
ADCON1 = 0b00001111; // Configura os pinos de forma digital
/************************************
* Configuração dos Ports *
************************************/
TRISA = 0x3F; //Configura PORTA como entrada
TRISB = 0xFF; //Configura PORTB como entrada
TRISC = 0xFF; //Configura PORTC como entrada
TRISD = 0XFF; //Configura PORTD como entrada
TRISE = 0x04; //Configura PORTE como entrada
LATA = 0;
LATB = 0;
LATC = 0;
LATD = 0;
LATE = 0;
/* ***********************
* Limpa RAM *
*********************** */
asm{
LFSR FSR0, $000
MOVLW $08
CLRF POSTINC0, 0
CPFSEQ FSR0H, 0
BRA $ - 2
}
while(button(&PORTB,7,10,0)); //Aguarda sinal +5 da USB
UCFG.FSEN = 1; //Liga periférico USB
UCFG.UPUEN=1; //liga pull up no D+ pra falar que é full speed
delay_ms(500); //Atraso para estabilizar VDD
HID_Enable(&read,&write); //inicializa comunicação usb
delay_ms(1000);
......resto do programa
} // Fim do Main
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Interrupção *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void interrupt(void)
{
HID_InterruptProc(); // Tratamento da Interrupção de USB
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante