Dekoder adresu - czy tak zadziała?
Michał Borkowicz - 06-09-2006 17:45
Dekoder adresu - czy tak zadziała? Witam wszystkich
Chcę pod AVRa (atmega128) podłączyć pamieć SRAM 512KB i dekoder adresu
(demultiplekser)który będzie wybierał rejestry zatrzaskowe i inne układy.
Podłączyć chcę to tak:
Pamięć SRAM
A0-A14 do linii adresowych SRAM
Pozostałe linie adresowe dla SRAM chcę ustawiać 4 wyjściami np. portu F
(otrzymam 16 stron po 32KB)
A15 zanegowany będzie służył jako CS dla pamięci. Wówczas każde
adresowanie powyżej 32KB będzie uaktywniać pamięć i o to mi chodzi.
Pytanie mam co do dekodera adresu (demultipleksera 16b). Czy można go
(CS) bezpośrednio podpiąć do A15? Byłby aktywny na przemian z pamięcią.
Wejścia demultipleksera podłączył bym do A8-A11, by był widoczny np. pod
adresami 0x0100, 0x0200... (pod innymi też).
Tu mam pytanie, czy to zadziała? Czy wyjścia WR RD nie są aktywne dla
pamięci wewnętrznej? Było by głupotą jak by były, ale wówczas
przemazywały by mi podłączone rejestry. Dobrze rozumuję?
Pozdrawiam
Greg\(G.Kasprowicz\) - 06-09-2006 19:45
> Tu mam pytanie, czy to zadziała? Czy wyjścia WR RD nie są aktywne dla
> pamięci wewnętrznej? Było by głupotą jak by były, ale wówczas przemazywały
> by mi podłączone rejestry. Dobrze rozumuję?
AFAIR , nie sa aktywne, ale nie wiem co chcesz uzyskac, chyba ze wewn FPASH
masz mniej niz 32KB...
I zwroc uwage na szybkosc tego multipleksera,szczegolnie gdy pedzisz AVR z
16MHz
Michał Borkowicz - 06-09-2006 22:45
Greg(G.Kasprowicz) napisał(a):
> AFAIR , nie sa aktywne, ale nie wiem co chcesz uzyskac,
ok, już tłumaczę. Wyjaśnie jak ja to rozumie, jak coś bedzie nie tak
proszę o poprawę, bo jeszcze tym się nie bawiłem.
W AVR istnieje specjalny interfejs do współpracy z pamięcią zewnętrzną.
Po uaktywnieniu paru bitów konfiguracyjnych mikrokontroler traktuje
pamięć zewnętrzną jak przedłużenie własnej pamięci SRAM.
Tak mniej więcej wygląda obraz pamięci (atmega162):
-0x0000:0x00FF rejestry itp.
-0x0100:0x04FF 1KB SRAM wbudowany
-0x0500:0xFFFF pamięć zewnętrzna
Dzięki temu interfejsowi można deklarować zmienne powyżej adresu 0x0500
tak samo jak wbudowany SRAM, czyli ta operacja była by prawidłowa:
#define OFFSET 0x2000
void XRAM_example(void)
{
unsigned char *p=(unsigned char *) (OFFSET+1);
.....
*p=0xaa;
.....
}
Problem jest tylko w tym, że każda strona 64KB z pamięci 512KB jest
obcinana o przysłonięte bajty z przedziału 0x0000:0x04FF. W przypadku
ATMEGA128 traci się około 5KB na stronę, czyli w sumie 40KB (8stron po
64KB).
Rozwiązaniem tego jest podzielenie pamięci na 16x32KB strony
rozpoczynające się od adresu 0x8000 (czyli powyzej 32KB). W ten sposób
mamy dziurę a adresach 0x0500:0x7FFF.
Tą dziurę chce wykorzystać podpinając 4 wejścia demultipleksera do szyny
adresowej A8:A11.
Wówczas jeśli adresowalibyśmy adres powyżej 0x7FFF poprzez ustawienie
bitu A15 (CS dla pamięci) przez negacje na 0 uaktywnialibyśmy pamięć.
W przypadku gdy adresujemy pamięć poniżej 0x8000 to A15 było by 0. Czyli
uaktywniało by demultiplekser podpięty do A8:A11.
Demultiplekser byłby widoczny pod adresem 0x70??:0x7F?? (bity nie ważne).
Bitowo tak to wygląda:
A15
0 1 1 1 D D D D ? ? ? ? ? ? ? ?
A15 - to CS dla demultipleksera, a zanegowany dla pamięci
1 - adresy powyżej 0x7000
D - tu podłączam demultiplekser
? - bity nie ważne, demultiplekser reaguje tylko na stan A8:A11
Demultiplekser będzie ustawiał CS dla 16 rejestrów takich jak np. 74573
WR/RD będzie odczytywał/zapisywał z nich jak z pamieci SRAM
Jeszcze co do SRAM. Strone w pamięci wybierał będe 4 bitami z portu F
jak dobrze pamiętam.
W ten sposób nie musze co chwile zmieniać bitów by sie przełączyć
pomiędzy przyłączone rejestry a pamięc.
To chyba wszystko.
> chyba ze wewn FPASH masz mniej niz 32KB...
w atmega jest 4KB, mało dla moich ptrzeb.
> I zwroc uwage na szybkosc tego multipleksera,szczegolnie gdy pedzisz AVR z
> 16MHz
>
>
Tak wiem, ponoć dla 5V i powyżej 8MHz zalecana jest seria AHC.
Niestety w TME ani seguro nie widze demultipleksera w AHC.
Jak Wy byście to rozwiazali? Jest inna szybka seria nadająca sie do tego
dla 5V?
Pozdrawiam
Zbych - 06-09-2006 22:45
Greg(G.Kasprowicz) przemówił ludzkim głosem:
> I zwroc uwage na szybkosc tego multipleksera,szczegolnie gdy pedzisz AVR z
> 16MHz
128 ma możliwość ustawienia waitstate'ów, więc jeśli prędkość nie jest
krytyczna, to wystarczy najzwyklejszy multiplekser.
Michał Borkowicz - 06-09-2006 23:45
Zbych napisał(a):
> Greg(G.Kasprowicz) przemówił ludzkim głosem:
>
>> I zwroc uwage na szybkosc tego multipleksera,szczegolnie gdy pedzisz
>> AVR z 16MHz
>
> 128 ma możliwość ustawienia waitstate'ów, więc jeśli prędkość nie jest
> krytyczna, to wystarczy najzwyklejszy multiplekser.
>
No właśnie o prędkość się rozbija. Zegar 16MHz, bo obsługuje wyświetlacz
od CX65. Jaki inny symbol nadaje się do 16MHz? AHC nie mogę tego
demultipleksera znaleźć.
Jeszcze jedno. Pamięć mam K6X4008C1F-BF55 SMD o czasie 55ns. Jak
przeliczyć na ilu MHz może działać bez dodatkowych opóźnień?
Pozdrawiam
Michał Borkowicz - 06-09-2006 23:45
Michał Borkowicz napisał(a):
> Jeszcze jedno. Pamięć mam K6X4008C1F-BF55 SMD o czasie 55ns. Jak
> przeliczyć na ilu MHz może działać bez dodatkowych opóźnień?
Ok, chyba wiem.
1/(55*10^-9) wychodzi ponad 18 milionów, czyli na chłopski rozum 18MHz.
Pozdrawiam
T.M.F. - 07-09-2006 10:45
>> Jeszcze jedno. Pamięć mam K6X4008C1F-BF55 SMD o czasie 55ns. Jak
>> przeliczyć na ilu MHz może działać bez dodatkowych opóźnień?
>
> Ok, chyba wiem.
>
> 1/(55*10^-9) wychodzi ponad 18 milionów, czyli na chłopski rozum 18MHz.
>
Kupilem w TME zatrzask, ktory chodzi na 16MHz (74AHC573?) w TSSOP20.
Mialem podobny problem do twojego, troche inaczej go rozwiazalem.
A mianowicie, powyzej 0x7FFFF mam 16kB strony pamieci (16 bo oprocz
512kB SRAM mam jeszcze dodatkowo 512kB FLASH), ktore wybieram bitami z
portu bodajrze F. Ponizej 0x8000 mam na stale podieta jedna strone
pamieci SRAM i EEPROM (po 16kB). Pozornie glupie, ale zasadniczo bardzo
ulatwia kopiowanie danych pomiedzy poszczegolnymi stronami (duzy bufor).
No i w gcc moge tam zadeklarowac zmienne, ktore powinny zostac poprawne
po zmianie strony pamieci. Nie trace tez w ten sposob owych 4kB, bo ta
zerowa strone moge tez wybrac jako strone pojawiajaca sie pod adresem
0x8000. Caly dekoder to zatrzask + dwa uklady 7400 (wykorzystalem z nich
chyba 6 bramek).
Calosc zawiera ATMega128, 512 kB SRAM, 512kB FLASH, przetwornice do
zasilania podswietlenia LCD (regulowana z procka), LDO do zasilania LCD
S65, joystick, ma zlacze do LCD i drugie z wyprowadzonymi wolnymi
portami z procka. Plytka jest wielkosci wyswietlacza (wyswietlacz na nia
naklejam, wystaje jeszcze z jednej strony na ok. 1,5cm zeby byl dostep
do joysticka). Jak chcesz to mam jeszcze wolna plytke.
Greg\(G.Kasprowicz\) - 07-09-2006 11:45
>
> W ten sposób nie musze co chwile zmieniać bitów by sie przełączyć pomiędzy
> przyłączone rejestry a pamięc.
>
> To chyba wszystko.
nie widze luki w rozumowaniu, powinno dzialac
PAndy - 07-09-2006 15:45
"Michał Borkowicz" <brak@onet.pl> wrote in message
news:ednad4$eig$1@nemesis.news.tpi.pl...
> Tak wiem, ponoć dla 5V i powyżej 8MHz zalecana jest seria AHC.
> Niestety w TME ani seguro nie widze demultipleksera w AHC.
ACT a nie AHC...
PAndy - 07-09-2006 15:45
"Michał Borkowicz" <brak@onet.pl> wrote in message
news:ednf5o$nm7$2@nemesis.news.tpi.pl...
> Ok, chyba wiem.
>
> 1/(55*10^-9) wychodzi ponad 18 milionów, czyli na chłopski rozum
> 18MHz.
Podnies napiecie zasilajace o ok 10 - 15% pojdzie szybciej
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl