Sem dúvidas, uma das maneiras mais eficientes para se construir soluções em programação, é analisar códigos-exemplo. Para nossa sorte a própria IDE possui uma aba dedicada a exemplos (Project >> CCS Example Projects).
Escolha a família do micro que você possui , eu no caso escolhi conforme a imagem:
Eu escolhi o primeiro exemplo, segue o código original:
Podemos dividir o código exemplo em três partes:
1) Copyright
2) Descrição
3) Código Funcional
Copyright
Basicamente a Texas Instruments vai explicar que você pode usar o código fonte dos exemplos, bem como editá-los. Mas em caso de uso deve explicitar os autores. Também que ela não tem qualquer responsabilidade com o uso destes códigos, e com os danos do mau uso destes.
Descrição
Explica o funcionamento do código exemplo:
"Output Comparator_A reference levels on P1.1. Program will cycle through the on-chip comparator_A reference voltages with output on P1.1. Normal mode is LPM0, TA0_ISR will interrupt LPM0. ACLK = n/a, MCLK = SMCLK = default DCO"
O intuito deste blog não é ensinar inglês nem eletrônica básica, portanto não irei destrinchar o funcionamento de cada componente da descrição. A grosso modo podemos dizer que o port P1.1 sairá com o valor trazido do Comparator_A.
Código
- #include <msp430.h>
- void delay(void); // Software delay
- int main (void)
- {
- WDTCTL = WDTPW + WDTHOLD; // Stop WDT
- CACTL2 = P2CA4; // CA1/P1.1 = +comp
- CCTL0 = CCIE; // CCR0 interrupt enabled
- TACTL = TASSEL_2 + ID_3 + MC_2; // SMCLK/8, cont-mode
- _EINT(); // enable interrupts
- while (1) // Loop
- {
- CACTL1 = 0x00; // No reference voltage
- _BIS_SR(LPM0_bits); // Enter LPM0
- CACTL1 = CAREF0 + CAON; // 0.25*Vcc, Comp. on
- _BIS_SR(LPM0_bits); // Enter LPM0
- CACTL1 = CAREF1 + CAON; // 0.5*Vcc, Comp. on
- _BIS_SR(LPM0_bits); // Enter LPM0
- CACTL1 = CAREF1 + CAREF0 + CAON; // 0.55V, Comp. on
- _BIS_SR(LPM0_bits); // Enter LPM0
- }
- }
- // Timer A0 interrupt service routine
- #pragma vector=TIMER0_A0_VECTOR
- __interrupt void Timer_A (void)
- {
- _BIC_SR_IRQ(LPM0_bits); // Clear LPM0 bits from 0(SR)
- }
Este é o código original do exemplo, do jeito que está é difícil verificar o que está acontecendo pino do seu kit de desenvolvimento. E a função delay não está implementada. Eu misturei o código do primeiro exemplo, com o código do segundo exemplo... e conferi com o multímetro. Uma opção bastante interessante é ir passo a passo na função debug, verificando a tensão no P1.1.
Meu código modificado:
Vídeo do código em execução na placa (com meu código). Note que no início eu estava medindo a tensão no pino errado!
Nenhum comentário:
Postar um comentário