[CA80] [Z80-MBC2] Hybryda.

Kącik dla elektroniki retro - układy, urządzenia, podzespoły, literatura itp.
Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

[CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » czwartek 20 lut 2020, 12:17

Zapewne wielu z nas pilnie śledzi projekt https://microgeek.eu/viewtopic.php?f=82&t=2227&p=13643#p13643. Jednak każdy ma co do niego inne oczekiwania.

tapy pisze:
...Nikt nie mówi o jego usunięciu, tylko o doprowadzeniu do stanu obecnego minimum funkcjonaliści. CA80 to był mój pierwszy komputer i nigdy nie zamienię go na nic innego, lecz serce mi się kraja jak zbiera kurz zapomnienia. UART i częściowa funkcjonalność CP/M daje mi pewność, że assembler którego w nim używam, nie umrze wraz z kolejną odsłoną Windows. Może moje pojęcie retro jest zbyt nowoczesne, ale uważam, że system powinien potrafić sam wypluć kod dla siebie przeznaczony.


Widzę zbieżność z moim kierunkiem myślenia... Od roku wykorzystuję CA80 jako obiekt, na którym testuję kolejne "wynalazki". Zacząłem od klawiatury, która potrzebna mi była do ustawiania czasu... Potem zająłem się przesyłaniem plików HEX, wirtualną klawiaturą przez wifi itd.

Jednak do tej pory były to tylko próby wykorzystania nowo zdobytych umiejętności. Dopiero MBC2, którego płytki dostałem od kolegi @Phill2k, otworzył mi zupełnie nowe możliwości. Próby edycji prostych programów za pomocą EDa, pozwoliły docenić współczesne narzędzia. Zwykły Notatnik Windows to frezarka numeryczna a ED zaledwie dłuto i młotek... A trzydzieści lat temu zacząłem budowę kopii RTDS-a.

Wróćmy do meritum. Uwolniłem procesor w MBC2, zaprogramowałem EEPROM, czas na dalsze kroki. Wpadłem na pomysł połączenia CA80 i MBC2. Potrzebna nam przejściówka i kawałek taśmy z wtykami emulacyjnymi.
MBC2_CA80_MINIMUM.pdf

Zmodyfikowany program dla Atmegi prześle monitor CA80 do RAM-u, zablokuje na czas rozruchu przerwania, żeby coś się przypadkiem nie skasowało. Następnie załaduje do pamięci zawartość plików z karty SD. CA80 nie ma systemu plików i można zrezygnować z użytego w MBC. Zwykłe pliki HEX łatwo przenosić z PC-ta. Na koniec można jeszcze ustawić zegar, to przecież tylko kilka bajtów w pamięci. Tak przygotowany CA80 można powoli odpalić. Najpierw podać CLK 4 lub 8 MHz, jak kto woli. Po chwili odblokować przerwania i już.

Co zyskujemy? Łatwy dostęp do zasobów MBC2, takich jak: 64kB RAM, UART, SD czy I2C.
Można też dopisać funkcje odczytujące ZW i wyświetlające stan wyświetlacza na konsoli, oraz wysyłające do ZK kod klawisza z konsoli. W ten sposób możemy np. uruchamiać płytkę CA bez klawiatury i wyświetlacza, których jeszcze nie mamy. Wszystko to możemy zrobić bez przecięcia ani jednej ścieżki w CA80 i bez zmiany ani jednego bitu w monitorze CA80.

Zrobiłem już przejściówkę, ale jeszcze sprawdzam przed podłączeniem, bo nie chciałbym czegoś zepsuć... Czeka mnie jeszcze programowanie.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

tapy
Posty: 12
Rejestracja: niedziela 14 kwie 2019, 17:09

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: tapy » czwartek 20 lut 2020, 21:14

Bardzo ciekawa koncepcja! Przyznam trochę mi namieszała w głowie, bo planowałem budowę dwóch modułów dla RC2014 (1. CTC+CPU clock&NMI generator; 2. 8255 PPI) w czasie oczekiwania na wznowienie produkcji PCB przez Chiny i po dzisiejszym, z sukcesem, zakończeniu prac z Zeta SBC v2. Płytki te miały w połączeniu z modułami Karla Brokstada https://www.z80.no o symbolach 12e Z80 CPU, 13e ROM, 14e RAM być podstawą do przeniesienia platformy CA80 na RC2014. Poczekam na rozwój Twojego projektu, bo może będzie warte grzechu użycie Z80Ctrl https://github.com/jblang/z80ctrl jako bootloadera. To może być ciekawe.
PS. Dłuto i młotek w przypadku ED to zdecydowanie zbyt łaskawe porównanie, które bym przypisał prędzej ZDE16, tu śmiało możemy powiedzieć - gładzony kamień ;)

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » niedziela 08 mar 2020, 23:18

