środa, 30 marca 2011

RoDonM8 Linefollower: Decyzje wstępne


Autor: Dondu

Artykuł jest częścią cyklu: Robotyka - Teoria oraz kurs budowy robotów.

W poprzednim artykule określiliśmy ogólne założenia dot. robota RoDonM8, nadszedł więc czas na wstępne rozplanowanie dostępnych funkcjonalności mikrokontrolera do zadań stawianych przed robotem.

W każdym z poniższych punktów wyjaśniam każdą podejmowaną decyzję oraz wykazuję niezbędne piny i peryferia, które są potrzebne do realizacji danego zadania. Nieliczne przypadki pozostawiam, do rozstrzygnięcia w dalszej części projektowania robota.


Zaczniemy od:

Częstotliwość taktowania mikrokontrolera

Nasz robot będzie miał sporo zadań do realizacji, a większość z nich będzie niezwykle istotne dla poprawności działania i osiągów robota. Dlatego też powinniśmy na początek przyjąć, że mikrokontroler powinien pracować z możliwie największą częstotliwością zegara taktującego.

Jako, że w założeniach ustaliliśmy, że mikrokontrolerem tym będzie jeden z rodziny Atmega8, to zerkając do datasheet ustalamy, że graniczną częstotliwością taktowania jest 16MHz:


ATmega8 - Maksymalne częstotliwości zegara taktującego, dla różnych napięć zasilania.


i jest ona osiągalna, ale tylko i wyłącznie przy zastosowaniu zewnętrznego zewnętrznego jego źródła, którym w naszym przypadku będzie rezonator kwarcowy. Kwarc do mikrokontrolera ATmega8 podłącza się do pinów XTAL1 i XTAL2:

AVR ATmega8 - Sposób podłączenia zewnętrznego kwarcu.

Niezbędne peryferia:
  • piny XTAL1 oraz XTAL2





Wersja mikrokontrolera

W zakresie wersji mikrokontrolera ATmega8 mamy kilka elementów do rozpatrzenia:


Obudowa

Ze względu na fakt, iż wykorzystamy sporo (a może nawet wszystkie) piny mikrokontrolera Atmega8, należy przyglądnąć się jego różnym wersjom obudowy. Interesować nas będą tylko te, które łatwo można lutować:


ATmega8 - Rozmieszczenie pinów dla obudów DIP i TQFP.


Zauważ, że w przypadku ATmega8 w obudowie TQFP mamy więcej pinów niż w obudowie DIP. Konkretnie jest ich o cztery więcej i są nimi:
  • jeden pin Vcc,
  • jeden pin GND,
  • dwa piny przetwornika ADC (ADC6 i ADC7).

O ile dodatkowe piny zasilania nie mają dla nas żadnego znaczenia (choć oczywiście je podłączymy zgodnie z zasadami prawidłowego zasilania mikrokontrolerów), o tyle dwa dodatkowe kanały przetwornika ADC są dla nas bardzo pożyteczną cechą obudowy TQFP, która znacznie ułatwi nam realizację robota.

Dlatego też, do naszego robota wykorzystamy wersję w obudowie TQFP. Tych co obawiają się lutowania takiego układu pragnę pocieszyć, że jest to naprawdę prosta czynność, ponieważ raster (czyli odstępy między środkami sąsiednich nóżek) jest spory i wynosi 0,8mm co oznacza, że przy szerokości nóżki 0,3mm odstępy między krawędziami sąsiednich nóżek wynosi 0,5mm.

To jest bardzo przyjemny w lutowaniu raster, który spokojnie przylutujesz nawet lutownicą transformatorową, używając dużej ilości kalafonii. Także wykonanie płytki pod raster 0,8mm „metodą żelazkową” (powszechną wśród hobbystów) jest możliwe i nie powinno być z tym kłopotów.


Wersja mikrokontrolera

Mikrokontroler ATmega8 produkowany jest w 3 wersjach:
  • Atmega8,
  • Atmega8L,
  • Atmega8A.

Częstotliwość taktowania

Ponieważ ustaliliśmy, że mikrokontroler będzie pracował z najwyższą możliwą częstotliwością zegara taktującego, to zerkamy do datasheet szukając informacji pod kątem maksymalnych częstotliwości wybranych wersji, gdzie już na pierwszej stronie znajdujemy:

