Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Podobne prezentacje


Prezentacja na temat: "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"— Zapis prezentacji:

1 Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware)
Programowanie mikrokontrolerów dla systemów czasu rzeczywistego System czasu rzeczywistego to taki, w którym wynik przetwarzania nie zależy tylko i wyłącznie od jego logicznej poprawności, ale również od czasu, w jakim został osiągnięty (tu z reguły chodzi o tzw. Hard real-time systems) System działa mikrokomputerowy w czasie rzeczywistym, jeżeli czas reakcji systemu jest niezauważalny przez proces Programowanie firmware’u Aktualnie fimware oznacza program ściśle związany ze sprzętem Programowanie synchroniczne Zygmunt Kubiak

3 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware)
W przykładach czujniki poziomu reprezentowane są przez przełączniki. W mikrokontrolerach przełączniki z reguły łączone są jak na rysunku obok. Oznacza to, że przełącznik włączony (naciśnięty) generuje sygnał logiczny „0”, a wyłączony (zwolniony) – sygnał „1”. W przykładzie założono, że przełącznik S włączony (naciśnięty) oznacza czujnik zanurzony („0”), a przełącznik wyłączony (zwolniony) oznacza czujnik wynurzony („1”) S Zygmunt Kubiak

4 Przykład – regulacja poziomu
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Zygmunt Kubiak

5 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Regulacja poziomu cieczy S0, S1 - czujniki poziomu (0 – czujnik zanurzony, 1 - czujnik wynurzony) Z – zawór nie objęty sterowaniem D1 - zawór sterowany (dioda D1) Wyjście aktywne – sygnał log. „1” np. D1 = 1 – zawór załączony D1 = 0 – zawór wyłączony Zygmunt Kubiak

6 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Regulacja poziomu cieczy Faza F0 Faza F1 Logiczna sieć działań Zygmunt Kubiak

7 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Wersja synchroniczna algorytmu Zygmunt Kubiak

8 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino - połączenia Zygmunt Kubiak

9 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – schemat ideowy Zygmunt Kubiak

10 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – PCB nakładki Zygmunt Kubiak

11 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – program /* Regulacja poziomu created 2017 by Zygmunt Kubiak */ const int S0 = 7; // S0 - czujnik poziomu min const int S1 = 6; // S1 - czujnik poziomu max const int D1 = 13; // D1 - zawór dopływu wody boolean F0, F1; // flagi faz procesu Zygmunt Kubiak

