Para mim o Arduíno é um microcontrolador com um "algo mais"...( )...
Para mim é a mesma coisa....só que ao contrário: Um microcontrolador com "algo" a menos...
Você já viu como as placas "aleijam" os micros?
Já percebeu que o Arduino DUE, por exemplo, tem um AT91SAM que na verdade é um ARM de 32 bits que roda a 84Mhz com 100 MIPs!!!
Como os caras queriam manter a compatibilidade com as porcarias anteriores, botaram pra F**** no chip...a grosso modo, este DUE só serviria para piscar 54 LEDS com no mínimo 10Kbytes de programa...com velocidade não superior a 1 MIP. Não se pode utilizar a Ethernet inside chip...ele apanha para ler um SD card...aleijaram no sentido restrito da palavra...porém, quem não é um garoto das libs Arduino, consegue fazer coisas interessantes como até mesmo utilizar os dois módulos de Quadrature Encoder internos. Algumas "libs" são para uso com artifícios de software, mas consegue-se "na unha" utilizar diretamente o hardware interno.
Em tempo: este código abaixo lê o encoder conectado nos pinos indicados (Canais A e B):
- Código: Selecionar todos
const int quad_A = 2;
const int quad_B = 13;
const unsigned int mask_quad_A = digitalPinToBitMask(quad_A);
const unsigned int mask_quad_B = digitalPinToBitMask(quad_B);
void configuraQEI() {
// activate peripheral functions for quad pins
REG_PIOB_PDR = mask_quad_A; // activate peripheral function (disables all PIO functionality)
REG_PIOB_ABSR |= mask_quad_A; // choose peripheral option B
REG_PIOB_PDR = mask_quad_B; // activate peripheral function (disables all PIO functionality)
REG_PIOB_ABSR |= mask_quad_B; // choose peripheral option B
// activate clock for TC0
REG_PMC_PCER0 = (1<<27);
// select XC0 as clock source and set capture mode
REG_TC0_CMR0 = 5;
// activate quadrature encoder and position measure mode, no filters
REG_TC0_BMR = (1<<9)|(1<<8)|(1<<12);
// enable the clock (CLKEN=1) and reset the counter (SWTRG=1)
// SWTRG = 1 necessary to start the clock!!
REG_TC0_CCR0 = 5;
}
void main{
configuraQEI() ;
...
...
int minha variavel = REG_TC0_CV0 ; // lê a posição
...
...
...
}