Problem z obsługą pamięci SRAM

Jesli jesteś początkującym elektronikiem, to tu z pewnością znajdziesz pomoc. Miejsce dobre do dyskusji nad podstawami elektroniki w zakresie teorii i praktyki.
ODPOWIEDZ
Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Problem z obsługą pamięci SRAM

Post autor: Kuna » 16 lut 2009, 9:35

Skonstruowalem taki uklad jak widać w załączniku. Jest to uklad do testow odczytu i zapisu danych do pamieci SRAM.

Przełącznikami S1-S8 ustawia się stan linii magistrali adresowo danowej.

S9 i S10 sterują przerzutnikiem.
S9 - CLK
S10 - NOT CLR

S11-S13 sterują pamięcią
S11 - WE (Write Enable)
S12 - OE (Output Enable)
S13 - CS (Chip Selekt)

S15-S14, przelaczaja sygnal we/wy pamieci miedzy magistrala danych, a wizualizacja na diodach.


Problem w tym, że uklad nie do końca działa. Oto procedura ktora wykonuje:
1. Ustawiam S1-S8 jakis adres, S9 zwieram do napiecia by zatrzasnąć adres, odklikuje S9.
2. Ustawiam na S1-S8 dana do zapisania, sprawdzam czy S15-S17 ustawione sa na polaczenie z S1-S8.
3. ~WE = 1, ~OE=1, ~CS = 0;
4. Zwieram ~WE do masy by zapisac dana, nastepnie odklikuje spowrotem na 5V
5. Przelaczam S15-S17 na diody i zwieram do masy ~OE by odczytac dane.

I tu pojawia sie problem bo jak widzac na zalaczonym rysunku jedna z diod, ktora powinna, nie zaświeciła się.
Co dziwniejsze, nie pali sie ta dioda, ktora ma najwieksze napiecie na linii. Oto stan linii w czasie odczytu pamieci(w nawiasach podalem stan oczekiwany, ktory powinien byc).
r1 - 0.176V (0V)
r2 - 2.467V (+5V) - świeci się
r3 - 0.176V (0V)
r4 - 2.467V (+5V) - świeci się
r5 - 0.804V (0V)
r6 - 3.013V (+5V) - nie świeci !
r7 - 0.804V (0V)
r8 - 0.804V (0V)


Pytania:
1). 2.46V jest na granicy przełączanai między logicznym zerem i jedynka, powiedzial bym, ze nawet bardziej prawdopodobne, że jest to wlasnie logiczne zero, czemu tak male napiecie jest?
2.) Dlaczego nie swieci sie dioda na lini r6, mimo, ze na tej lini panuje wyzsze napiecie, niz na liniach r2 i r4, gdzie diody się świecą ?
Załączniki
pamiec-uklad testowy.png

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 16 lut 2009, 15:14

No to kolega narobił sobie kaszany. Faktycznie dziwne. Spróbuj dodać do tych diód odczytowych buforek np. '573 i na przełączniki też. Wszak znika ci wtedy potrzeba strobowania sygnałów (znika jeden przełącznik) i stany napięciowe są wiarygodne. Jeśli ten symulator jest czymś więcej niż taki Crocodyle Clips to zwięks oporności do 220Ω albo nawet więcej i dodaj drabinki rezystorowe na wszystkie przełączniki do +5V. W rzeczywistości taki układ naraziłby na szwank twoją krzemową pamięć.
PZDR
GrzesiekG

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 16 lut 2009, 18:28

Co do tych drabinek, to rozumie, że rezystory jakieś o małym oporze mają być by napięcie za bardzo nie spadło? Np 50 omów?

Czy dawać rezystory też przed zejściem do masy?

Czy wystarczy jeden rezystor przy Vcc, czy przy każdej odnodze dawać oddzielnie?

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 16 lut 2009, 18:35

Rezystory tu tylko (albo aż) ograniczają prąd kiedy SRAM wystawia dane na wyjście. Daj 230 do 330 ohm ale przez latch o którym pisałem (74HC573).
Wystarczą rezystory przy +5V. Widzisz stare układy logiczne i pamięci (74 ale bez literek w środku np. 74573) tego wymagały ze względu na budowę ich wejść, ale w technologii CMOS czyli obecnie nie jest to wymagane, natomiast rezystory do + nie zaszkodzą. dobrze by było do każdego przycisku oddzielny rezystor, choć wydaje mi się że i tak winno grać. Naucz się jednach takich zdrowych nawyków.
Nie gwarantuje że to pomoże w symulacji, ale jestem prawie na 100% pewny, że zadziała w rzeczywistości.
PZDR

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 16 lut 2009, 20:05

A przy 5V przed wejsciami sterujacymi, np WE, OE, CS w pamieci SRAM tez powinno dawac sie rezystory?

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 16 lut 2009, 20:07

Tak. Generalnie do zabezpieczenia WEJŚĆ układów logicznych należy stosować to rozwiązanie.

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 16 lut 2009, 20:55

Czy teraz układ dobrze wygląda?

Jeśli chodzi o działanie to funkcjonuje, napisałem na kartce tabelke z kilkoma adresami i wartościami, które zapisałem do pamieci, a później je odczytałem.

Jednak są dwa "ale":
- Nie wiedzieć czemu w podglądzie zawartości pamieci w multisimie nie widać danych które do niej zapisałem(mimo, że moge je odczytać).
- Co jakis czas "losowo" wyskakuje błąd "timestep too small", dzieje się tak, od czasu do czasu przy przełaczaniu przełączników. Nie zauważylem jakiejs specjalnej zaleznosci czasami moge calkiem sporo popracowac na tym symulowanym ukladzie, a czasami wywala sie juz na np trzecim przelaczeniu....
Załączniki
S-RAM.png

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 17 lut 2009, 8:02

Hm... Jeszcze raz podkreślam, nie używam tego programu, więc nie wiem jak może się zachowywać przy symulacji, ale dostrzegam zasadnicze błędy:
1) Diody na wyjściu dałeś do +5V więc sygnał dostajesz zanegowany
2) Co do tych 'timestep' to wydaje mi się, że musisz coś w opcjach symulacji poszperać.
Jeszcze jedna rzecz:
widzisz, na przyciski dałeś układ 4010 a do zatrzaskiwania układ 74LS373.
Są to dwie różne rodziny układów różniące się przede wszystkim zakresami napięć wejściowych i wyjściowych. Pierwszy wykonany techniką CMOS, czyli wejścia są odizolowane od wyjść i nie płynie żaden prąd. Drugi zaś w technice TTL czyli prąd z WEJŚCIA WYPŁYWA. Ale to nie jest jeszcze takie straszne i twój układ pracuje, bo CMOS logiczną '1' na wyjściu da prawie +5V a '0' - prawie 0V. Natomiast TTL na wyjściu przy logicznym '1' da coś około 3.6V a dla '0' - okolice 1V.


Tak więc dla bezpieczeństwa nigdy nie mieszaj TTL i CMOS w swoich projektach a jeśli na prawdę musisz, to zastosuj specjalne bufory przerabiające napięcia.
Jako że rodzina 74' jest bogatsza w różne układy i w ogóle szybsza od CMOS4xxx to konstruktorzy stworzyli specjalną rodzinę 74HCxxx mająca swoje odpowiedniki z 74xxx ale już w technice CMOS.

Trochę namieszałem, więc radzę Ci zajrzeć na źródła elportalu.
PZDR
Załączniki
progi_napiec.JPG

ODPOWIEDZ