Dobry wieczór!

Jak zwykle zająłem się tematem pobocznym... Czekam na wiosnę.
Podłączyłem MBC do CA80 zamiast wyświetlacza. Tylko dwanaście przewodów i kawałek kodu. Wyszło mi coś takiego:
CA80_VT100.png

CA80_ZEGAR.png

Można jeszcze dorobć obsługę klawiatury i będzie zestaw uruchomieniowy CA80.
CA80_MBC_Terminal.zip

Wszystkie niezbędne informacje są w komentarzach kodu.

Życzę dobrej zabawy. :-)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » sobota 04 kwie 2020, 12:49

Przyszedł czas na klawiaturę. Robiłem już wiele wersji klawiatury do starego CA, jednak nowego CA80 nigdy nie miałem... Postanowiłem wykorzystać to, co mam pod ręką, czyli uszkodzoną (?) przeze mnie płytkę. Okazało się, że generator CLK i dzielnik NMI żyją. :-)
Zmodyfikowałem schemat i przerobiłem ZK. To jedyna istotna zmiana różniąca obie wersje.
CA80_OLD_TO_NEW.jpeg

Zaprogramowałem EEPROM za pomocą wcześniej zrobionego programatora.
IMG_20200404_111211.jpg

MBC2_CA80_NOWY_MONITOR_LOADER.zip

Zaprojektowałem przejściówkę udającą fizyczną klawiaturę. Nareszcie klawiatura jest tak prosta i logiczna, że wystarczą dwa scalaki! W czasie montażu prototypu, obmyślałem sposób programowania "wynalazku" i po szamotaninie z własnymi myślami zmieniłem zdanie.
CA_V1_KEY.pdf

IMG_20200403_230544.jpg

Trzy kości to też niewiele, ale za to program będzie prostszy. W dodatku mogę wykorzystać funkcje z wcześniejszych wersji (lenistwo).
CA_V2_KEY.pdf

Poskładałem wszystko i działa. Jest układ uruchomieniowy do Nowego CA, bez klawiatury i wyświetlacza. Wszystko jest na terminalu.
CA80_MBC_Terminal_KB_DISP.zip

Old_CA80_Like_New.png

Teraz pozostał ostatni krok: przeniesienie wszystkiego do MBC. Nie ma już wymówek...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » niedziela 05 kwie 2020, 02:35

Odważyłem się!
Podłączyłem wreszcie MBC do CA. Na razie tylko ładowanie monitora i obsługa wyświetlacza i klawiatury. Jeszcze kawał drogi przede mną, ale pierwszy krok jest najważniejszy. Co prawda wszystko wisi na drutach i grozi katastrofą...
IMG_20200405_020251.jpg

https://www.youtube.com/watch?v=Jcxy_UJ5jcM&feature=youtu.be
MBC2_CA80_NOWY.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 15 kwie 2020, 15:30

Ostatnio podłączyłem do CA80 MBC zamiast procesora i pamięci. Teraz postanowiłem przenieść procesor z powrotem na jego miejsce. Zmodyfikowałem płytkę tak, żeby można było użyć RAM w jednej kości. Tylko kilka krosów, dekoder adresów wylutowany, no i nowa przejściówka do wpięcia w złącze systemowe. Zrobiłem też "prawdziwą" klawiaturę i jakiś wyświetlacz, żeby było po staremu. Niestety mam starą wersję płytki, więc przejściówka pasuje do starego złącza systemowego... Opis zmian złącza jest na schemacie.
CA80_ZS.pdf

CA80_bez_ROM.jpeg

CA80_bez_ROM1.jpeg

Mimo wielokrotnego "przedzwonienia" wszystkich połączeń, układ nie chciał ruszyć... Sprawdzałem różne szybkości przesyłania monitora do RAM (z użyciem DigitalWrite() i z bezpośrednim zapisem do rejestrów) i z różnymi ustawieniami generatora CLK (8 MHz, 2 MHz i nawet 1 MHz) bez żadnego skutku.
progr_DW.png

progr_dirReg.png

CLK_OCR2_3.png

CLK_OCR2_7.png