Atmega8 i Atmega8L:

Atmega8 i Atmega8L - maksymalne częstotliwości zegara taktującego oraz napięcia pracy.
Atmega8 i Atmega8L
Atmega8A:


Atmega8A - maksymalne częstotliwości zegara taktującego oraz napięcia pracy.
Atmega8A

Jak widać wersja Atmega8L odpada ponieważ może pracować tylko z częstotliwością do 8MHz.
Pozostają nam więc do wyboru wersje ATmega8 i ATmega8A.


Napięcie zasilania

Zapewne zauważyłeś powyżej, że ATmega8 nie może pracować z napięciami niższymi niż 4,5V. Mogłeś także stwierdzić, że ATmega8A może pracować z częstotliwością od 0 do 16MHz, w pełnym zakresie napięć od 2,7 do 5,5V. Niestety tak nie jest, a pokazuje to wykres bezpiecznego obszaru pracy:


Atmega8A - maksymalne częstotliwości zegara taktującego w zależności od napięcia zasilania. Obszar bezpiecznej i gwarantowanej pracy.
Atmega8A

na którym widać, że ATmega8A, by pracować z wymaganą przez nas częstotliwością 16MHz także wymaga co najmniej 4,5V.


Prąd w czasie pracy

Ponieważ nasz RoDonM8 będzie zasilany z akumulatorów lub baterii, stąd należy w miarę możliwości minimalizować pobór prądu, na wszystkich etapach jego projektowania. Dlatego też zerkamy do datasheet pozostałych na placu boju mikrokontrolerów w poszukiwaniu odpowiednich danych.

Dla Atmega8 znajdujemy:


ATmega8 - Wykres poboru prądu w trybie pracy.
Atmega8


i ustalamy, że Atmega8 podczas pracy z zegarem 16MHz przy zasilaniu 5V zużywać będzie około 20mA.

W przypadku Atmega8A:


ATmega8A - Wykres poboru prądu w trybie pracy.
Atmega8A

na wykresie ustalamy, że przy tej samej częstotliwości taktowania pobór prądu będzie w okolicach 11mA, czyli prawie o połowę mniejszy niż Atmega8Stąd nasz wybór powinien paść na ATmega8A.


Podsumowanie

Najlepszą dla potrzeb RoDonM8 jest wersja Atmega8A w obudowie TQFP. W ostateczności możemy użyć wersji Atmega8, ale nie możemy użyć Atmega8L, gdyż nie pracuje z zegarem 16MHz.





Sterowanie silników

Do sterowania silników użyjemy scalonego sterownika silników lub wykonamy własny na tranzystorach MOSFET. Niezależnie od tego niezbędne będą nam dla każdego silnika:
  • kanał PWM do sterowania prędkością obrotów,
  • pin sterujący kierunkiem obrotów silnika.

Dobrze byłoby także wiedzieć jaki prąd pobiera każdy silnik, aby w pełni kontrolować jego parametry pracy oraz zabezpieczyć silniki przed uszkodzeniem. Potrzebne więc nam będzie na każdy silnik dodatkowo:
  • wejście przetwornika analogowo-cyfrowego.

W rezultacie otrzymamy następujący schemat blokowy:


RoDonM8 - Schemat ideowy sterownika silnika.


Niezbędne peryferia:
  • timer z dwoma wyjściami PWM (w ATmega8 jest to Timer1),
  • dwa piny sygnałów PWM,
  • dwa piny sterujące kierunkiem obrotu silników,
  • dwa wejścia przetwornika ADC do pomiaru prądów silników.





Pomiary prędkość oraz kierunku obrotu kół

Wiedza o aktualnym kierunku i prędkości obrotu kół jest jednym z najistotniejszych elementów Linefollowera jak i innych robotów poruszających się za pomocą kół, co opisałem w osobnym artykule:
Robotyka: Teoria - Prędkość obrotowa i kierunek obrotu kół

Wyjaśniłem tam, dlaczego musimy określać dla każdego koła faktyczne:
  • prędkość obrotów,
  • kierunek obrotów.

Wytłumaczyłem tam także dlaczego potrzebować będziemy, aż dwa czujniki na jedno koło, czyli w przypadku naszego RoDonM8 będą to łącznie cztery czujniki.

