LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: maurosmartins em 27 de Agosto de 2015, 21:24
-
Boas pessoal,
no projecto em que estou a trabalhar preciso de utilizar o módulo QDEC (Quadrature Decoder) presente nos microcontroladores XMEGA.
ao pesquisar pela web encontrei a application note AVR1600 e respectivo software, tentei inicializar o módulo da seguinte forma:
QDEC_Total_Setup( &PORTB, /*PORT_t * qPort*/
6, /*uint8_t qPin*/
false, /*bool invIO*/
0, /*uint8_t qEvMux*/
EVSYS_CHMUX_PORTB_PIN6_gc, /*EVSYS_CHMUX_t qPinInput*/
false, /*bool useIndex*/
EVSYS_QDIRM_00_gc, /*EVSYS_QDIRM_t qIndexState*/
&TCC0, /*TC0_t * qTimer*/
TC_EVSEL_CH0_gc, /*TC_EVSEL_t qEventChannel*/
0); /*uint8_t lineCount*/
e ler do timer/counter da seguinte forma:
while(1){
PORTA.OUTTGL=PIN0_bm;
delay_ms(500);
printf("Counts %u\r",TCC0.CNT);
}
infelizmente o numero de contagens está sempre a 0.
fiz nova tentativa configurando os registos manualmente da seguinte forma:
PORTB.DIRCLR = (PIN6_bm | PIN7_bm);
PORTB.PIN6CTRL=PORT_ISC_LEVEL_gc;
EVSYS.CH0MUX=0b01011110;
EVSYS.CH0CTRL=EVSYS_QDIRM_00_gc| EVSYS_QDEN_bm | EVSYS_DIGFILT_2SAMPLES_gc;
TCC0.CTRLD=(TC_EVSEL_CH0_gc | TC_EVACT_QDEC_gc);
mas os resultados mantém-se. Estou a utilizar os portos PB6 e PB7 num atxmega128a3u a 32MHz. Os sinais do enconder estão OK como se pode verificar:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi.imgur.com%2FJtkK4tj.png&hash=26f0e2e4f60adf8f0a338e4de80eb937f64b6383)
Se tiverem algum sugestão, agradecia.
Cumprimentos, Mauro.
-
Documentação da Atmel anda pelas ruas da amargura, então o ASF é para esquecer..
Isso não precisas de lhe activar o clock?
Tenho ideia que nos Xmega já tens algum clock gating.
-
Boas Senso,
obrigado pela resposta, infelizmente já tinha tentado com:
sysclk_enable_module(SYSCLK_PORT_C, PR_TC0_bm); para activar o timer counter, para o modulo QDEC nao encontro nada.
Cumprimentos, Mauro.