• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
pulseIn przez cały czas zwraca wartość 0
#7
Kod:
#include <avr/interrupt.h>
#include <stdbool.h>

uint16_t rising_capture = 0;
uint16_t falling_capture = 0;
uint16_t pulse_width = 0;
bool rising_edge = true;

ISR(TIMER1_CAPT_vect)
{
    switch(rising_edge){
        case true:
            TCNT1 = 0;               
            rising_capture = ICR1;   
            TCCR1B &= ~(1 << ICES1);
            rising_edge = false;   
            break;
       
        case false:
            falling_capture = ICR1;
            TCCR1B |= (1 << ICES1);
            rising_edge = true;   
            break;
    }
}

void setup()
{
    TCCR1B |= (1 << ICES1);
    TCCR1B |= (1 << CS10); 
    TIMSK1 |= (1 << ICIE1);
}
void loop()
{
        pulse_width = falling_capture - rising_capture;                                         
}

Nie wiem czy dobrze napisałem, bo dawno nie robiłem nic na AVR'ach.
Problem polega na tym, że bez normalnej obsługi przerwań, funkcja Serial.print zajmuje czas procesora, kiedy powinien wykrywać zbocza. Dla tego framework Arduino jest kiepski dal bardziej wymagających projektów.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Wiadomości w tym wątku
RE: pulseIn przez cały czas zwraca wartość 0 - przez Robson Kerman - 17-02-2024, 01:00

Skocz do:


Przeglądający: 1 gości