Z punktu widzenia programu, by dokładnie mierzyć prędkości obrotowe kół niezbędne jest dokładne wyznaczanie momentu, w którym czujnik wiodący trafia na np. czarne pole tarczy impulsatora. Aby ten moment uchwycić w miarę możliwości bez opóźnień, można wykorzystać przerwania zewnętrzne. W mikrokontrolerze ATmega8 mamy do dyspozycji piny INT0 oraz INT1 i wykorzystamy je podłączając do czujnika wiodącego enkdera.

W związku z tym nasz układ pomiaru prędkości i kierunku obrotu koła wyglądać będzie następująco:


RoDonM8 - Schemat ideowy sterownika pomiaru prędkości i kierunku obrotu kół.


Do pomiaru prędkości będzie nam potrzebny timer, który będzie zliczał czas upływający pomiędzy kolejnymi impulsami.

Reasumując, w ten sposób będziemy mogli zmierzyć aktualną prędkość obrotową oraz kierunek obrotu kół.

Niezbędne peryferia:
  • dwa piny przerwań zewnętrznych z możliwością ustawienia wybranego zbocza sygnału dla transoptorów wiodących (INT0 oraz INT1),
  • dwa piny dla transoptorów kierunku,
  • timer.





Czujniki linii

Jako czujniki linii wykorzystamy transoptory odbiciowe, które będą w stanie „widzieć” linię na tle pozostałej powierzchni, po której jedzie robot. Wybór konkretnych transoptorów zostawiamy na później, teraz ustalamy jedynie sposób realizacji tej funkcjonalności robota i wymagane piny.

Ponieważ sygnał z transoptorów jest sygnałem analogowym należy wybrać pomiędzy dwoma rozwiązaniami podłączenia ich do mikrokontrolera:
  1. transoptory podłączone do zewnętrznych komparatorów,
  2. transoptory podłączone do wejść analogowych przetwornika ADC mikrokontrolera.
co szczegółowo opisałem w artykule: Linefollower - Podążanie za linią

Ponieważ jednym z nadrzędnych założeń RoDonM8 jest minimalizacja kosztów oraz wagi, a także samo-kalibracja, stąd ustalamy, że wykorzystamy sposób drugi, czyli przetwornik ADC.

Zgodnie z założeniami RoDonM8 wykorzystujemy mikrokontroler ATmega8A, który ma zaledwie maksymalnie 8 kanałów ADC. Ponieważ powyżej ustaliliśmy, że dwa kanały musimy wykorzystać do pomiaru prądu silników, stąd dla potrzeb czujników pozostanie nam maksymalnie 6 kanałów. To trochę mało o czym pisałem w temacie dot. listwy czujników.

Dodatkowo na tym etapie nie wiemy jeszcze ile w ogóle pinów nam zostanie. Dlatego decyzję w zakresie ilości czujników linii podejmiemy później, po ustaleniu niezbędnych pinów dla pozostałych funkcjonalności robota, co determinuje ilość pinów ADC, które pozostaną do naszej dyspozycji.Jeżeli pozostanie nam mało wejść ADC powinniśmy się zastanowić, jak powiększyć ich ilość.

Niezbędne peryferia:
  • piny ADC w ilości uzgodnionej w późniejszym czasie,
  • pin AREF z kondenstarorem,
  • pin AVcc z filtracją dobrą zasilania.





Pilot RC-5

Każdy robot powinien mieć możliwość reagowania na wydawane przez właściciela komendy. Mam tutaj na myśli przygotowanie robota do wykonania zadania poprzez wybór jakiejś opcji algorytmu, czy innych nastaw, które przed wyruszeniem na trasę należy ustawić.

Poza tym przy bardzo szybkim robocie istotnym jest posiadanie możliwości jego zdalnego zatrzymania na końcu trasy lub gdy z niej wypadnie poza planszę.

Dlatego też podejmujemy decyzję, że zastosujemy pilot podczerwieni w standardzie RC-5. Do odbioru sygnału RC-5 potrzebować będziemy:
  • najprostszy timer 8-bit,
  • pin przerwania zewnętrznego.

Timer możemy współdzielić z którąś z innych funkcjonalności robota, ponieważ komendy będą wydawane tylko w czasie jego postoju lub chęci zatrzymania.