Dopiero dzisiaj mnie olśniło - procesor ma prymitywny układ RESET na R9 i C5. Gdy wylutowałem kondensator, wszystko ożyło. Stopniowo zwiększałem CLK i szybkość programowania i ciągle działa. Nawet na 8 MHz. Przy okazji zmierzyłem pobór prądu: CLK 8 MHz - 370 mA, CLK 1 MHz - 351 mA. Pozostały jeszcze zwykłe TTL-e CEMI i S405 niewiadomego pochodzenia. Nie próbowałem jeszcze z płytką portów użytkownika (MIK 89), ale chyba czas na przerwę ...
CA80_Start_directReg.png

CA80_SNMI.png

Następny krok to dopisanie obsługi SD i procedur odczytu i zapisu dla CA80. Przesłanie 8 kB zajmuje tylko 165 ms. Czas zapomnieć o magnetofonie. :-D
MBC2_CA80_bez_ROM.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 15 kwie 2020, 22:25

Przepraszam za bylejakość załączonych wcześniej schematów. Tym razem może będzie coś widać.
Zmiany_CPU.jpeg

CA80_RAM_64kB.jpeg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » sobota 16 maja 2020, 23:47

Zanim dokończę "hybrydę" (myślę że niedługo), zajmę się jeszcze peryferiami CA80.

Jakiś czas temu kupiłem wyświetlacz LCD z myślą o użyciu go w CA80. Będzie możliwe zasilanie z baterii.
https://www.aliexpress.com/item/33054109178.html?spm=a2g0s.9042311.0.0.27424c4dKpZyRh
Wcześniej nie miałem do czynienia z takimi wynalazkami i nie zdawałem sobie sprawy, że łatwo nie będzie. "MyFriend" zapewniał, że udostępni kod... Niestety niewiele z tego "kodu" wynikało poza opisem wyprowadzeń. Kolega StaryAnoda_NEW opisał podobny wyświetlacz, jednak nic z tego nie zrozumiałem...
https://microgeek.eu/viewtopic.php?t=1662
Poszukiwania w sieci naprowadziły mnie na inny wyświetlacz oparty na tym samym sterowniku (HT1621), niestety był on krótszy...
https://www.14core.com/wiring-the-6-digit-7-segment-2-4-inch-ht1621-lcd-display-module-on-microcontroller/
Przeanalizowałem opis i zaryzykowałem. Okazało się, że mój działa na takich samych ustawieniach. :-D Zrobiłem prototyp na Arduino. Z powodu ograniczonej liczby pinów, użyłem ekspander i jakoś poszło. Postanowiłem uprościć układ, bo w końcu to zadanie jest trywialne dla najprostszego mikrokontrolera. Kod krótki (przerobiłem wcześniej napisany), żadnych ograniczeń czasowych, żadnych timerów, ADC itd. Tylko czternaście pinów. Spróbowałem STM, ale niestety na razie przerasta to moje możliwości. Przy okazji okazało się, że mój "genialny" kod nie przewiduje wszystkich okoliczności. Myślałem, że BluePill jest za szybki i trzeba go trochę przyhamować. Odpuściłem jednak temat i zająłem się czym innym, to znaczy popadłem w błogi stan lenistwa. Jednak coś nie dawało mi spokoju. Przecież nie potrzebuję UART-u, więc mogę użyć cały PD w ATmedze! Po przemyśleniu znalazłem jeszcze prostsze rozwiązanie: wewnętrzny oscylator. Cały PB do dyspozycji. PC też nieużywany (oprócz RESET), więc pinów jest aż nadto. Nareszcie ATmega8 ma zajęcie, bo myślałem, że już do niczego się nie przyda. :-)
Przygoda z BluePill-em okazała się bardzo pomocna. Wyświetlacz bez ekspandera też nie działał. Gdyby nie wcześniejsze zmagania, pewnie dałbym sobie spokój. Znowu trochę pomyślałem i bez żadnych pomiarów i obserwacji dołożyłem małe opóźnienia i jest OK. Teraz czekam na płytkę od kolegi Phill2k. Wyświetlacz będzie, jak znalazł.

Na razie zamiast schematu krótki opis połączeń:

Kod: Zaznacz cały

// ------------------------------------------------------------------------------
//  Wyswietlacz LCD HT1621 dla CA80
// ------------------------------------------------------------------------------
// CA80 ZW: 1    (+5V)       ATMEGA8
//          2 (c)(PB2)   --> PB1 (PIN 3)  W CA80 segmenty ulozone sa po kolei
//          3 (d)(PB3)   --> PB4 (PIN 6)  kgfedcba, jednak na ZW jest chaos.
//          4 (b)(PB1)   --> PB2 (PIN 4)  Wprowadzimy jeszcze wieksze zamieszanie,
//          5 (e)(PB4)   --> PB5 (PIN 11) bo wyswietlacz ma inny uklad segmentow.
//          6 (a)(PB0)   --> PB3 (PIN 5)  Dzieki temu program jest prosty.
//          7 (f)(PB5)   --> PB7 (PIN 13) Czasem trzeba nabalaganic,
//          8 (g)(PB6)   --> PB6 (PIN 12) zeby bylo latwiej ;-)
//          9 (k)(PB7)   --> PB0 (PIN 2)
//          10 (PC5)     --> PC0 (PIN 23)
//          11 (PC6)     --> PC1 (PIN 24)
//          12 (PC7)     --> PC2 (PIN 25)
//          13 (GND)     --> GND
// ------------------------------------------------------------------------------


// ------------------------------------------------------------------------------
//  HT1621      Piny wyswietlacza. Brak RD, wiec mozliwy tylko zapis.
//  1 - CS   --> PD5 (PIN 11)
//  2 - WR   --> PD6 (PIN 12)
//  3 - DATA   --> PD7 (PIN 13)
//  4 - GND
//  5 - +5V
// ------------------------------------------------------------------------------

CA80_LCD_ALL.jpg

CA80_LCD_POWIT1.jpg

CA80_LCD1.jpg


CA80_LCD_CZAS.jpg

CA80_LCD_HT1621_mini1_0.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 03 cze 2020, 23:22

Dobry wieczór!

Strasznie długo czekałem na płytki z JLCPCB... Wreszcie są. Jedna już wstępnie uruchomiona. Nie obyło się bez błędu. Już na schemacie pominąłem 39R w CLK. Na wszelki wypadek przeciąłem ścieżkę i wlutowałem. Ruszyło bez szemrania. I tak mam szczęście, bo wysłałem Gerber bez pliku wierceń... Myfriend napisał mail z pytaniem, czy na pewno tak ma być i udało się. :-)
CA80_NO_ROM1.jpg

CA80_NO_ROM2.jpg

CA80_bez_ROM.pdf

Można było zrobić mniej demolki na MIK-90... Zamiast RAM 128 kB użyć 32 kB, bez wiercenia i wymiany podstawki. Do CE bezpośrednio MREQ, do
CE2 RAM_CE2 ze zmodyfikowanego ZS. Otrzymamy podwójnie adresowane RAM w całych 64 kB. Do większości zastosowań powinno wystarczyć.

Drugą płytkę też zmontowałem, ale zapomniałem napisać program, więc trochę jeszcze poczeka. Trochę się z nią pospieszyłem, bo uprościłem schemat. Zamiast Nano i PCF8574 wystarczy goła Atmega8. Pozostałe kości służą do obsługi wirtualnej klawiatury. Już wcześniej zrobiłem to na MBC (opis trochę wyżej). Jak uruchomię - opiszę.
CA80_TERMINAL.pdf
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » sobota 06 cze 2020, 02:11

Uruchomiłem drugą płytkę... Niestety źle ją zaprojektowałem. Nano trzeba wlutować pod spodem, albo piny przylutować mu odwrotnie. Sam nie wiem, jak udało mi się zapanować nad kodem. Połączyłem dwa: terminal i HT1621. Płytka zastępuje wyświetlacz i klawiaturę CA80. Można ją użyć w czasie uruchamiania nowego CA80. Specjalnie w tym celu przerobiłem stary na "nowy". Mimo błędów jest sukces. :-)
IMG_20200606_012332.jpg

IMG_20200606_012355.jpg

IMG_20200606_012438.jpg

CA80_Terminal_KB_DISP.zip

IMG_20200606_181710.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 10 cze 2020, 00:30

Z trudem budzę się z letargu...
Wyciągnąłem z MBC moduł DS3231, bo już nie chce mi się ustawiać godziny w CA. Dopisałem dwie funkcje i już. Wyszły proste, bo RTC operuje na kodzie BCD, więc nie trzeba nic zmieniać. Trochę się zdziwiłem, bo okazało się, że godzina się nie zgadza. Zapomniałem, że kiedy go ostatnio włączałem, był jeszcze czas zimowy. :-)

Kod: Zaznacz cały

//seconds, minutes, hours, dayOfWeek, day, month, year;
byte          time[7];

