W temacie o testerze elementów LCR M328 pojawiły się informacje o możliwości zmiany firmware mikrokontrolera. Postanowiłem sprawdzić to w praktyce mimo ryzyka zepsucia urządzenia. Od ostatnich testów zabezpieczyłem LCD przed wypadaniem przy pomocy kleju termicznego oraz zabezpieczyłem kawałkiem sztywnej folii taśmę elastyczną łączącą LCD z płytką.
Oprogramowanie i dokumentację mikroprocesorowego testera znajdziecie tutaj:
https://www.mikrocontroller.net/svnbrowser/transistortester/
Podejrzewam że wszystkie dostępne testery LCR posiadają oprogramowanie oparte na tych źródłach.
Klikamy "Download GNU tarball " i wypakowujemy zawartość (np. z wykorzystaniem 7zip).
Do pracy z kodem źródłowym wykorzystamy Atmel Studio 7.
Po instalacji środowiska Atmel Studio 7 wybieramy:
Plik -> Nowy -> GCC C Executable Project, wybieramy mikrokontroler ATMEGA328P i tworzymy projekt o wybranej nazwie w wybranej lokalizacji.
Kopiujemy wszystkie pliki z katalogu z rozpakowaną zawartością \Software\trunk\
do katalogu utworzonego projektu Atmel Studio (tam gdzie znajduje się plik .cproj),
następnie zgadzamy się na zastąpienie pliku main.c.
Z katalogi \Software\trunk\ kopiujemy katalog "fonts" i "mega328_st7565" do katalogu projektu.
Klikamy prawym klawiszem myszy na nazwę projektu w oknie solution explorer i wybieramy:
Add->Existing items dodajmy wszystkie pliki *.c i *.h
Wybieramy project->properties wybieramy use external makefile i wybieramy plik Makefile z katalogu "mega328_st7565", w katalogu projektu.
W pliku Makefile zmieniamy:
UI_LANGUAGE = LANG_ENGLISH na UI_LANGUAGE = LANG_POLISH (jeżeli chcemy polskie menu)
CFLAGS += -DLCD_ST7565_H_OFFSET=4 na CFLAGS += -DLCD_ST7565_H_OFFSET=0 (przesunięcie obrazu)
CFLAGS += -DLCD_ST7565_V_FLIP=1 na CFLAGS += -DLCD_ST7565_V_FLIP=0 (odwrócenie pionowe)
CFLAGS += -DLCD_ST7565_H_FLIP=1 na CFLAGS += -DLCD_ST7565_H_FLIP=0 (odwrócenie poziomie)
eksperymentalnie włączyłem też:
CFLAGS += -DWITH_UJT (Option WITH_UJT enables additional tests for UJT (UniJunction Transistor))
Warto poeksperymentować z plikiem Makefile czytając umieszczone tam opisy oraz dokumentację w \Doku\tags\english
Aby wygenerować pliki do umieszczenia w pamięci mikrokontrolera wybieramy:
Wybieramy Build-> Build Solution.
Powinniśmy otrzymać komunikat:
========== Build All: 1 succeeded, 0 failed, 0 skipped ==========
Po zakończeniu kompilacji wchodzimy w katalog "mega328_st7565" w katalogu projektu jest tam plik TransistorTester.hex (zawartość pamięci flash) i TransistorTester.eep (zawartość eeprom). Oba pliki umieszczamy w pamięci mikrokontrolera ATMEGA328P przy pomocy wybranego programatora ISP. Wykorzystałem AVRISP MKII i oprogramowanie ze środowiska AtmelStudio. Do połączenia ze złączem ISP w testerze wykorzystałem przewody połączeniowe do płytki stykowej. Na zdjęciu poniżej rozkład wyprowadzeń złącza.
Na czas programowania blokujemy przycisk włączający urządzenie (np. klamerką do bielizny) aby zapewnić ciągłe zasilanie mikrokontrolera.
Jeżeli wszystko się uda tester powita nas komunikatami w języku Polskim:
Umieszczamy własne logo.
Być może umieszczenie logo nie jest jakimś super ambitnym i koniecznym zadaniem ale jest to dobry sposób na rozpoczęcie zabawy z kodem testera. Do dyspozycji (podczas trwającego testu) mamy obszar 128x32 czarno-białych pikseli. Każdy piksel zapiszemy jako bit w bajcie i to zajmie nam 512B w tablicy 512 elementowej. Każdy bajt to będzie pionowa 8 pikselowa kreska zaczynająca się od góry na współrzędnej x-owej od bitu LSB elementu tablicy. Po odczytaniu tylu elementów ile wynosi szerokość obrazka (w naszym przykładzie 128), odczytujemy kolejny pasek oddalony na współrzędnej y-grekowej o 8 pikseli.
Jeżeli zależy nam na logo i ograniczeniu zajętości pamięci, możemy pomyśleć o prostej "kompresji", np. zapisanie wsp. początków i końców linii w poziomie lub w pionie zamiast danych o wszystkich pikselach, dla niektórych obrazków pozwoli to zaoszczędzić pamieć.
Czarno-białe logo elektroda.pl ze strony głównej zapisujemy do pliku PNG o rodzielczości 128x32:
Prostym kodem w python przerabiamy plik PNG na tablicę, w której każdy bit odpowiada zapalonemu lub zgaszonemu pikselowi na LCD. Wysokość i szerokość pliku PNG ustawiamy tak aby były równe potędze 2. Dla obrazka o rozmiarze 128x32 będziemy mieli 128x(32/8)=512 elementową tablicę, pojedynczym elementem tablicy będzie bajt. Do napisania kody wykorzystujemy wiedzę zdobytą o python i png tutaj:
Czy Słońce wyczyści pamięć EPROM?
Szybko napisany kod w python 3 zamieni plik PNG na tablicę bajtów:
Wynik działania kodu:
Otwieramy plik /fonts/24x32_verical_LSB.h
i fragment na końcu pliku:
rozbudowujemy o kolejną tablicę zawierającą logo które chcemy wyświetlić:
Otwieramy plik main.c i znajdujemy linijkę:
lcd_MEM_string(TestRunning); //String: testing...
To komunikat o testowaniu, dodajemy pod nim
lcd_set_pixels( logo, 0, 32, 0, 128, 32);
Co spowoduje wyświetlenie naszego logo.
Testując oprogramowanie nie natrafiłem na problemy z jego działaniem, jedynie poprzednie oprogramowanie radziło sobie lepiej z tyrystorami, za to przy kilku testach (np. indukcyjność) prezentowane są dodatkowe parametry. Kod źródłowy oryginalnego oprogramowania w testerze nie został udostępniony więc trudno porównać czym się różni. W nowym oprogramowaniu procedura kalibracji wymaga połączenia wszystkich wyprowadzeń testujących, potrzebny będzie także kondensator o pojemności >100nF oraz o pojemności 4-30nF. Jestem ciekawy opinii osób, które zaryzykują i zdecydują się na wymianę oprogramowania.
Oprogramowanie i dokumentację mikroprocesorowego testera znajdziecie tutaj:
https://www.mikrocontroller.net/svnbrowser/transistortester/
Podejrzewam że wszystkie dostępne testery LCR posiadają oprogramowanie oparte na tych źródłach.
Klikamy "Download GNU tarball " i wypakowujemy zawartość (np. z wykorzystaniem 7zip).
Do pracy z kodem źródłowym wykorzystamy Atmel Studio 7.
Po instalacji środowiska Atmel Studio 7 wybieramy:
Plik -> Nowy -> GCC C Executable Project, wybieramy mikrokontroler ATMEGA328P i tworzymy projekt o wybranej nazwie w wybranej lokalizacji.
Kopiujemy wszystkie pliki z katalogu z rozpakowaną zawartością \Software\trunk\
do katalogu utworzonego projektu Atmel Studio (tam gdzie znajduje się plik .cproj),
następnie zgadzamy się na zastąpienie pliku main.c.
Z katalogi \Software\trunk\ kopiujemy katalog "fonts" i "mega328_st7565" do katalogu projektu.
Klikamy prawym klawiszem myszy na nazwę projektu w oknie solution explorer i wybieramy:
Add->Existing items dodajmy wszystkie pliki *.c i *.h
Wybieramy project->properties wybieramy use external makefile i wybieramy plik Makefile z katalogu "mega328_st7565", w katalogu projektu.
W pliku Makefile zmieniamy:
UI_LANGUAGE = LANG_ENGLISH na UI_LANGUAGE = LANG_POLISH (jeżeli chcemy polskie menu)
CFLAGS += -DLCD_ST7565_H_OFFSET=4 na CFLAGS += -DLCD_ST7565_H_OFFSET=0 (przesunięcie obrazu)
CFLAGS += -DLCD_ST7565_V_FLIP=1 na CFLAGS += -DLCD_ST7565_V_FLIP=0 (odwrócenie pionowe)
CFLAGS += -DLCD_ST7565_H_FLIP=1 na CFLAGS += -DLCD_ST7565_H_FLIP=0 (odwrócenie poziomie)
eksperymentalnie włączyłem też:
CFLAGS += -DWITH_UJT (Option WITH_UJT enables additional tests for UJT (UniJunction Transistor))
Warto poeksperymentować z plikiem Makefile czytając umieszczone tam opisy oraz dokumentację w \Doku\tags\english
Aby wygenerować pliki do umieszczenia w pamięci mikrokontrolera wybieramy:
Wybieramy Build-> Build Solution.
Powinniśmy otrzymać komunikat:
========== Build All: 1 succeeded, 0 failed, 0 skipped ==========
Po zakończeniu kompilacji wchodzimy w katalog "mega328_st7565" w katalogu projektu jest tam plik TransistorTester.hex (zawartość pamięci flash) i TransistorTester.eep (zawartość eeprom). Oba pliki umieszczamy w pamięci mikrokontrolera ATMEGA328P przy pomocy wybranego programatora ISP. Wykorzystałem AVRISP MKII i oprogramowanie ze środowiska AtmelStudio. Do połączenia ze złączem ISP w testerze wykorzystałem przewody połączeniowe do płytki stykowej. Na zdjęciu poniżej rozkład wyprowadzeń złącza.
Na czas programowania blokujemy przycisk włączający urządzenie (np. klamerką do bielizny) aby zapewnić ciągłe zasilanie mikrokontrolera.
Jeżeli wszystko się uda tester powita nas komunikatami w języku Polskim:
Umieszczamy własne logo.
Być może umieszczenie logo nie jest jakimś super ambitnym i koniecznym zadaniem ale jest to dobry sposób na rozpoczęcie zabawy z kodem testera. Do dyspozycji (podczas trwającego testu) mamy obszar 128x32 czarno-białych pikseli. Każdy piksel zapiszemy jako bit w bajcie i to zajmie nam 512B w tablicy 512 elementowej. Każdy bajt to będzie pionowa 8 pikselowa kreska zaczynająca się od góry na współrzędnej x-owej od bitu LSB elementu tablicy. Po odczytaniu tylu elementów ile wynosi szerokość obrazka (w naszym przykładzie 128), odczytujemy kolejny pasek oddalony na współrzędnej y-grekowej o 8 pikseli.
Jeżeli zależy nam na logo i ograniczeniu zajętości pamięci, możemy pomyśleć o prostej "kompresji", np. zapisanie wsp. początków i końców linii w poziomie lub w pionie zamiast danych o wszystkich pikselach, dla niektórych obrazków pozwoli to zaoszczędzić pamieć.
Czarno-białe logo elektroda.pl ze strony głównej zapisujemy do pliku PNG o rodzielczości 128x32:
Prostym kodem w python przerabiamy plik PNG na tablicę, w której każdy bit odpowiada zapalonemu lub zgaszonemu pikselowi na LCD. Wysokość i szerokość pliku PNG ustawiamy tak aby były równe potędze 2. Dla obrazka o rozmiarze 128x32 będziemy mieli 128x(32/8)=512 elementową tablicę, pojedynczym elementem tablicy będzie bajt. Do napisania kody wykorzystujemy wiedzę zdobytą o python i png tutaj:
Czy Słońce wyczyści pamięć EPROM?
Szybko napisany kod w python 3 zamieni plik PNG na tablicę bajtów:
Kod: Python
Wynik działania kodu:
Kod: C / C++
Otwieramy plik /fonts/24x32_verical_LSB.h
i fragment na końcu pliku:
Kod: C / C++
rozbudowujemy o kolejną tablicę zawierającą logo które chcemy wyświetlić:
Kod: C / C++
Otwieramy plik main.c i znajdujemy linijkę:
lcd_MEM_string(TestRunning); //String: testing...
To komunikat o testowaniu, dodajemy pod nim
lcd_set_pixels( logo, 0, 32, 0, 128, 32);
Co spowoduje wyświetlenie naszego logo.
Testując oprogramowanie nie natrafiłem na problemy z jego działaniem, jedynie poprzednie oprogramowanie radziło sobie lepiej z tyrystorami, za to przy kilku testach (np. indukcyjność) prezentowane są dodatkowe parametry. Kod źródłowy oryginalnego oprogramowania w testerze nie został udostępniony więc trudno porównać czym się różni. W nowym oprogramowaniu procedura kalibracji wymaga połączenia wszystkich wyprowadzeń testujących, potrzebny będzie także kondensator o pojemności >100nF oraz o pojemności 4-30nF. Jestem ciekawy opinii osób, które zaryzykują i zdecydują się na wymianę oprogramowania.
Fajne? Ranking DIY