Witajcie!
Od wielu lat w moim posiadani znajduje się typowy przedstawiciel chińskiej myśli technicznej w temacie wag kuchennych – Clarus KS-5234. Zakres pomiaru 2-5000g, rozdzielczość 1g, zasilanie baterią CR2032, sterowanie 2 przyciskami sensorowymi na szalce i 2 mikroswitchami na spodzie urządzenia. Waga posiada też funkcję zegarka, minutnika oraz termometru (°C/°F).
Największą wadą tej wagi jest niezmiernie krótki czas zadziałania funkcji auto-off wynoszący ok. 22s. O ile do prostych czynności ważenia pojedynczych przedmiotów taki czas może być wystarczający, o tyle już bardziej czasochłonne czynności np. przesiewanie mąki przy konieczności wyciągnięcia z szafki i otwarcia kolejnej torebki, kończyły się najczęściej podniesieniem ciśnienia i rzucaniem mięsem. Kupienie nowej wagi to loteria, po przejrzeniu ulubionego portalu aukcyjnego, tylko jedna z przedstawionych wag miała podany czas funkcji samoczynnego wyłączenia - jedną minutę. Dla mnie za mało, żeby pozbywać się działającego urządzenia i kupować nowe. Aha, takiej bez auto-off i w rozsądnej cenie też nie znalazłem.
Drugim problemem jest dość szybkie zużywanie baterii, co przy braku wyłącznika powoduje konieczność jej wyciągania i jest wysoce upierdliwe. Ostatnio znowu zdechła bateria i postanowiłem przerobić wagę z zasilania jednorazowymi ogniwami CR2032 na zasilanie akumulatorem litowym, oraz dołożyć fizyczny wyłącznik – coś, czego brakuje w wielu obecnie produkowanych urządzeniach. Przy okazji udało się rozprawić z problemem funkcji auto-off, ale po kolei.
Ze względu na niewiele miejsca wewnątrz obudowy, wybór źródła zasilania padł na akumulator pozostały po telefonie Sony-Ericsson K510i, oraz wyłącznik suwakowy przyklejony klejem dwuskładnikowym. W celu ograniczenia napięcia z maksymalnych 4-4.2V w okolice oryginalnego napięcia 3-3.2V, w układ została szeregowo wlutowana dioda typu 4148. Rozwiązanie mało eleganckie, ale skuteczne – waga działa prawidłowo. Do pełni szczęścia należałoby dodać jeszcze moduł ładowania np. z popularnym TP4056 z gniazdem micro-USB, ale osobiście zadowolę się okresowym podładowaniem z zasilacza regulowanego.
Przy okazji grzebania we wnętrzu wagi, postanowiłem obejrzeć sobie płytkę elektroniki. Na niej znalazłem 2 układy typu chip-on-board zalane czarną żywicą, oraz pamięć EEPROM typu 24C02. Postanowiłem przyjrzeć się jej zawartości. Okazuje się, że ponad połowa komórek jest zajęta, a dane sugerują organizację 16-bitową. Szybkie wyszukiwanie pokazało, że na elektrodzie mamy tylko jeden wsad pamięci 24c02 do wagi elektronicznej, niestety jego zawartość mocno odbiega od mojej. Postanowiłem trochę powęszyć i najpierw sprawdziłem, w których miejscach pamięci zajdą zmiany, jeżeli pozmieniam wszystkie dostępne dla użytkownika ustawienia, czyli: jednostkę masy, nastawę minutnika, jednostkę wyświetlaną temperatury. Zmiany zaszły pod adresami 0x48-4B (jednostki) oraz 0x90 i 0x91 (odpowiednio minuty i sekundy minutnika).
Oczywiście do tej pory cykl badania polegał na wylutowaniu pamięci gorącym powietrzem, włożeniu pamięci w programator, odczycie lub przeprogramowaniu i ponownym przylutowaniu. Za dużo z tym pracy. Okazuje się, że pamięć jest stale zasilana w trybie standby, więc wydawało się, że wystarczy podłączyć masę i linię SCL i SDA do programatora. Wykorzystałem tani, chiński (a jakże) programator oparty o CH341 z dodatkową podstawką pod układy SO-8.
Niestety, procesor zakłócał odczyt, a skoro pacjent nie chce współpracować, to należy mu coś wyciąć. Na szczęście chińscy koledzy zostawili 2 pola testowe na liniach SDA i SCL, więc wystarczyło powiercić 4 otwory wiertłem 0.6mm – 2 przy testpointach, 2 przy nóżkach 5 i 6 pamięci, a ścieżki między padami pamięci i polami testowymi przeciąć. Przez otwory, sygnały danych i zegara zostały wyprowadzone srebrzanką na drugą stronę płytki, którą teraz można przykręcić z powrotem i już nie ruszać. W razie potrzeby srebrzankę można rozlutować, podłączyć programator krokodylami i potem zlutować ponownie.
Teraz gdzie szukać? Mamy 256 komórek, z czego 136 ma wartość inną niż FF. Test ze zmianami ustawień dodatkowo pokazał interesujące adresy 0x48 i 0x90, przyjąłem taktykę pojedynczych zmian w górę o niewielkie wartości w okolicach tych 2 adresów i wartości zbliżonych do 22, po czym mierzyłem stoperem czas wyłączenia. Udało się trafić za 5 razem, po sprawdzeniu 0x93, 0x98, 0x20 i 0x4C, komórka z wartością czasu auto-off w sekundach znajduje się pod adresem 0x45 i ma wartość 0x17 czyli 23 sekundy. Szybki test z podmianą na 120 i faktycznie, waga po niecałych 2 minutach się wyłączyła. Ostatecznie wgrałem wartość 0xF0 czyli 240 sekund, nigdy nie wiadomo czy wpisanie maksymalnej wartości nie spowoduje jakiegoś dziwnego zachowania. Przy okazji sprawdziłem, co pod tym adresem znajduje się w drugim zrzucie – 0xB8 czyli 184. Jak dla mnie 3 minuty.
Podobno procek w wielu chińskich wagach jest produkowany masowo metodą mask-ROM, i tylko poprzez odpowiedni wsad pamięci odpowiednio się konfiguruje funkcje i podłączenia. Ma to sens, a przy okazji może pozwolić na zmianę wkurzającego zachowania w innych urządzeniach. W trakcie badań wyszperałem ze składziku truchło innej wagi – łazienkowej, o podobnej budowie. Jednak tam zawartość jest już wyraźnie inna i pod adresem 0x45 mamy 0xFF. Dla potomności umieszczam ten wsad w odpowiednim dziale. W załączniku do posta umieszczam też wsady zarówno oryginalny, jak i modyfikowany, jednak ze względu na to, że wsad zawiera dane kalibracyjne i inne ustawienia specyficzne dla danego modelu wagi, w przypadku prób powtórzenia powyższego eksperymentu należy sczytać pamięć, zmienić wartość bajtu pod adresem 0x45 i wgrać pamięć ponownie.
Zachęcam do testowania metody i podzielenia się uwagami,
Wojtek
Cool? Ranking DIY