void readRTC()
// Read current date/time binary values from the DS3231 RTC
{
  Wire.beginTransmission(DS3231_RTC);
  Wire.write(DS3231_SECRG);                       // Set the DS3231 Seconds Register
  Wire.endTransmission();
  // Read from RTC
  Wire.requestFrom(DS3231_RTC, 7);
  for (byte i = 0; i < 7; i++)
  {
    time[i] = Wire.read();
  }
}

void sendTime()
{
  digitalWrite(RAM_CE2, LOW);         // Force the RAM in HiZ (CE2 = LOW)
  loadHL(CA80_SEC);                   // HL = SEC
  {
    Serial.print("Ustawianie czasu...");   
    for (word i = 0; i < 7; i++)     
    {
      loadByteToRAM(time[i]);         // Zapis do RAM CA80
    }
  }
}


Trzeba jeszcze popracować nad dniem tygodnia, bo w MBC nie jest ustawiany...

Pozostało puste gniazdo SD. Może w końcu się wezmę do roboty?
CA80_BEZ_ROM.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » niedziela 14 cze 2020, 00:45

Nie mam zbyt wiele wolnego czasu, więc dokończę tylko ustawianie czasu. Zabrakło dnia tygodnia. DS3231 ma rejestr zliczający modulo 7 umieszczony nawet w tym samym miejscu co DNITYG w CA80. Niestety inżynierowie z Dallas dosyć pobieżnie przeczytali MIK 05 i nie zauważyli, że powinien on zliczać w dół. Wartość początkową też trzeba ustawiać, bo pewnie nie wiedzieli, że można ją łatwo obliczyć...

Wszyscy chyba zauważyli, że te same daty w kolejnych latach przypadają w różne dni. Jeżeli rok zaczynał się w poniedziałek, to następny zacznie się we wtorek lub w środę, gdy poprzedni rok był przestępny. W ten sposób szybko możemy obliczyć pierwszy dzień dowolnego roku. A jak wyliczyć dzień tygodnia dla dowolnej daty? Wystarczy policzyć ile dni minęło od początku roku i obliczyć resztę z dzielenia przez siedem. Uzyskana wartość będzie przesunięciem względem pierwszego dnia roku, który już znamy.

W kalendarzu sprawdziłem, że 1.1.2020 przypadał w środę, więc mogę przyporządkować kolejne przesunięcia do kolejnych dni tygodnia (albo odwrotnie).

Kod: Zaznacz cały

byte dayOfWeek[] = {5,4,3,2,1,7,6}   //w CA80 środa ma wartość "5".


Rejestr lat jest dwucyfrowy, więc interesuje nas tylko bieżące stulecie i nie musimy przejmować się latami podzielnymi przez 100 i 400. Obliczamy tylko lata przestępne w najbliższej przyszłości (patrząc z naszego czasu). W rzeczywistości interesują nas lata przestępne w przeszłości, które wystąpiły od 2020 do daty, która będzie przetwarzana. Zakładam, że nawet jeżeli przetrwa jakiś CA80 do roku dwa tysiące setnego, to ewentualnemu jego użytkownikowi nie będzie przeszkadzał błąd w obliczeniu dnia tygodnia...

Żeby program nie musiał zbyt wiele liczyć, możemy podsunąć mu gotowe wyniki liczby dni od początku roku do kolejnych pełnych miesięcy:

Kod: Zaznacz cały

int liczbaDni[] = {0,0,31,59,90,120,151,181,212,243,273,304,334}   //miesięcy jest dwanaście, ale trzeba uwzględnić zerowy element tablicy.


Tablica zakłada, że luty ma 28 dni, więc musimy dodać jeden, gdy właśnie jest rok przestępny i minęły już dwa miesiące tego roku. Musimy też dodać liczbę lat, które upłynęły od dwudziestego roku, bo od niego zaczęliśmy obliczenia, i liczbę lat przestępnych od tegoż roku (bo w kolejnym roku przesuwamy się o jeden dzień do przodu, a w przestępnym o dodatkowy).

Musimy jeszcze przeliczyć wartości BCD (z rejestrów DS3231) na binarne.

Kod: Zaznacz cały

byte rok = ((time[6] / 16) *10 + (time[6] % 16));
byte mies = ((time[5] / 16) *10 + (time[5] % 16));
byte dzien = ((time[4] / 16) *10 + (time[4] % 16));
time[3] = dayOfWeek[((dzien - 1   // minus jeden, bo zaczęliśmy od pierwszego dnia a nie zerowego
         + liczbaDni[mies]    // suma dni w poprzednich miesiącach
         + (rok%4)*(mies>2)    // czy jest rok przestępny i był już luty
         + (rok - 20)       // liczba lat po dwudziestym
         + ((rok - 20)/4)    // liczba przestępnych po dwudziestym
         )%7)]         // modulo siedem (nie uwzględniamy ósmego)
                  //(ach, te ludzkie sposoby liczenia!)


Jutro sprawdzę, czy działa...

P.S. Jeszcze jest dzisiaj a już zauważyłem, że pośredni wynik nie mieści się w bajcie (liczba dni w roku przekracza 255)...
W końcu i tak interesuje nas reszta z dzielenia, więc możemy wszystkie "siódemki" wyrzucić wcześniej.

Kod: Zaznacz cały

byte liczbaDni[] = {0,0,3,3,6,1,4,6,2,5,0,3,5}   //miesięcy jest dwanaście, ale trzeba uwzględnić zerowy element tablicy.

Teraz obliczenia będą jeszcze prostsze.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 02 wrz 2020, 01:05

Działających CA80 przybywa, a zaczyna brakować wyświetlaczy...

Postanowiłem potrenować KiCad. Najpierw chciałem zrobić odpowiednik płytki MIK91 dla wyświetlaczy 3641A (wspólna katoda), bo takie mam. Gdyby nie te tranzystory i stada rezystorów, byłoby całkiem łatwo. Nie znam żadnego scalaka, który miałby OC tranzystora pnp na wyjściu. Przemyślałem temat i narysowałem schemat. Rolę tranzystorów pnp przejmą wyjścia bramek HC.
Wyjscie bramki HC.png

CA80_DISPLAY.pdf

Byłem daleko od domu, więc nie miałem przy sobie potrzebnych elementów i nie mogłem sprawdzić układu. Zabrałem się do pracy i opracowałem płytkę. Przewidziałem też możliwość użycia większych wyświetlaczy - 5461A.
CA80_DISPLAY.png

Poszedłem spać w poczuciu dobrze wykorzystanego czasu. Nad ranem, kiedy byłem już wyspany ale jeszcze nie musiałem wstać, przypomniał mi się CPL, który jest na końcu programu obsługi wyświetlacza w procedurze NMI... Aktywne "zero"! Cała robota do wyrzucenia. Można wstawić NOP, ale trzeba przerobić każdy egzemplarz, bo nie wiadomo kiedy i do czego podłączę nowy wyświetlacz. Można wstawić 7404 w nową płytkę i też będzie działać. Ale co ze starym? Dokładać negacje? Okazało się, że rozwiązanie jest dziecinnie łatwe - wystarczy zamiast HC244 wlutować HC240. Pinologię mają taką samą tylko wyjścia są zanegowane.
Sprawdziłem układ z HC244 na "stykówce". Rzeczywiście działa odwrotnie niż początkowo sądziłem. Okazało się też, że "Majfriend" przysłał czerwone zamiast zielonych!!! HC240 jeszcze nie mam, ale już zamówiłem. Płytki też zamówione, więc za trzy tygodnie będzie lutowanie. :-)
CA80_.jpg
CA88_.jpg

GERBER_CA80_DISPLAY.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein

Awatar użytkownika
Zegar
Newb
Newb
Posty: 97
Rejestracja: wtorek 02 lip 2019, 14:42

Re: [CA80] [Z80-MBC2] Hybryda.

Postautor: Zegar » środa 02 wrz 2020, 09:28

Ponieważ używam "hybrydę", mogę dowolnie modyfikować zawartość "ROM-u". Sprawdziłem, czy zmiana CPL na NOP rozwiąże problem.
NOP_EX_CPL.jpg

Rozwiązanie jest niedoskonałe, bo wszystkie segmenty ciągle świecą. Zapomniałem jeszcze o wygaszeniu ich w czasie zmiany numeru cyfry wyświetlacza.
DUCHY.jpg

LD_A_00H_EX_0FFH.jpg

BEZ DUCHOW.jpg

CA80_NMI.jpg

Teraz wszystko jest w porządku. Oczywiście zmiany wprowadziłem tylko na czas prób i usunę je gdy tylko będę miał HC240.

P.S.
Długo nie musiałem czekać - przesyłka już dotarła (tym razem krajowa).
HC240.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"If A = success, then the formula is A = X + Y + Z.
X is work. Y is play. Z is keep your mouth shut."
A. Einstein


Wróć do „Retro”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości