logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega328p,przerwania,UART,I2C - Przerwania pomiędzy pomiarami.

lbrycht 04 Paź 2013 22:42 2379 1
REKLAMA
  • #1 12809337
    lbrycht
    Poziom 8  
    Witam,

    Tworzę projekt kompasu cyfrowego po szynie I2C pracujących na Atmega 328p-pu. Chciałbym zrealizować u siebie w projekcie przerwania, w ten sposób, że odbieram dane z kompasu->przerwanie i kolejno na początek. Przerwania na prostych przykładach realizowałem ale tutaj nie mam pomysłu jak to zainicjować.

    Wklejam główny wątek, z moją nie udaną próbą inicjacji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 12809527
    mickpr
    Poziom 39  
    lbrycht napisał:
    Chciałbym zrealizować u siebie w projekcie przerwania, w ten sposób, że odbieram dane z kompasu->przerwanie i kolejno na początek.
    Nie rozumiem dokładnie - chcesz, żeby po ustaleniu się danych w HMC58831 wystąpiło przerwanie w którym odczytał byś wskazaną wartość?
    Jeśli tak - to z tego co widzę masz w układzie pin DRDY informujący o tym, że dane są dostępne.
    Opisany w datasheet ( http://www.elecrow.com/download/HMC5883L-FDS.pdf strona 3) dokładnie w ten sposób:
    Cytat:
    Data Ready, Interrupt Pin. Internally pulled high. Optional connection. Low for 250 μsec hen data is placed in the data output registers.
    Podłączasz go pod jeden z pinów Atmegi służących do zewnętrznego wywoływania przerwań (INT0, INT1....) i obsługujesz to przerwanie (w którym odczytujesz dane z układu).

    O samych przerwaniach nie piszę, bo znajdziesz mnóstwo tuoriali - np. ten:
    https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328
    Z twojego kodu wynika, że nawet nie skonfigurowałeś pinu jako PD2 jako wejście (INT0). Nie napisałeś też specjalnej funkcji - obsługującej przerwanie.
    Poczytaj trochę - a o wątpliwości pytaj na forum.
REKLAMA