Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.

Orologgio 14 Oct 2020 10:51 8742 39
Altium Designer Computer Controls
  • #31
    Orologgio
    Level 11  
    Dawno tutaj nie pisałem...

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

    Opracowałem uproszczony odpowiednik płytki MIK91 dla wyświetlaczy 3641A (wspólna katoda), bo takie mam. Przewidziałem też możliwość użycia większych wyświetlaczy - 5461A. Zmontowany układ można podłączyć bezpośrednio do złącza wyświetlacza starej wersji CA80. Z MIK290 też można, ale ZW nie jest na niej przewidziane - trzeba trochę gimnastyki.

    Duże wyświetlacze: https://www.aliexpress.com/item/32753793524.html?spm=a2g0s.9042311.0.0.27424c4dNdmUuG
    Małe: https://www.aliexpress.com/item/1331280145.html?spm=a2g0s.9042311.0.0.27424c4dNdmUuG

    Na płytce należy zamiast HC244 wlutować HC240 (w trakcie projektowania zapomniałem, że stan niski zapala segment). Schemat jest poprawiony. Zastosowałem układy SMD, żeby potrenować lutowanie przed trudniejszym wyzwaniem. Płytki zmontowane działają. Użyłem rezystorów 100 omów, jednak dla zielonych wyświetlaczy lepsze byłyby o mniejszej wartości np. 47 omów (większe napięcie przewodzenia LED). Na płytce jest też wejście Brightness_PWM. Jeżeli go nie używamy, musi być zwarte.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Zamieszczam pliki Gerber. W JLCPCB 2 USD + wysyłka za pięć płytek.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Górę płytki można obciąć. Dla mniejszych wyświetlaczy można też obciąć boki wzdłuż wydrukowanych na płytce linii.
    Mam nadzieję, że komuś się przyda. :-)
  • Altium Designer Computer Controls
  • #32
    Orologgio
    Level 11  
    Kolejnym podzespołem, którego ciągle brakuje, jest klawiatura. Od dawna próbuję zrobić coś zastępczego...
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.

    Mechaniczne klawiatury albo są kiepskie (tact switch), albo drogie. I tak trudno zrobić coś estetycznego bez zaawansowanych narzędzi. Pomyślałem więc o klawiaturze dotykowej. Kawałek PCB z namalowanymi klawiszami łatwo zaprojektować. Poczytałem trochę i już chciałem się poddać, bo nie znalazłem czipa, który obsłuży dwadzieścia cztery klawisze. Może użyć dwa zestawy po dwanaście? Czytałem więc dalej.

    Artykuł

    Zastanowił mnie fragment przykładowego kodu:

    Code:
    Serial.println("Only touch ONE button!");


    Niby dlaczego? W końcu kto mi zabroni dotykać dwa na raz?! Zaprojektowałem płytkę, zamówiłem komponenty i wreszcie mam wszystko na biurku.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Przerobiłem wyżej wspomniany przykład, dokleiłem fragmenty z wcześniejszego projektu (dobrze mieć coś przetestowanego) i CA80 działa "na dotyk". ;-)
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Code:

    // ------------------------------------------------------------------------------
    // Kody klawiszy tworzymy wg. wzoru: starsza cyfra nr kolumny,
    // mlodsza ma zero na pozycji numeru wiersza
    //
    //  wiersz \ kolumna  5 4 3 2 1 0
    // -------------------------------
    //  3 (0111)          Z C D E F M
    //  2 (1011)          X 8 9 A B G
    //  1 (1101)          Y 4 5 6 7 .
    //  0 (1110)          W 0 1 2 3 =
    // ------------------------------------------------------------------------------
    void czytajKlawiature()
    {
      uint16_t touchstatus;
      int touchNumber;
      while (checkInterrupt());   // Wbrew nazwie nie zglaszamy przerwania
      touchNumber = 0;
      Wire.requestFrom(0x5A, 2);  //read the touch state from the MPR121
      byte LSB = Wire.read();
      byte MSB = Wire.read();
      touchstatus = ((MSB << 8) | LSB); //16bits that make up the touch states
      byte row = 0;
      byte column = 0;
      for (int j = 0; j < 4; j++) // Check how many electrodes were pressed
      {
        if ((touchstatus & (1 << j)))
        {
          touchNumber++;
          row |= 1 << (3 - j);  // Odwrotna kolejnosc elektrod...
        }
      }
      if (touchNumber == 1)
      {
        touchNumber = 0;
        for (int j = 4; j < 10; j++) // Check how many electrodes were pressed
        {
          if ((touchstatus & (1 << j)))
            touchNumber++;
        }
        if (touchNumber == 1)
        {
          byte col = touchstatus & 0x3F0;
          for (int j = 4; j < 10; j++) // Check which electrode were pressed
          {
            if ((touchstatus & (1 << j)))
              column = 5 - (j - 4);   // Też wyszlo odwrotnie
          }
          byte keyCode = (row ^ 0xF) | ( column << 4 ); // Obliczamy kod klawisza
          sendKey(keyCode);
        }
        else
        {
          byte keyCode = 0xFF;  //noKey()
          sendKey(keyCode);
        }
      }
      else
      {
        byte keyCode = 0xFF;
        sendKey(keyCode);     //noKey()
      }
    }

    Działa prawie jak mechaniczna.
    To jest najważniejsza funkcja programu. Reszta to ustawienie wartości parametrów MPR121 i transmisja I2C.
    Program napisałem na Arduino. Wykorzystałem wcześniej zaprojektowaną płytkę (niestety z błędem). Na zdjęciu widać Nano na płytce prototypowej, bo złącza trzeba wlutować pod spodem (analog i digital zamienione miejscami).
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Użyłem moduł MPR121 (kosztuje ok dolara), ponieważ trudno byłoby lutować w domu tak mały układ.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    W CA80 klawiatury są pasywne, czyli nie potrzebują zasilania. W "starej" wersji styki klawiszy były połączone w matrycę 3 x 10. W "nowej" zaś 4 x 6, więc zaoszczędzono trzy linie. ZK nadal ma trzynaście pinów, ale trzy pierwsze są niepodłączone. Pod płytką MIK290 poprowadziłem przewody do dodatkowych punktów lutowniczych. Do ZK1 +5V, a do ZK2 GND. To samo zrobiłem na dodatkowej płytce "terminala" Na zdjęciu widać dolutowany czerwony przewód i obok niego goły przewód przylutowany do pola GND z którego zdrapałem lakier. Do podłączenia modułu MPR121 użyłem złącza przewidzianego dla wyświetlacza LCD. Przeciąłem kilka ścieżek i przylutowałem w następujący sposób:
    PIN1 D2 (IRQ)
    PIN2 SCL (MPR121 ma otwarty dren i nie boi się +5v)
    PIN3 SDA (jak wyżej)
    PIN4 GND - bez zmian
    PIN5 +3.3V
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    A oto efekt końcowy:
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
  • #33
    Orologgio
    Level 11  
    Gdyby ktoś chciał podłączyć dotykową klawiaturę do starej wersji CA80, jest to możliwe. Można zastosować układ, od którego zacząłem ten wątek, zmodyfikować program... Ale jest prostsza metoda. Wystarczy przerobić ZK i zmienić EPROM na nową wersję CA80. Zmiana jest kosmetyczna: wylutowujemy 7442 i w jego miejsce wstawiamy kilka krosów i trzy rezystory. Pod spodem płytki tniemy trzy ścieżki i też coś lutujemy (nie pamiętam, bo robiłem to dawno). Przy okazji nasz CA80 stanie się odporny na skutki wadliwego rozruchu. Niestety Pan Gardynik nie przewidział, że reset (R9, C5) trwa dosyć długo. W tym czasie prawdopodobne jest zgłoszenie NMI, co wiąże się z użyciem stosu, a rejestr SP ustawiany jest dopiero w dalszej części monitora. Dlatego powrót z obsługi pierwszego przerwania następuje pod trudny do przewidzenia adres (stąd cztery komórki "00" na początku nowego monitora). Zmiana nie ma żadnego wpływu na działanie systemu, a zyskujemy możliwość użycia klawiatury o prostej konstrukcji.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
  • Altium Designer Computer Controls
  • #34
    Orologgio
    Level 11  
    Jeżeli ktoś zainwestował w klawiaturę dotykową, teraz dostanie nagrodę. Prawie bez dodatkowych inwestycji (moduł SD kosztuje ok. 1 USD) można rozbudować układ o czytnik kart SD. Jego funkcjonalność jest bardzo ograniczona, ale może okazać się przydatny. Wystarczy kartę zawierającą plik CA80.HEX wsunąć do czytnika i wcisnąć RESET arduino. Jeżeli komputer mamy w obudowie, trzeba wyprowadzić RESET na zewnątrz. (Przydałby się też wyłącznik brzęczyka na czas "wklepywania"). Oczywiście wcześniej należy uaktualnić oprogramowanie i podłączyć moduł SD. Niestety płytka, którą tu użyłem nie ma odpowiedniego złącza, ale można wykorzystać sześciopinowe ISP w arduino. Tylko jeden pin trzeba zmodyfikować. W złączu kątowym obróciłem jeden pin (widać na zdjęciach). Aby to zrobić, trzeba wyciągnąć dłuższy i krótszy, po czym wsunąć krótszy obrócony i na koniec dłuższy tak jak był. Do obróconego należy dolutować D4, bo jest to CS naszego modułu. Opis wyprowadzeń ISP np. tu: https://www.teachmemicro.com/arduino-nano-pinout-diagram/
    To wszystko.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Gdyby był potrzebny jakiś plik do prób, załączyłem przykład. Oczywiście po skopiowaniu rozpakowanego pliku na kartę, należy zmienić mu nazwę na "CA80.HEX". Program nie robi nic poza wysyłaniem znaków na wyświetlacz. Klawiatura dotykowa zacznie działać dopiero po wczytaniu pliku. Jeżeli nie włożymy karty, zadziała od razu.
    Życzę dobrej zabawy.
  • #35
    Orologgio
    Level 11  
    Niedawno testowałem transmisję danych z ZX Spectrum (zlecenie *8E)
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=19288100#19288100

    Oczywiście nie mam w/w komputera, ale symulowałem go za pomocą Arduino. Poszedłem krok dalej - dołączyłem obsługę transmisji do programu klawiatury dotykowej.
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=19167050#19167050

    Moduł SD już miałem dołączony, więc nie musiałem wiele zmieniać. Po resecie sprawdzana jest karta SD i jeżeli jest na niej plik "ca80.hex", możliwe jest przesłanie jego zawartości do CA80. Klawiatura działa normalnie do czasu wciśnięcia kolejno [F1] i [F3] (w starej wersji ZX). Wtedy zapala się zielony LED, symulowane jest wciśnięcie [M] [8] [E] (wejście do zlecenia *8E) i rozpoczyna się transmisja. Po przesłaniu pliku LED gaśnie i klawiatura znowu jest aktywna. Jeżeli nie chcemy przesyłać pliku, nic nie musimy robić, jednak brak karty, lub brak pliku "ca80.hex" spowoduje zapalenie czerwonej diody... Jest to ewidentna wada programu ale nie chce mi się tego poprawić. Po transmisji piny połączone z PA0 i PA1 są z powrotem ustawiane jako wejścia i nie kolidują z pracą żadnej z przystawek.

    Należy spełnić kilka warunków:
    1. Do ZU50 nie może być podłączona żadna przystawka wykorzystująca PA0 i PA1. Pozytywka jest dozwolona.
    2. Należy używać "starych" SD. Biblioteka użyta w programie nie obsługuje FAT32. Karty 1GB działają (takie mam), większe niestety nie.
    3. Podłączyć LED-y do Ardu, bo tylko tak mamy pewność, że SD jest poprawne. Zastosowałem jedną RGB z jednym rezystorem we wspólnej katodzie. Niebieska sygnalizuje wciśnięcie klawisza, zielona transmisję, a czerwona błąd odczytu SD.

    Nie musimy martwić się o kolejność wykonywania operacji, bo wszystko samo się wykona. Wciskamy tylko "ZX". :-)

    Code:

    /******************************************************
              Definicje stalych i zmiennych interfejsu
     ******************************************************/
    const int SD_CS = 4;      //MOSI-11, MISO-12, SCK-13
    const int keyLED = 5;     //niebieska
    const int errorLED = 6;   //czerwona
    const int fileOpenLED = 7;//zielona
    const byte dane = 9;      //wyjscie sygnalu do CA80 PA1 ZU50 PIN2
    const byte strob = 8;     //wyjscie sygnalu do CA80 PA0 ZU50 PIN1
  • #36
    technic79
    Level 1  
    Witam,

    Ostatecznie przyszedł czas i na mnie. Właśnie zakupiłem na znanym portalu aukcyjnym płytkę do CA80 i większość układów scalonych. Swojego CA80 składałem jako nastolatek na początku lat 90-tych i egzemplarz ten gdzieś zaginął. Czas odtworzyć to cudo! Z tego co widzę największy problem wydaje się być z obudową i klawiaturą. Obudów od Elwro już w zasadzie nie ma, a i z klawiaturą nie będzie łatwo.
  • #37
    Orologgio
    Level 11  
    Ostatnio kolega @andrzejlisek poruszał temat pozytywki, więc wyjąłem z kartonu MIK51... Płytka jest dosyć prymitywna. Nie ma żadnego złącza na krawędzi, wszystkie przewody są lutowane do otworów rozrzuconych po całej powierzchni (podobnie jak w MIK89). Gdyby nie były polutowane, nie chciałoby mi się tego robić. Przylutowałem ZU50 do końców przewodów i podłączyłem do nowego CA80. Działa. Poczytałem trochę MIK06 i stwierdziłem, że nigdy nie miałem częstościomierza. Postanowiłem zaprojektować płytkę MIK50. Początkowo chciałem zrobić MIK50 i MIK51 z przełącznikiem, jednak zbyt wiele sygnałów jest wspólnych. Jednak wpadł mi pomysł, żeby zrobić jedną płytkę z dwoma złączami. Pomyślałem, że jednym zamówieniem za dwa USD (plus wysyłka) otrzymam dwa urządzenia. Nie udało się. To znaczy płytkę zaprojektowałem, jednak "Majfriend" od razu się zorientował i wycenił ją na cztery dolary (za pięć sztuk), co i tak się opłaca, bo zamawiając dwa projekty, tylko pierwszy jest w promocyjnej cenie, więc byłoby sześć USD. :D
    Oto płytka:
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Zamówiłem dzisiaj w nocy, więc dopiero za trzy tygodnie ją dostanę, ale cóż trzeba się uzbroić w cierpliwość. Kiedy wszystko sprawdzę i nie będzie błędów, udostępnię Gerbery. Gdyby ktoś miał jakieś sugestie czy uwagi, proszę pisać. Projekt można jeszcze zmodyfikować.

    Zastosowałem ZU64, bo zajmuje na płytce mniej miejsca. Mamy wtedy więcej możliwości - możemy włożyć płtkę bezpośrednio do ZU64 w MIK290, albo połączyć przez przejściówkę do ZU50.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
  • #38
    Orologgio
    Level 11  
    Płytki dotarły. Na razie sprawdziłem tylko pozytywkę. Działa. :-D

    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.

    Niestety potencjometr regulacji głośności działa odwrotnie...



    Użyłem 7407, dlatego że nie miałem 7406 i w efekcie diody świecą odwrotnie. Szósta jest czerwona, bo jest nadmiarowa - CA88 steruje tylko pięcioma urządzeniami, ale można zmienić komórkę 15FFH (MIK06 str.92) i też będzie działać.

    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Zabrakło mi kątowych dwurzędowych gniazd i dlatego złącze ZU64 jest lustrzanym odbiciem. Musiałem wlutować z drugiej strony płytki... Nastąpił ciąg nieprzewidzianych zdarzeń, ale dało się nad wszystkim zapanować.

    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    Drugi egzemplarz zmontuję, gdy dokupię brakujące elementy.
  • #39
    Orologgio
    Level 11  
    Dobry wieczór!
    Już miesiąc temu zmontowałem i uruchomiłem częstościomierz, ale zająłem się czymś innym i zapomniałem opisać... Przepraszam.
    Do sprawdzenia użyłem generatora z taniego chińskiego oscyloskopu. Generator ma tylko cztery częstotliwości: 1 kHz, 10 kHz, 100 kHz i 1 MHz. Sprawdziłem pomiary dla czasów zliczania 0,1 s 1 s i 10s. Działa na wszystkich i zaskoczyła mnie dokładność chińskiego generatora, który jest tylko dodatkiem do dość kiepskiego urządzenia. Zegar w CA80 udało mi się wyregulować z błędem mniejszym niż sekunda na dobę, więc pomiary są wiarygodne.
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
    W zeszłym roku zbudowałem CA80 w nowej wersji. Nie chciało mi się lutować pięćdziesięciu drucików i celować nimi we właściwe miejsce… Wtedy próbowałem projektować płytki za pomocą KiCad-a. Jako jedną z pierwszych zrobiłem przejściówkę ZU64 - ZU50. Udało mi się kupić DB50 kątowe do druku. Płytka jest dosyć duża, bo nie umiałem zrobić mniejszej, ale jest bardzo praktyczna. Kiedy szukałem obudowy, okazało się, że ELWRO 183 są prawie nieosiągalne, a ich cena jest zaporowa, znalazłem ELWRO 330. Jest większy, ale za to wszystko się w nim mieści bez upychania kolanem. Niestety żeńskiego złącza kątowego nie znalazłem... Mam jeszcze stare na kabel, niektóre nawet polutowane. Niestety po trzydziestu latach niektóre przewody się pourywały, a ich naprawa jest kłopotliwa (wzrok już nie ten). Dlatego zaprojektowałem MIK51 i MIK50 ze złączem ZU64. Można je połączyć bezpośrednio do MIK290. Jednak co zrobić, gdy komputer jest w obudowie? Nic prostszego. Należy drugą płytkę ZU64-ZU50 zmontować odwrotnie. Proste żeńskie złącze Cannon pasuje jak ulał, a naprzeciw niego otrzymujemy ZU64 takie jak na MIK290. Co prawda płytka jest pionowo (po włożeniu do ZU50), ale za to częstościomierz jest na widoku. To samo dotyczy pozytywki. :-)
    CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem. CA80 reaktywacja. Co można zrobić ze starym ośmiobitowcem.
  • #40
    Orologgio
    Level 11  
    Odwiecznym problemem jest zapisywanie programów na trwałym nośniku. Magnetofony stały się urządzeniami niemal zabytkowymi. W czasach pendrive'ów i kart SD używanie kaset magnetofonowych wydaje się zajęciem bardzo uciążliwym. Skonstruowałem przystawkę zawierającą pamięć flash, którą można umieścić w podstawce U10. Oprogramowanie ciągle jest w fazie udoskonalania, ale już jest "używalne". Przyjąłem założenie, że całość ma działać tak jak magnetofon. Dodatkowo będzie udawała ZX Spectrum. Możliwa jest transmisja programów między dwoma CA80 torem magnetofonowym. Jeden z komputerów będzie wtedy "serwerem". Przygotowałem krótki film pokazujący wybrane funkcje wynalazku. Wyszukiwanie plików i wyświetlanie ich na LCD podpowiedział mi i częściowo rozwiązał programowo kolega @Roman98. Dzięki temu użytkowanie przystawki stało się łatwiejsze.