12 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – program cd. void setup() { // zainicjowanie funkcji pinów: pinMode(S0, INPUT_PULLUP); // wejście z podciąganiem wew. pinMode(S1, INPUT_PULLUP); // wejście z podciąganiem wew. pinMode(D1, OUTPUT); // wyjście - LED Arduino // zainicjowanie stanu początkowego aplikacji RegPoz digitalWrite(D1,LOW); // zawór zamknięty F0 = true; // flaga fazy startowej F1 = false; // pozostałe flagi } Zygmunt Kubiak

13 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – program cd. void loop() { if(F0) if(digitalRead(S0) && digitalRead(S1)) digitalWrite(D1,HIGH); // otwarcie zaworu F0 = false; // faza F0 wykonana F1 = true; // kolejna faza do wykonania } Zygmunt Kubiak

14 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – regulacja poziomu Realizacja Arduino – program cd. void loop() { if(F1) if(!digitalRead(S0) && !digitalRead(S1)) digitalWrite(D1,LOW); // zamknięcie zaworu F1 = false; // faza F1 wykonana F0 = true; // kolejna faza do wykonania } Zygmunt Kubiak

15 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Realizacja zależności czasowych Zależności czasowe są ważnym elementem w wielu aplikacjach Przedstawione zostaną dwie metody realizacji czasowych: Timery programowe na bazie przerwania czasowego Budowa timera Zygmunt Kubiak

16 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Timery programowe na bazie przerwania czasowego W przykładzie założono przerwania czasowe o okresie 1ms Timer programowy składa się z dwóch elementów: Licznik LTx – dowolny typ całkowity, bez znaku (np. unsigned int) Flaga aktywności timera Tx, typ całkowity (np. bool, unsigned char, byte //Program obsługi przerwania 1ms w pseudokodzie C ISR_1ms () { if (T0==1) { if (LT0==0) T0=0; else LT0--; } if (T1==1) { if (LT1==0) T1=0; else LT1--; Zygmunt Kubiak

17 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Timery programowe na bazie przerwania czasowego Przykład użycia timera programowego LT1 unsigned char T0,T1; unsigned int LT0,LT1; { if ((PIND & (1<<3))==0) { PORTB &= ~(1<<2); // RST bit - włącz diodę LED1 LT1=1000; F2=1; F1=0; T1=1; // uruchomienie Timera T1 - 1s } if (F2) { if (T1==0) { PORTB |= (1<<2); // SET bit - wyłącz diodę LED1 F2=0; F3=1; } Zygmunt Kubiak

18 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Realizacja zależności czasowych Zależności czasowe są ważnym elementem w wielu aplikacjach Przedstawione zostaną dwie metody realizacji czasowych: Timer z przechwytywaniem bieżącej wartości Zygmunt Kubiak

19 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Timer z przechwytywaniem bieżącej wartości W Arduino można użyć funkcji millis() lub micros() Obydwie funkcje są typu unsigned long, który w przypadku mikrokontrolerów oznacza liczbę 32 bitową – oznacza to zakres od 0 – Przykład użycia: unsigned long time; time = millis(); if ((millis() – time) > 999) { //upłynął czas 1s } !!! Należy zwrócić uwagę na przejście od 0 – Zygmunt Kubiak

20 Mruganie diody (bez delay)
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Mruganie diody (bez delay) Wykorzystanie przechwytywania bieżącej wartości timera Zygmunt Kubiak

21 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe Przykład realizacji zależności czasowych (np. Arduino) Faza F0 Faza F1 Logiczna sieć działań Zygmunt Kubiak

22 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Wersja synchroniczna algorytmu Zygmunt Kubiak

23 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino - połączenia Zygmunt Kubiak

24 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino – schemat ideowy Zygmunt Kubiak

25 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino – program /* Zależności czasowe Sterowanie diodą LED created 2017 by Zygmunt Kubiak */ const int D2 = 2; // D2 – dioda LED boolean F0, F1; // flagi faz procesu unsigned long T0, T1; // bieżąca wartość czasu stanu D2 unsigned long Tz = 500 // czas załączenia D2 unsigned long Tw = 300 // czas wyłączenia D2 Zygmunt Kubiak

26 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino – program cd. void setup() { // zainicjowanie funkcji pinów: pinMode(D2, OUTPUT); // wyjscie - LED // zainicjowanie stanu początkowego aplikacji SterLED digitalWrite(D2,LOW); // zawór zamknięty F0 = true; // flaga fazy startowej F1 = false; // pozostałe flagi } Zygmunt Kubiak

27 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino – program cd. void loop() { if(F0) if(millis() – T0 >= Tw) digitalWrite(D2,HIGH); // włączenie D2 T1 = millis(); // pobranie bieżącego czasu dla zapalonej diody D2 F0 = false; // faza F0 wykonana F1 = true; // kolejna faza do wykonania } Zygmunt Kubiak

28 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – zależności czasowe – sterowanie LED Realizacja Arduino – program cd. void loop() { if(F1) if(millis() – T1 >= Tz) digitalWrite(D2,LOW); // wyłączenie D2 T0 = millis(); // pobranie bieżącego czasu dla wyłączonej diody D2 F1 = false; // faza F1 wykonana F0 = true; // kolejna faza do wykonania } Zygmunt Kubiak

29 Przykład - Programowanie niezależnych aplikacji
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład - Programowanie niezależnych aplikacji (połączenie poprzednich przykładów) Zygmunt Kubiak

30 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Współbieżna praca niezależnych aplikacji Jednoczesna regulacja poziomu cieczy i niezależne sterowanie dioda LED (poprzednie przykłady) Faza F2 Faza F3 Zygmunt Kubiak Logiczna sieć działań

31 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Współbieżna praca niezależnych aplikacji Jednoczesna regulacja poziomu cieczy i niezależne sterowanie dioda LED – wersja synchroniczna algorytmu Zygmunt Kubiak

32 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Współbieżna praca niezależnych aplikacji Jednoczesna regulacja poziomu cieczy i niezależne sterowanie dioda LED – wersja synchroniczna algorytmu Zygmunt Kubiak

33 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – łączenie niezależnych aplikacji Realizacja Arduino - połączenia Zygmunt Kubiak

34 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – łączenie niezależnych aplikacji Realizacja Arduino – schemat ideowy Zygmunt Kubiak

35 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – łączenie niezależnych aplikacji Realizacja Arduino – PCB nakładki Zygmunt Kubiak

36 Sygnalizacja świetlna
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Sygnalizacja świetlna 30 s 6 s 20 s 4 s DR DY DG Zygmunt Kubiak

37 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna 30 s 6 s 20 s 4 s DR DY DG T1, T2, T3, T4 – czasy poszczególnych faz DG, DY, DR – wyjścia (światła, odp. zielone, żółte, czerwone) Wyjście aktywne – sygnał log. „1” np. DG = 1 – załączone (zapalone) DG = 0 – wyłączone (zgaszone) Zygmunt Kubiak

38 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna Logiczna sieć działań Wykorzystanie timera programowego F2 F0 F3 F1 Zygmunt Kubiak

39 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna – realizacja synchroniczna (z timerami programowymi) Zygmunt Kubiak

40 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna – realizacja synchroniczna (z timerami programowymi) Zygmunt Kubiak

41 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna Zygmunt Kubiak

42 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna Zygmunt Kubiak

43 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – realizacja zależności czasowych Sygnalizacja świetlna Zygmunt Kubiak

44 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware)
Przykład - mieszalnik Zygmunt Kubiak

45 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład - mieszalnik
Sterowanie pracą mieszalnika a, b, c - czujniki poziomu (0 – czujnik zanurzony, 1 - czujnik wynurzony) Y1, Y2, Y3 - zawory sterowane W - sterowanie mieszadła G - sterowanie grzejnika Wyjście aktywne – sygnał log. „1” np. Y1 = 1 – zawór załączony Y1 = 0 – zawór wyłączony Zygmunt Kubiak

46 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład - mieszalnik
1 2 Sterowanie pracą miesza 1 F2 1 F0 F3 1 F1 F4 1 1 2 Logiczna sieć działań Zygmunt Kubiak

47 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład - mieszalnik
Wersja synchroniczna algorytmu Zygmunt Kubiak

48 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład - mieszalnik
Wersja synchroniczna algorytmu Zygmunt Kubiak

49 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników Zygmunt Kubiak

50 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników Sterowanie zespołem wagoników L1, P1, L2, P2 - napęd wagoników (lewo, prawo) A, B, C, D - wyłączniki krańcowe Zygmunt Kubiak

51 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników Sterowanie zespołem wagoników L1, P1, L2, P2 - napęd wagoników (lewo, prawo) A, B, C, D - wyłączniki krańcowe (załączony = 1) S - start procesu (załączony = 1) R1, R wyjścia pomocnicze (flagi) Zygmunt Kubiak

52 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników Sterowanie zespołem wagoników Logiczna sieć działań 1 2 R1, R2 – znaczniki wykonania operacji F0 .. F5 – fazy sterowania wagoników 2 1 Zygmunt Kubiak

53 Sterowanie zespołem wagoników
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników 2 1 Sterowanie zespołem wagoników Wersja synchroniczna Sterowanie zespołem wagoników Zygmunt Kubiak

54 Sterowanie zespołem wagoników
Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Zespół wagoników 2 1 Sterowanie zespołem wagoników Sterowanie zespołem wagoników Wersja synchroniczna Zygmunt Kubiak

55 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED Zygmunt Kubiak

56 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED TLK Test stanu klawisza LT0, T0 ; LT1, T Timery programowe LC Licznik Zygmunt Kubiak

57 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED Logiczna sieć działań 1 2 Zygmunt Kubiak

58 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED Wersja synchroniczna algorytmu 1 Zygmunt Kubiak

59 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED Wersja synchroniczna algorytmu 1 Opracowanie Z.Kubiak Zygmunt Kubiak

60 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED Wersja synchroniczna algorytmu Realizacja Timer’ów programowych Zygmunt Kubiak

61 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED // Przykład z obsługą Timerów programowych T1, T2 i klawisza // Naciśniecie klawisza powoduje zapalenie LED1 na 1s // Zwolnienie klawisza uruchamia 10cykli pulsowania LED2 (okres 1s) // Autor: Z.Kubiak IIPP, 2006 // Kontroler: ATmega8515 // Naciśnięty klawisz zwiera wejście do masy // Diody zapalane sygnalem zero #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned char LC,T0,T1; unsigned char F0,F1=0,F2=0,F3=0,F4=0,F5=0,F6=0,F7=0; unsigned int LT0,LT1; Zygmunt Kubiak

62 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. //Program obsługi przerwania 5ms (Tck =  11,0592MHz) SIGNAL (SIG_OVERFLOW0) { if (T0==1) { if (LT0==0) T0=0; else LT0--; } if (T1==1) { if (LT1==0) T1=0; else LT1--; TCNT0 = 202; // cykl 54 Zygmunt Kubiak

63 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. int main(void) { //MCUCR = 2; // przerwania zewnętrzne DDRD = 0xF0; // Bity PORTD 0..3 wej; 4..7 wyj PORTD = 15; // podciąganie wejść DDRB = 0xFF; // PORTB wyjścia TIMSK = 2; TCNT0 = 202; TCCR0 = 5; // podział przez 1024 F0=1; // faza programu T1=0; // znacznik aktywności timera programowego //F1=0; //F2=0; PORTB=255; // ustaw PORTB - zgaś diody sei(); // odblokowanie przerwań // diody LED - PORTB.2 i PORTB.3 Zygmunt Kubiak

64 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. while(1) { if (F0) { if ((PIND & (1<<3))==0) //test klawisza czy wcisnięty { LT0=2; // filtrowanie drgań styków F1=1; F0=0; T0=1; // uruchomienie Timera T1 - 10ms } Zygmunt Kubiak

65 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. if (F1) { if (T0==0) { if ((PIND & (1<<3))==0) { PORTB &= ~(1<<2); // RST bit - zapal diodę LED1 LT1=199; F2=1; F1=0; T1=1; // uruchomienie Timera T2 - 1s } else { F1=0; F0=1; Zygmunt Kubiak

66 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. if (F2) { if (T1==0) { PORTB |= (1<<2); // SET bit - wył diodę LED1 F2=0; F3=1; } if (F3) { if (PIND & (1<<3)) //test klawisza czy wycisnięty { LT0=2; // filtrowanie drgań styków F4=1; F3=0; T0=1; // uruchomienie Timera T1 - 10ms Zygmunt Kubiak

67 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. if (F4) { if (T0==0) { if (PIND & (1<<3)) { LC=10; // 10 cykli pulsowania LED2 F5=1; F4=0; } else { F4=0; F3=1; } } if (F5) { PORTB &= ~(1<<3); // RST bit - zapal diodę LED2 LT1=99; F5=0; F6=1; T1=1; Zygmunt Kubiak

68 Programowanie mikrokontrolerów Programowanie systemów wbudowanych (firmware) Przykład – Sterowanie diodami LED cd. if (F6) { if (T1==0) { PORTB |= (1<<3); // SET bit - wył diodę LED2 LT0=99; LC--; F6=0; F7=1; T0=1; } } if (F7) { if (T0==0) { if (LC==0) // czy wszystkie cykle wykonane? { F7=0; F0=1; } else F5=1; } Zygmunt Kubiak

69 Dziękuję Zygmunt Kubiak


Pobierz ppt "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"

Podobne prezentacje


Reklamy Google