Nutki do dzisiejszego pisania zapewnili:
♬ ♫ ♪ ♩ Elvenking ⚡ ⚡ ⚡ Secrets Of The Magick Grimoire ♬ ♫ ♪ ♩
https://youtu.be/1W7CdJYfoIc
●-----------------------------
Pomiar temperatury to chyba jeden z najwdzięczniejszych tematów do elektronicznej dłubaniny. Nie wyrywa się, nie ucieka, przetworniki różnorakie i sensory w sumie tanie i łatwo dostępne, częstokroć jako próbki układowe. Cały wic w tym, aby zabawkę poskładać i ożywić jakimś mniej lub bardziej ambitnym programem. W wątku o Księżniczce Motoroli kolejne wyciągane z pudełka przetworniki A/C z wyjściem równoległym są maltretowane do znudzenia wręcz, tu nieco zmienimy klimat.
Wystąpi dla odmiany szeregowy ośmiobitowy przetwornik A/C typu TLC549 http://www.ti.com/lit/ds/slas067c/slas067c.pdf , ale celem odetchnięcia na moment od Motki pomiarami sterować będzie mój ulubieniec CA80, ale w tej starej wersji.
Schemat zabawki prosty jest niezmiernie, no ale porządek musi być, zatem:
Przetwornik TLC549 zapięty do portu PC układu 8255 (PIO użytkownika), ponieważ jest potrzeba posiadania jednej linii wejściowej oraz dwóch wyjściowych, wybór padł na port C, który można funkcjonalnie podzielić sobie na pół. Wybór bitów dla sygnałów: na dane PC.7, ponieważ to ładnie wyrównany najstarszy bit i nie będzie kombinowania w programie, jako CLK i /CS - dwa najmłodsze.
Ze względu na malusie wartości wejściowe (jako czujnik T mamy naparapetowy MCP9700) napięcie referencyjne pobieram z LT431 w kwocie 2.5V. Z dokumentacji przetwornika wynika, że niżej już nie bardzo, zatem stanęło na 2.5V co mi daje mniej więcej 10mV/bit, łatwo wtenczas wyniki przeliczyć na fizyczne wartości (MCP9700 też ma 10mV/°C). Dodatkowo dla testów pojawiło się na płytce stykowej źródełko 1.2V na bazie LM385, na nim były wstępne uruchomienia programiku.
Sama budowa modelu, to jak łatwo zgadnąć plątanina kolejna malownicza, czyli - jak zwykle.
Sygnały CS,DATA, CLK z portu PC użytkownikowego układu 8255. W starym CA80 nie okablowałam sobie złącza DB50, no to teraz takie oto sztukowania się dzieją.
Na podobnej zasadzie podkradamy masę, +5V i sygnał /RESET z grzebyka ZS (Złącze Systemowe).
Wprawne oko zauważy - odwrotnie wpięta sonda emulacyjna AVT270, no...szczerze napiszę - fala gorąca mnie zalała, a to co warknęłam to się tutaj nie nadaje do zacytowania. Ale szczęściem zasilacz mam chytry z podcięciem no i stare dobre polskie konstrukcje, i emulator i CA. Po poprawieniu złączki - maszyneria ruszyła radośnie, a Pani z Kosą schowała się w cieniu, ona cierpliwa jest.
Na niewielkiej płytce stykowej kadłubek układu, przetwornik na brzeżku ponieważ jeszcze miejsce tam będzie mi potrzebne.
CA80 zgłoszony jak zwykle, ale już pod kontrolą emulatora AVT270.
Pierwsze uruchomienia programiku, zasadniczo wszystko super tylko kierunek rotowania bitów mi się pomylił i wynik od czapki, no zdarza się.
Pomiar źródełka testowego 1.24V z LM385: $80 = 128, 128 * 10mV = 1.28V - jak na pierwszy raz i taki druciak, to wynik jest do przyjęcia.
A to już wyniki z MCP9700 na parapecie, kruszeje sobie na mrozie. Zakres V640 przestawiłam z 1.5V na 500mV, widać ładnie jakieś 475mV, co daje -25mV poniżej progowego 0°C=500mV, czyli mamy około -2°C za oknem. No a CA80 pokazywał $2E..$2F czyli 46..47, po przeliczeniu na miliwolty a potem na °C w miarę się zgadza, jest fajnie.
Rzut oka na grządkę z przetwornikiem i napięciami odniesienia i zabieramy się za program.
Całością zabawki zarządza prościutki programik w assemblerze Z80, kompletny kod tu: https://github.com/bienata/CA80/blob/ma ... C549-1.asm (tak, to ponownie SB-Assembler, tylko z overlay Z80) a ja zwyczajowo o ciekawszych fragmentach.
Z programiku kluczowe w sumie jest rozmawianie z przetwornikiem przy pomocy procedurki getADC, zrobione na podstawie lektury dokumentacji i wygląda tak:
TLC549-1.asm pisze:Kod: Zaznacz cały
getADC:
push BC
; /CS = L
ld A,%0000.0000
out (USER8255+PC),A
; reset vars
ld B, 8 ; bits
ld C, 0 ; keep A/D val.
.continue:
; get bit from ADC
in A, (USER8255+PC)
and A,%1000.0000
or A,C ; A := A|C
rlca ; >> wziuuuu
ld C,A ; put in C back
; clock _/~\_
ld A,%0000.0010
out (USER8255+PC),A ; /cs = L, CLK = H
ld A,%0000.0000
out (USER8255+PC),A ; /cs = L, CLK = L
; get next bit
djnz .continue
; /CS = H
ld A,%0000.0001
out (USER8255+PC),A ; /cs = H, CLK = L
ld A,C ; result
pop BC
ret
No i tu widać, dlaczego do obsługi lini danych padło na najstarszy (choć mogło też na najmłodszy) bit portu. Po przerotowaniu rozkazem rlca osiem razy biciki wróca na swoje miejsce, ponieważ TLC549 wystawia najstarszy bit na początek transmisji.
Program główny to ustawienie stosu, a potem cykliczny odczyt przetwornika (wywołanie getADC) o pokazywanie wyniku, póki co szesnastkowo na wykasowanym ekraniku CA80, tu mam gotowe funkcje systemowe, no cała fura tego, dla ciekawości można poczytać:
http://bienata.waw.pl/ca80/0848_002.jpg
http://bienata.waw.pl/ca80/0848_001.jpg
Programik uplasowany od adresu $4000, to drugi bank systemowy, tam zapięłam emulator, ale przy odrobinie wysiłku można by ten kod zrobić w pełni relokowalnym i zapuszczać z dowolnej lokalizacji, może kiedyś...
Przebiegi generowane przez CA80 i odbierane dane pokazuje rysunek poniżej, interpretacja SPI w AD2 to megaprzydatna rzecz!
No i bardziej dynamiczny pokaz działania:
https://youtu.be/WtbKRrfnVlc
No i w ten oso sposób mamy model termometru zaokiennego na bazie procesora Z80. Temat może być rozwojowy - uładnienie programu, aby obsługiwał liczby ujemne i tak ogólnie pokazywał po ludzku, czyli dziesiętnie. Może dwie T - zarówno na dworze jak i ciepełko w pokoju, jest w czym dłubać.
●-----------------------------
behind-the-scenes
Aby nie było, że to tak niby łatwo i przyjemnie... stary CA80 dłuższy czas był wyłączony, po zasileniu ruszył jakoś.
Tylko się okazało, że zasiedlająca bank $4000 kostka NVRAM...kuleje.
Odczytywała się ciągle ta sama wartość, dla wszelkich adresów, zapis był ignorowany. No i panika, bo tam chciałam ręcznie wpisywać programiki sterujące, a była obawa, że to coś z komputerkiem, a może zimne luty ...
Na kartce skrobane testy, aby tylko dekoder adresowy i sygnały na podstawce wymusić, schematy i próbnik w ruch - sytuacja jakby kryzysowa nieco.
Chwila zawahania - a może EEPROM-y?
Ale nie, stanęło na emulatorze, czego efektem jest ten post.
O, a tak szybko ładuje się kod do CA80 przez emulałkę i konwerter USB/LPT. Podczas ładowania CA80 jest trzymany na resecie, aby się nie wyrywał, potem może normalnie wystartować, ale już z nową zawartością emulowanego banku pamięci.
https://youtu.be/QDnYEo6N5Oc