



Jak to w życiu bywa, człowiek kolejny raz staje przed wyborem kupienia wątpliwej jakości chińskiego produktu, albo wyprodukowania „elastycznego” narzędzia którego parametry są nieco pewniejsze



1.Rozdzielczość 16bit
2.Wzmacniacz x8
3.Wbudowane napięcie odniesienia o świetnych parametrach
4.Bardzo niski pobór prądu
5.Możliwość pomiaru z kilku wejść
6.Zasilanie od 2.7V-5V
Zacznijmy jednak od wyświetlacza. Jakiś czas temu zakupiłem owy na testy z nadzieją, że znajdę w końcu coś, co będzie pobierać mniej prądu od poczciwego PCD8544. Po małym „reverse engineering” okazało się, że być może i udało by się uzyskać pobór prądu <0.3mA, ale trzeba wtedy pozbyć się dodatkowej płytki na której znajduje się układ zasilania wyświetlacza i postarać się o dostarczenie odpowiednich napięć bezpośrednio do układu LPH. Najprawdopodobniej układ na pcb wyświetlacza zajmuje się dodatkowo kompensacją temperaturową, więc sprawa mogła by być nieco utrudniona. Ostatecznie oryginalne pcb pozostało, a wyświetlacz jest zasilony w sposób nieco inny niż z jakim dotychczas się spotkałem w popularnych opisach z internetu, moim zdaniem najwłaściwszy, ale pewnie to jeszcze nie to co być powinno (kto wie w jakim sprzęcie używa się tego wyświetlacza ? ). W każdym razie kontrast jest na praktycznie stałym poziomie w zakresie napięć od 3.3V-5V, a obniżenie temperatury do -15C też nie robi na nim wrażenia. W tym miejscu trzeba wspomnieć o przetwornicy ujemnego napięcia zasilania którego parametry mają istotny wpływ na zachowanie się wyświetlacza. Metodą prób ustaliłem odpowiednią częstotliwość i wypełnianie dla uzyskania najlepszej sprawności i odpowiedniego napięcia, które wynosi około -5.5V przy VDD = 3.6V. / Gdybym jednak miał zbudować przetwornice w sposób bezkompromisowy, to z pewnością użyłbym ujemnego sprzężenia zwrotnego w celu autoregulacji, ale ponieważ pochłonęło by to dodatkowe minimum dwa tranzystory zostałem przy wersji uproszczonej, do moich celów zupełnie wystarczającej.
(Tutaj małe wskazówki do pracy z tym LCD. Przy napięciu przekraczającym -10V wyświetlacz przestaje wyświetlać prawidłowo, również wyprowadzenie kontrastu nie należy łączyć bezpośrednio z wyprowadzeniem +3V ponieważ LCD może się nie uruchomić mimo pozornie prawidłowych napięć. Najlepiej użyć dzielnika który może dostarczać tylko kilku uA prądu.)
Po „rozgryzieniu” wyświetlacza i kwestii związanych z minimalizacją poboru mocy przyszła pora na zawartość którą chciałem wyświetlić. Ponieważ w przypadku graficznych LCD 1kB rom w procesorze to wartość tragicznie mała, więc cały zestaw używanych znaków, oraz ewentualną bitmapę należało umieścić w osobnej pamięci w tym przypadku eeprom kompatybilnej z resztą sprzętu na magistrali i2c. Zapisaną pamięć warto zabezpieczyć przed modyfikacją (dla 24C64 blokowana jest górna ćwiartka pamięci). Jak widać zastosowałem czcionki o wysokości 16pix ponieważ chciałem żeby były czytelne nawet z większej odległości. Od razu informuje, że w obrazie eeprom nie ma liter oprócz 'mV', paru dodatkowych znaków oraz ikony baterii. Na wyświetlaczu udało się zmieścić 3 temperatury, oraz wskaźnik naładowania akumulatora (3 ikony) w trybie termometru, lub dwa napięcia w trybie woltomierza, bo skoro już mamy dokładny woltomierz, to może się przydać nie tylko do pomiaru temperatury, ale również jako miernik napięcia właśnie

Teraz tylko pozostało upchnąć obsługę tego 'skomplikowanego' sprzętu w 1kB pamięci procesora, i można cieszyć się termometrem którego baterię będziemy ładować raczej nie częściej niż 1 raz w miesiącu, bo dzięki możliwości zmiany CLKPR w procesorze i działaniu z 0.5MHz prędkością cały termometr pobiera około 1.3mA prądu co jest wartością całkiem niezłą. W razie potrzeby szybszego wyświetlania (około 4 x większa częstotliwość odświeżania pomiarów), można zmodyfikować jeden parametr w programie i procesor będzie taktowany 4MHz (podniesie to pobór prądu do około 3.5mA).
Jest to pierwszy mój projekt na TTINY13 w którym na zakończenie pozostały prawie dwa niewykorzystane porty, a to za sprawą I2C która 'pociągła' wszystkie potrzebne peryferia. ADC procesora zostało użyte do pomiaru napięcia zasilania sygnalizowanego zmianą ikony baterii.
Można było rozdzielić włączanie LDO i przetwornicy napięcia ujemnego, co przełożyłoby się na oszczędność prądu, jednak wymagało by to znowu dodatkowej pamięci programu a tej w przypadku tego projektu dało się odczuć mocny jej brak

