Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 cze 2026, o 14:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 22 gru 2013, o 18:24 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Kilka dni temu przyszły do mnie nowe pamięci SRAM. Od tamtej pory próbuje ja uruchomić lecz bezskutecznie :(
Na początek wypis danych:
pamięć SRAM AS7C34096A-10TCN http://www.tme.eu/pl/Document/a3daa9eaabe46ccf602e123a87747c26/AS7C34096A.pdf
Atmega32 taktowany wewnętrznie 8Mhz
Biblioteka do obsługi wyświetlacza lcd jest z książki.

Pamięć ta posiada 8bitową magistralę danych którą podłączyłem do całego portu A w uC. Natomiast magistralę danych 19bitową rozdzieliłem na 8bitów młodszych podłączyłem do uC na cały port D a resztę bitów podłączyłem bezpośrednio do masy. Piny sterujące podłączyłem do portu B. Wyczytałem w nocie pdf że wszystkie jej porty są kompatybilne TTL więc podłączone są bezpośrednio pod uC. Natomiast zasilanie pamięci jest podłączone poprzez stabilizator na 3,3V.
I napisałem prosty program który zapisuje dwie wartości do dwóch komórek a następnie je odczytuje. Jednak on nie działa.
Program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Program w pętli while jest tylko tak dla zobrazowania czy uC działa poprawnie.
Jako pierwszy i drugi wynik na wyświetlaczu jest napisane 83. Domyślam się ze jest to powodem tego ze jest to druga wartość jaką uC zapisuje do pamięci, więc ona pozostaje na portach uC. Z tego widać że pamięć nic nie wysyła na tych liniach
To znaczy że pamięć w ogóle nie daje znaku życia. :(
Na pewno coś pokopałem z ustawieniem kolejności podawania adresu danych i sygnałów sterujących.
Dlatego proszę o pomoc

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 18:38 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

Ale ty wiesz o tym że m32 nie obsługuje zewnętrznej pamięci ??
tylko kilka Atmeg to potrafi 128, 162 np ale i tak musisz uzyć multplexera i masz dostęp do 64k



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 18:48 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Wiem ze atmega32 nie obsługuje zewnętrznej pamięci. Ja chcę ja obsłużyć programowo tak jak normalnie urządzenie podpięte do uC.
Czemu muszę użyć multiplexera? 64k? Chodzi Ci oto że braknie mi miejsca na podłączenie wszystkich bitów linii adresowych?. Na razie mnie to nie obchodzi gdyż chcę najpierw obsłużyć tę pamięć

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 19:32 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

powodzenia ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 19:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Witam
Może czasowo coś nie pasuje (przy zapisie/odczycie) pomiędzy ustalaniem adresu i danych

Spróbuj wstawić jakieś opóźnienia (wait state) żeby poczekać na ustalenie danych

Nie jestem pewien w jakim czasie AVR zmienia stany na wyjściach ale według
pdf-a który podałeś najdłuższy czas jest pomiędzy zboczem opadającym
a zboczem narastającym sygnału WE 10ns (pulse width low) , no i oczywiście
czas ustalenia danych tDW zanim sygnał WE zatrzaśnie dane w rejestrach.

Może się mylę ale warto sprawdzić :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 20:42 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Cytuj:
powodzenia ...

Nie robiłem nigdy obsługi takiej pamięci więc nie mam dobrej znajomości z tego zakresu. Co według ciebie tutaj się nie uda? Co powinienem wiedzieć a czego nie wiem? Skąd mam wziąć te wiedzę? Czemu to według mojego planu nie ma prawa działać?


Zaba- Fakt trochę zajmuje czasu to, ale przecież moja atmega nie jest aż taka szybka. Spróbuję dać jakieś opóźnienia. Tylko że dla odczytu lub zapisu w nocie pdf są podane 2 rodzaje form i nie wiem od czego one zależą. oraz jakie wartości ma na początku w każdej komórce. Wtedy Skupił bym się na odczycie a potem na zapisie.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 20:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Tego niestety też nie wiem ale
ram na początku to pewnie ma śmieci tak jak w PC
To są wszystko tylko moje domysły jeszcze nie próbowałem
takiej obsługi pamięci przez uC.
Może to trochę Ci pomoże ,podejście inne ale artykół
w podobnym temacie
http://ep.com.pl/files/4124.pdf


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 22:20 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Witam
Jeżeli inne metody zawiodły, to w takim przypadku można zastosować metodę krokową,
to jest:
1. wystawić na linie adresowe stan 0x00
2. wystawić na linię danych np. 0x55 lub 0xaa ( STOP)
3. sprawdzić próbnikiem stanów (lub w ostateczności woltomierzem ) czy na pinach pamięci są prawidłowe stany!
4. wystawić sygnały sterujące na "0" ( /CE, /OE i /WE ) (STOP)
5. sprawdzić te stany na pinach pamięci.
6. wystawić sygnały sterujące na "1" ( /CE, /OE i /WE )
po tym kroku mamy zapisane np. 0xaa w komórce o adresie 0.
następnie wykonujemy podobne kroki dla operacji odczytu.
Oczywiście metoda ta wymaga oprogramowania np. przycisku do wykonania kroku ( do kolejnego STOP ), lub wgrywania do procesora kolejnych wersji programu.
A propos kodu to w funkcji Write_Data najpierw należy ustawić ADRES_PORT i DATA_PORT a potem dopiero przełączać wyjście sterujące IC_WE.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 23:42 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2606
Pomógł: 129

Ram przy starcie ma smieci. Dlatego zawsze komputerki ja sprawdzaja a potem inicjalizuja :) RAM obsluzysz bez problemu. Roznica miedzy obsluga sprzetowa a programowa polega na szybkosci i wygody uzycia (na korzysc obslugi sprzetowej). Potestuj tak jak proponuje kolega Krish - bedziesz mial wtedy podglad co sie dzieje. Jezeli przy pracy krokowej wszystko bedzie dzialac prawidlowo to problemem beda zaleznosci czasowe.
Wpadl mi jeszcze inny pomysł - ale to tak na marginesie - mozna zrobic przystawke typu SloMo :) wtedy bys sobie spowolnil procka.


Sent from my mobile.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 08:25 
Offline
Użytkownik

Dołączył(a): 30 sty 2013
Posty: 31
Zbananowany użytkownik

Pomógł: 0

pokaż schemat ,będzie łatwiej ..

po za tym ,mam podobną konfigurację (M32+SRAM) i w kodzie trzeba dodać asm volatile ("nop"); przy sterowaniu latchem(zakładam że masz) ,oraz przy sterowaniu pinem RD/WR pamięci



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 10:24 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Wielkie dzięki za pomoc.
Kolega Zaba podał mi świetny link do projektu analizatora który posiada pamięć SRAM 32kB. Tam jest podobna pamięć ale sygnały sterujące jak i formy zapisu/odczytu ma te same. Udało mi się zdobyć program od tego analizatora tam w programie jest to w prosty sposób przedstawione. Są tam również bramki ale to jest akurat mi niepotrzebne. Więc jest to najlepsza propozycja. Wielkie dzięki.

Co do pracy krokowej to pomyślę nad tym ale najpierw przetestuje program z EP

rafik- Ja latcha nie posiadam bo poco mi? Skoro uC wystawia stabilne stany. Mówisz że ty zrobiłeś taką obsługę, ale sprzętowo czy programowo? Bo ja nie mogę tego zrobić sprzętowo bo za dużo kombinacji by było gdyż jest to nieco rozbudowany projekt.
Schematu nie pokaże bo nie mam eagla. A po za tym nie wiem czy on posiada taką obudowę pamięci SRAM.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 12:18 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

rafik+ a mógłbyś pokazać samą funkcje do odczytywania z pamięci?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2013, o 17:42 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Słuchajcie ale babola zrobiłem... Sam w to nie mogę uwierzyć.
Przy odczycie danych z pamięci SRAM ja odczytywałem z PORTA zamiast PINA. A to jest duża różnica. Ale ze mnie gapa....
Teraz program działa świetnie i nie ma w nim ani jednej funkcji "nop". Dla potwierdzenia komunikacji z SRAM zapisałem do niej 12wartości do 12 komórek po czym je odczytałem. Wszystkie dane odczytane zgadzają się.
Wielkie dzięki wszystkim za pomoc. A szczególnie koledze Zaba :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO