Wątek przeniesiony 2018-11-08 11:49 z Inne języki programowania przez Marooned.

Symulacja CAN-BUS // Arduino

0

Witam
Tworzę obecnie projekt, w którym za pomocą Arduino i nadstawki CAN-BUS Shield v2.0 steruję zegarami z Seata i Skody.
Czy ktoś będzie w stanie podpowiedzieć mi, mniej więcej w jaki sposób napisać pętlę programu aby poszczególne ramki sygnału CAN
były wysyłane wg określonych odstępów czasu.
Próbowałem zrobić to na licznikach i instrukcji warunkowej IF....ELSE, gdzie dany licznik po osiągnięciu wartości się zerował a następnie znowu zliczał.
Natomiast albo coś pomieszałęm w warunkach, albo nie tędy droga. I zegar z SEATA "zgłupiał'', gdyż chwilowo wykrywał sygnały a chwilowo nie, wniosek jest taki, że było błędne
taktowanie wysyłania ramek CAN. Problem w tym ze wszystko musi pracować w jednej pętli programu.
W poniższym linku na ostatniej stronie podane są sygnały CAN-BUS wraz z ich odstępami czasowymi.
Jeżeli ktoś chociaż mi podpowie na czym to ugryźć będę niezmiernie wdzięczny.
Pozdrawiam
Adam
https://christian-rossow.de/publications/vatican-ches2016.pdf

0

Podepne sie do pytania: myslicie ze zegarami z Golfa 3 daloby sie takie cos zrobic, bo mi w garazu zalegaja :)

0

Nie znam Arduino na tyle, ale coś w stylu (nazwy funkcji z czapy, chodzi o ideę):


void timer_isr() {
  cpu_wake_up();
}

int main() {
  uint8_t counter = 0;
  timer_init(); //ustawiasz timer na przerwanie+budzenie co 20ms
  //nie wiem czy funkcja isr wtedy jest potrzebna czy nie
  while(1) {
    sleep(); //bo timer ma wybudzic procek
    If (counter == 0) { //to co 100 ms, czyli 5 obiegow petli
      can_send_speed();
    } 
    can_send_rpm(); //a to zawsze
    ++counter; 
    counter %= 5; 
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1