W przypadku pinu przerwania nie mamy już takiego komfortu. Problem polega na tym, że mikrokontroler ATmega8 ma tylko dwa piny przerwań zewnętrznych, którymi są INT0 oraz INT1, a te już zarezerwowaliśmy dla określania prędkości i kierunku obrotu kół. Rodzina Atmega8 nie ma także możliwości generowania przerwań ze zmiany stanu innych pinów cyfrowych (ang. pin change interrupt).

Musimy więc poszukać innej możliwości, a jest nią wykorzystanie wbudowanego komparatora analogowego, którego nie będziemy wykorzystywać do innych celów:


RoDonM8 - Wykorzystanie przerwania komparatora do odbioru sygnału pilota podczerwieni RC-5.


W ten sposób będziemy mogli skutecznie wyłapywać zbocza sygnału RC-5 i odbierać komendy z pilota podczerwieni.

Niezbędne peryferia:
  • dwa piny komparatora,
  • komparator z przerwaniem,
  • timer (może być współdzielony z inną funkcjonalnością).





Zapamiętywanie parametrów jazdy

Jednym z naszych założeń, jest zapamiętywanie parametrów w czasie pracy robota. Rodzaj danych ustalimy w późniejszym czasie, ale na pewno będą to co najmniej:
  • prędkość obrotowa kół,
  • kierunek obrotu kół,
  • nastawione prędkości kół,
  • stan czujników,
  • podejmowane decyzje,
  • itp.

W tym celu niezbędna jest dodatkowa pamięć ponieważ w Atmega8, który jest podstawą RoDonM8, nie mamy wystarczających zasobów pamięci SRAM, ani EEPROM. Możemy rozpatrzyć więc dwie możliwości:
  1. karta pamięci SD,
  2. zewnętrzna pamięć EEPROM lub SRAM o sporej pojemności.

Karta pamięci SD 

Karta pamięci SD (w szczególności microSD) jest fajnym rozwiązaniem ze względu na:

  • olbrzymią pojemność i swobodę ustalenia formatu danych (dane w formie binarnej lub tekstowej),
  • poręczność w zakresie wyciągnięcia z robota i odczytu w komputerze, co zaoszczędziło by nam piny do komunikacji z komputerem w celu odczytu danych.


Jednakże w naszym przypadku zastosowanie karty SD znacznie zmniejszy poziom dostępnej pamięci programu i z tego powodu rozwiązanie to jest dla nas niemożliwe do zaakceptowania. Dodatkowo karta SD pobiera znaczne ilości prądu, a chcemy minimalizować ten parametr, ze względu na źródło zasilania (akumulator, bateria) i jego ciężar.

Pozostaje nam więc zastosowanie zewnętrznej pamięci EEPROM lub SRAM.


Który interfejs do komunikacji?

Zanim wybierzemy rodzaj pamięci powinniśmy ustalić, który interfejs dostępny w ATmega8 wykorzystamy do komunikacji z pamięcią. Mamy do wyboru:
  • TWI (czyli I²C),
  • SPI.

Zaglądamy więc do datasheet ATmega8 i znajdujemy tabelkę:


AVR ATmega8 - Piny interfejsu TWI (I2C).


Aby wykorzystać interfejs TWI musielibyśmy poświęcić dwa piny portu C, na których zlokalizowane są także wejścia przetwornika ADC. Ponieważ podjęliśmy decyzję, że czujniki będziemy odczytywać, za pomocą ADC, nie możemy więc poświęcać jego pinów na inne funkcjonalności. Z tego powodu interfejs TWI odpada.

Nie mamy więc wyboru i musimy zastosować interfejs SPI.

Mamy z tego tytułu dodatkowe zyski:
  • wykorzystamy te same piny co złącze programowania (MOSI, MISO i SCK),
  • znacznie szybsze przesyłanie danych z częstotliwością linii SCK nawet 8MHz przy kwarcu 16MHz. Dla porównania interfejs TWI pozwalałby na maksymalnie 0,4MHz.
Ale będą tekże straty:
  • pamięć z interfejsem SPI wymaga dodatkowego pinu sterującego CS.

Zysk dot. współdzielenia pinów jest oczywisty i bardzo pożądany, o tyle dodatkowy pin sterujący pamięcią może być dla nas problemem, którego ewentualne rozwiązanie zostawimy sobie na później.


Pamięć EEPROM

Pamięci EEPROM mają tę zaletę, że po odłączeniu zasilania zapisane dane nie są tracone. Mają jednak istotną dla nas wadę, którą jest długi czas zapisu danych. Popatrzmy na popularną pamięć serii 24Cxx, a konkretnie na AT24C32 i AT24C64:


EEPROM - Czas zapisu danych.

Pięć milisekund to sporo czasu. Wprawdzie pamięć ta zorganizowana jest w 32-bajtowe strony, co pozwala zwiększyć szybkość zapisu bloku danych, to nadal zapis takiego bloku trwa 5ms.

Czy taki czas zapisu nie jest dla nas zbyt długi?

Policzmy:
EEPROM - Maksymalna ilość operacji zapisu danych na sekundę.


Ilość 200-tu pomiarów po 32 bajty, to sporo informacji i być może wystarczy do naszych celów:

EEPROM - Maksymalna ilość danych zapisanych w ciągu jednej sekundy.


Pamięć SRAM

Jednakże znając nasz apetyt na analizę zebranych danych, wielkość transferu na poziomie 6,25kB/s (kBps) to porcja informacji, która może być zbyt mała, jeżeli będziemy chcieli zapisywać także dane o trasie lub inne parametry.

W takim przypadku warto przyglądnąć się pamięciom SRAM, które zapisują dane bez dodatkowego zauważalnego czasu zapisu, czyli natychmiast po otrzymaniu danych (ang. Zero Write Time).

Wprawdzie nie są one odporne na zanik zasilania, ale dla nas nie jest to problemem, ponieważ po zatrzymaniu robot przejdzie do stanu czuwania, czyli będzie podtrzymywał stan pamięci, aż do odłączenia akumulatora. Aby zabezpieczyć się przed zapominalskim, czy podekscytowanym twórcą, możemy przypominać o konieczności odczytu danych, na przykład za pomocą świecącej, czy migającej diody.


Wielkość pamięci

Pamięci SRAM nie są drogie, ale też i nie są tanie. Dlatego poświęcę, chwilkę na ten temat.

Ponieważ na ten moment, nie jak duże będzie zapotrzebowanie na pamięć, to rozważmy wyżej obliczony transfer oraz maksymalny czas jazdy robota, który przyjmiemy na poziomie 15 sekund:


RoDonM8 SRAM - Wielkość pakietu danych zapisanych w czasie 15 sekund pracy robota.

Pamięć jaka potrzebna byłaby do takiego pakietu danych, to pamięć 128kB na przykład 23LCV1024, która kosztuje około 11-12zł (cena 2013r.).

Nie jest to mało zważywszy cenę mikrokontrolera ATmega8 na poziomie około 5zł. Jednakże uważam, że posiadanie tak dużej pamięci jest zasadne i da nam możliwość gromadzenia sporej ilości danych do późniejszej analizy, w celu "śrubowania" osiągów robota do granic jego możliwości.

Można oczywiście będzie wstawić inną tańszą pamięć o mniejszej pojemności, ponieważ biblioteki, które utworzymy będą przygotowane do takiej zamiany. Można także w ogóle zrezygnować z tego modułu i zaoszczędzić trochę pieniędzy, kosztem braku danych do analizy.


Napięcie zasilania

Przy wyborze pamięci należy w szczególności zwrócić uwagę, na dopuszczalne napięcia jej pracy.

Tutaj możesz spotkać wiele różnych zakresów. W naszym przypadku ustaliliśmy już, że napięciem zasilającym elektronikę robota, będzie 5V. Dlatego też warto wybrać taką pamięć, która będzie mogła pracować z tym napięciem, by nie trzeba było stosować dodatkowych układów dostosowujących poziomy sygnałów sterujących oraz dodatkowego problemu związanego z zasilaniem takiej pamięci.


Podsumowując

Wykorzystując pamięć SRAM wraz z interfejsem SPI, będziemy mieli bardzo wydajny moduł zapisu danych w trakcie pracy robota. Od nas będzie tylko zależało, w jaki sposób wykorzystamy ten moduł.

Niezbędne peryferia:
  • współdzielenie pinów MOSI, MISO i SCK,
  • dodatkowy pin do obsługi pinu CS pamięci,
  • interfejs SPI.





Komunikacja z komputerem

Aby odczytać zgromadzone w pamięci SRAM dane z jazdy robota, musimy dysponować interfejsem do komunikacji z komputerem. Warto byłoby także mieć możliwość wysłania do mikrokontrolera jakiś danych, np. jakiejś obszerniejszej tablicy danych konfigurujących robota.

