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

Zigbit Meshnetics ZDM-A1281-A2

pszewczyk 08 Lis 2009 17:27 1842 1
REKLAMA
  • #1 7232699
    pszewczyk
    Poziom 10  
    Witam,

    Jakiś czas temu zakupiłem kilka takich modułów w celu stworzenia sieci czujników. Moje czujniki (akcelerometry) wymagają od mikroprocesora interfejsu I2C. Wcześniej zrobiłem kilka układów na ATMEGA32 i 128 ale przy tych modułach opartych o uC ATMEGA 1281 pojawiły się problemy (ogólne - koncepcyjne). Otóż nie potrafię zrozumieć zasady programowania tych układów (meshnetics). Po przejrzeniu kilku przykładowych programów (lowpower, wsndemo) stwierdziłem, że różnią się diametralnie od standardowego AVR C. Nie ma np. funkcji main(). Czy tam po kolei te datasheet-y ale informacjie w nich są tak rozproszone, że nie wiem gdzie szukać konkretów. Nie mogę wymyślić np. koncepcji odpytywania akcelerometrów (po magistrali I2C) co np. 30 sekund. Znalazłem w dokumentacji funkcje odnoszące się do warstwy HAL obsługujące interfejs I2C ale nie wiem jak je wykorzystać w strukturze aplikacji . Moduły Meshneticsa programuję za pomocą zwykłago programatora ze złączem 10-pinowym ISP (programują się). Możecie mi podać linka do jakiegoś pliku w którym będzie dobrze opisany schemat tworzenia aplikacji dla tych układów?

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 7235247
    piti___
    Poziom 23  
    W twojej aplikacji zdeklaruj timer:

    static HAL_AppTimer_t SensorTimer;

    następnie podczas inicjalizacji stosu skonfiguruj timer

    SensorTimer.interval = 30000; // 30 sekund
    SensorTimer.mode = TIMER_REPEAT_MODE;
    SensorTimer.callback = SensorTimerFired;

    potrzebujesz również funkcji:
    
    void SensorTimerFired(void)
    {
    	appState = APP_I2C_TASK;
    	SYS_PostTask(APL_TASK_ID);
    }


    do maszyny stanu aplikacji dodaj APP_I2C_TASK. Polecenie SYS_PostTask() powoduje że stos wykona funkcje void APL_TaskHandler() (w nowszych wersjach stosu moze być inaczej nazwana). Następnie w tej funkcji dodaj do switcha obsługe twojego task'a, czyli case APP_I2C_TASK.

    Pamiętaj że Twoja funkcja powinna zostać wywołana w ciągu 20ms (chyba patrz dokumentacja stosu). Do I2C możesz użyć swoich funkcji, możesz również użyć funkcji dostarczonych ze stosem. Nie korzystałem z funkcji stosu więc w tym przypadku nie pomoge.

    Funkcja main jest zaszyta w stosie. Dla Ciebie dostępne są funkcje callback stosu oraz główna twoja funkcja TaskHandler. Po każdorazowym przejsciu tej funkcji musisz wywołać SYS_PostTask() jeśli chcesz ją jeszcze raz wykonać. Jeśli twoje zadania w tej funckji przekraczają czas 20ms (czy 50ms?) musisz je podzielić na kroki i kilkukrotnie wywolywać SYS_PostTask() zmieniając maszyne stanu na inny krok.

    Powodzenia
REKLAMA