HD44780 na magistrali CPU przestaje działać

Jakiś czas temu w celach czysto edukacyjnych zacząłem tworzyć pewien projekt, którego celem miało być bliższe poznanie niskopoziomowego działania systemów mikroprocesorowych oraz nauczenie się programowania w asemblerze. W tym celu zacząłem przenosić jeden ze swoich wcześniejszych projektów (zrealizowany oryginalnie na współczesnym, 32 bitowym MCU) na archaiczną architekturę 6502. Konkretnie sercem układu była CMOS-owa wersja mikroprocesora: WDC65C02.

Zacząłem od montażu płytki z CPU, pamięciami (EPROM i RAM), dekoderem adresów oraz prostym portem na 373, aby dzięki kilku migającym diodom wiedzieć, że sprzęt działa i program jest wykonywany. Diody zaczęły migać, czyli wszystko ok.

Potem przyszła kolej na kolejną płytkę. Umieściłem na niej kolejny (lokalny) dekoder adresów, wyświetlacz HD44780 oraz kilka przycisków podłączonych do portu wejściowego, zrealizowanego na 74HCT245. Elementy te pracują bezpośrednio na magistrali systemowej, a ich rejestry są dostępna dla procesora w przestrzeni adresowej. Wszystko ruszyło z miejsca - byłem w stanie wyświetlać tekst na wyświetlaczu, program reagował na wciśnięcie przycisków.

Tutaj zrobiłem sobie przerwę i projekt na jakiś czas wylądował na półce. Ostatnio jednak wykonałem trzecią płytkę. Ta także zawiera swój lokalny dekoder adresów, a także m.in. timer (MC6840), UART (MOS6551), RTC oraz GPIO (8255). Podłączyłem płytkę do wolnego gniazda na tasiemce, łącząc ją z magistralą systemową. Podłączyłem zasilanie i... Urządzenie zaczęło działać tylko połowicznie.

Krótko mówiąc:

1) Płyta procesorowa nadal działa, program się wykonuje, diody migają. 2) Płytka z wyświetlaczem nie działa. Wyświetlacz jest pustym ale chyba przechodzi inicjalizację, bo właśnie jest pusty - nie widać na nim dwóch rzędów złożonych z prostokątów, które wyświetlają się na niezainicjowanym HD44780.

Na pewno nie ma tutaj konfliktu adresów, bo lokalny dekoder adresów na trzeciej płytce jest sterowany osobną, niewykorzystywaną nigdzie indziej linią CS z głównego dekodera - sprawdzałem.

Kolejną rzeczą, która przyszła mi do głowy było uszkodzenie któregoś z układów, zakłócające działanie magistrali. Zacząłem je więc po kolei usuwać. Dopiero po usunięciu wszystkich układów z podstawek (łącznie z dekoderem adresów) udało mi się powrócić do punktu wyjścia - wyświetlacz znów zaczął działać prawidłowo, ale tylko na chwilę. Dopóki płytka (choćby pozbawiona układów) jest podłączona, układ działa niestabilnie - wyświetlacz raz pokazuje tekst, a po ponownym odłączeniu i podłączeniu zasilania już nie chce.

Dopiero fizyczne odłączenie nowej płytki od magistrali przywraca normalną pracę.

Ktoś ma jakiś pomysł gdzie w ogóle mogę zacząć debugowanie?

Reply to
Atlantis
Loading thread data ...

W dniu niedziela, 12 stycznia 2020 20:13:54 UTC+1 użytkownik Atlantis napisał:

Trochę to wygląda na problemy sprzętowe - za długa magistrala, zbyt duże pojemności itp. Najbardziej przydałby się oscyloskop, by sprawdzić przebieg sygnałów, jakieś dzwonienia albo zbyt wolne zbocza.

Reply to
Krzysiek

Dnia Sun, 12 Jan 2020 20:13:19 +0100, Atlantis napisał(a):

Daj wolniejszy kwarc/generator zegara. Mozliwe, ze juz sie objawiaja jakies pojemnosci sciezek magistrali.

Bo zakladam, ze skoro czasem dziala, to na dodatkowej plytce nie ma jakiegos zwarcia.

J.

Reply to
J.F.

Procesor jest w tej chwili taktowany zegarem 4 MHz. Płytki są trzy, o powierzchni zbliżonej do kartki formatu B5, połączone taśmą IDC40. PCB jednostronne, z dużą liczbą mostków wykonanych kynarem po stronie elementów.

Czy to możliwe, żeby przy takiej konstrukcji i tej prędkości już wystąpiły problemy z pojemnością ścieżek?

Jak na razie żadnego nie zauważyłem.

Reply to
Atlantis

Daj wolniejszy kwarc, to sie szybko dowiesz :-)

Kwarc masz bez dzielnikow ? IMO - 4MHz to dosc duzo jak na oryginalny 6502 i oryginalny HD44780. Ale czy teraz robia nadal takie wolne kosci ?

J.

Reply to
J.F.

W tym konkretnym układzie nie używam rezonatora, wstawiłem oscylator kwarcowy o częstotliwości 4MHz. Nie stosuję też dzielników. Pod ręką nie mam żadnego przestrajanego generatora, więc musiałbym albo kupić wolniejszą wersję, albo zbudować jakiś zamiennik. :)

Oryginalny MOS6502 pracował z częstotliwością 1 MHz, wersja "A" mogła być taktowana zegarem 2 MHz. Tyle tylko, że w tym projekcie użyłem współcześniejszej wersji CMOS (WDC65C02), która może być taktowana o wiele wyższymi częstotliwościami, sięgającymi chyba nawet 20 MHz. Wyświetlacz na HD44780 też jest raczej relatywnie nowy, wyprodukowany raczej kilka-kilkanaście niż kilkadziesiąt lat temu. Pamięci SRAM są raczej z tych wolniejszych, o czasie dostępu powyżej 100ns. Niemniej warto zauważyć, że sama płytka procesorowa działa bez problemu przy 4 MHz (kod do migania diodami). Stabilnie działał też zestaw płytka CPU + płytka wyświetlacza. Problemy pojawiły się dopiero przy próbie podłączenia trzeciego modułu.

Reply to
Atlantis

Ok, udało się potwierdzić hipotezę z pojemnościami ścieżek i zbyt szybkim taktowaniem. Wszystko zaczęło działać prawidłowo po wymienieniu generatora na wersję 2 MHz.

Reply to
Atlantis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.