32 bity jak najprościej (4)
|
|
- Dagmara Domagała
- 6 lat temu
- Przeglądów:
Transkrypt
1 32 bity jak najprościej (4) STM32F0 nieblokująca obsługa wyświetlacza LCD ze sterownikiem rodziny HD44780 W kolejnym odcinku serii przedstawimy całkiem nietypową realizację bardzo typowego składnika oprogramowania systemu mikroprocesorowego obsługi wyświetlacza ciekłokrystalicznego ze sterownikiem rodziny HD Taki sposób obsługi wyświetlacza może być zastosowany dla dowolnego mikrokontrolera, również 8-bitowego. Przykład opisywany w artykule korzysta oczywiście z STM32F0, a projekt został uruchomiony na płytce z najmniejszym dostępnym aktualnie mikrokontrolerem tej serii STM32F030F4, opisanej w poprzedniej części artykułu. Po zmianie definicji portów i operacji na nich, umieszczonych w pliku f030exp1.h, oprogramowanie można uruchomić np. na płytce serii Discovery wyposażonej w dowolny procesor rodziny STM32F0. Głównym problemem, jaki napotyka programista chcąc efektywnie zaprojektować obsługę wyświetlacza LCD ze sterownikiem klasy HD44780 jest brak mechanizmu asynchronicznego informowania o gotowości sterownika przy użyciu przerwania. Zwykle wyświetlacz taki jest obsługiwany programowo przy użyciu aktywnego oczekiwania, co może powodować niepożądane opóźnienia w pracy oprogramowania i uniemożliwia modyfikowanie zawartości wyświetlacza przez procedury obsługi przerwań. W rozwiązaniach programowych niekorzystających z systemów operacyjnych czasu rzeczywistego wyświetlacz ze sterownikiem zgodnym z HD44780 obsługuje się zazwyczaj w pętli zdarzeń. W przypadku zastosowania RTOS obsługę wyświetlacza realizuje się w jednym zadaniu o niskim priorytecie. W obu rozwiązaniach obsługa wyświetlacza niepotrzebnie angażuje moc obliczeniową procesora. Aktywne oczekiwanie na gotowość wyświetlacza uniemożliwia realizację oprogramowania w postaci pozbawionej pętli zdarzeń, co utrudnia redukcję poboru mocy przez urządzenie poprzez usypianie procesora. Podobnie zastosowanie interfejsu jednokierunkowego i rezygnacja z testowania gotowości w typowych spotykanych realizacjach programowych skutkuje wydłużonym i niepotrzebnym aktywnym oczekiwaniem na upłynięcie czasu gwarantującego wykonanie polecenia przez sterownik wyświetlacza. Proponowane rozwiązanie programowe umożliwia obsługę wyświetlacza bez programowego oczekiwania, dzięki czemu zawartość wyświetlacza może być asynchronicznie modyfikowana przez procedury obsługi przerwań. Minimalizuje ono również narzut czasu procesora na obsługę wyświetlacza, co skutkuje wzrostem wydajności obliczeniowej systemu i szybszą reakcją na zdarzenia. Zastosowanie przedstawionego rozwiązania eliminuje pętle oczekiwań i umoż- liwia zaprojektowanie oprogramowania w strukturze bez pętli zdarzeń lub z pustą pętlą zdarzeń. W ten sposób wyeliminowane zostają praktycznie wszystkie problemy związane z oprogramowaniem wyświetlacza występujące w typowych projektach oprogramowania korzystających z alfanumerycznych wyświetlaczy LCD. Zasady współpracy ze sterownikiem klasy HD44780 Zasady podłączania i programowania sterownika opisane są w dokumencie Hitachi HD44780U (LCD- -II)(Dot Matrix Liquid Crystal Display Controller/ Driver), dostępnym w Internecie. Oprogramowanie obsługi wyświetlacza składa się zwykle z kilku składników procedur, w tym procedury inicjującej wyświetlacz, procedur zapisu poleceń oraz procedur zapisu wyświetlanych znaków. Procedura inicjująca wymaga przesłania do wyświetlacza kilku poleceń w określonych minimalnych odstępach czasowych. Po zainicjowaniu zazwyczaj korzysta się tylko z dwóch funkcji sterownika ustawienia pozycji kursora i zapisu danych. Każde z poleceń wykonywanych przez sterownik ma wyspecyfikowany przez producenta maksymalny czas wykonania. Oprogramowanie musi zapewnić, że nowe polecenie nie zostanie przesłane przed zakończeniem wykonywania poprzedniego. Można to osiągnąć na dwa sposoby: przez odczekanie czasu nie krótszego od gwarantowanego czasu wykonania polecenia lub przez testowanie gotowości sterownika na przyjęcie kolejnego polecenia poprzez odczyt rejestru stanu. Odczyt stanu wymaga sterowania przez mikrokontroler linii R/ W oraz zmiany kierunku portu danych, co jest niekiedy dość niewygodne, dlatego w wielu projektach interfejs sterownika LCD jest jednokierunkowy, a synchronizacja jest osiągana przez odczekiwanie czasu niezbędnego do wykonania polecenia przez sterownik. Dokładna lektura dokumentacji sterownika odsłania kilka nieoczywistych jego cech, np. inkrementacja pozycji zapisywanego znaku jest wykonywana przez sterownik już po zgłoszeniu gotowości sterownika i może zająć do 4 ms, przez który to czas sterownik nie może jeszcze przyjąć kolejnego znaku, pomimo 94 ELEKTRONIKA PRAKTYCZNA 4/2014
2 sygnalizacji stanu gotowości. Wpływa to na budowę fragmentów oprogramowania odpowiedzialnych za testowanie gotowości muszą one zagwarantować dodatkowy odstęp czasu po stwierdzeniu gotowości sterownika na podstawie bitu BUSY w rejestrze stanu, co wydłuża czas ich wykonania oraz całkowity czas działania procedur programowych zajmujących się wyświetlaniem napisów. Takie zachowanie sterownika stanowi dodatkowy argument za rezygnacją z programowego testowania gotowości i korzystania z interfejsu dwukierunkowego. Do mikrokontrolera zasilanego napięciem 3,3 V można dołączyć sterownik LCD zasilany napięciem 3,3 V lub 5 V poziomy wejściowe sterownika przy zasilaniu 5 V są zgodne z poziomami wyjściowymi mikrokontrolera. Założenia dla projektu oprogramowania Przedstawiony projekt oprogramowania ma na celu całkowitą eliminację oczekiwania na gotowość sterownika i umożliwienie aktualizacji zawartości wyświetlacza przez procedury obsługi przerwań, a w konsekwencji realizację całego oprogramowania w postaci samych procedur obsługi przerwań, z pustą pętlą zdarzeń. Struktura oprogramowania powinna ograniczyć opóźnienia programowe do niezbędnego minimum, wynikającego z konieczności zachowania parametrów czasowych protokołu szyny w cyklach zapisu poleceń i danych do sterownika. Przyjęto, że zarówno aktualizacja zawartości wyświetlacza jak i jego inicjowanie zostaną zrealizowane tą samą metodą interakcja ze sterownikiem wyświetlacza będzie następować wyłącznie w procedurze obsługi przerwania timera. W ten sposób zostanie wyeliminowane oczekiwanie programowe podczas inicjowania sterownika i zapisu danych. Rozwiązanie takie umożliwia również łatwe reinicjowanie sterownika w czasie normalnej pracy urządzenia, co ma istotne znaczenie dla niezawodności urządzenia przy wahaniach napięcia zasilającego sterowniki LCD mają tendencję do zawieszania się lub samoczynnego reinicjowania w domyślnym trybie pracy (jednowierszowym), który na ogół nie jest zgodny z zastosowanym wyświetlaczem. Interfejs programowy obsługi wyświetlacza Komunikacja pomiędzy oprogramowaniem określającym zawartość wyświetlacza i procedurami obsługi wyświetlacza zachodzi przy użyciu struktury danych umieszczonej w pamięci RAM mikrokontrolera, zawierającej zadaną przez oprogramowanie zawartość całego wyświetlacza oraz znaczniki poleceń zrealizowane jako zmienne logiczne. Ponieważ podczas aktualizacji zawartości przed przesłaniem kodów znaków konieczne jest również ustawienie kursora na początku wiersza, w przypadku zastosowania wyświetlaczy wielowierszowych sensowne jest zdefiniowanie oddzielnych znaczników konieczności modyfikacji dla poszczególnych wierszy wyświetlacza. Znacznik jest ustawiany po wpisaniu przez oprogramowanie nowych danych dla danego wiersza wyświetlacza. Aktualizacja zawarto- Listing 1. Plik lcd.h #ifndef LCD_H_ #define LCD_H_ #include <stdint.h> #define LCDROWS 2 #define LCDCOLS 16 struct lcdctrl_ uint8_t screen[lcdrows][lcdcols]; // screen content struct volatile _Bool init, upd[lcdrows]; req; // request flags extern struct lcdctrl_ lcd; void lcdhandler(void); #endif ści wyświetlacza w procedurze obsługi przerwania timera polega na skopiowaniu zawartości całego wiersza z bufora danych w pamięci do sterownika. W celu zainicjowania sterownika wyświetlacza oprogramowanie ustawia znacznik żądania inicjowania. Powoduje to wyzwolenie sekwencji akcji wykonywanych w procedurze obsługi przerwania timera. W najprostszym przypadku dla wyświetlacza dwuwierszowego potrzebne są trzy polecenia: inicjowania oraz aktualizacji pierwszego i drugiego wiersza. Oprogramowanie użytkowe wpisuje nową zawartość wyświetlacza do bufora, a następnie ustawia znaczniki poleceń. Zawartość struktury danych jest zadeklarowana w pliku lcd.h (listing 1). Składają się na nią: bufor ekranu w postaci tablicy dwuwymiarowej o rozmiarach odpowiadających pojemności wyświetlacza, znacznik żądania reinicjowania wyświetlacza. wektor znaczników żądania aktualizacji poszczególnych wierszy. W razie potrzeby struktura może zostać rozszerzona przez programistę o inne dane i znaczniki żądania wykonania innych akcji, np. definiowania znaków użytkownika. Ważną cechą takiego interfejsu programowego jest to, że fragmenty oprogramowania, które określają zawartość wyświetlacza, nie wywołują żadnych procedur obsługi sterownika wyświetlacza, a jedynie nadają wartości danym polom struktury lcd. W celu zainicjowania sterownika wyświetlacza należy ustawić znacznik lcd.req.init. Aby zaktualizować zawartość wyświetlacza należy wpisać nowe dane na odpowiednie pozycje bufora, a następnie, w zależności od potrzeb, ustawić znaczniki żądania modyfikacji odpowiednich wierszy wyświetlacza lcd.req.upd[n]. Znaczniki akcji są zerowane przez procedurę obsługi wyświetlacza z chwilą rozpoczęcia wykonania zleconej akcji. Dzięki przyjęciu takiej konwencji mamy gwarancję, że zawartość wyświetlacza będzie zawsze aktualna, również w sytuacji, gdy zapis nowego tekstu nastąpi zanim poprzednie zmiany zawartości dotrą do wyświetlacza. Nie ma też potrzeby sprawdzania stanu znaczników przez oprogramowanie zlecające modyfikację kolejne polecenia będą zawsze wykonywane prawidłowo bez potrzeby czekania na zakończenie wcześniej zleconej akcji. Taki interfejs programowy jest więc całkowicie asynchroniczny i nie wymaga jakiegokolwiek oczekiwania w oprogramowaniu określającym zawartość wyświetlacza. ELEKTRONIKA PRAKTYCZNA 4/
3 Listing 2. Plik lcd.c #include f030exp1.h #include lcd.h struct lcdctrl_ lcd =,, 1 // init rq // cursor locate commands for each row static const uint8_t clcmd[] = 0x80, 0xc0 static const struct // LCD init commands uint8_t init8[4], init4[6]; lcdcmd = // 8 bit i/f - send 4 bits only 0x30, 0x30, 0x30, 0x20, // 4 bit i/f 0x28, // mode set 0x08, // off 0x01, // clear 0x06, // entry mode 0x0c, // on, cursor off 0x02 // home static void send4(uint8_t v) LCD_DATA_SET(v); E_L_DELAY; LCD_E_SET; E_H_DELAY; LCD_E_CLR; // LCD service called from timer interrupt routine void lcdhandler(void) static enum LS_RDY, LS_INIT, LS_CMD, LS_DATA lcdstate = LS_RDY; static uint8_t ccnt, dcnt; // data counter static const uint8_t *cptr, *dptr; // command, data ptr static uint8_t lcdtimer = 255; // initial delay if (lcdtimer) lcdtimer --; if (!lcdtimer) if (lcdstate == LS_RDY) if (lcd.req.init) lcd.req.init = 0; cptr = lcdcmd.init8; ccnt = sizeof(lcdcmd.init8); LCD_RS_CLR; lcdstate = LS_INIT; else static uint8_t lastrow = 0; uint32_t i; // check for update requests for (i = 1; i <= LCDROWS; i ++) uint32_t ridx = (lastrow + i) % LCDROWS; if (lcd.req.upd[ridx]) lcd.req.upd[ridx] = 0; // clear request cptr = &clcmd[ridx]; // set cursor cmd ccnt = 1; // 1 command byte dptr = lcd.screen[ridx]; dcnt = LCDCOLS; // no. of data bytes lastrow = ridx; lcdstate = LS_CMD; break; switch (lcdstate) case LS_INIT: // initial commands in 8-bit mode send4(*cptr ++ >> 4); // high nibble only lcdtimer = DLY_5MS; if (-- ccnt == 0) // continue init in 4-bit mode ccnt = sizeof(lcdcmd.init4); lcdstate = LS_CMD; break; case LS_CMD: // normal commands in 4-bit mode if (*cptr < 0x04) // clear or home command - up to 5 ms lcdtimer = DLY_5MS; case LS_DATA: // data phase send4(*cptr >> 4); // high nibble send4(*cptr ++); // low nibble if (-- ccnt == 0) // end of command phase if (dcnt) // enter data phase cptr = dptr; 96 ELEKTRONIKA PRAKTYCZNA 4/2014
4 Parametry czasowe i zasady obsługi wyświetlacza w przerwaniu timera Współpracą ze sterownikiem wyświetlacza zajmuje się wyłącznie procedura obsługi przerwania timera. Określenie parametrów czasowych obsługi wyświetlacza bazuje na kompromisie pomiędzy wydajnością i prostotą budowy procedur obsługi. Przyjęto, że poszczególne akcje nie będą wykonywane z maksymalną możliwą szybkością. Czasy ich wykonania powinny jedynie zagwarantować, że użytkownik nie zauważy przebiegu wykonywania czynności związanych z obsługą wyświetlacza, w tym aktualizacji wyświetlacza w postaci powolnego pisania kolejnych znaków. W praktyce oznacza to, że całkowity czas wykonania dowol- Listing 2. c.d. ccnt = dcnt; dcnt = 0; LCD_RS_SET; lcdstate = LS_DATA; else LCD_RS_CLR; lcdstate = LS_RDY; break; default: ; // only to avoid warnings Listing 3. Definicje związane z LCD w pliku f030exp1.h #define LCD_PORT GPIOA #define LCD_E_BIT 4 #define LCD_RS_BIT 6 #define LCD_E_SET LCD_PORT->BSRR = 1 << LCD_E_BIT #define LCD_E_CLR LCD_PORT->BRR = 1 << LCD_E_BIT #define LCD_RS_SET LCD_PORT->BSRR = 1 << LCD_RS_BIT #define LCD_RS_CLR LCD_PORT->BRR = 1 << LCD_RS_BIT #define LCD_DATA_OUT(v) LCD_PORT->BSRR = ((v) & 0xf) (0xf << 16) //================================================================= // LCD timing: E_L + data_setup = E_H = 500 ns // 8 MHz SYSCLK #define E_L_DELAY #define E_H_DELAY NOP(); NOP(); NOP() // no. of lcd timer ticks per 5 ms #define DLY_5MS 8 // 1600 Hz SysTick Listing 4. Program demonstracyjny /* STM32F0 tutorial non-blocking LCD service with simultaneous voltage/temperature readout and UART reception gbm, */ #include f030exp1.h #include lcd.h #define SYSCLK_FREQ (HSI_VALUE) #define SYSTICK_FREQ 1600 #define BAUD_RATE #define DEG_SIGN 239 // LCD degree sign code #define AVG_SHIFT 4 void SystemInit(void) FLASH->ACR = FLASH_ACR_PRFTBE; // enable prefetch static const struct init_entry_ init_table[] = // enable peripherals &RCC->APB2ENR, RCC_APB2ENR_USART1EN RCC_APB2ENR_ADC1EN, &RCC->AHBENR, RCC_AHBENR_GPIOAEN RCC_AHBENR_SRAMEN, // port setup &GPIOA->AFR[1], BF4(10, 1) BF4(9, 1), // USART pins 10 - RX, 9 - TX &GPIOA->MODER, GPIOA_MODER_SWD BF2(0, GPIO_MODER_OUT) BF2(1, GPIO_MODER_OUT) // LCD data BF2(2, GPIO_MODER_OUT) BF2(3, GPIO_MODER_OUT) BF2(4, GPIO_MODER_OUT) BF2(6, GPIO_MODER_OUT) // LCD control BF2(10, GPIO_MODER_AF) BF2(9, GPIO_MODER_AF), // UART pins as AF // ADC setup &ADC1->CHSELR, ADC_CHSELR_CHSEL17 ADC_CHSELR_CHSEL16, // VREF, TS &ADC1->SMPR, ADC_SMPR_239_5, // ADC &ADC->CCR, ADC_CCR_TSEN ADC_CCR_VREFEN, // ADC &ADC1->CFGR1, ADC_CFGR1_WAIT ADC_CFGR1_CONT, // ADC // ADC cal &ADC1->CR, ADC_CR_ADCAL, // ADC // USART1 setup ( IO32p)&USART1->BRR, (SYSCLK_FREQ + BAUD_RATE / 2) / BAUD_RATE, &USART1->CR3, USART_CR3_DMAT, // enable Tx DMA &USART1->CR1, USART_CR1_RXNEIE USART_CR1_TE USART_CR1_RE USART_CR1_UE, // enable //SysTick setup &SCB->SHP[1], 0x80c00000, // PendSV lower priority, Systick higher &SysTick->LOAD, SYSCLK_FREQ / SYSTICK_FREQ - 1, &SysTick->VAL, 0, &SysTick->CTRL, SysTick_CTRL_CLKSOURCE_Msk SysTick_CTRL_TICKINT_Msk SysTick_CTRL_ENABLE_Msk, // interrupts and sleep &NVIC->ISER[0], 1 << USART1_IRQn, // enable interrupts &SCB->SCR, SCB_SCR_SLEEPONEXIT_Msk, // sleep while not in handler 0, 0 int main(void) lcd.screen[0][6] = DEG_SIGN; lcd.screen[0][7] = C ; lcd.screen[0][14] = m ; lcd.screen[0][15] = V ; writeregs(init_table); WFI(); // go to sleep /* ELEKTRONIKA PRAKTYCZNA 4/
5 Listing 4. c.d. void SysTick_Handler(void) static uint8_t tdiv = 0; static uint8_t sdiv = 0; static uint32_t adc_avg[2]; lcdhandler(); if ((++ tdiv & 15) == 0) int i; static enum ADCH_TS, ADCH_VREF adch = ADCH_TS; if (ADC1->ISR & ADC_ISR_EOC) uint32_t val = ADC1->DR; // 0 before first conversion if (adc_avg[adch] == 0) // initial measure - set adc_avg[adch] = val << AVG_SHIFT; else // low-pass filters adc_avg[adch] = adc_avg[adch] + val - (adc_avg[adch] >> AVG_SHIFT); if (++ adch > ADCH_VREF) adch = ADCH_TS; else if (ADC1->ISR & ADC_ISR_ADRDY) // ready for conversion ADC1->CR = ADC_CR_ADSTART ADC_CR_ADEN; // start cont. conversion else if ((ADC1->CR & (ADC_CR_ADCAL ADC_CR_ADEN)) == 0) // calibrated but not enabled yet - enable ADC1->CR = ADC_CR_ADEN; if (++ sdiv == 100) uint32_t Vdd_mV; int32_t Temperature_x10, tsign; sdiv = 0; Vdd_mV = VREFINT_CAL * 3300 / (adc_avg[adch_vref] >> AVG_SHIFT); // show results for (i = 3; i >= 0; i --) lcd.screen[0][9 + i] = Vdd_mV % ; Vdd_mV /= 10; Temperature_x10 = (T_CAL2 - T_CAL1) * 10 * (((int32_t)adc_avg[adch_ts] >> AVG_SHIFT) * VREFINT_CAL - TS_CAL1 * (int32_t)(adc_avg[adch_ VREF] >> AVG_SHIFT)) / (((int32_t)ts_cal2 - (int32_t)ts_cal1) * (int32_t)(adc_avg[adch_vref] >> AVG_SHIFT)) + T_CAL1 * 10; tsign = + ; if (Temperature_x10 < 0) tsign = - ; Temperature_x10 = -Temperature_x10; lcd.screen[0][5] = Temperature_x10 % ; lcd.screen[0][4] =. ; Temperature_x10 /= 10; i = 3; do lcd.screen[0][i --] = Temperature_x10 % ; Temperature_x10 /= 10; while (Temperature_x10); lcd.screen[0][i --] = tsign; while (i >= 0) lcd.screen[0][i --] = ; lcd.req.upd[0] = 1; void USART1_IRQHandler(void) static uint8_t idx = 0; uint32_t c; if (USART1->ISR & USART_ISR_RXNE) // data received c = USART1->RDR; if (c >= ) USART1->TDR = c; if (idx == 16) for (idx = 0; idx < 15; idx ++) lcd.screen[1][idx] = lcd.screen[1][idx + 1]; lcd.screen[1][idx ++] = c; lcd.req.upd[1] = 1; else if (c == \r ) USART1->TDR = c; USART1->CR1 = USART_CR1_TXEIE; // will send \n idx = 0; else if (c == 0x1b) lcd.req.init = 1; if (USART1->ISR & USART1->CR1 & USART_ISR_TXE) USART1->CR1 &= ~USART_CR1_TXEIE; USART1->TDR = \n ; 98 ELEKTRONIKA PRAKTYCZNA 4/2014
6 nej operacji na wyświetlaczu, w tym zmiany zawartości całego wyświetlacza, nie powinien przekroczyć 30 ms. Z danych układu HD44780 wynika, że maksymalny czas wykonania prostych poleceń, w tym zapisu znaku oraz ustawienia pozycji wprowadzania, może wynosić do ok. 120 ms. W przypadku wyświetlacza o organizacji 2 16 znaków odświeżenie wymaga zapisu 32 znaków i dwukrotnego ustawienia pozycji wprowadzania łącznie 34 operacji o najkrótszym gwarantowanym łącznym czasie wykonania nieco powyżej 4 ms. Okres przerwań timera może więc być wielokrotnie dłuższy od wymaganego przez sterownik wyświetlacza czasu 120 ms, wystarczy, że całkowity czas odświeżenia wyświetlacza zmieści się w założonym górnym limicie. Zbyt krótki okres timera powoduje niepotrzebne zwiększenie obciążenia procesora i może skutkować wydłużeniem czasu odpowiedzi na inne przerwania o niższym lub tym samym priorytecie. Przy przedstawionych założeniach zakres wartości okresu timera odpowiedni do obsługi wyświetlacza 2 16 znaków zawiera się więc w granicach od 120 ms do ok. 880 ms, a dla wyświetlacza 4 20 znaków od 120 ms do 350 ms, przy czym w miarę możliwości powinien być wybrany okres zbliżony do górnej granicy zakresu, aby nie obciążać niepotrzebnie procesora. Kolejnym zagadnieniem projektowym jest wybór trybu pracy timera. Ponieważ obsługa wyświetlacza nie jest krytyczna czasowo, w mikrokontrolerach z wielopoziomowym systemem przerwań może ona mieć niski priorytet. Przerwania o takim samym lub wyższych priorytetach wywłaszczania będą powodowały opóźnienia w obsłudze przerwania wyświetlacza. Jeśli czas obsługi tych przerwań będzie długi (np. rzędu setek mikrosekund), może on niekiedy wpłynąć na przesunięcie czasu operacji na wyświetlaczu i spowodować niezachowanie minimalnego odstępu czasu pomiędzy dwoma kolejnymi poleceniami. W takim przypadku timer używany do obsługi wyświetlacza musi pracować w trybie jednokrotnym, z ponownym uruchomieniem na końcu procedury obsługi przerwania timera. Jeżeli okoliczności opisane powyżej nie zachodzą, można użyć przerwania timera zgłaszanego periodycznie ze stałą częstotliwością, co upraszcza nieco projekt oprogramowania jeden timer może być wtedy zastosowany zarówno do obsługi wyświetlacza, jak i np. odliczania czasu w urządzeniu. Prezentowany przykład korzysta z przerwania timera zgłaszanego ze stałą częstotliwością 1600 Hz. Procedura obsługi przerwania timera Wszystkie akcje związane z zapisem poleceń i danych do sterownika wyświetlacza są wykonywane przez procedurę lcdhandler(), zrealizowaną w konwencji automatu i wywoływaną z procedury obsługi przerwania timera. Przedstawiony przykład (listing 2) zawiera obsługę trzech akcji: inicjowania wyświetlacza oraz aktualizacji pierwszego i drugiego wiersza. Zastosowano w nim 4-bitowy interfejs wyświetlacza, Ponieważ okres, z jakim jest zgłaszane przerwanie timera, odpowiada wykonaniu przez sterownik LCD jednej prostej operacji, przy każdym przerwaniu timera może nastąpić zapis do sterownika jednego bajtu, mający na celu np. ustawienie pozycji wprowadzania lub zapis znaku. Okres ten jest jednak zbyt mały dla niektórych poleceń wykonywanych podczas inicjowania sterownika po zapisie tych poleceń do sterownika niezbędne jest odliczenie większej liczby okresów timera. Dotyczy to poleceń czyszczenia wyświetlacza i powrotu do pozycji początkowej, które mają gwarantowany czas wykonania poniżej 5 ms. Z kolei w sekwencji inicjującej wg. dokumentacji sterownika występują zwiększone odstępy czasowe pomiędzy początkowymi poleceniami ustawiającymi tryb pracy interfejsu. Ponadto w przypadku zastosowania interfejsu 4-bitowego sekwencja inicjująca zawiera na wstępie pojedyncze zapisy 4-bitowe, podczas gdy wszystkie późniejsze akcje są wykonywane w postaci par takich zapisów. W celu uproszczenia automatu obsługi wyświetlacza przyjęto, że wszystkie odstępy czasowe pomiędzy początkowymi poleceniami w sekwencji inicjującej będą równe, a ich wartość będzie taka sama, jak wartość opóźnień dla poleceń czyszczenia i ustawienia pozycji początkowej 5 ms. W porównaniu z zastosowaniem wzorcowych minimalnych odstępów czasu zalecanych przez producenta wydłuża to czas inicjowania o kilka milisekund, co nie wpływa na jego poprawność ani nie powoduje opóźnienia widocznego dla użytkownika. Czas opóźnienia wolniejszych poleceń jest odliczany przy użyciu timera programowego dekrementowanego w procedurze obsługi wyświetlacza. Procedura została zrealizowana w postaci automatu o czterech stanach: stan gotowości/bezczynności brak akcji do wykonania; stan inicjowania polecenia 4-bitowe przesyłane co ok. 5 ms; stan zapisu poleceń polecenia 8-bitowe z odstępem jednego okresu timera, a dla poleceń czyszczenia i przywracania pozycji początkowej ok. 5 ms; stan zapisu danych kolejne bajty danych (zawartość wyświetlacza lub wzorce znaków definiowanych przez użytkownika) przesyłane z odstępem jednego okresu timera. Wykrycie ustawienia znacznika żądania akcji w stanie bezczynności po zakończeniu wykonywania polecenia powoduje przejście do stanu inicjowania lub poleceń. W każdym ze stanów oprogramowanie posługuje się dwiema zmiennymi wskaźnikiem wysyłanych poleceń lub danych oraz licznikiem wysyłanych bajtów. Podczas inicjowania po przesłaniu pierwszych czterech poleceń (w 8-bitowym trybie pracy interfejsu) następuje przejście ze stanu inicjowania do stanu zapisu poleceń, w którym kolejne polecenia są przesyłane już z użyciem interfejsu 4-bitowego. Jeżeli z poleceniem są związane dane, po zakończeniu przesyłania bajtów poleceń następuje ustawienie wskaźnika i licznika danych, zmiana stanu linii RS wyświetlacza i przejście do stanu zapisu danych danych. Po zakończeniu przesyłania danych lub w razie braku potrzeby ich przesyłania automat przechodzi do stanu gotowości. Przy starcie programu znacznik żądania inicjowania ma wartość 1 dzięki temu wyświetlacz jest automatycznie inicjowany. Polecenie inicjowania ma priorytet wyższy niż polecenia aktualizacji. W przypadku, gdy zachodzi obawa, że wskutek częstego ustawiania znacznika żądania aktualizacji pierwszego wiersza nie nastąpi aktualizacja ELEKTRONIKA PRAKTYCZNA 4/
7 drugiego lub kolejnych wierszy, można zastosować rotację priorytetów poleceń aktualizacji poszczególnych wierszy wyświetlacza, tak, jak zostało to zrealizowane w przykładzie. Prymitywy sterowania HD44780 Procedury zawarte w pliku lcd.c korzystają z makrodefinicji podstawowych akcji obsługi sterownika wyświetlacza, zawartych w pliku f030exp1.h (listing 3). Wyrażenia LCD_E_SET, LCD_E_CLR, LCD_RS_SET i LCD_RS_CLR służą do zmiany stanu linii RS i E. W mikrokontrolerach STM32F0 są one zrealizowane przez zapisy do rejestrów BRR i BSRR. Wyrażenie LCD_ DATA_OUT służy do ustawienia stanu linii danych interfejsu wyświetlacza. Można to zrobić poprzez pojedynczy zapisu rejestru BSRR, powodujący selektywne ustawienie stanów linii danych wyświetlacza. Korzystamy tu ze szczególnej cechy rejestru BSRR przy równoczesnym żądaniu zerowania i ustawiania linii portu wyższy priorytet ma operacja ustawienia stanu 1. Zmiana stanu wyjść poprzez zapis rejestrów BRR lub BSRR umożliwia uniknięcie konfliktów powodujących błędne ustawienie stanu wyjść podczas operacji na portach wykonywanych przez kod o innych priorytetach, w tym przez procedury obsługi przerwań o wyższych priorytetach. Wyrażenia E_L_DELAY i E_H_DELAY służą do wprowadzenia opóźnień przed zmianą stanu linii E. Uzyskuje się to przez wykonanie przez procesor odpowiedniej liczby instrukcji pustych, reprezentowanych przez pseudofunkcję NOP(). Zgodnie z danymi układu HD44780 odstęp pomiędzy zmianami stanu linii E przy zasilaniu sterownika napięciem 3,3 V powinien wynosić nie mniej niż 500 ns, co przy częstotliwości mc równej 8 MHz odpowiada czterem prostym instrukcjom procesora. Od czasu tego należy odjąć czas wykonania instrukcji zapisu danych i zmiany stanu linii E. Ponieważ przygotowanie danych i ich zapis wymaga wykonania przynajmniej czterech instrukcji, przy niskich częstotliwościach procesora wyrażenie E_L_DELAY może być puste. Program przykładowy Program demonstrujący nieblokującą obsługę wyświetlacza (listing 4) powstał przez modyfikację poprzedniego przykładu pomiaru napięcia zasilania i temperatury mikrokontrolera. W górnym wierszu wyświetlacza są wyświetlane wyniki pomiarów wykonywanych w prze- rwaniu timera, a w dolnym wierszu jest widoczny tekst wpisywany z terminala przez port szeregowy, co następuje w procedurze obsługi przerwania portu szeregowego. W programie użyto timera SysTick, zaprogramowanego na częstotliwość 1600 Hz. Przy każdym wywołaniu procedura obsługi przerwania timera wywołuje procedurę obsługi wyświetlacza, a przy co 16-tym wywołaniu wykonywany jest kod odpowiedzialny za pomiary. Port szeregowy jest obsługiwany przy użyciu przerwań. Znaki wprowadzane z terminala są wyświetlane w dolnym wierszu wyświetlacza. Jeśli długość wiersza tekstu przekroczy 16 znaków, wpisywanie kolejnych znaków powoduje przesuwanie tekstu na wyświetlaczu. Wprowadzenie kodu CR powoduje, że kolejne znaki będą wpisywane od pierwszej kolumny. Wpisywane znaki są odsyłane zwrotnie i wyświetlane na terminalu. Wprowadzenie kodu Esc powoduje zainicjowanie sterownika wyświetlacza. Podobnie jak w poprzednich przykładach, w oprogramowaniu nie występuje pętla zdarzeń. Po zainicjowaniu procesor jest usypiany działają wyłącznie procedury obsługi przerwań. Podsumowanie W porównaniu z klasyczną obsługą sterownika HD44780 z aktywnym oczekiwaniem, korzystającą z testowania stanu lub opóźnień czasowych, prezentowane rozwiązanie ma kilka istotnych zalet. Są to: Brak konieczności sterowania linią R/ W sterownika wyświetlacza. Znaczna (kilkunastokrotna) redukcja liczby instrukcji wykonywanych przez procesor w związku z obsługą wyświetlacza, skutkująca oszczędnością energii zużywanej przez urządzenie. Pełny asynchronizm, umożliwiający niezależną modyfikację zawartości części wyświetlacza przez różne fragmenty oprogramowania (w tym przez procedury obsługi przerwań) bez konieczności synchronizacji dostępu do wyświetlacza, oczekiwania i jakichkolwiek opóźnień czasowych. Zaprezentowane rozwiązanie stanowi dowód na nieprawdziwość pojawiających się często w poradnikach opinii, jakoby obsługa wyświetlacza LCD nie mogła zachodzić w przerwaniu i wymagała obecności pętli zdarzeń. Grzegorz Mazur 100 ELEKTRONIKA PRAKTYCZNA 4/2014
32 bity jak najprościej STM32F0 (2) Pomiar napięcia i temperatury z uwzględnieniem danych kalibracyjnych
32 bity jak najprościej STM32F0 (2) Pomiar napięcia i temperatury z uwzględnieniem danych kalibracyjnych Latem ubiegłego roku przedstawiliśmy serię artykułów poświęconych początkom tworzenia oprogramowania
32 bity jak najprościej (3)
32 bity jak najprościej (3) STM32F0 płytka eksperymentalna z mikrokontrolerem STM32F030F4 Latem 2013 roku pojawiła się na rynku nowa seria mikrokontrolerów STM32F030. Są one bardzo podobne do STM32F050,
32 bity jak najprościej (3)
32 bity jak najprościej (3) Pierwsze kroki z modułem STM32F0DISCOVERY Samouczek jest dedykowany szczególnie tym projektantom, którzy stają przed perspektywą zmiany mikrokontrolera z 8-bitowego na nowszy
32 bity jak najprościej (7)
32 bity jak najprościej (7) STM32F0 nieblokująca obsługa interfejsu 1-Wire Opracowany przez firmę Dallas Semiconductors (obecnie Maxim Integrated), popularny interfejs 1-Wire umożliwia dołączenie do mikrokontrolera
Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780
Dane techniczne : Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780 a) wielkość bufora znaków (DD RAM): 80 znaków (80 bajtów) b) możliwość sterowania (czyli podawania kodów znaków) za pomocą
Projektowanie urządzeń z modułami GSM (3)
Projektowanie urządzeń z modułami GSM (3) Oprogramowanie mikrokontrolera W trzeciej części cyklu poświęconego projektowaniu urządzeń z modułami GSM zajmiemy się zagadnieniem projektowania oprogramowania
Programowanie Mikrokontrolerów
Programowanie Mikrokontrolerów Wyświetlacz alfanumeryczny oparty na sterowniku Hitachi HD44780. mgr inż. Paweł Poryzała Zakład Elektroniki Medycznej Alfanumeryczny wyświetlacz LCD Wyświetlacz LCD zagadnienia:
Programowanie mikrokontrolerów. 8 listopada 2007
Programowanie mikrokontrolerów Marcin Engel Marcin Peczarski 8 listopada 2007 Alfanumeryczny wyświetlacz LCD umożliwia wyświetlanie znaków ze zbioru będącego rozszerzeniem ASCII posiada zintegrowany sterownik
Poradnik programowania procesorów AVR na przykładzie ATMEGA8
Poradnik programowania procesorów AVR na przykładzie ATMEGA8 Wersja 1.0 Tomasz Pachołek 2017-13-03 Opracowanie zawiera opis podstawowych procedur, funkcji, operatorów w języku C dla mikrokontrolerów AVR
1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych
Dodatek A Wyświetlacz LCD. Przeznaczenie i ogólna charakterystyka Wyświetlacz ciekłokrystaliczny HY-62F4 zastosowany w ćwiczeniu jest wyświetlaczem matrycowym zawierającym moduł kontrolera i układ wykonawczy
1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33
Spis treści 3 1. Wprowadzenie...11 1.1. Wstęp...12 1.2. Mikrokontrolery rodziny ARM...13 1.3. Architektura rdzenia ARM Cortex-M3...15 1.3.1. Najważniejsze cechy architektury Cortex-M3... 15 1.3.2. Rejestry
Zespół Szkół Technicznych. Badanie wyświetlaczy LCD
Zespół Szkół Technicznych Badanie wyświetlaczy LCD WYŚWIETLACZE LCD CZĘSC TEORETYCZNA ZALETY: ) mały pobór mocy, 2) ekonomiczność pod względem zużycia energii (pobór prądu przy 5V mniejszy niż 2mA), 3)
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości
Politechnika Lubelska Wydział Elektrotechniki i Informatyki PRACA DYPLOMOWA MAGISTERSKA Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości Marcin Narel Promotor: dr inż. Eligiusz
Szkolenia specjalistyczne
Szkolenia specjalistyczne AGENDA Programowanie mikrokontrolerów w języku C na przykładzie STM32F103ZE z rdzeniem Cortex-M3 GRYFTEC Embedded Systems ul. Niedziałkowskiego 24 71-410 Szczecin info@gryftec.com
Listing_ $crystal = deklaracja
------------------------------------------------- Listing_4 ---------------------------------------------------- $crystal = 8000000 deklaracja częstotliwości kwarcu $regfile "m8def.dat" biblioteka mikrokontrolera
Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać
MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty
4 Transmisja szeregowa, obsługa wyświetlacza LCD.
1 4 Transmisja szeregowa, obsługa wyświetlacza LCD. Zagadnienia do przygotowania: - budowa i działanie interfejsu szeregowego UART, - tryby pracy, - ramka transmisyjna, - przeznaczenie buforów obsługi
Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.
Sprawozdanie z projektu MARM Część druga Specyfikacja końcowa Prowadzący: dr. Mariusz Suchenek Autor: Dawid Kołcz Data: 01.02.16r. 1. Temat pracy: Układ diagnozujący układ tworzony jako praca magisterska.
4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.
13 4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD. Zagadnienia do przygotowania: - budowa i działanie interfejsu szeregowego UART, - tryby pracy,
Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej
Struktura stanowiska laboratoryjnego Na rysunku 1.1 pokazano strukturę stanowiska laboratoryjnego Z80 z interfejsem częstościomierza- czasomierz PFL 21/22. Rys.1.1. Struktura stanowiska. Interfejs częstościomierza
2. Architektura mikrokontrolerów PIC16F8x... 13
Spis treści 3 Spis treœci 1. Informacje wstępne... 9 2. Architektura mikrokontrolerów PIC16F8x... 13 2.1. Budowa wewnętrzna mikrokontrolerów PIC16F8x... 14 2.2. Napięcie zasilania... 17 2.3. Generator
Timery w mikrokontrolerach STM32F3
Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM Podstawy Programowania Mikroprocesorów i Procesorów DSP Timery w mikrokontrolerach
start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja
----------------------------start---------------------------- Program mikroprocesorowego miernika mocy generowanej $crystal = 8000000 deklaracja częstotliwości kwarcu taktującego uc $regfile "m8def.dat"
GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu
Programowanie wyświetlacza LCD według: http://radziu.dxp.pl Wyświetlacz graficzny 2 x 16 ma 2 wiersze, 16 znaków w wierszu, każdy znak jest wyświetlany w matrycy 5 x 8 pikseli. (2*8 wierszy * 5*16 kolumn
Mikroprocesor Operacje wejścia / wyjścia
Definicja Mikroprocesor Operacje wejścia / wyjścia Opracował: Andrzej Nowak Bibliografia: Urządzenia techniki komputerowej, K. Wojtuszkiewicz Operacjami wejścia/wyjścia nazywamy całokształt działań potrzebnych
Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne
Spis treści 5 Spis treœci Co to jest mikrokontroler? Wprowadzenie... 11 Budowa systemu komputerowego... 12 Wejścia systemu komputerowego... 12 Wyjścia systemu komputerowego... 13 Jednostka centralna (CPU)...
Laboratorium Komputerowe Systemy Pomiarowe
Jarosław Gliwiński, Łukasz Rogacz Laboratorium Komputerowe Systemy Pomiarowe ćw. Zastosowanie standardu VISA do obsługi interfejsu RS-232C Data wykonania: 03.04.08 Data oddania: 17.04.08 Celem ćwiczenia
PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.
PRZERWANIA 1. Obsługa zdarzeń, odpytywanie i Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego. Istnieją dwie metody pozyskania informacji o zdarzeniach: 1. Cykliczne
ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM
ĆWICZENIE 5 TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM Wiadomości wstępne: Port szeregowy może pracować w czterech trybach. Tryby różnią się między sobą liczbą bitów
PRZERWANIA. P1 - Procedura obslugi przerwania. Obsługa zdarzenia Z1 poprzez procedurę obsługi przerwania P1
PRZERWANIA 1. Obsługa zdarzeń poprzez Obsługa polega na przerwaniu aktualnie wykonywanego procesu i wykonaniu procedury przypisanej danemu zdarzeniu gdy takie zdarzenie zajdzie. Procedura nazywa się procedurą
Dokumentacja sterownika mikroprocesorowego "MIKSTER MCC 026"
Dokumentacja sterownika mikroprocesorowego "MIKSTER MCC 026" Sp. z o.o. 41-250 Czeladź ul. Wojkowicka 21 Tel. 032 763-77-77 Fax: 032 763-75-94 v.1.2 www.mikster.pl mikster@mikster.pl (14.11.2007) SPIS
Instrukcja do ćwiczeń
Instrukcja do ćwiczeń SYSTEMY WBUDOWANE Lab. 3 Przetwornik ADC + potencjometr 1. Należy wejść na stronę Olimexu w celu znalezienia zestawu uruchomieniowego SAM7-EX256 (https://www.olimex.com/products/arm/atmel/sam7-ex256/).
Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR
Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać
Klawiatura matrycowa
Klawiatura matrycowa Budowa matrycy klawiatury. Nieodzownym elementem każdego systemu mikroprocesorowego jest klawiatura. Umożliwia ona wpływ użytkownika na wykonywany przez niego program. Jednak teoretycznie
MultiTool instrukcja użytkownika 2010 SFAR
MultiTool instrukcja użytkownika 2010 SFAR Tytuł dokumentu: MultiTool instrukcja użytkownika Wersja dokumentu: V1.0 Data: 21.06.2010 Wersja urządzenia którego dotyczy dokumentacja: MultiTool ver. 1.00
MIKROKONTROLERY I MIKROPROCESORY
PLAN... work in progress 1. Mikrokontrolery i mikroprocesory - architektura systemów mikroprocesorów ( 8051, AVR, ARM) - pamięci - rejestry - tryby adresowania - repertuar instrukcji - urządzenia we/wy
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie
INSTRUKCJA OBSŁUGI 1. Zastosowanie Przekaźnik czasowy ETM jest zadajnikiem czasowym przystosowanym jest do współpracy z prostownikami galwanizerskimi. Pozwala on załączyć prostownik w stan pracy na zadany
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!
ćwiczenie nr 7 str.1/1 ĆWICZENIE 7 Wprowadzenie do funkcji specjalnych sterownika LOGO! 1. CEL ĆWICZENIA: zapoznanie się z zaawansowanymi możliwościami mikroprocesorowych sterowników programowalnych na
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Programowanie mikrokontrolerów 2.0
4.1 Programowanie mikrokontrolerów 2.0 Taktowanie Marcin Engel Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 22 listopada 2016 4.2 Drzewo taktowania w STM32F411 Źródło: RM0383 Reference
Generator funkcyjny. Spis treści. Działanie. Interfejs. Adam Miarka Maksymilian Szczepanik
Generator funkcyjny Wykonany przez Data wykonania Paweł Białas Adam Miarka Maksymilian Szczepanik 13 czerwca 2015 r. Generator został zbudowany w ramach XI Prezentacji Aplikacji Mikrokontrolerów Freescale.
Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI
Inż. Kamil Kujawski Inż. Krzysztof Krefta Wykład w ramach zajęć Akademia ETI Metody programowania Assembler Język C BASCOM Assembler kod maszynowy Zalety: Najbardziej efektywny Intencje programisty są
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska Współpraca z układami peryferyjnymi i urządzeniami zewnętrznymi Testowanie programowe (odpytywanie, przeglądanie) System przerwań Testowanie programowe
Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu.
Temat: Obsługa wyświetlacza LCD systemie STRC51. Ćwiczenie 5. (sd) 1.Wyświetlacz LCD. 1.1.Zasada pracy wyświetlaczy LCD i kody sterujące. Standardem na rynku wyświetlaczy LCD alfanumerycznych, są moduły
/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>
Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
1. Tworzenie nowego projektu.
Załącznik do Instrukcji 1. Tworzenie nowego projektu. Wybieramy opcję z menu głównego New->QNX C Project. Wprowadzamy nazwę przechodzimy do następnego kroku NEXT. Wybieramy platformę docelową oraz warianty
1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro
1. Cel ćwiczenia Celem ćwiczenia jest zaprojektowanie sterowania układem pozycjonowania z wykorzystaniem sterownika VersaMax Micro oraz silnika krokowego. Do algorytmu pozycjonowania wykorzystać licznik
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
dokument DOK 02-05-12 wersja 1.0 www.arskam.com
ARS3-RA v.1.0 mikro kod sterownika 8 Linii I/O ze zdalną transmisją kanałem radiowym lub poprzez port UART. Kod przeznaczony dla sprzętu opartego o projekt referencyjny DOK 01-05-12. Opis programowania
Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych
Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych B.1. Dostęp do urządzeń komunikacyjnych Sterowniki urządzeń zewnętrznych widziane są przez procesor jako zestawy rejestrów
Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski
Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej Systemy wbudowane Witold Kozłowski Zakład Fizyki i Technologii Struktur Nanometrowych 90-236 Łódź, Pomorska 149/153 https://std2.phys.uni.lodz.pl/mikroprocesory/
Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.
Generowanie sygnałów testowych VHDL Wariant współbieżny (bez procesu): sygnał
2. PORTY WEJŚCIA/WYJŚCIA (I/O)
2. PORTY WEJŚCIA/WYJŚCIA (I/O) 2.1 WPROWADZENIE Porty I/O mogą pracować w kilku trybach: - przesyłanie cyfrowych danych wejściowych i wyjściowych a także dla wybrane wyprowadzenia: - generacja przerwania
Programowanie mikrokontrolerów 2.0
Programowanie mikrokontrolerów 2.0 Tryby uśpienia Marcin Engel Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 19 grudnia 2016 Zarządzanie energią Często musimy zadbać o zminimalizowanie
1.2. Architektura rdzenia ARM Cortex-M3...16
Od Autora... 10 1. Wprowadzenie... 11 1.1. Wstęp...12 1.1.1. Mikrokontrolery rodziny ARM... 14 1.2. Architektura rdzenia ARM Cortex-M3...16 1.2.1. Najważniejsze cechy architektury Cortex-M3... 16 1.2.2.
Kod produktu: MP01611-ZK
ZAMEK BEZSTYKOWY RFID ZE ZINTEGROWANĄ ANTENĄ, WYJŚCIE RS232 (TTL) Moduł stanowi gotowy do zastosowania bezstykowy zamek pracujący w technologii RFID dla transponderów UNIQUE 125kHz, zastępujący z powodzeniem
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę
Opis funkcjonalny i architektura. Modu³ sterownika mikroprocesorowego KM535
Opis funkcjonalny i architektura Modu³ sterownika mikroprocesorowego KM535 Modu³ KM535 jest uniwersalnym systemem mikroprocesorowym do pracy we wszelkiego rodzaju systemach steruj¹cych. Zastosowanie modu³u
Hardware mikrokontrolera X51
Hardware mikrokontrolera X51 Ryszard J. Barczyński, 2016 Politechnika Gdańska, Wydział FTiMS, Katedra Fizyki Ciała Stałego Materiały dydaktyczne do użytku wewnętrznego Hardware mikrokontrolera X51 (zegar)
Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury
Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury Cel ćwiczenia: Głównym celem ćwiczenia jest nauczenie się obsługi klawiatury. Klawiatura jest jednym z urządzeń wejściowych i prawie zawsze występuje
Porty GPIO w mikrokontrolerach STM32F3
Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM Podstawy Programowania Mikroprocesorów i Procesorów DSP Porty GPIO w mikrokontrolerach
ZASOBY ZMIENNYCH W STEROWNIKACH SAIA-BURGESS
ZASOBY ZMIENNYCH W STEROWNIKACH SAIA-BURGESS Autorzy Wydanie Data : : : Zespół SABUR Sp. z o.o. 3.00 Sierpień 2013 2013 SABUR Sp. z o. o. Wszelkie prawa zastrzeżone Bez pisemnej zgody firmy SABUR Sp. z
Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa
Projekt MARM Dokumentacja projektu Łukasz Wolniak Stacja pogodowa 1. Cel projektu Celem projektu było opracowanie urządzenia do pomiaru temperatury, ciśnienia oraz wilgotności w oparciu o mikrokontroler
PMiK Programowanie Mikrokontrolera 8051
PMiK Programowanie Mikrokontrolera 8051 Wykład 3 Mikrokontroler 8051 PMiK Programowanie mikrokontrolera 8051 - wykład S. Szostak (2006) Zmienna typu bit #define YES 1 // definicja stałych #define NO 0
Opis czytnika TRD-FLAT CLASSIC ver. 1.1. Naścienny czytnik transponderów UNIQUE w płaskiej obudowie
TRD-FLAT CLASSIC Naścienny czytnik transponderów UNIQUE w płaskiej obudowie Podstawowe cechy : zasilanie od 3V do 6V 4 formaty danych wyjściowych POWER LED w kolorze żółtym czerwono-zielony READY LED sterowany
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
PRUS. projekt dokumentacja końcowa
Adrian Antoniewicz Marcin Dudek Mateusz Manowiecki 17.01.2007 PRUS projekt dokumentacja końcowa Temat: Układ zdalnego sterowania (za pomocą interfejsu RS-232) wyświetlaczem LCD. Spis treści: 1. 2. 3. 4.
Kod produktu: MP01611
CZYTNIK RFID ZE ZINTEGROWANĄ ANTENĄ, WYJŚCIE RS232 (TTL) Moduł stanowi tani i prosty w zastosowaniu czytnik RFID dla transponderów UNIQUE 125kHz, umożliwiający szybkie konstruowanie urządzeń do bezstykowej
Programowanie w językach asemblera i C
Programowanie w językach asemblera i C Mariusz NOWAK Programowanie w językach asemblera i C (1) 1 Dodawanie dwóch liczb - program Napisać program, który zsumuje dwie liczby. Wynik dodawania należy wysłać
Podstawy programowania w języku C i C++
Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Systemy Czasu Rzeczywistego Programowanie wyświetlacza graficznego LCD laboratorium: 01 autor: mgr inż. Paweł Pławiak
PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA
EGMONT INSTRUMENTS PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA EGMONT INSTRUMENTS tel. (0-22) 823-30-17, 668-69-75 02-304 Warszawa, Aleje Jerozolimskie 141/90 fax (0-22) 659-26-11
Metody obsługi zdarzeń
SWB - Przerwania, polling, timery - wykład 10 asz 1 Metody obsługi zdarzeń Przerwanie (ang. Interrupt) - zmiana sterowania, niezależnie od aktualnie wykonywanego programu, spowodowana pojawieniem się sygnału
Przerwania, polling, timery - wykład 9
SWB - Przerwania, polling, timery - wykład 9 asz 1 Przerwania, polling, timery - wykład 9 Adam Szmigielski aszmigie@pjwstk.edu.pl SWB - Przerwania, polling, timery - wykład 9 asz 2 Metody obsługi zdarzeń
Sterowanie wyświetlaczem graficznym z kontrolerem firmy Toshiba T6963C kod programu.
Sterowanie wyświetlaczem graficznym z kontrolerem firmy Toshiba T6963C kod programu. Edgar Ostrowski Jan Kędzierski www.konar.ict.pwr.wroc.pl Wrocław, 28.01.2007 1 Spis treści 1 Wstęp... 3 2 Linki... 3
IMP Tester v 1.1. Dokumentacja Techniczno Ruchowa
EL-TEC Sp. z o.o. ul. Wierzbowa 46/48 93-133 Łódź tel: +48 42 678 38 82 fax: +48 42 678 14 60 e-mail: info@el-tec.com.pl http://www.el-tec.com.pl IMP Tester v 1.1 Dokumentacja Techniczno Ruchowa Spis treści:
Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED
Ćwiczenie 2 Siedmiosegmentowy wyświetlacz LED 2-1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się studentów ze sposobem obsługi wielopozycyjnego 7-segmentowego wyświetlacza LED multipleksowanego programowo
Co nie powinno być umieszczane w plikach nagłówkowych:
Zawartość plików nagłówkowych (*.h) : #include #define ESC 27 dyrektywy dołączenia definicje stałych #define MAX(x,y) ((x)>(y)?(x):(y)) definicje makr int menu(char* tab[], int ilosc); struct
Architektura komputerów
Architektura komputerów Wykład 12 Jan Kazimirski 1 Magistrale systemowe 2 Magistrale Magistrala medium łączące dwa lub więcej urządzeń Sygnał przesyłany magistralą może być odbierany przez wiele urządzeń
Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów
Adresowanie obiektów Bit - stan pojedynczego sygnału - wejście lub wyjście dyskretne, bit pamięci Bajt - 8 bitów - wartość od -128 do +127 Słowo - 16 bitów - wartość od -32768 do 32767 -wejście lub wyjście
1. Podstawowe wiadomości...9. 2. Możliwości sprzętowe... 17. 3. Połączenia elektryczne... 25. 4. Elementy funkcjonalne programów...
Spis treści 3 1. Podstawowe wiadomości...9 1.1. Sterowniki podstawowe wiadomości...10 1.2. Do czego służy LOGO!?...12 1.3. Czym wyróżnia się LOGO!?...12 1.4. Pierwszy program w 5 minut...13 Oświetlenie
Komunikacja w mikrokontrolerach. Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface
Komunikacja w mikrokontrolerach Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 14: Programowanie współbieżne w C Definicja programowania współbieżnego Programowanie współbieżne jest tworzeniem programów, których wykonanie powoduje uruchomienie
Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe
Arduino C - stałe Systemy Wbudowane Arduino C Wersja 2018 Unikać redefiniowania istniejących stałych. Stosowane dla polepszenia zrozumiałości kodu. Lepiej HIGH niż 0x01 Lepiej INPUT_PULLUP niż 0x2 Uwzględniają
Technika Mikroprocesorowa
Technika Mikroprocesorowa Dariusz Makowski Katedra Mikroelektroniki i Technik Informatycznych tel. 631 2648 dmakow@dmcs.pl http://neo.dmcs.p.lodz.pl/tm 1 System mikroprocesorowy? (1) Magistrala adresowa
Komunikacja w mikrokontrolerach Laboratorium
Laboratorium Ćwiczenie 4 Magistrala SPI Program ćwiczenia: konfiguracja transmisji danych między mikrokontrolerem a cyfrowym czujnikiem oraz sterownikiem wyświetlaczy 7-segmentowych przy użyciu magistrali
Programowanie mikrokontrolerów - laboratorium
Państwowa Wyższa Szkoła Zawodowa w Nowym Sączu Instytut Techniczny Programowanie mikrokontrolerów- laboratorium Nazwisko i imię 1. 2. Data wykonania ćwiczenia: Grupa: Ocena sprawozdania Zaliczenie: Symbol:
Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy
KOMPUTEROWE SYSTEMY POMIAROWE
KOMPUTEROWE SYSTEMY POMIAROWE Dr inż. Eligiusz PAWŁOWSKI Politechnika Lubelska Wydział Elektrotechniki i Informatyki Prezentacja do wykładu dla EMST - ITE Semestr zimowy Wykład nr 8 Prawo autorskie Niniejsze
Obsługa modułu wyświetlacza LCD
Kurs programowania mikrokontrolerów PIC (4) Obsługa modułu wyświetlacza LCD Dodatkowe materiały na CD/FTP Niestety, jeszcze nie doczekaliśmy się urządzeń, które komunikują się z nami w ludzki sposób, tzn.
Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307
Język C Wykład 9: Mikrokontrolery cz.2 Łukasz Gaweł Chemia C pokój 307 lukasz.gawel@pg.edu.pl Pierwszy program- powtórka Częstotliwość zegara procesora μc (należy sprawdzić z kartą techniczną μc) Dodaje
Laboratorium Komputerowe Systemy Pomiarowe
Jarosław Gliwiński, Łukasz Rogacz Laboratorium Komputerowe Systemy Pomiarowe ćw. Programowanie wielofunkcyjnej karty pomiarowej w VEE Data wykonania: 15.05.08 Data oddania: 29.05.08 Celem ćwiczenia była
System wizyjny OMRON Xpectia FZx
Ogólna charakterystyka systemu w wersji FZ3 w zależności od modelu można dołączyć od 1 do 4 kamer z interfejsem CameraLink kamery o rozdzielczościach od 300k do 5M pikseli możliwość integracji oświetlacza
Obługa czujników do robota śledzącego linie. Michał Wendland 171628 15 czerwca 2011
Obługa czujników do robota śledzącego linie. Michał Wendland 171628 15 czerwca 2011 1 Spis treści 1 Charakterystyka projektu. 3 2 Schematy układów elektronicznych. 3 2.1 Moduł czujników.................................
Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:
Współpraca mikroprocesora z urządzeniami zewnętrznymi Urządzenia wejścia-wyjścia, urządzenia których zadaniem jest komunikacja komputera z otoczeniem (zwykle bezpośrednio z użytkownikiem). Do najczęściej