Mikrokomputer na klonie 8051
Mikrokomputer na klonie 8051
Jak zapewne pamiętacie, zamierzam zbudować systemik oparty na 89S8253. Od wielu tygodni piszę oprogramowanie, ale przyszedł czas, by wykonać też część sprzętową. Do tej pory używałem nieco zmodyfikowanego kitu AVT-2250, ale na nim przeprowadzam tylko testy. Zaprojektowałem taki oto schemat, ale jest bardzo rozbudowany i zanim zacznę projektować PCB, prosiłbym Was o rzucenie okiem, czy nie ma jakichś błędów, bo szkoda byłoby zrobić układ, a potem okaże się, że jest zły. Link do schematu: http://img97.imageshack.us/img97/351/mainboardk.png
EXPANSION_PORT nie ma jeszcze indeksów, ale będą to w zasadzie prawie wszystkie linie systemowe (adres, dane, sterowanie).
Nieco wyjaśnienia wymaga obecność układu U9. Ma on odłączyć MAX232 w momencie wymuszenia zera na /RS_E, bo do EXPANSION_PORT zamierzam podłączyć modem analogowy 1200 bodów.
Układ U8 jest używany podczas programowania przez ISP, którego sygnały są podłączone przez Z8 do portu LPT komputera.
Do Z3 podłączona jest klawiatura od komputera na złączu DIN (lub PS/2 z przejściówką), do Z7 podłączony jest LCD z Nokii 6610 (przetwornica 5/3.3V oraz układy dopasowania poziomów są na oddzielnej płytce razem z wyświetlaczem).
Jeśli jeszcze coś zapomniałem dodać, a chcielibyście wiedzieć, chętnie odpiszę.
Generalnie chodzi mi o to, czy nie ma rażących błędów w schemacie. Wydaje mi się, że nie, ale mogłem przecież coś przeoczyć, bo schemat jest skomplikowany.
EXPANSION_PORT nie ma jeszcze indeksów, ale będą to w zasadzie prawie wszystkie linie systemowe (adres, dane, sterowanie).
Nieco wyjaśnienia wymaga obecność układu U9. Ma on odłączyć MAX232 w momencie wymuszenia zera na /RS_E, bo do EXPANSION_PORT zamierzam podłączyć modem analogowy 1200 bodów.
Układ U8 jest używany podczas programowania przez ISP, którego sygnały są podłączone przez Z8 do portu LPT komputera.
Do Z3 podłączona jest klawiatura od komputera na złączu DIN (lub PS/2 z przejściówką), do Z7 podłączony jest LCD z Nokii 6610 (przetwornica 5/3.3V oraz układy dopasowania poziomów są na oddzielnej płytce razem z wyświetlaczem).
Jeśli jeszcze coś zapomniałem dodać, a chcielibyście wiedzieć, chętnie odpiszę.
Generalnie chodzi mi o to, czy nie ma rażących błędów w schemacie. Wydaje mi się, że nie, ale mogłem przecież coś przeoczyć, bo schemat jest skomplikowany.
Super pomyślane. Jak dla mnie to brakuje dodatkowych portów we/wy w AVT2250 ciągle mi ich brak, więc może dodać coś w stylu 82C55.
Dodatkowo przydałby się scalak rozbudowujący przerwania, w senie podpięty pod np. INT1. Wejścia scalaka służyłyby jako dodatkowe linie przerwań. Kiedy wystąpiłoby pewien stan ( np. w zależności od konfiguracji) na wejściu, wyjście zgłasza przerwanie INT1. Następnie obsługa przerwania INT1 odczytuje z owego scalaka, na którym wejściu'ach nastapiło przerwanie i odp. na nie reaguje.
Dlaczego jako bufor użyłeś 74ls243 (libza nóżek) ? Nie lepiej 74ls244 bądź 74ls255, które nawet są tańsze od 74ls243 ?
Dodatkowo przydałby się scalak rozbudowujący przerwania, w senie podpięty pod np. INT1. Wejścia scalaka służyłyby jako dodatkowe linie przerwań. Kiedy wystąpiłoby pewien stan ( np. w zależności od konfiguracji) na wejściu, wyjście zgłasza przerwanie INT1. Następnie obsługa przerwania INT1 odczytuje z owego scalaka, na którym wejściu'ach nastapiło przerwanie i odp. na nie reaguje.
Dlaczego jako bufor użyłeś 74ls243 (libza nóżek) ? Nie lepiej 74ls244 bądź 74ls255, które nawet są tańsze od 74ls243 ?
Tzn. Tak. jeżeli platforma ma mieć cechy mobilne (taki plantop na 8051) to należało by zmienić MAX232 na jakąś nowszą odsłonę pozwalającą wejść w stan uśpienia, co zmniejszy pobór mocy. Mam taki w domu jutro ci podrzucę symbol. No ja bym sie wysilił i zbudował zewnętrzny zegar taktujący CPU z dzielnikiem przez 2, aby mieć tryb Normal (te 22.1MHz/2) i Turbo (22.1MHz). Pozwoli to też w pewnym stopniu oszczędzać energię.
No i zabezpiecz sobie obwód zasilanie choćby Zenerką 5,1V 3W.
Choć nie wiem czy nei lepiej zainwestować w dzisiejszych czasach w konwerter USB<>RS232 i od razu wyprowadzić sobie USB.
PS2 to dobry pomysł bo można podpiąć myszkę lub klaw.. PC.
Układ można nieco zmniejszyć stosując GALa16V8, zamiast zwykłych TTLi 74xxx.
Widzę że zastosowałeś interfejs dla wyświetlacza z Nokii, ale ja bym tym się brudził i zainwestował w wyświetlacz graficzny na KS108 lub OLED. Co prawda więcej zachodu przy budowie uniwersalnego interfejsu (spokojnie da się), ale i możliwości sporo lepsze.
No i zabezpiecz sobie obwód zasilanie choćby Zenerką 5,1V 3W.
Choć nie wiem czy nei lepiej zainwestować w dzisiejszych czasach w konwerter USB<>RS232 i od razu wyprowadzić sobie USB.
PS2 to dobry pomysł bo można podpiąć myszkę lub klaw.. PC.
Układ można nieco zmniejszyć stosując GALa16V8, zamiast zwykłych TTLi 74xxx.
Widzę że zastosowałeś interfejs dla wyświetlacza z Nokii, ale ja bym tym się brudził i zainwestował w wyświetlacz graficzny na KS108 lub OLED. Co prawda więcej zachodu przy budowie uniwersalnego interfejsu (spokojnie da się), ale i możliwości sporo lepsze.
Owszem, pomyślałem o tym, ale planuję zrobić budowę modułową i to będzie w postaci karty rozszerzeń (tak jak w PC).Badman pisze:więc może dodać coś w stylu 82C55
To też rozważałem. Jest tylko mały problem. Co, kiedy przyjdzie kilka przerwań na ten układ na raz...Badman pisze:Dodatkowo przydałby się scalak rozbudowujący przerwania, w senie podpięty pod np. INT1. Wejścia scalaka służyłyby jako dodatkowe linie przerwań. Kiedy wystąpiłoby pewien stan ( np. w zależności od konfiguracji) na wejściu, wyjście zgłasza przerwanie INT1. Następnie obsługa przerwania INT1 odczytuje z owego scalaka, na którym wejściu'ach nastapiło przerwanie i odp. na nie reaguje.
W pierwszej wersji miałem właśnie 74LS244, ale uznałem, że 243 też się sprawdzi. A różnica w cenie jest mała (nie planuję produkcji wielkoseryjnej).Badman pisze:Dlaczego jako bufor użyłeś 74ls243 (libza nóżek) ? Nie lepiej 74ls244 bądź 74ls255, które nawet są tańsze od 74ls243 ?
Szczerze mówiąc, raczej to będzie urządzenie stacjonarne i nie przejmowałem się tak bardzo poborem prądu.kayron pisze: Tzn. Tak. jeżeli platforma ma mieć cechy mobilne (taki plantop na 8051) to należało by zmienić MAX232 na jakąś nowszą odsłonę pozwalającą wejść w stan uśpienia, co zmniejszy pobór mocy.
Tego chyba nie rozumiem. W czym to ma zmienić parametry pracy MCU?kayron pisze:No ja bym sie wysilił i zbudował zewnętrzny zegar taktujący CPU z dzielnikiem przez 2, aby mieć tryb Normal (te 22.1MHz/2) i Turbo (22.1MHz). Pozwoli to też w pewnym stopniu oszczędzać energię.
To nie jest raczej potrzebne, chyba, że np. taki 7805 spali się w taki sposób, że napięcie nagle wzrośnie. Ale w normalnych warunkach taka dioda wydaje mi się zbędna.kayron pisze:No i zabezpiecz sobie obwód zasilanie choćby Zenerką 5,1V 3W.
Układy TTL, które są, to tylko peryferia niezbędne do pracy (którą założyłem). Dekoder adresów będzie na układzie EEPROM, na zewnętrznej płytce z układami rozszerzeń (wspomniane karty rozszerzające).kayron pisze:Układ można nieco zmniejszyć stosując GALa16V8, zamiast zwykłych TTLi 74xxx.
Kłania się brak wiedzy o układach mikroprocesorowych, ano wtedy obsługuje się to programowo.To też rozważałem. Jest tylko mały problem. Co, kiedy przyjdzie kilka przerwań na ten układ na raz...
Co do moich sugestii jeżeli ma to być układ stacjonarny, to nie maja one większego znaczenia, ale znając życie wkładając tak dużo wysiłku w projektowanie takiego układu i jego wykonanie szybko będziesz żałował że nie dodałeś tego czy tamtego.
Dobrze zaprojektowany obwód zasilania to kluczowa sprawa. Dioda nie zajmie ci dużo miejsca, a jak przypadkiem pomylisz sobie bieguny, uratuje ci system przed spaleniem.kayron napisał/a:
No i zabezpiecz sobie obwód zasilanie choćby Zenerką 5,1V 3W.
To nie jest raczej potrzebne, chyba, że np. taki 7805 spali się w taki sposób, że napięcie nagle wzrośnie. Ale w normalnych warunkach taka dioda wydaje mi się zbędna.
A tak w ogóle nie wiem jaki chcesz stosować zasilacz ? Większość wtyczkowych to nic więcej jak mostek prostowniczy i góra dwa kondensatory filtrujące. Na takiej drobnicy jak Dioda Zenera nie warto raczej oszczędzać.
Zamiast dwóch kostek 65256 zastosuj sobie jedną 62128 (128KB) będziesz miał na PCB 1 scalak a nie 2, a stosując np. P1.2 do sterowania stronami (linia A16 62128) uzyskasz 128KB pamięci danych/ Programu (choć korzystanie z niej w całości jako pamięci programu wymaga specyficznego programowania).
Mam na myśli układ podłączony pod np. /INT1. Bez jakiejś pamięci w tym układzie nie da się obsłużyć kilku przerwań w trakcie obsługi poprzedniego (ale tego z /INT1, nie innych, tutaj nie ma problemu, bo wiem, że sam 8051 nie gubi innych przerwań, a czeka lub skacze do nich w zależności od priorytetu).kayron pisze:Kłania się brak wiedzy o układach mikroprocesorowych, ano wtedy obsługuje się to programowo.
Właśnie dlatego dałem 4-pinowe złącze ze skrzyżowanymi na krańcach przewodami, odwrotne włożenie wtyczki niczego nie zmieni.kayron pisze:a jak przypadkiem pomylisz sobie bieguny, uratuje ci system przed spaleniem.
Oczywiście, że stabilizowany. Początkowo na 7805, potem coś na przetwornicy impulsowej.kayron pisze:A tak w ogóle nie wiem jaki chcesz stosować zasilacz ? Większość wtyczkowych to nic więcej jak mostek prostowniczy i góra dwa kondensatory filtrujące.
Kostki 62256 już mam, a innych nawet nie da się łatwo dostać, te są najpopularniejsze.kayron pisze:Zamiast dwóch kostek 65256 zastosuj sobie jedną 62128
Nadal się nie dowiedziałem, po co dawać zewnętrzne taktowanie (w sensie zewnętrznego generatora), skoro obwód oscylatora też działa.
-
- Użytkownik
- Posty: 626
- Rejestracja: 19 kwie 2009, 15:59
- Lokalizacja: Tychy
- Kontakt:
W przypadku podłączenie expandera przerywań Intel 8259, dostajesz zgłoszenie, do proca, obsługujesz rejestr w 8259, czyli masz jakby podwójną obsługę przerywania. Przerywanie główne INT1, potem w podprogramie INT1 obsługujesz rejestr 8259 i już konkretne przerywania.
Swoją drogą trochę się dziwię, że robisz to na archaicznej 51', co prawda sam rdzeń jest bardzo dobry, ale lepiej było by zastosować procesor na rdzeniu 51, który jest zdecydowanie bardziej rozbudowany niż standardowy 8052.
Nawet użycie FPGA z wgranym rdzeniem 51' było by korzystniejsze.
Swoją drogą trochę się dziwię, że robisz to na archaicznej 51', co prawda sam rdzeń jest bardzo dobry, ale lepiej było by zastosować procesor na rdzeniu 51, który jest zdecydowanie bardziej rozbudowany niż standardowy 8052.
Nawet użycie FPGA z wgranym rdzeniem 51' było by korzystniejsze.
Szczerze mówiąc, akurat ten układ wybrałem, bo można go programować przez ISP. Wstyd się przyznać, ale nie mam żadnego programatora równoległego, bo do tej pory używałem AVT-2250, a tam program wgrywałem do RAM przez RS232 i jakoś nie było potrzeby budowania programatora. Poza tym ma przyzwoite peryferia (zwłaszcza SPI, którego używam).
Co do takiego rozbudowanego układu przerwań, to ma sens. Bo początkowo myślałem o czymś prostym. I mnie chodziło tylko i wyłącznie właśnie o przerwania dla (tutaj) /INT1. Swoją drogą takie układy nie są chyba teraz łatwo dostępne, bo będę szczery - gdyby w '51 były ze cztery zewnętrzne przerwania, wystarczyłoby mi to, dwa to trochę mało.
Co do takiego rozbudowanego układu przerwań, to ma sens. Bo początkowo myślałem o czymś prostym. I mnie chodziło tylko i wyłącznie właśnie o przerwania dla (tutaj) /INT1. Swoją drogą takie układy nie są chyba teraz łatwo dostępne, bo będę szczery - gdyby w '51 były ze cztery zewnętrzne przerwania, wystarczyłoby mi to, dwa to trochę mało.
-
- Użytkownik
- Posty: 626
- Rejestracja: 19 kwie 2009, 15:59
- Lokalizacja: Tychy
- Kontakt:
Ten układ jest ciekawy, ale nie ma ISP/SPI, a ja potrzebuję ich. Co do samego rdzenia '51 - użyłem go, bo znam oraz jest dobry. Widziałem niejednokrotnie projekty z AVR z zegarami o wiele szybszymi, ale z programem tak napisanym, że (sic!) to samo założenie '51 wykonywał szybciej (w asemblerze).
Teraz jest moda na pójście na łatwiznę, bo łatwiej wziąć szybki mikrokontroler i napisać byle jaki kod, niż wolniejszy i dobrze dopracowany kod (co widać też w komputerach, ale to inna bajka).
Teraz jest moda na pójście na łatwiznę, bo łatwiej wziąć szybki mikrokontroler i napisać byle jaki kod, niż wolniejszy i dobrze dopracowany kod (co widać też w komputerach, ale to inna bajka).
-
- Użytkownik
- Posty: 626
- Rejestracja: 19 kwie 2009, 15:59
- Lokalizacja: Tychy
- Kontakt:
Niewykluczone, że z czasem użyję czegoś szybszego i wtedy popatrzę na te układy. Na dzień dzisiejszy chyba pozostanę z 89S8253, ponieważ posiadam kilka sztuk, a także kod zacząłem optymalizować pod niego. To, co buduję w tej chwili nie zakończy się tylko na tym projekcie. Tak samo jak komputery, z czasem, gdy zdobędę więcej doświadczenia, mój mikrokomputer ewoluuje na coś lepszego. Zapytacie, czemu od razu tak nie zrobię? Ponieważ mam większość części do tego projektu, a poza tym nie ma się zawsze pewności, co tak naprawdę powinno być na płytce, dopóki się jej nie zrobi i oprogramuje.
-
- Użytkownik
- Posty: 626
- Rejestracja: 19 kwie 2009, 15:59
- Lokalizacja: Tychy
- Kontakt: