Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Slides:



Advertisements
Podobne prezentacje
Video DR-S Cyfrowy rejestrator wideo
Advertisements

Zerowanie mikroprocesorów Cel: wprowadzenie mikroprocesora w określony stan początkowy Zwykle realizowany poprzez: inicjalizację licznika rozkazów (PC)
Mechanizmy pracy równoległej
Wykonał : Marcin Sparniuk
SIECI KOMPUTEROWE WYKŁAD 4. WARSTWA ŁĄCZA DANYCH
Języki programowania C++
ZŁOŻONOŚĆ OBLICZENIOWA
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Najczęściej popełniane błędy w VHDL’u
Wykład nr 7: Synchronizacja procesów
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Temat nr 10: System przerwań
Architektura komputerów
Dr Anna Kwiatkowska Instytut Informatyki
Wprowadzenie do programowania w języku Turbo Pascal
Podstawy programowania
Układy sekwencyjne pojęcia podstawowe.
Przyciski i klawiatury
Podstawy programowania w języku C i C++
POLITECHNIKA POZNAŃSKA
Opracowanie: Maria W ą sik. Pierwsze komputery budowano w celu rozwi ą zywania konkretnych problemów. Gdy pojawiało si ę nowe zadanie, nale ż ało przebudowa.
Zabezpieczenia Łukoochronne Energia wiatru
LabVIEW Technologie informacyjne – laboratorium Irmina Kwiatkowska
Wyświetlacze LED.
POLITECHNIKA POZNAŃSKA
Mariusz Postół Przemysław Małek
PEŁNA KONTROLA NAD POBOREM MOCY
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Systemy wspomagania decyzji
I ty możesz tworzyć roboty!
Wykład 7 Synchronizacja procesów i wątków
Instrukcja obsługi regulatora temperatury do kotłów z podajnikiem ślimakowym lub tłokowym COBRA z podłączonymi modułami zaworu mieszacza ALLIGATOR i GSM.
Bariery synchronizacyjne Bariery są obiektami synchronizacyjnymi pakietu pthread służącymi do wyrównywania czasów pracy wątków wykonujących wspólne zadanie.
Temat 7: Instrukcje warunkowe
Przerzutniki bistabilne
Procesor, pamięć, przerwania, WE/WY, …
ATXMEGA128A4U 128 kB pamięci Flash Zasilanie 1.6V-3.6V Maksymalne taktowanie 32 MHz 34 Programowalne WE-WY System zdarzeń (Event System) 4 kanały DMA.
Wykład 9 Programowanie w Windows 1.Programowanie zdarzeniowe 2.Zdarzenia obsługiwane przez Windows 3.Aplikacja obsługująca klawisz myszki 4.AppWizard PO9-1.
POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH LAB CMBiN p.209.
Przerwania timera i przerwania zewnętrzne
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
PWM, obsługa wyświetlacza graficznego
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH
POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH
Wyższa Szkoła Informatyki i Zarządzania
SunFollower Projekt zespołowy Prowadzący: Dr inż. Marek Woda Wykonał: Bartosz Przybyłek Data prezentacji:
Sterowane ramię robota
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
TEMAT: Zapoznanie się z funkcja LICZNIKA w sterowniku Twido
Z użyciem „Arduino UNO”
POLITECHNIKA POZNAŃSKA
Wątki, programowanie współbieżne
Transmisja radiowa Arduino & nRF24L01P
Interfejsy synchroniczne
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Mikrokontrolery System przerwań
ASSISTENZA TECNICA LR Instalacja oprogramowania , programowanie i obsługa systemu Direct Plus Landirenzo do obsługi silników z bezpośrednim wtryskiem.
Mikrokontrolery STMicroelectronics
Mikrokontrolery MSP430 DMA
TEMAT: Zapoznanie się z funkcja LICZNIKA w sterowniku Twido
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Transmisja radiowa Arduino & nRF24L01P
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

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

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 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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

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 11-2017 Zygmunt Kubiak

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

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

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

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

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

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 11-2017 Zygmunt Kubiak

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 } 11-2017 Zygmunt Kubiak

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 } … 11-2017 Zygmunt Kubiak

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 } 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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--; 11-2017 Zygmunt Kubiak

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; } 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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 – 4 294 967 295 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 – 4 294 967 295 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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ń 11-2017 Zygmunt Kubiak

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

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

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

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 11-2017 Zygmunt Kubiak

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 } 11-2017 Zygmunt Kubiak

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 } … 11-2017 Zygmunt Kubiak

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 } 11-2017 Zygmunt Kubiak

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) 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak Logiczna sieć działań

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 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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

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

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

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

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) 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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

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

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

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

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

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

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 11-2017 Zygmunt Kubiak

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ń 11-2017 Zygmunt Kubiak

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

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

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

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 11-2017 Zygmunt Kubiak

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, R2 - wyjścia pomocnicze (flagi) 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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

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

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

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

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

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

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; 11-2017 Zygmunt Kubiak

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   11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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 } 11-2017 Zygmunt Kubiak

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; 11-2017 Zygmunt Kubiak

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 11-2017 Zygmunt Kubiak

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; 11-2017 Zygmunt Kubiak

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; } 11-2017 Zygmunt Kubiak

Dziękuję Zygmunt Kubiak 11-2017