Kalibracja:
Ogromną zaletą prezentowanego rozwiązania jest kalibracja programowa, która polega jedynie na zapisaniu odpowiednich współczynników podziału wartości odczytywanych przez przetworniki.
Pierwszym krokiem jest ustawienie termometru w tryb pomiary napięcia, i takie dobranie stałej 'divcoeVOLT' aby napięcie wyświetlane zgadzało się co do wartości z doprowadzonym wzorcem napięcia. Należy pamiętać o największej wadzie ADS1112 jaką jest dość niska impedancja wejściowa. W przypadku Gain x8 wynosi ona około 1M ohm dla napięcia stałego. Po zestrojeniu woltomierza następnym krokiem jest dobranie współczynnika 'wzmocnienia' dla pomiaru temperatury 'divcoeTemp'. Jak wiadomo dla Termopary typu K napięcie z każdym stopniem wzrasta o mniej więcej 41uV w całym zakresie mierzonych temperatur. Ja dokonałem korekty tego współczynnika posiłkując się tablicą w której podane jest napięcie w funkcji temperatury. Na samym końcu należy dokonać przeskalowania temperatury mierzonej przez LM75 która aby mogła zostać zsumowana z surowymi wartościami napięcia z ADC, musi zostać doprowadzona do skali odpowiadającej napięciu z ADC. Mówiąc prościej trzeba o tyle podzielić wartość z LM75 o ile zostanie później pomnożona w momencie przeskalowywania surowego napięcia z ADC do stopni C. Ja zrobiłem to podstawiając za temperaturę z LM75 stałą wartosć np. 100 i korygując tak współczynnik 'divcoe1' aby dla zerowego napięcia z termopar uzyskać prawidłowe wskazanie temperatury. Na tym proces kalibracji można by uznać za zakończony gdyby nie fakt, że jeżeli użyjemy „wersji uproszczonej” wtyczki termopary (BLS+goldpiny), tak jak nie powinno się tego robić to może powstać dodatkowe termoogniwo które można skompensować, w tym celu w programie jest jeszcze jeden parametr 'Verroroffset' którego należy użyć w przypadku problemu z 'zerem'. Należy pamiętać, że przetwornik w konfiguracji jak na schemacie powinien mierzyć tylko napięcia dodatnie (w praktyce mierzy również ujemne, po umieszczeniu w zamrażarce termopary wskazania wynosiły -20C z dokładnością do kilku stopni).
Podsumowując, urządzenie umożliwia pomiar temperatury z dwóch termopar równocześnie od co najmniej -200C do +999C, oraz w trybie woltomierza pomiar napięcia od -256mV do +256mV, przy czym pomiar ujemnej (względem zimnego końca) temperatury lub napięcia jest obarczony błędem, przykładowo +24.95mV po odwróceniu = -25.05mV 150mv = -150.9mV, jak przypuszczam ma to również związek ze zmianą impedancji wejściowej przetwornika. Po 'regulacji' błąd wzmocnienia między ads1112 a sanwa5000 w całym zakresie napięć dodatnich wydaje się nie być większy niż 30uV. W przypadku używania układu jako miliwoltomierza należy pamiętać o jego bardzo niskiej impedancji wejściowej.
Bonus:
Na zakończenie prac z termomierzem, postanowiłem sprawdzić, jak wyglądało by napisanie czegoś w rodzaju oscyloskopu, bo trudno nazwać oscyloskopem rysowanie wykresu funkcji w tak oszałamiającym tempie

soft_asm.zip zawiera programy termometru i 'oscyloskopu' w asemblerze oraz wsad do eeprom.
LPH7653.zip zawiera opis wyświetlacza mojego autorstwa znajduje się tam min rozrysowany schemat elementów na PCB, prądy i napięcia sterujące, opis formatu danych.
Reszta załączników to ogólnodostępne noty w pdf oraz tablica napięć dla termopary typu K.
bobeer wrote:Zapomniałem napisać kosztów, mniej więcej ceny są takie:
tiny13 3zł
24C64 1zł ? (nigdy tego nie kupuje pełno wszędzdie tych pamięci)
LM75 ~3zł
ADS1112 ? (niemam pojęcia za ile i gdzie to można dzisiaj trafić ja miałem z sampli)
LCD 12zł
Reszta drobnicy to powiedzmy 3zł
W sumie wyszło dwadzieściapare.
Cool? Ranking DIY