Tanią możliwością jest wykorzystanie interfejsu RS-232, do którego dostęp powinien mieć każdy, kto zajmuje się mikrokontrolerami (np. za pomocą konwertera RS232-USB). Interfejs ten wykorzystuje piny RxD oraz TxD, a komunikację oprzemy oczywiście o przerwania na bazie artykułu: RS-232: Komunikacja ATmega8 z komputerem

Niezbędne peryferia:
  • piny TxD oraz RxD,
  • interfejs USART.

8 komentarzy:

  1. Nie przeczytałem jeszcze całości, ale widzę że nabierasz rozpędu i konkrety zaczynają się pojawiać. Mam kilka pytań:
    Co będzie w następnym artykule?
    Kiedy będzie?
    Czy planujesz zestawienie elementów do zakupu, by złożyć zamówienia?

    Pozdrawiam i dziękuję!

    OdpowiedzUsuń
    Odpowiedzi
    1. Odpowiadając po kolei na Twoje pytania:

      1. Jeśli nie uznam, że o czymś jeszcze powinienem napisać, to jako następny pojawi się wstępny schemat robota.
      2. Jeżeli jutro (niedziela) nie będzie ładnej pogody, to być może jutro wieczorem.
      3. Tak, będzie zestawienie, w artykule ze schematem.

      Również pozdrawiam!
      :-)

      Usuń
  2. Cześć! Sporo tych funkcjonalności. Czy ATmega8 da sobie z tym radę jednocześnie analizując trasę? Mam wątpliwości.

    OdpowiedzUsuń
    Odpowiedzi
    1. Cześć.

      Będziemy tak kombinować, by dała radę :-)
      Przede wszystkim co się da, będzie oparte o przerwania.

      Jedynym newralgicznym punktem jaki widzę na tym etapie jest współdzielenie timera dla pilota RC-5. Problem polegać będzie na wspólnym preskalerze Timer0 i Timer1. Niestety do RC-5 potrzebujemy zerować preskaler za każdym wykrytym zboczem sygnału, a w ATmega8 zerowanie preskalera Timer0 jednocześnie zeruje preskaler Timer1.

      To może mieć wpływ na PWM sterujący silnikami (generowany przez Timer1) w momencie wysyłania komendy za pomocą pilota, ale mam nadzieję, że niezauważalny. Poza tym, w czasie jazdy pilot będzie używany jedynie do zatrzymania robota, więc nie będzie to miało znaczenia dla silników, które i tak mają zastać zatrzymane (o tym napisałem w artykule).

      No chyba, że w trakcie jazdy robota pilot będzie wysyłał inne komendy niż do zatrzymania - zobaczymy empirycznie :-)

      Usuń
  3. Dlaczego wybrałeś takie przestarzałe badziewie jak ATmega8? Weź coś nowszego jak ATmega88PA albo jakieś Xmega, np ATxmega16D4 - w TME bardzo tani.

    OdpowiedzUsuń
    Odpowiedzi
    1. Żaden element elektroniczny nie można nazwać "przestarzałym badziewiem", ponieważ każdy ma swoje parametry, cenę i tysiąc innych powodów, dla których jest w ciągłej sprzedaży: Jaki mikrokontroler wybrać do projektu ?

      Dlaczego ATmega8 i co będzie następne opisałem dokładnie w artykule: RoDonM8 Linefollower: Założenia projektu

      Link do powyższego artykułu z założeniami RoDonM8, znajduje się na samym początku niniejszego artykułu. Szkoda, że go nie kliknąłeś, wtedy znalazłbyś odpowiedź na swoje pytania.

      Usuń
  4. Witam, próba wpisania komentarza :)
    Krótkie pytanko, ponieważ mam zamiar w praktyce śledzić konstrukcję robocika - gdzie dostać tą pamięć S-RAM?

    OdpowiedzUsuń
    Odpowiedzi
    1. Tym razem się udało :-)

      Szukaj w większych sklepach internetowych Farnell, TME, itp. Jeżeli jej nie będzie, to można wybrać z mniejszą ilością pamięci, czyli np. 23LCV512. Ale radzę zaczekać aż, opublikuję schematy wraz z listami elementów.

      Usuń