i uzyskać całkowicie zgaszoną diodę dla wypełnienia od wciśniętego przycisku inkrementowane lub dekrementowane
|
|
- Agata Nowak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Kurs AVR lekcja 5 Rozwiązania zadań z ostatniego odcinka Pierwszym zadaniem domowym z poprzedniego odcinka była poprawa prostego miernika częstotliwości tak, aby działał także z małą częstotliwością oraz w przypadku jej braku. Możemy to zrobić w ten sposób, że będziemy sprawdzać, czy pomiędzy zdarzeniami przepełnienia się licznika pojawiło się jakieś zbocze na wejściu ICP1. Gdy licznik się przepełnia i ustawiona zostaje flaga TOV1, ustawiamy zmienną overflow na 1. Wcześniej jednak sprawdzamy, czy nie została ona wyzerowana przez funkcję Input Capture. Jeśli nie została wyzerowana, to ustawiamy rejestr PORTA na 1, co spowoduje zaświecenie pierwszej diody. Rozwiązujemy w ten sposób problem z niepoprawnym wskazaniem przy braku sygnału wejściowego. Ponadto trzeba poprawić sprawdzanie, czy wykryliśmy drugie zdarzenie Input Capture, które jest sygnałem, że można wykonać obliczenia. Może się bowiem zdarzyć tak, że między dwoma zdarzeniami upłynie wiele okresów licznika, ale odejmowanie wartości rejestru ICR1 da wynik taki, jakby zdarzenia te były w jednym okresie licznika. Dlatego przy przepełnieniu licznika możemy dodać zerowanie zmiennej previcr1 i obliczenia wykonywać tylko wtedy, gdy zmienna ta jest różna od zera (listing 1). #include <avr/io.h> DDRA = 0b ; uint16_t previcr1 = 0; uint8_t overflow = 0; if(tifr & _BV(ICF1)) { TIFR = _BV(ICF1); if (ICR1 > previcr1 && previcr1) { uint16_t period = ICR1 - previcr1; uint16_t freq = 500 / period; PORTA = _BV(freq); overflow = 0; previcr1 = ICR1; if(tifr & _BV(TOV1)) { TIFR = _BV(TOV1); if (overflow) PORTA = 1; overflow = 1; previcr1 = 0; Listing 1 Drugim zadaniem była zmiana koloru diody RGB za pomocą klawiatury. Potrzebujemy do tego celu trzech sygnałów PWM i możliwości sterowania ich wypełnieniem. Jeden sygnał PWM możemy wygenerować za pomocą Timer0, a dwa za pomocą Timer1, gdyż ma on dwa kanały. Timery pracują w trybie 8-bitowym. Funkcja PWM ma włączoną korekcję fazy, aby wyeliminować niepożądane szpilki dla zerowego wypełnienia i uzyskać całkowicie zgaszoną diodę dla wypełnienia zerowego. W zależności od wciśniętego przycisku inkrementowane lub dekrementowane są zmienne dla każdego koloru. Klawisze pierwszego rzędu klawiatury zwiększają intensywność świecenia, a klawisze dolnego rzędu zmniejszają. Używana jest funkcja readkeyboard() znana z poprzednich lekcji. Rejestry timerów ustawiane są na wartości będące kwadratami wartości zmiennych, aby uzyskać sterowanie nieliniowe. Po ustawieniu rejestrów wypełnienia PWM program czeka na puszczenie przycisku klawiatury. Zostały użyte zmienne ze znakiem (typu int8_t) ze względu na możliwość obsługi wartości 1, która może się pojawić przy próbie ściemnienia zgaszonego już koloru. W listingu 2 znajduje się sama funkcja main(). Tematem trzeciego zadania było samoczynne zmienianie się kolorów diody. Możemy wykorzystać kod z poprzedniego zadania, ale zmiany koloru nie uzależniać już od klawiatury. Kolory składowe mogą być zmieniane według różnych algorytmów. Prostym rozwiązaniem może być np. zmienianie intensywności każdego koloru z różną częstotliwością (listing 3). Najwolniej zmieniana jest intensywność koloru czerwonego. Kolor zielony zmienia intensywność dwa razy szybciej, a niebieski trzy razy. W ten sposób w ciągu czasu otrzymujemy różne kombinacje kolorystyczne. Przy osiągnięciu wartości skrajnej odwracany jest kierunek zmian. Podział przez 5 i 10 to przykład sposobu na zmniejszenie jasności niektórych kolorów w przypadku, gdyby dioda RGB miała niektóre kolory intensywniejsze od innych. Obsługa wyświetlacza LCD W tej lekcji przyjrzymy się największemu elementowi na naszej płytce testowej: wyświetlaczowi LCD. Jest DDRD = _BV(DDD4) _BV(DDD5); DDRB = _BV(DDB3); DDRA = _BV(DDA0) _BV(DDA1) _BV(DDA2) _BV(DDA3); TCCR1A = _BV(WGM10) _BV(COM1A1) _BV(COM1B1); TCCR0 = _BV(WGM00) _BV(COM01) _BV(CS01); int8_t r = 0; int8_t g = 0; int8_t b = 0; uint8_t val = readkeyboard(); if (val) { switch (val) { case 1: r++; break; case 2: g++; break; case 3: b++; break; case 5: r--; break; case 6: g--; break; case 7: b--; break; if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0; if (r > 15) r = 15; if (g > 15) g = 15; if (b > 15) b = 15; OCR1A = r * r; OCR1B = g * g; OCR0 = b * b; while(readkeyboard()); Listing 2 to wyświetlacz alfanumeryczny, mogący prezentować dwie linijki po 16 znaków, wyposażony w sterownik zgodny z układem HD Tego typu wyświetlacze są szeroko stosowane od wielu lat. W EdW były już szczegółowo opisywane w numerach 11/97 3/98. Tutaj z racji ograniczonego miejsca skupimy się na najważniejszych informacjach. Co to znaczy, że wyświetlacz jest alfanumeryczny? Oznacza to, że potrafi on Listing 3 DDRD = _BV(DDD4) _BV(DDD5); DDRB = _BV(DDB3); DDRA = _BV(DDA0) _BV(DDA1) _BV(DDA2) _BV(DDA3); TCCR1A = _BV(WGM10) _BV(COM1A1) _BV(COM1B1); TCCR0 = _BV(WGM00) _BV(COM01) _BV(CS01); uint8_t r = 0; uint8_t rd = 1; uint8_t g = 0; uint8_t gd = 1; uint8_t b = 0; uint8_t bd = 1; if (rd) r++; else r--; if (gd) g += 2; else g -= 2; if (bd) b += 3; else b -= 3; if (r == 255 r == 0) { rd =!rd; if (g == 254 g == 0) { gd =!gd; if (b == 255 b == 0) { bd =!bd; OCR1A = r; OCR1B = g / 5; OCR0 = b / 10; _delay_ms(10); Elektronika dla Wszystkich Wrzesień
2 10k R1 wyświetlać litery, cyfry i inne Rys. 1 symbole, których kształty ma zapisane w swojej pamięci. Użytkownik nie musi zajmować się każdym pikselem oddzielnie. Określa tylko, na której pozycji jaki znak ma być wyświetlony. Gdybyśmy jednak chcieli wyświetlić znak, którego wyświetlacz nie obsługuje, też mamy taką możliwość. Dostępna jest pamięć 8 znaków, których wygląd można zdefiniować piksel po pikselu. Podłączanie wyświetlacza. Rozkład wyprowadzeń jest widoczny na rysunku 1. VSS i VDD to zasilanie. Możemy używać napięcia zasilającego w zakresie 3,3 5V, w nowszych modelach 2,7 5,5V. Napięcie na nóżce VO steruje kontrastem. Zwykle podłącza się do niej potencjometr montażowy, pracujący jako dzielnik napięcia zasilającego. W ten sposób można ustawić potrzebny kontrast. Jeśli ktoś ma w swoich zbiorach bardzo stary model wyświetlacza, może być konieczne dostarczenie ujemnego napięcia dla kontrastu. Napięcie takie można wytworzyć np. za pomocą układu ICL7660. Końcówki A i K to nóżki zasilania podświetlenia, w zakresie do 5V. Niektóre wyświetlacze mogą być pozbawione podświetlenia i nie mieć tych wyprowadzeń. Pozostałe nóżki to cyfrowe linie sterujące oraz danych. Wyprowadzenie RS decyduje o tym, czy do wyświetlacza przekazujemy kod znaku do wyświetlenia (nóżka w stanie wysokim), czy też komendę sterującą jego pracą (nóżka w stanie niskim). Za pomocą nóżki R/W przełączamy się między odczytem (stan wysoki) a zapisem (stan niski) do wyświetlacza. W układach niekorzystających z funkcji odczytu z wyświetlacza nóżkę R/W łączy się na stałe z masą. Nóżka E synchronizuje przesył danych. Są one zapisywane lub odczytywane na opadającym zboczu na tejże nóżce. Jeśli więc chcemy np. przesłać kod znaku do wyświetlenia, wówczas ustawiamy RS na 1, RW na 0, kod znaku binarnie na liniach danych (DB0 DB7), a następnie przestawiamy E z 1 na 0. Jeśli linia E była już w stanie 0, trzeba ją najpierw na chwilę przestawić w stan 1. Dane mogą być przesyłane z/do wyświetlacza 8-bitowo, z wykorzystaniem wszystkich linii DB0 DB7. Nie jest to jednak zbyt praktyczne, bo nawet jeśli nie używamy nóżki R/W, to do obsługi wyświetlacza musimy wykorzystać łącznie aż 10 nóżek 36 VCC VSS VDD VO RS RW E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 VCC A K mikrokontrolera. Nie jest to pożądana sytuacja, bo wymusza użycie mikrokontrolera z większą liczbą nóżek, a więc zwykle droższego, oraz komplikuje płytkę drukowaną. Na szczęście możemy wykorzystać komunikację 4-bitową, wówczas wykorzystywane są końcówki DB4 DB7, a DB0 DB3 pozostają niepodłączone. Oczywiście oznacza to pewne utrudnienie, bo każdy bajt trzeba przesyłać w dwóch krokach: najpierw starsze 4 bity, potem młodsze 4 bity. Nie jest to jednak duży problem z programistycznego punktu widzenia. Sterowanie 8-bitowe wykorzystuje się w sumie tylko wtedy, gdy w układzie już jest używana 8-bitowa magistrala. Rodzaje pamięci. Wyświetlacze zgodne z HD44780 mają trzy pamięci: CG ROM, CG RAM i DD RAM. W CG ROM (Character Generator ROM) zapisany jest wygląd poszczególnych znaków obsługiwanych przez wyświetlacz. W CG RAM (64 bajty) użytkownik może zdefiniować własne znaki, piksel po pikselu, po 8 bajtów na każdy z 8 znaków użytkownika. Każdy bajt opisuje piksele jednej linijki znaku. 8 znaków to za mało, aby np. zdefiniować wszystkie polskie litery, małe i duże, ale zwykle nie są potrzebne wszystkie i taka pojemność pamięci CG RAM jest wystarczająca. Kody znaków, które mają być wyświetlone, przechowywane są w pamięci DD RAM (Display Data RAM). Modyfikując tę pamięć, zmieniamy wyświetlaną treść, kolejne bajty odpowiadają kolejnym pozycjom na wyświetlaczu. Jeśli do danej komórki DD RAM wpiszemy kod od 0 do 15, na odpowiadającej tej komórce pozycji wyświetlony zostanie zdefiniowany przez nas znak z CG RAM. Pamięć ta ma tylko 8 bajtów, więc kody od 8 do 15 dają takie same znaki, jak kody od 0 do 7. Kody od 16 do 127 dają standardowe znaki ASCII, o wyglądzie zdefiniowanym w CG ROM. Np. aby wyświetlić literę E, trzeba zapisać do CG RAM liczbę 69, bo jest to jej kod ASCII. Kody od 128 w górę dają znaki zależne od producenta wyświetlacza, zwykle japońskie lub zachodnioeuropejskie. Pamięć DD RAM ma 80 bajtów. Jeśli mamy wyświetlacz jednowierszowy, pamięć ta adresowana jest zwyczajnie, od adresu 00h do 4Fh. Nasz wyświetlacz ma jednak dwa wiersze i adresowanie wygląda inaczej: po 40 bajtów na górną i dolną linijkę, przy czym adresacja nie jest już ciągła. Pierwsze 40 bajtów ma adresy od 00h do 27h, a drugie 40 bajtów ma adresy od 40h do 67h. Chcąc więc np. wyświetlić literkę na drugiej pozycji drugiego wiersza, trzeba ją zapisać pod adresem 41h (65 dziesiętnie). Można sobie zadać pytanie, jaki sens ma pamięć większa niż pole odczytowe wyświetlacza? Po pierwsze daje to pewną Wrzesień 2016 uniwersalność, jest jeden model pamięci do różnych wyświetlaczy. Po drugie wyświetlacz ma funkcję przewijania. Jeśli potrzebujemy przewijać dłuższy tekst, możemy go wysłać w całości do wyświetlacza i potem wydawać tylko komendę przesuwającą. Gdyby pamięć miała tylko 2*16=32 bajty, to chcąc uzyskać efekt przewijania dłuższego tekstu, trzeba by w każdym kroku na nowo wysyłać odpowiednio przycięty tekst. Podobnie przewijanie można wykorzystać do przełączania się między wyświetlaniem dwóch różnych komunikatów. Wystarczy zapisać oba w pamięci, jeden w części widocznej a drugi w niewidocznej, a potem w razie potrzeby przewijać. Oba wiersze wyświetlacza przewijane są niezależnie. Nie ma więc obawy, że tekst z górnego wiersza pojawi się w dolnym. Komendy sterujące. Oprócz kodów znaków do wyświetlenia, do wyświetlacza można wysyłać też różne komendy sterujące jego pracą. Protokół komunikacyjny został przedstawiony w tabeli 1. Jak widać, komendy wydawane są, gdy linia RS jest w stanie niskim. W stanie niskim jest też linia R/W, z wyjątkiem sytuacji, gdy odczytujemy flagę zajętości. Komendy są ośmiobitowe. Ich charakterystyczną cechą jest to, że z lewej strony, czyli od najbardziej znaczących bitów, mają określoną liczbę zer a następnie jedynkę. Miejsce, w którym wypada ta jedynka, identyfikuje komendę. Bity znajdujące się na prawo od tej jedynki, czyli mniej znaczące, są dodatkowymi parametrami komendy. Przykładem może być komenda Display ON/OFF, która ma trzy bity parametrów: D, C i B. Ustawienie 1 na tych bitach pozwala odpowiednio: włączyć wyświetlacz, włączyć kursor i włączyć miganie kursora. Kursor pokazuje, gdzie pojawi się kolejny znak, czyli wskazuje aktualną komórkę pamięci DD RAM, która zostanie zapisana, gdy wyślemy do wyświetlacza kod jakiegoś znaku. Znaczenie bitów: I/D inkrementacja/dekrementacja, 1 to przesuwanie kursora w prawo, 0 to przesuwanie w lewo S jeśli ustawiony na 1, to wyświetlacz przewija się w momencie wpisywania znaków D 1 włącza wyświetlacz C 1 włącza wyświetlanie znaku kursora (_) B 1 włącza miganie w miejscu kursora S/C 1 przewija wyświetlacz, 0 przesuwa kursor R/L 1 przesuwa w prawo, 0 w lewo DL 1 ustawia interfejs 8-bitowy, 0 ustawia 4-bitowy N 1 dla wyświetlacza 2-wierszowego, 0 dla 1-wierszowego F 1 ustawia czcionkę 5x10 pikseli, 0 ustawia czcionkę 5x8 pikseli Elektronika dla Wszystkich
3 Na uwagę zasługują komendy do adresacji CG RAM i DD RAM. Za ich pomocą informujemy wyświetlacz, do której komórki pamięci CG RAM lub DD RAM ma trafić przesyłany później znak. Przydatne jest to szczególnie do DD RAM, bo dzięki temu możemy łatwo umieszczać znaki w dowolnych miejscach wyświetlacza. Inicjalizacja wyświetlacza. Zanim zaczniemy korzystać z wyświetlacza, musimy go zainicjalizować. Niestety wyświetlacze z omawianym sterownikiem HD44780 nie są od razu gotowe do pracy i konieczne jest najpierw wydanie kilku komend. Inicjalizacja przebiega różnie dla trybu 8-bitowego i 4-bitowego, jednak początek jest taki sam, niezależnie od liczby podłączonych linii danych. Po włączeniu zasilania konieczne jest odczekanie 15 milisekund. Potem trzeba wydać komendę Function Set określającą interfejs 8-bitowy. Następnie trzeba odczekać co najmniej 4,1 milisekundy i znów wydać tę samą komendę. Odczekując jeszcze 100 mikrosekund, trzeba wydać komendę po raz trzeci. Dopiero teraz można przejść w tryb 4-bitowy, wydając komendę Function Set z określeniem interfejsu 4-bitowego. Jeśli to zrobimy, kolejne komendy trzeba już wydawać w trybie zgodnym z zasadą działania interfejsu 4-bitowego, czyli w dwóch krokach, po pół bajtu. Kolejne komendy inicjalizacyjne to znów Function Set, ale już z określonymi bitami N i F, następnie Display OFF, Clear oraz Entry Mode Set. Na koniec pozostaje włączenie wyświetlacza. Biblioteka dla wyświetlacza. Spróbujmy napisać kod do obsługi wyświetlacza. Dobrze by było, aby miał postać biblioteki, którą łatwo będzie dołączać do tworzonych projektów. Stwórzmy więc w Atmel Studio nowy projekt i obok głównego pliku.c z kodem utwórzmy plik lcd.c. Będziemy w nim umieszczać tylko to, co jest związane z obsługą LCD. Potrzebny będzie też plik nagłówkowy lcd.h, za pomocą którego będziemy udostępniać funkcje LCD głównemu plikowi projektu. W okienku Solution Explorer klikamy więc prawym przyciskiem na projekcie i z menu wybieramy Add -> New Item Z listy wybieramy C Tabela 1 File i jako nazwę wpisujemy lcd.c. Następnie dodajemy podobnie plik nagłówkowy, wybierając Include File i wpisując lcd.h. Założeniem jest też, że nasza biblioteka, którą można też nazwać sterownikiem, ma obsługiwać zarówno interfejs 8-, jak i 4-bitowy. Oprócz zapisu do modułu będzie też obsługiwany odczyt. Bibliotekę będziemy pisać od funkcji najniższego poziomu, przechodząc do wysokopoziomowych. Na najniższym poziomie znajduje się sterowanie wyprowadzeniami wyświetlacza. Wyprowadzenia te są połączone z określonymi pinami mikrokontrolera, potrzebujemy więc ustawiać te piny w odpowiednie stany. Przerabialiśmy to już w pierwszych lekcjach kursu, ale pomyślmy, jak to zrobić, aby nasza biblioteka była konfigurowalna. Zdefiniujmy więc makra dla pinów połączonych z wyświetlaczem. #define LCD_E_PIN PORTA0 #define LCD_RW_PIN PORTA1 #define LCD_RS_PIN PORTA2 #define LCD_E_PORT PORTA #define LCD_RW_PORT PORTA #define LCD_RS_PORT PORTA #define LCD_E_DDR DDRA #define LCD_RW_DDR DDRA #define LCD_RS_DDR DDRA W ten sposób, podłączając wyświetlacz do innych pinów, musimy tylko zmienić definicje makr w jednym miejscu. Nie trzeba przeglądać całego kodu w poszukiwaniu odwołań do nich. Za pomocą makr możemy też zdefiniować operacje ustawiające stan pinu: #define LCD_E_LOW LCD_E_PORT &= ~_BV(LCD_E_PIN) #define LCD_RW_LOW LCD_RW_PORT &= ~_BV(LCD_RW_PIN) #define LCD_RS_LOW LCD_RS_PORT &= ~_BV(LCD_RS_PIN) #define LCD_E_HIGH LCD_E_PORT = _BV(LCD_E_PIN) #define LCD_RW_HIGH LCD_RW_PORT = _BV(LCD_RW_PIN) #define LCD_RS_HIGH LCD_RS_PORT = _BV(LCD_RS_PIN) Dzięki temu, aby np. ustawić linię R/W w stan niski wystarczy, że napiszemy: LCD_RW_LOW; Można w ten sposób zwiększyć czytelność kodu. A co z liniami danych? Dla nich też moglibyśmy zdefiniować takie makra. Dzięki temu moglibyśmy korzystać z dowolnych, niezajętych pinów mikrokontrolera. Zwykle jednak nie ma takiej potrzeby i można wykorzystać po prostu cały port (dla trybu 8-bitowego) lub jego połówkę. Upraszcza to kod, bo nie trzeba wystawiać wyświetlaczowi bajtu bit po bicie, tylko po prostu wystawić całą liczbę (lub jej połówkę dla trybu 4-bitowego) na danym porcie. Tak też zrobimy: dla trybu 8-bitowego wykorzystamy cały port, a dla trybu 4-bitowego jego starsze piny (bity). #define LCD_DATA_PORT PORTA #define LCD_DATA_INPUT PINA #define LCD_DATA_DDR DDRA W założeniach napisaliśmy, że nasz sterownik ma obsługiwać zarówno tryb 8-, jak i 4-bitowy. Zdefiniujmy więc makro, które będzie oznaczało, że sterownik jest kompilowany dla trybu 4-bitowego. Brak tego makra (usunięcie lub zakomentowanie) będzie oznaczał tryb 8-bitowy. #define BITS4 Możemy teraz przejść do pisania funkcji zapisującej dane do wyświetlacza. Będzie to funkcja wykonująca jeden transfer, a więc dla trybu 4-bitowego przesłanie połówki bajtu. Przesyłana może być dana lub komenda, więc funkcja musi wiedzieć, jak ma ustawić linię RS. Funkcja musi więc pobierać co najmniej dwa parametry: wartość do przesłania oraz stan RS. Ponadto może zachodzić konieczność sprawdzenia stanu zajętości modułu, żeby nie wysyłać do niego danych zbyt szybko. Można co prawda stosować opóźnienia, ale bardziej eleganckie jest sprawdzanie flagi zajętości, szczególnie jeśli zdecydowaliśmy się na obsługę odczytu danych z wyświetlacza. Zajętość sprawdza się na początku transferu bajtu. Jeśli więc używamy trybu 4-bitowego i mamy dwa transfery na bajt, to flagę sprawdza się tylko przed pierwszym transferem. Trzecim parametrem naszej funkcji będzie więc wartość określająca konieczność sprawdzenia flagi. Otrzymujemy w ten sposób poniższą deklarację: void lcdwrite(uint8_t data, uint8_t rs, uint8_t checkbusyflag); Flagę odczytuje się w ten sposób, że wydajemy komendę odczytującą bieżący adres pamięci. Ponieważ adres jest 7-bitowy, najstarszy bit używany jest jako flaga zajętości. Jeśli moduł jest zajęty, wykonujemy opóźnienie i sprawdzamy ponownie. Początek naszej funkcji będzie wyglądał następująco: if (checkbusyflag) while (lcdreadaddress() & 0b ) _delay_us(20); Funkcji odczytującej adres jeszcze nie Elektronika dla Wszystkich Wrzesień
4 mamy, napiszemy ją później. Gdy w odczytanej wartości występuje jedynka na najstarszym bicie, wykonywane jest 20-mikrosekundowe opóźnienie za pomocą standardowej funkcji opóźniającej. Po sprawdzeniu zajętości modułu możemy ustawić linie R/W oraz RS. Ponieważ wykonujemy zapis, linia R/W będzie w stanie niskim. Natomiast stan linii RS będzie zależał od przekazanego parametru. LCD_RW_LOW; if (rs) LCD_RS_HIGH; else LCD_RS_LOW; Ze względu na przeprowadzanie zapisu, musimy piny danych ustawić jako wyjścia. W trybie 8-bitowym dla całego portu, w trybie 8-bitowym dla starszej połówki: LCD_DATA_DDR = 0xf0; LCD_DATA_DDR = 0xff; Kolejny krok to wystawienie transmitowanej danej. W trybie 4-bitowym chcemy ustawić tylko 4 piny z całego portu, nie ruszając pozostałych. Wykonywane jest to w dwóch krokach: w pierwszym ustawiane są zera, w drugim jedynki. LCD_DATA_PORT &= data 0x0f; //zerowanie bitów LCD_DATA_PORT = data & 0xf0; //ustawianie bitów LCD_DATA_PORT = data; Gdy dane są już wystawione, wysyłamy je przez wygenerowanie krótkiego impulsu na linii E. LCD_E_HIGH; LCD_E_LOW; W ten sposób mamy gotową funkcję wykonującą zapis do modułu. Funkcja odczytująca jest bardzo podobna. Różnice polegają na tym, że linia R/W jest w stanie wysokim, piny danych pracują jako wejścia, a dane są z nich odczytywane po narastającym zboczu na linii E. uint8_t lcdread(uint8_t rs, uint8_t checkbusyflag) { if (checkbusyflag) while (lcdreadaddress() & 0b ) _delay_us(20); LCD_RW_HIGH; if (rs) LCD_RS_HIGH; else LCD_RS_LOW; LCD_DATA_DDR &= 0x0f; LCD_DATA_DDR = 0x00; LCD_E_HIGH; uint8_t data = LCD_DATA_INPUT; LCD_E_LOW; return data; Możemy teraz przejść do funkcji wyższego poziomu. Zacznijmy od wspomnianej wcześniej funkcji odczytującej bieżący adres z wyświetlacza. Może ona wyglądać następująco: uint8_t lcdreadaddress() { return ((lcdread(0, 0) & 0xf0) (lcdread(0, 0) >> 4)); else{ return lcdread(0, 0); switchedto4bitmode jest globalną zmienną informującą o tym, czy wyświetlacz został przełączony w tryb 4-bitowy. Jest to konieczne, ponieważ na początku procesu inicjalizacji działa on w trybie 8-bitowym. Zmienna ma modyfikator static, aby była dostępna tylko w obrębie pliku lcd.c. Jeśli nastąpiło przełączenie w tryb 4-bitowy, odczyt wykonywany jest w dwóch krokach. Zwrócone wartości są następnie sklejane w jeden bajt. Odbywa się to w ten sposób, że po odebraniu starszych bitów, młodsze bity są zerowane. Gdy odbierane są młodsze bity, zwracane są one przez funkcję lcdread na starszych pozycjach, stąd konieczne jest ich przesunięcie w prawo, na pozycje młodsze. Na koniec obie połówki bajtu są łączone i cały bajt jest zwracany. Przy trybie 8-bitowym wszystko sprowadza się do zwrócenia tego, co zwróciła funkcja lcdread. Parametrami wywołania lcdread są wszędzie zera, gdyż odczytanie adresu wymaga linii RS ustawionej na 0, a sprawdzanie flagi zajętości jest wyłączone. Funkcja odczytująca dane wygląda analogicznie do funkcji odczytującej adres, z tym że linia RS jest w stanie wysokim. Ponadto jest sprawdzanie flagi zajętości przy pierwszym transferze w trybie 4-bitowym, a w trybie 8-bitowym zależnie od wartości zmiennej globalnej checkbusyflag, która jest ustawiana podczas inicjalizacji. Flagi zajętości nie można bowiem sprawdzać od początku procedury inicjalizacji. uint8_t lcdreaddata(){ return ((lcdread(1, 1) & 0xf0) (lcdread(1, 0) >> 4)); else{ return lcdread(1, checkbusyflag); Popatrzmy teraz na funkcje zapisu komend i danych listing 4. Są one skonstruowane analogicznie. Dla trybu 4-bitowego przesyłamy najpierw starszy półbajt, potem młodszy. Przy zapisie danych ustawiamy RS na 1. Pierwszy transfer ma włączone sprawdzanie flagi void lcdwritecommand(uint8_t command) { lcdwrite(command, 0, 1); lcdwrite(command << 4, 0, 0); else { lcdwrite(command, 0, 1); void lcdwritedata(uint8_t data) { lcdwrite(data, 1, 1); lcdwrite(data << 4, 1, 0); else { lcdwrite(data, 1, checkbusyflag); Listing 4 zajętości, a w trybie 8-bitowym zależnie od zmiennej checkbusyflag. Mając zdefiniowane podstawowe funkcje do komunikacji z wyświetlaczem, możemy przejść do napisania funkcji służącej do jego inicjalizacji. Inicjalizacja polega na wydawaniu komend, zdefiniujmy więc dla nich makra. Wartości poniższych makr wynikają z tabeli 1. #define LCD_COMMAND_CLEAR 0x01 #define LCD_COMMAND_RETURN_HOME 0x02 #define LCD_COMMAND_ENTRY_MODE_SET 0x04 #define LCD_COMMAND_ON_OFF 0x08 #define LCD_COMMAND_SHIFT 0x10 #define LCD_COMMAND_FUNCTION_SET 0x20 #define LCD_COMMAND_SET_CGRAM_ADDRESS 0x40 #define LCD_COMMAND_SET_DDRAM_ADDRESS 0x80 A także makra dla parametrów dla tych komend: #define LCD_PARAM_ENTRY_MODE_SET_SHIFT 0x01 #define LCD_PARAM_ENTRY_MODE_SET_INCREMENT 0x02 #define LCD_PARAM_ON_OFF_BLINK 0x01 #define LCD_PARAM_ON_OFF_CURSOR 0x02 #define LCD_PARAM_ON_OFF_DISPLAY 0x04 #define LCD_PARAM_SHIFT_RIGHT 0x04 #define LCD_PARAM_SHIFT_DISPLAY 0x08 #define LCD_PARAM_FUNCTION_SET_5X10 0x04 #define LCD_PARAM_FUNCTION_SET_2LINES 0x08 #define LCD_PARAM_FUNCTION_SET_8BIT 0x10 Funkcja inicjalizująca wyświetlacz będzie wyglądała jak w listingu 5. W ten oto sposób otrzymaliśmy bibliotekę, z której już możemy korzystać do wyświetlania tekstu na wyświetlaczu. Aby ją przetestować, musimy upewnić się, że mamy we właściwościach projektu zdefiniowane makro F_CPU, ponieważ nasza biblioteka korzysta z funkcji opóźniających. W naszym głównym pliku projektu dołączamy plik nagłówkowy biblioteki za pomocą dyrektywy: #include "lcd.h" Teraz w funkcji main możemy wykonać inicjalizację wyświetlacza i np. wysłać do niego jakieś litery do wyświetlenia: int main(void) { 38 Wrzesień 2016 Elektronika dla Wszystkich
5 lcdinit(); lcdwritedata('e'); lcdwritedata('d'); lcdwritedata('w'); while (1) { Jeśli wszystko wykonaliśmy poprawnie, musimy jeszcze połączyć mikrokontroler z wyświetlaczem. Zależnie od wybranego interfejsu (4 lub 8 bitów), wybranego portu dla danych oraz pinów sterujących wpisanych w pliku lcd.h, łączymy odpowiednie piny portów z pinami złącza LCD na płytce testowej. Jeśli używamy podanych na początku przykładowych makr, to wykorzystanych zostanie 7 pinów portu A, 4 na dane i 3 sterujące. Piny złącza LCD są opisane na płytce, ale niestety w pierwszej partii płytek opis został obrócony o 180 stopni. Prawidłowy opis złącza znajduje się na rysunku 2. Gdy już wykonamy połączenia, możemy skompilować projekt i zaprogramować mikrokontroler. Na wyświetlaczu powinien pojawić się napis EdW. A czy możemy sobie uprościć życie i wyświetlić napis za jednym zamachem, a nie po literze? Oczywiście tak. Możemy wzbogacić naszą bibliotekę o funkcję, która będzie wyświetlała kolejne znaki z podanej tablicy: void lcdstring(char str[]) { uint8_t i = 0; while (str[i]!= 0) { lcdwritedata(str[i++]); Funkcja ta bierze znaki z podanej tablicy i wyświetla je tak długo, aż natrafi na znak NULL (bajt o wartości 0). Bajt ten jest dodawany automatycznie przez kompilator na końcu łańcucha znaków umieszczonego w cudzysłowie. Wywołanie funkcji jest bardzo proste: lcdstring("elektronika"); void lcdinit() { Listing 5 switchedto4bitmode = 0; checkbusyflag = 0; LCD_E_DDR = _BV(LCD_E_PIN); LCD_RW_DDR = _BV(LCD_RW_PIN); LCD_RS_DDR = _BV(LCD_RS_PIN); _delay_ms(15); _delay_ms(4.1); _delay_ms(0.1); _delay_ms(1); lcdwritecommand(lcd_command_function_set); _delay_ms(1); switchedto4bitmode = 1; checkbusyflag = 1; lcdwritecommand(lcd_command_function_set LCD_PARAM_FUNCTION_SET_2LINES); checkbusyflag = 1; lcdwritecommand(lcd_command_function_set LCD_PARAM_FUNCTION_SET_8BIT LCD_PARAM_FUNCTION_SET_2LINES); lcdwritecommand(lcd_command_on_off); lcdwritecommand(lcd_command_on_off LCD_PARAM_ON_OFF_DISPLAY); lcdwritecommand(lcd_command_entry_mode_set LCD_PARAM_ENTRY_MODE_SET_INCREMENT); lcdwritecommand(lcd_command_clear); Rys. 2 Przydałaby się również funkcja, za pomocą której moglibyśmy określić, gdzie ma zostać wyświetlony dany napis. Jak wiemy pozycja znaku na wyświetlaczu zależy od tego, do której komórki pamięci DD RAM go wpiszemy, oraz że adresy dolnego wiersza zaczynają się od 40h. Przed wysłaniem więc znaku/zna ków należy podać wyświetlaczowi adres odpowiedniej komórki. Możemy to wykonać prostą funkcją: void lcdgotoxy(uint8_t x, uint8_t y){ lcdwritecommand(lcd_command_set_ddram_address (x + y * 0x40)); Zakładamy tutaj, że pozycje na wyświetlaczu numerowane są od 0, górny wiersz ma numer 0, a dolny 1. Wyświetlenie więc napisu Elektronika w górnym wierszu, a dla wszystkich w dolnym będzie wyglądało tak: lcdstring("elektronika"); lcdgotoxy(0, 1); lcdstring("dla wszystkich"); Oczywiście można sobie przyjąć inną konwencję numeracji i odpowiednio zmodyfikować wyrażenie obliczające adres. Materiały do tego numeru EdW zawierają dokumentację HD44780 oraz przykładowy projekt. Zadania W tym miejscu nie kończymy jeszcze naszej przygody z wyświetlaczem alfanumerycznym. Materiał z tej lekcji jest już jednak wystarczający do wykonania własnych ćwiczeń. Oto kilka przykładowych: 1. Automatyczne przewijanie napisu 2. Przewijanie napisu za pomocą klawiatury 3. Wpisywanie tekstu lub innych symboli z klawiatury. Klawiatura ma tylko 16 klawiszy, więc mogą to być np. cyfry i wybrane litery lub inne symbole ASCII. Grzegorz Niemirowski grzegorz@grzegorz.net R E K L A M A Elektronika dla Wszystkich Wrzesień
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ą
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
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
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:
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ć
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)
Alfanumeryczny wyświetlacz LCD
Tomasz Charoński Mateusz Lango Architektura Systemów Komputerowych Wprowadzenie Inteligentne wyświetlacze alfanumeryczne LCD są elementem coraz częściej spotykanym w sprzęcie powszechnego użytku: od urządzeń
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
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/
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikroprocesory i Mikrokontrolery Dostęp do portów mikrokontrolera ATmega32 język C laboratorium: 10 autorzy: dr
Zewnętrzne układy peryferyjne cz. 1 Wykład 12
Zewnętrzne układy peryferyjne cz. 1 Wykład 12 Wyświetlacz LCD zgodny z HD44780 Wyświetlacz LCD zgodny z HD44780 2 HD44780 Standardowy sterownik alfanumerycznych wyświetlaczy LCD opracowany przez firmę
Opis procedur asemblera AVR
Piotr Kalus PWSZ Racibórz 10.05.2008 r. Opis procedur asemblera AVR init_lcd Plik: lcd4pro.hvr Procedura inicjuje pracę alfanumerycznego wyświetlacza LCD za sterownikiem HD44780. Wyświetlacz działa w trybie
Programowanie mikrokontrolerów AVR z rodziny ATmega.
Programowanie mikrokontrolerów AVR z rodziny ATmega. Materiały pomocnicze Jakub Malewicz jakub.malewicz@pwr.wroc.pl Wszelkie prawa zastrzeżone. Kopiowanie w całości lub w częściach bez zgody i wiedzy autora
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
był w momencie wystąpienia zewnętrznego zdarzenia. Jest bardzo przydatna przy pomiarach częstotliwości. Pracę timera Timer1 kontrolują następujące
Kurs AVR lekcja 4 był w momencie wystąpienia zewnętrznego zdarzenia. Jest bardzo przydatna przy pomiarach częstotliwości. Pracę timera Timer1 kontrolują następujące rejestry: TCCR1A rejestr konfiguracyjny
długo. W tym celu w czasie przeczesywania if (key) {
Kurs AVR lekcja 3 Rozwiązania zadań z ostatniego odcinka Tradycyjnie odcinek zaczynamy od analizy zadania z poprzedniego numeru. Celem było wygenerowanie dźwięku o wysokości zależnej od wciśniętego przycisku.
Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.
Nazwa implementacji: Termometr cyfrowy - pomiar temperatury z wizualizacją pomiaru na wyświetlaczu LCD Autor: Krzysztof Bytow Opis implementacji: Wizualizacja działania elementu zestawu modułu-interfejsu
WEJŚCIE W TRYB PROGRAMOWANIA
WEJŚCIE W TRYB PROGRAMOWANIA Należy wcisnąć przycisk PROGR a następnie kod serwisowy 8 7 1 0 2 1. Pomiędzy kolejnymi wciśnięciami nie może upłynąć czas dłuższy niż 5s. Na wyświetlaczu pojawią się dwa myślniki
Mikrokontrolery AVR Wprowadzenie
Mikrokontrolery AVR Wprowadzenie Komunikacja z otoczeniem mikrokontrolera Każdy z mikrokontrolerów posiada pewna liczbę wyprowadzeń cyfrowych które służą do wprowadzania i odbierania informacji z mikrokontrolera.
MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN
MODBUS RTU wersja M1.14 protokół komunikacyjny do wyświetlaczy SEM 04.2010 Str. 1/5 MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN W wyświetlaczach LDN protokół MODBUS RTU wykorzystywany
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ą
Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie
Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie Ćwiczenie nr l Podstawy programowania mikrokontrolerów rodziny AVR8 opracował dr inż. Wojciech
Alternatywa dla alfanumerycznych wyświetlaczy LCD
Alternatywa dla alfanumerycznych wyświetlaczy LCD Jednym z ważniejszych elementów urządzeń sterowanych mikrokontrolerem jest interfejs użytkownika. Od tego, z jakich komponentów jest zbudowany i jak jest
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.
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
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,
ze względu na jego zaokrąglony kształt musimy go umieścić w innych bloczkach np. ze zmienną: lub jeśli chcemy sprawdzić jaki właśnie znak odczytujemy:
Ostatnio kontynuowaliśmy temat "rozmawiania" z Arduino (komunikacji z wykorzystaniem portu szeregowego), która jest nam o tyle potrzebna, że właśnie w ten sposób później będziemy rozmawiać z płytką wykorzystując
Programowanie mikrokontrolerów AVR z rodziny ATmega.
Programowanie mikrokontrolerów AVR z rodziny ATmega. Materiały pomocnicze Jakub Malewicz jakub.malewicz@pwr.wroc.pl Wszelkie prawa zastrzeżone. Kopiowanie w całości lub w częściach bez zgody i wiedzy autora
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
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,
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
Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1
Dodatek C 1. Timer 8-bitowy (Timer0) 1.1. Opis układu Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1 Rys. 1. Schemat blokowy timera Źródłem sygnału taktującego może być zegar
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
interfejs szeregowy wyświetlaczy do systemów PLC
LDN SBCD interfejs szeregowy wyświetlaczy do systemów PLC SEM 08.2003 Str. 1/5 SBCD interfejs szeregowy wyświetlaczy do systemów PLC INSTRUKCJA OBSŁUGI Charakterystyka Interfejs SBCD w wyświetlaczach cyfrowych
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ć
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikroprocesory i Mikrokontrolery Sterowanie wyświetlaczem alfanumerycznym LCD laboratorium: 13 i 14 autor: dr hab.
Wyświetlacze graficzne : 162x64 z kontrolerem S1D x60 z kontrolerem S1D15710
S1D15705 Wyświetlacze graficzne : 162x64 z kontrolerem S1D15705 219x60 z kontrolerem S1D15710 S1D15710 Wyświetlacze S1D15705/S1D15710 są graficznymi wyświetlaczami ciekłokrystalicznymi. Wyposażone są w
MIERNIK T-SCALE BWS 1
MIERNIK T-SCALE BWS 1 2 Spis treści 1. WSTĘP... 4 2. OPIS KLAWIATURY... 4 3. PODSTAWOWE OPERACJE... 5 Zerowanie... 5 Tarowanie... 5 Ważenie przedmiotu... 5 4. WAŻENIE KONTROLNE... 6 Ustawianie limitów...
Immobilizer samochodowy otwierający dostęp poprzez kod czteroznakowy.
Uniwersytet Warszawski Wydział Fizyki sierpień 2015 Projekt Zaliczeniowy przedmiotu Programowanie Mikrokontrolerów Immobilizer samochodowy otwierający dostęp poprzez kod czteroznakowy. Autor: Marcin Cybulski
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
Ćwiczenie 7 Matryca RGB
IMiO PW, LPTM, Ćwiczenie 7, Matryca RGB -1- Ćwiczenie 7 Matryca RGB IMiO PW, LPTM, Ćwiczenie 7, Matryca RGB -2-1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z inną oprócz RS - 232 formą szeregowej
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
SMS-8010. SMS telefon. Umożliwia łatwe i szybkie wysyłanie wiadomości SMS...
SMS-8010 SMS telefon Umożliwia łatwe i szybkie wysyłanie wiadomości SMS... Spis treści: 1. Główne funkcje telefonu SMS-8010?... 3 2. Instalacja... 4 3. Ustawianie daty i czasu... 4 4. Rozmowy telefoniczne...
Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści
Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów2 2. ISP..2 3. I/O Ports..3 4. External Interrupts..4 5. Analog Comparator5 6. Analog-to-Digital Converter.6 7.
Interfejs analogowy LDN-...-AN
Batorego 18 sem@sem.pl 22 825 88 52 02-591 Warszawa www.sem.pl 22 825 84 51 Interfejs analogowy do wyświetlaczy cyfrowych LDN-...-AN zakresy pomiarowe: 0-10V; 0-20mA (4-20mA) Załącznik do instrukcji obsługi
Instrukcja do oprogramowania ENAP DEC-1
Instrukcja do oprogramowania ENAP DEC-1 Do urządzenia DEC-1 dołączone jest oprogramowanie umożliwiające konfigurację urządzenia, rejestrację zdarzeń oraz wizualizację pracy urządzenia oraz poszczególnych
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.
Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)
Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32) wersja 0.4 (20 kwietnia 2015) Filip A. Sala W niniejszym, bardzo krótkim opracowaniu, postaram się przedstawić
Ć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
Instrukcja do programu BASIC PR-02
Instrukcja do u BASIC PR-02 Wojciech Pietkiewicz 22.03.2000 1 Wprowadzenie BASIC jest językiem owania wyższego rzędu, który umożliwia w łatwy i czytelny sposób sterować robotem PR-02 bezpośrednio z komputera.
Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2
Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2 Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com.
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
1 Moduł Neuronu Cyfrowego
1 Moduł Neuronu Cyfrowego Moduł Neuronu Cyfrowego daje użytkownikowi Systemu Vision możliwość obsługi fizycznych Neuronów Cyfrowych. Dzięki temu możliwe jest sterowanie zewnętrznymi urządzeniami wykonawczymi
SYSTEM PRZERWAŃ ATmega 32
Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA SYSTEM PRZERWAŃ ATmega 32 Opracował: mgr inż.
Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1
Instrukcja integracji urządzenia na magistrali Modbus RTU wersja 1.1 1. Wyprowadzenia Rysunek 1: Widok wyprowadzeń urządzenia. Listwa zaciskowa J3 - linia B RS 485 linia A RS 485 masa RS 485 Tabela 1.
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ę
Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści
Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów...2 2. ISP...2 3. I/O Ports...3 4. External Interrupts...4 5. Analog Comparator...5 6. Analog-to-Digital Converter...6
LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2
LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2 1. Cel ćwiczenia Celem ćwiczenia jest pokazanie budowy systemów opartych na układach Arduino. W tej części nauczymy się podłączać różne czujników,
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Wyjście do drukarki Centronix
Wyjście do drukarki Centronix Model M-0 do Dydaktycznego Systemu Mikroprocesorowego DSM-1 Instrukcja uŝytkowania Copyright 2007 by MicroMade All rights reserved Wszelkie prawa zastrzeŝone MicroMade Gałka
Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe
Zestawienie wydatków rok 2015 1 Wstaw numerację stron. Aby to zrobić przejdź na zakładkę Wstawianie i w grupie Nagłówek i stopka wybierz Numer strony. Następnie określ pozycję numeru na stronie (na przykład
dv-2ps INSTRUKCJA OBSŁUGI
dv-2ps INSTRUKCJA OBSŁUGI Manometr cyfrowy z programowalnymi stykami i wyjściem RS485 1. Diody LED statusu styków 2. Aktualna wartość ciśnienia 3. Przyłacze elektyczne 4. Przyłącze procesowe dv-2ps jest
Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.
Podłączenie mikrokontrolera ATmega8: zasilanie 8 i 22
Electronic Infosystems
Department of Optoelectronics and Electronic Systems Faculty of Electronics, Telecommunications and Informatics Gdansk University of Technology Electronic Infosystems Microserver TCP/IP with CS8900A Ethernet
Notatka lekcja_#3_1; na podstawie W.Kapica 2017 Strona 1
Na poprzednich zajęciach zajmowaliśmy się odczytywaniem sygnałów cyfrowych. Dzięki temu mogliśmy np.: sprawdzić, czy przycisk został wciśnięty. Świat, który nas otacza nie jest jednak cyfrowy, czasami
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
Zgrywus dla Windows v 1.12
Zgrywus dla Windows v 1.12 Spis treści. 1. Instalacja programu. 2 2. Pierwsze uruchomienie programu.. 3 2.1. Opcje programu 5 2.2. Historia zdarzeń 7 2.3. Opisy nadajników. 8 2.4. Ustawienia zaawansowane...
LABORATORIUM - ELEKTRONIKI Układy mikroprocesorowe cz.2
LABORATORIUM - ELEKTRONIKI Układy mikroprocesorowe cz.2 PRZEBIEG ĆWICZENIA 1. Wybrać z dostarczonych przez prowadzącego następujące elementy Układ Arduino Mega Płytka prototypowa Wyświetlacz 2X16 Potencjometr
LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32
Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA TIMERY w mikrokontrolerach Atmega16-32 Opracował:
Laboratorium Napędu robotów
WYDZIAŁ ELEKTRYCZNY INSTYTUT MASZYN, NAPĘDÓW I POMIARÓW ELEKTRYCZNYCH Laboratorium Napędu robotów INS 5 Ploter frezująco grawerujący Lynx 6090F 1. OPIS PRZYCISKÓW NA PANELU STEROWANIA. Rys. 1. Przyciski
LOW ENERGY TIMER, BURTC
PROJEKTOWANIE ENERGOOSZCZĘDNYCH SYSTEMÓW WBUDOWANYCH ĆWICZENIE 4 LOW ENERGY TIMER, BURTC Katedra Elektroniki AGH 1. Low Energy Timer tryb PWM Modulacja szerokości impulsu (PWM) jest często stosowana przy
3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8
3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8 Układ PCF 8583 jest pobierającą małą moc, 2048 bitową statyczną pamięcią CMOS RAM o organizacji 256 x 8 bitów. Adresy i dane są przesyłane szeregowo
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Schemat blokowy architektury AVR
Schemat blokowy architektury AVR Rejestry procesora AVR dostępne programowo Rejestry procesora AVR związane z pobraniem i wykonaniem rozkazu Schemat blokowy procesora ATMega 2560 ATMEL ATMEGA328P MEMORY
PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka
PAMIĘCI Część 1 Przygotował: Ryszard Kijanka WSTĘP Pamięci półprzewodnikowe są jednym z kluczowych elementów systemów cyfrowych. Służą do przechowywania informacji w postaci cyfrowej. Liczba informacji,
INSTRUKCJA OBSŁUGI. Rys.1. Wyświetlacz. Rys.2. Klawiatura
INSTRUKCJA OBSŁUGI Rys.1. Wyświetlacz Rys.2. Klawiatura Przycisk Funkcja PWR/MODE Dłuższe naciśnięcie włącza lub wyłącza skaner. Krótkie naciśnięcie przełącza tryby pracy skanera pomiędzy trybem VFO i
Spis treści. 1. Rozdział Rozdział Rozdział Rozdział Koniec spisu treści -
Spis treści 1. Rozdział 1... 2 2. Rozdział 2... 6 3. Rozdział 3... 8 4. Rozdział 4... 10 - Koniec spisu treści - Realitynet.pl - przystępnie o komputerach 1. Rozdział 1 Po krótkim wstępie i gdy mamy już
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,
TECHNIKA MIKROPROCESOROWA II
Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie Wydział IEiT Katedra Elektroniki TECHNIKA MIKROPROCESOROWA II LAB 2 Human-Machine Interface, czyli obsługa wyświetlacza slcd Sebastian Koryciak
LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32
Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA TIMERY w mikrokontrolerach Atmega16-32 Opracował:
Komunikacja w mikrokontrolerach Laboratorium
Laboratorium Ćwiczenie 1 Podstawy programowania, stany uśpienia Program ćwiczenia: zapoznanie z regulaminem laboratorium i zasadami zaliczenia, zapoznanie ze sprzętem laboratoryjnym i oprogramowaniem,
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
SystimPlus. Dokumentacja (FAQ) dla wersji: v1.14.05.12
SystimPlus Dokumentacja (FAQ) dla wersji: v1.14.05.12 Spis treści 1.Co to jest SystimPlus?... 1 2.Instalacja i wymagania... 1 3.Jakie drukarki fiskalne obsługuje SystimPlus?... 3 4.Jak połączyć się z drukarką
AVR DRAGON. INSTRUKCJA OBSŁUGI (wersja 1.0)
AVR DRAGON INSTRUKCJA OBSŁUGI (wersja 1.0) ROZDZIAŁ 1. WSTĘP... 3 ROZDZIAŁ 2. ROZPOCZĘCIE PRACY Z AVR DRAGON... 5 ROZDZIAŁ 3. PROGRAMOWANIE... 8 ROZDZIAŁ 4. DEBUGOWANIE... 10 ROZDZIAŁ 5. SCHEMATY PODŁĄCZEŃ
Ć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
Opis Ogólny OPIS OGÓLNY LICZNIKA AL154LI01.
1. OPIS OGÓLNY LICZNIKA AL154LI01. 8 Przyrząd umożliwia pomiar, wyświetlenie na wyświetlaczu oraz przesłanie na komputer wartości ośmiu niezależnych liczników impulsów. Zerowanie oraz włączenie (uruchomienie)
TWRS-21 TABLICOWY WYŚWIETLACZ CYFROWY DOKUMENTACJA TECHNICZNO-RUCHOWA. Wrocław, listopad 1999 r.
TABLICOWY WYŚWIETLACZ CYFROWY DOKUMENTACJA TECHNICZNO-RUCHOWA Wrocław, listopad 1999 r. 50-305 WROCŁAW TEL./FAX (+71) 373-52-27 ul. S.JARACZA 57-57A TEL. 0-602-62-32-71 str.2 SPIS TREŚCI 1.OPIS TECHNICZNY...3
INSTRUKCJA PROGRAMOWANIA KASY FISKALNEJ I-ERGOS 3050 PRZY POMOCY PROGRAMU PLU MANAGER I-ERGOS.
INSTRUKCJA PROGRAMOWANIA KASY FISKALNEJ I-ERGOS 3050 PRZY POMOCY PROGRAMU PLU MANAGER I-ERGOS. Edata Polska Sp. z o.o. ul. Puławska 314 02-819 Warszawa Tel 22 545-32-40 Fax 22 678-60-29 biuro@edatapolska.pl
Architektura systemów komputerowych Laboratorium 10 Symulator SMS32 Urządzenia wejścia i wyjścia
Marcin Stępniak Architektura systemów komputerowych Laboratorium 10 Symulator SMS32 Urządzenia wejścia i wyjścia 1. Informacje Symulator SMS32 posiada kilka urządzeń peryferyjnych (wejściowych i wyjściowych)
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
Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA
Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA Licznik binarny Licznik binarny jest najprostszym i najpojemniejszym licznikiem. Kod 4 bitowego synchronicznego licznika binarnego
instrukcja użytkownika terminala ARGOX PA-20 SYSTEMY AUTOMATYCZNEJ IDENTYFIKACJI
instrukcja użytkownika terminala ARGOX PA-20 SYSTEMY AUTOMATYCZNEJ IDENTYFIKACJI SPIS TREŚCI 04 Opis opcji terminala 05 SKANOWANIE 06 Skanowanie kod 07 Skanowanie kod ilość 08 Skanowanie kod ilość cena
Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.
Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1 PAMIĘCI SZEREGOWE EEPROM Ćwiczenie 3 Opracował: dr inŝ.
Stanowisko laboratoryjne dla mikrokontrolera ATXmega32A4 firmy Atmel
Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki Politechnika Gdańska LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY Stanowisko laboratoryjne dla mikrokontrolera ATXmega32A4
PROTOKÓŁ MQTT (uzupełnienie do instrukcji obsługi miernika ND30)
PROTOKÓŁ MQTT (uzupełnienie do instrukcji obsługi miernika ND3) Spis treści 1 WŁĄCZENIE FUNKCJI ROZSZERZONEJ MQTT...2 2 TRYBY PRACY...2 2.1 Tryb Ethernet...2 3 INTERFEJSY SZEREGOWE...3 3.1 PROTOKÓŁ MQTT...3
INSTRUKCJA OBSŁUGI STEROWNIKA WIFI
INSTRUKCJA OBSŁUGI STEROWNIKA WIFI 1. Podłączenie: Do złącza opisanego jako +5V podłączamy zasilanie zważając na biegunowość gdyż układ nie posiada zabezpieczenia odwrotnego podłączenia. Przy wpinaniu
Programowanie mikrokontrolerów 2.0
13.1 Programowanie mikrokontrolerów 2.0 Sterowanie fazowe Marcin Engel Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 19 grudnia 2016 Triak Triak jest półprzewodnikowym elementem przełączającym
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
A. Korzystanie z panelu sterowania
A. Korzystanie z panelu sterowania EN PL Timer Timer Memory/Screen lock (unlock) Blokada (odblokowanie) pamięci/ekranu Downward movement Przesunięcie w dół Upward movement Przesunięcie w górę Memory 1/2/3
Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:
Wykład 3 3-1 Reprezentacja liczb całkowitych ze znakiem Do przedstawienia liczb całkowitych ze znakiem stosowane są następujące kody: - ZM (znak-moduł) - U1 (uzupełnienie do 1) - U2 (uzupełnienie do 2)