--- /dev/null
+# --- Тема 19 ---
+
+Дата на провеждане 4.3.2022
+
+Теми: Поляризация на светлина, Принцип на работа на Течно-Кристални Екрани (LCD)
+
+## План на часа
+- Преговор - поляризацията на светлина (поляризатори)
+- Принцип на действие на LCD
+- Задача [LCD_scroll](https://gitlab.com/tues-embedded/vmks/-/tree/master/Examples/LCD_scroll)
+ * Свързване на схемата от задачата
+ * Качване на програмата
+ * Обяснение как работи програмата
+- За какво служат изводите на дисплея
+ * Обяснение
+ * Какво е контраст (демонстрация с потенциометъра)
+
+Само с 12Б клас:
+- Как е опроводена LCD матрицата (долу пише подробности)
+
+Домашно: да се разгледа документацията на чипа на Хитачи [HD44780](https://gitlab.com/tues-embedded/vmks/-/blob/master/Datasheets/HD44780.pdf)
+* ИЗТЕГЛЕТЕ файла понеже GitLab забива при отваряне на по-големи PDF-и
+
+
+-----
+
+### Допълнително:
+
+Пример за опроводяването в една стандартна Full-HD RGB 8-bit/color матрица:
+`1920*1080(pixels) = 2073600px ~ 2M`
+`1920*1080(pixels) x 3(rgb) x 8(bit/color) x 2(two electrodes per pixel) = 99532800 ~ 100M` извода
+Единия електрод може да е общ за всички пиксели или да се свържат в матрица `1920*1080`, като едната от страните ще е с тройно повече изводи за R/G/B каналите.
+На практика се използват преместващи регистри(преподавани в предния урок), като всеки ред на екрана е един преместващ регистър и може началото(входа) на всеки следващ ред да се свърже към края(изхода) на предния ред в един общ преместващ регистър.
+По такъв начин се управляват реалните монитори, но има различни оптимизации за по-висока честота на опресняване, като например отделни преместващи регистри за всеки цветови канал.
+
+Такъв тип стандартни интерфейси са например [MIPI DSI](https://en.wikipedia.org/wiki/Display_Serial_Interface), [TMDS](https://en.wikipedia.org/wiki/Transition-minimized_differential_signaling) и [LVDS](https://en.wikipedia.org/wiki/Low-voltage_differential_signaling) използвани за екрани на лаптопи, телефони, таблети и интерфейси като DVI, HDMI и DisplayPort.
+При тях информацията се подава като поток от данни (bitstream) на входа на този общ преместващ регистър с два сигнала - тактов сигнал (clock) и данни (data), при запълване на даден ред се подава сигнал за преминаване на следващ ред (хоризонтална синхронизация), а при запълване на всички редове се подава сигнал за връщане в началото на екрана (верикална синхронизация).
+За постигане на по-бързо предаване на данните, може каналите за цветовете да са отделни и така паралелно да се запълват регистрите им, както е при DVI/HDMI(по-старите версии) където има R,G,B канали и тактов сигнал (канал 0).
+Други интерфейси като DisplayPort и по-новите версии на HDMI използват пакети с информация в които е записана информацията за пикселите, което позволява предаването и на други типове данни, а също и картина за няколко монитора през един порт за верижно свързване на монитори към един изход на видеокартата. Също така може да се обединяват няколко такива порта с пакетно базиран пренос в един логически канал за по-голяма скорост на опресняване при монитори/телевизори с много високи резолюции.
\ No newline at end of file
--- /dev/null
+# --- Тема 20 ---
+
+Дата на провеждане 11.3.2022
+
+Теми: Управление и използване на Течно-Кристален Екран (LCD)
+
+## План на часа
+- Какъв вид е 16x2 дисплея
+- Как се използва стандартната [LCD библиотека](https://www.arduino.cc/en/Reference/LiquidCrystal) на Arduino
+- Как се формира символ на екрана (матрица с общи изводи и сегментни изводи)
+- Разглеждане на вътрешната структура и начин на работа на драйвера [HD44780](https://gitlab.com/tues-embedded/vmks/-/blob/master/Datasheets/HD44780.pdf)
+- [Как се създава символ](https://www.arduino.cc/en/Reference/LiquidCrystalCreateChar) с използване на [онлайн програма за създаване на символи](https://maxpromer.github.io/LCD-Character-Creator/)
+- Как се подават данни през интерфейса от микроконтролера
+- Видове памет
+ 1. Flash - не-енергозависима, четене и запис, реализира се с MOSFET-и с плаващ гейт, (дълъг, но) ограничен живот - използва се в SSD-тата и в телефоните
+ 2. ROM - енерго-независима, само за четене, реализира се с проводници, вечна
+ 3. RAM - енерго-зависима, четене и запис, реализира се с кондензатори, вечна
+ * SRAM - много бърза памет, типично 6 транзистора (много), голяма консумация на ток, голям размер върху кристала
+ * DRAM - бърза памет, 1 транзистор и 1 кондензатор, малка консумация, малкък размер върху кристала
+ * SDRAM - синхронна DRAM
+- Как се инициализира драйвера и дисплея (има го добре обяснено във видеоклипа от първия линк в "Допълнително")
+ 1. Избира се 4-битов режим
+ 2. Изчиства се екрана
+ 3. Курсора се връща в началото
+ 4. Разрешава се работата на екрана
+ 5. Изпращат се символите за показване ...
+- Обобщение
+
+Бележки:
+- Трябва да има 40ms изчакване в началото на програмата за да се инициализира драйвера след подаване на захранването
+- Използва се [разширителен чип](https://gitlab.com/tues-embedded/vmks/-/tree/master/Useful%20Pictures/LCD/HD44780_COB_and_left_ic_is_40_output_extension_driver.JPG) за да стане броя символи 16x2 с драйвера HD44780
+
+-----
+
+### Допълнително:
+
+[Как работи екрана и пример без използване на библиотека(и въобще без микроконтролер)] (https://www.youtube.com/watch?v=cXpeTxC3_A4) - съветвам ви да го изгледате този
+[Пример за използване с микропроцесор 6502 на асемблер](https://www.youtube.com/watch?v=FY3zTUaykVo)
+[Допълнително обяснение как работи този екран(https://www.engineersgarage.com/making-custom-characters-on-16x2-lcd/)
+
+
+Ще кача пример без библиотеката и ще добавя линк към него тук.
+Ще сложа картинки за различните видове дисплей с типовете им в папка [Types](https://gitlab.com/tues-embedded/vmks/-/tree/master/Useful%20Pictures/LCD/Types).
+
+-----
+
+Кодиране на символ - пример с буквата `h`, като активните пиксели са `1`:
+
+1 - bit
+1111 - nibble
+11110000 - byte / octet
+
+Ако кодираме пикселите вертикално от горе-надолу и от ляво на дясно:
+```C++
+0b 1111 1110 = 0xFE
+0b 0001 0000 = 0x10
+0b 0010 0000 = 0x20
+0b 0010 0000 = 0x20
+0b 0001 1110 = 0x1E
+
+// Вертикално кодирано 'h'
+byte h[8] = {0xFE, 0x10, 0x20, 0x20, 0x1E}; // => h
+
+// В CGROM/CGRAM-а ще се получи нещо такова, но с различни букви
+uint8_t characterMap[5][5] =
+{
+ 0xFE, 0x10, 0x20, 0x20, 0x1E, // h
+ 0xFE, 0x10, 0x20, 0x20, 0x1E, // h
+ 0xFE, 0x10, 0x20, 0x20, 0x1E, // h
+ 0xFE, 0x10, 0x20, 0x20, 0x1E, // h
+ 0xFE, 0x10, 0x20, 0x20, 0x1E // h
+}
+```
+
+Ако кодираме пикселите хоризонтално от ляво на дясно и от горе-надолу:
+```C++
+0b 0001 0000 => 0x10
+0b 0001 0000 => 0x10
+0b 0001 0110 => 0x16
+0b 0001 1001 => 0x19
+0b 0001 0001 => 0x11
+0b 0001 0001 => 0x11
+0b 0001 0001 => 0x11
+0b 0000 0000 => 0x00
+
+// Хоризонтално кодирано 'h'
+byte h[8] = {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00};
+
+// В CGROM/CGRAM-а ще се получи нещо такова, но с различни букви
+byte map[x][8] = {
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00}, //h
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00}, //h
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00}, //h
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00}, //h
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00}, //h
+ {0x10,0x10,0x16,0x19,0x11,0x11,0x11,0x00} //h
+}
+```
\ No newline at end of file