logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] 8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C

jakubwisniewski1337 13 Sty 2023 22:31 1134 10
REKLAMA
  • #1 20384090
    jakubwisniewski1337
    Poziom 2  
    Posty: 4
    Witam,

    Od razu chciałbym zaznaczyć, że jestem kompletnie zielony w tematach mikrokontrolerów. Moim zadaniem było zaprojektowanie układu 8051 (tak wiem jest to przestarzały układ i nie jest wybrany przeze mnie - studia) z zewnętrzną pamięcią danych 32kB oraz przetwornika A/C wpiętego w przestrzeń adresową danych.

    Układ zaprojektowałem (odtworzyłem) z czasopisma "Mikrokontrolery? To takie proste...", lecz niestety nie udało mi się znaleźć połączenia z przetwornikiem A/C. Schemat zaprojektowałem na podstawie innych wpisów na forum i nie jestem do końca przekonany, czy jest on dobry.

    Z góry proszę o wyrozumiałość. :)
    8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C
  • REKLAMA
  • Pomocny post
    #2 20384540
    ArturAVS
    Moderator
    Posty: 26230
    Pomógł: 2297
    Ocena: 7773
    jakubwisniewski1337 napisał:
    z zewnętrzną pamięcią danych 32kB oraz przetwornika A/C wpiętego w przestrzeń adresową danych.

    Jest źle. Skoro ma być w przestrzeni adresowej to musi być dekoder adresu który ustawi sygnał CS/ dla przetwornika po wybraniu konkretnego adresu nie będącego zajętym przez inne peryferia. Spójrz do noty katalogowej tego MAX150;

    8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C


    Przykładowy schemat odnosi się co prawda do Z80, który ma dodatkowe sygnały żądania dostępu do pamięci (MREQ/) i innych peryferiów (IORQ/) ale jest podobieństwo. 32kB zajmuje SRAM, więc dekoder powinien wystawiać dla przetwornika sygnał CS/ powyżej tych 32kB. Dodatkowo, całkowicie niepotrzebnie zanegowałeś sygnały RD/ i WR/ dla przetwornika. Powinieneś zanegować sygnał przerwania z przetwornika (aktywny wysoki) dla procesora (aktywny niski).
  • REKLAMA
  • Pomocny post
    #3 20384576
    ZbeeGin
    Poziom 39  
    Posty: 4318
    Pomógł: 602
    Ocena: 452
    Jeśli ADC ma być w przestrzeni danych to nie powinieneś mu sterować linią ~CS z wyjścia ~PSEN.
    Najprostszym dekoderem adresowym w tym układzie było by jeszcze połączenie A15 przez inwerter do ~CS przetwornika. Wtedy RAM będzie zajmował pierwsze 32KB XRAM, a przetwornik będzie widoczny w drugiej jej połówce. Dekodowanie niepełne nie będzie miało tu znaczenia.

    A i jeszcze ~EA do 5V. No chyba, że ADC służy tu za losowy generator kodu. :D
  • Pomocny post
    #4 20384607
    stachu_l
    Poziom 38  
    Posty: 2969
    Pomógł: 477
    Ocena: 1113
    Układ ma jeszcze jeden błąd - !EAVPP nie powinien być podłączony do masy - Tak jak jest obecnie procesor spróbuje załadować kod z pamięci zewnętrznej a to jest RAM czyli ktoś musiał by wcześniej go tam załadować. Można by dodać ROM (EPROM, EEPROM) i używając !PSEN ładować kod programu z ROM a wykonywać inne cykle pamięci na RAM ale tego nie było w zadaniu więc chyba kod powinien się wykonywać z wewnętrznej pamięci ROM (dla 87C51 to jest EPROM ale chyba OTP czyli raz programowalny).
    Nie do końca jestem pewien trybu pracy przetwornika (ustawiono WR-RD) - czy czasowo w cyklach 87C51 i tego przetwornika wszystko się będzie zgadzać.
  • #5 20384711
    jakubwisniewski1337
    Poziom 2  
    Posty: 4
    Jeżeli dobrze rozumiałem i narysowałem to schemat wygląda tak: 8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C

    Kolejne pytanie, które mi się nasunęło to, czy dekoder może być połączeniem bramek logicznych AND, które na wejściach będą miały wejścia A0-A14? A15 jest mi niepotrzebne, gdyż moja pamięć ma jedynie 32kB?
    8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C

    Również poprawiłem wyjście przerwania INT, który zanegowałem oraz wejście ~EA, które omyłkowo podłączyłem do masy.

    ArturAVS napisał:
    dekoder powinien wystawiać dla przetwornika sygnał CS/ powyżej tych 32kB. Dodatkowo, całkowicie niepotrzebnie zanegowałeś sygnały RD/ i WR/ dla przetwornika. Powinieneś zanegować sygnał przerwania z przetwornika (aktywny wysoki) dla procesora (aktywny niski).


    Dodano po 3 [minuty]:

    Inwerter to znaczy? Dodałem "własny" dekoder adresowy złożony z bramek logicznych AND oraz NOT, czy coś takie spełniałoby swoje zadanie?

    EA poprawione :)

    ZbeeGin napisał:
    Jeśli ADC ma być w przestrzeni danych to nie powinieneś mu sterować linią ~CS z wyjścia ~PSEN.
    Najprostszym dekoderem adresowym w tym układzie było by jeszcze połączenie A15 przez inwerter do ~CS przetwornika. Wtedy RAM będzie zajmował pierwsze 32KB XRAM, a przetwornik będzie widoczny w drugiej jej połówce. Dekodowanie niepełne nie będzie miało tu znaczenia.

    A i jeszcze ~EA do 5V. No chyba, że ADC służy tu za losowy generator kodu. :D
  • REKLAMA
  • Pomocny post
    #6 20384742
    ArturAVS
    Moderator
    Posty: 26230
    Pomógł: 2297
    Ocena: 7773
    jakubwisniewski1337 napisał:
    Jeżeli dobrze rozumiałem i narysowałem to schemat wygląda tak:

    NIE! Dlaczego zmieniasz oznaczenia pinów układów? W pierwszym schemacie masz stan aktywny wysoki dla INT przetwornika, w tym który teraz dołączyłeś zmieniłeś go na niski. I tu już negacja tego sygnału jest bez sensu.
    jakubwisniewski1337 napisał:
    Kolejne pytanie, które mi się nasunęło to, czy dekoder może być połączeniem bramek logicznych AND, które na wejściach będą miały wejścia A0-A14? A15 jest mi niepotrzebne, gdyż moja pamięć ma jedynie 32kB?

    Przestrzeń adresowa to 64kB, czyli 16-cie bitów adresu. A15 z logicznym zerem daje informację że używana jest dolna połówka czyli pierwsze 32kB (SRAM 62256), logiczna jedynka to górna połówka 64kB przestrzeni adresowej. Do tego dochodzi pamięć EPROM/OTP wbudowana w kontroler, tak że dekoder adresów musi być tak zaprojektowany aby adres przetwornika nie pokrył się z innym adresem pamięci. Trzeba sprawdzić w nocie '51 w jaki sposób jest dzielona pamięć i pod tym względem zaprojektować/dobrać dekoder adresów. Tu często dobrze się sprawdza 74138.
  • #7 20384800
    jakubwisniewski1337
    Poziom 2  
    Posty: 4
    Podłączyłem układ 74138 do mojego schematu z pomocą książki "Projektowanie systemów mikroprocesorowych" Pawła Hadama. Według książki schemat ten pozwala na podłączenie 60kB pamięci RAM oraz "8 podzespołów dołączonych do magistrali systemowej mikrokontrolera, które mogą również mieć własne wejścia adresowe.", poniżej również znalazłem tabele z przestrzenią adresową określoną przez dekoder:
    8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C



    Schemat ostatecznie wygląda tak:

    8051 z zewnętrzną pamięcią danych oraz przetwornikiem A/C

    ArturAVS napisał:
    Tu często dobrze się sprawdza 74138.
  • REKLAMA
  • #8 20384812
    ArturAVS
    Moderator
    Posty: 26230
    Pomógł: 2297
    Ocena: 7773
    jakubwisniewski1337 napisał:
    Schemat ostatecznie wygląda tak:

    Wygląda ok. Analizowałeś logicznie adresy?
  • #9 20385578
    jvoytech
    Poziom 22  
    Posty: 361
    Pomógł: 61
    Ocena: 136
    Można by też linię A15 podpiąć bezpośrednio do ~CE pamięci RAM i poprzez negator np. 74HC1G04 zanegowaną wartość !A15 podpiąć do ~CS układu MAX150. Rejestr przetwornika byłby co prawda dostępny pod każdym adresem 0x8000-0xFFFF, ale dekoder za to prościutki.
  • #10 20385818
    ZbeeGin
    Poziom 39  
    Posty: 4318
    Pomógł: 602
    Ocena: 452
    Już to proponowałem. Niestety przedmówcy chcą to na siłę skomplikować. :)
    Przypominam, że przestrzeń XRAM w klasycznym procesorze 8051 to zupełnie odrębna przestrzeń adresowa i do jej adresowania używa się rejestru DPTR oraz specjalnych instrukcji MOVX tylko do niej się odwołujących. Nie trzeba pamięci w tej przestrzeni gdzieś mapować omijając IRAM.
  • #11 20674618
    jakubwisniewski1337
    Poziom 2  
    Posty: 4
    Zamykam

Podsumowanie tematu

✨ Użytkownik zaprojektował układ oparty na mikrokontrolerze 8051 z zewnętrzną pamięcią danych 32kB oraz przetwornikiem A/C, jednak napotkał problemy z połączeniem przetwornika w przestrzeni adresowej. Otrzymał wskazówki dotyczące konieczności zastosowania dekodera adresowego, który umożliwiłby poprawne adresowanie przetwornika, oraz uwagi na temat błędów w schemacie, takich jak niewłaściwe podłączenie sygnałów CS, RD, WR oraz INT. Użytkownik poprawił schemat, dodając dekoder 74138, co pozwoliło na prawidłowe adresowanie pamięci RAM i przetwornika. Dyskusja obejmowała również różne metody dekodowania adresów oraz ich wpływ na dostępność pamięci.
Wygenerowane przez model językowy.
REKLAMA