Forum: Mikrocontroller und Digitale Elektronik AVR externen SRAM per Software ansprechen


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Hallo,
Ich möchte eine LIB für 81C55 (SRAM mit IO) schreiben, aber komme 
derweil nicht klar. Es werden keine Daten übernommen. Irgendwass mach 
ich noch falsch.

https://www.mikrocontroller.net/attachment/89220/datasheet.pdf

Ich verwende (noch) nicht das "Memory-Interface" vom AVR - ich kann auch 
nicht sicher sagen, ob es damit überhaupt funktioniert? (z.B. IO/M dann 
seperat behandeln?) Die 81C55 haben schon ein Latch integriert, und ich 
glaub da liegt auch irgendwo mein Fehler in meiner derzeitigen 
Software...

Kann mir jemand eventuell eine LIB oder ein paar Infos zur Ansteuerung 
eines externen SRAMs per Software geben? Und eventuell ne Info ob das 
Memory-Interface für den 81C55 geht??!! Ich finde nämlich gar nichts...

Ich hab mal vor Jahren diesen Thread aufgemacht, aber nicht wirklich was 
zuende gebracht: Beitrag "OKI M81C55 benutzen."
Momentan wäre es wieder aktuell... Die ICs hab ich noch, aber finde 
(immer noch) keine LIB. Meinen alten Basic-Code + inpout32/giveIO.sys 
aus dem alten Beitrag gibts nicht mehr.

Liebe Grüße
tsx

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tim S. schrieb:
> auch irgendwo mein Fehler in meiner derzeitigen Software...
Das ist sehr wahrscheinlich, denn das Timing auf der Seite 5 ist doch 
recht entspannt: keinerlei maximale Zeiten. Das bedeutet, dass du nicht 
"zu langsam" sein kannst und einfach nur den Ablauf dort 
herunterprogrmamieren musst.
Aber das könnte man bestenfalls dann abschätzen, wenn amn die Software 
dazu sehen könnte...

> Ich verwende (noch) nicht das "Memory-Interface" vom AVR
Von welchem AVR?

> Die ICs hab ich noch, aber finde (immer noch) keine LIB.
Das wird auch nicht besser, weil ausser dir keine solche ICs mehr hat...

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Ich hab die Timings mal alle abgeschrieben.
z.B.
1
// |  TIMING_Name  | TIME DURATION NS |  INFO
2
#define Oki_tAL 0.050    // 50  - min - Address/latch Setup Time
3
#define Oki_tLA 0.030    // 30  - min - Latch/address Holt Time
4
#define Oki_tLC 0.100    // 100 - min - Latch/read (write) Delay Time
und mach hald dann sowas wie:
1
// Adresse schreiben
2
Ctr_BUS |= (1<<Oki_ALE);  // Oki ALE NACK
3
Oki_BUS = Adress;  // Oki Adress Data Senden
4
Oki_BUSDR = 0xFF;  // Oki Data Output
5
_delay_us(Oki_tAL);  // <<--- DA IST EIN WAIT STATE
6
Ctr_BUS &= ~(1<<Oki_ALE);  // Oki ALE ACK
7
_delay_us(Oki_tLC);  // <<--- NOCH EIN WAIT STATE
Sind hald die Wait-Staits laut Datasheet - nur ich kann sie nicht alle 
komplett zuordnen usw.

Lothar M. schrieb:
> keinerlei maximale Zeiten. Das bedeutet, dass du nicht
> "zu langsam" sein kannst

Heißt das nicht, dass es fast "beliebig" ist???
Also dass Zustände nur minimal so kurz sein MÜSSEN aber auch länger 
sein DÜRFEN? Das ding hat doch keine Clock ?? - und wird mehr oder 
weniger nur von den Steuer-Signal Flanken "getacktet". Zuerst hatte ich 
alle Timings ganz genau. (Soweit zuordbar) Und es gieng nicht. Nun hab 
ich die Zeiten ca 10% verlängert - und geht immer noch nicht. Ich steh 
grad bisschen auf´n Schlauch...

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Glaubst Du, daß "delay_us" etwas mit floatingpoint -Werten anzufangen 
weiß?

Ersetze alle Aufrufe von delay_us mit einer Deiner Konstanten durch ein 
delay_us(1).


Tim S. schrieb:
> Also dass Zustände nur minimal so kurz sein MÜSSEN aber auch länger sein
> DÜRFEN?

Sie müssen eine Mindestdauer einhalten, d.h. dürfen nicht noch schneller 
werden.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Ersetze alle Aufrufe von delay_us mit einer Deiner Konstanten durch ein
> delay_us(1).

Lol das hab ich derzeit im AVR (Mega32) - geht auch nicht. Verdrahtung 
und Schaltung hab ich nochmal geprüft. Passt. Signale kommen an usw.

Rufus Τ. F. schrieb:
> daß "delay_us" etwas mit floatingpoint -Werten anzufangen
> weiß?

Es gibt ja kein Nanosecond delay. - Und ich hab mir das mit den Floats 
wo abgeschaut, damit es Nanosekunden macht.

Ich probier noch n bisschen - Bin für jeden Tipp Dankbar. Also immer 
schon rein damit.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Tim S. schrieb:
> aber finde
> (immer noch) keine LIB.

Naja, das Timing auf Seite 5 ist doch gut verständlich. Da wird sich 
kaum einer extra ne Lib schreiben.

Ich würde keine Delays einfügen, sondern den System Clock Prescaler auf 
1MHz runter setzen. Dann dauert jeder Wechsel mindestens 1µs, d.h. ist 
langsam genug.
Ich wär allerdings zu faul, das zu Fuß zu machen und würde ihn einfach 
an den Memory-Bus des AVR hängen, z.B. am ATmega162.

Beitrag #5232709 wurde vom Autor gelöscht.
von Stefan E. (sternst)


Lesenswert?

Rufus Τ. F. schrieb:
> Glaubst Du, daß "delay_us" etwas mit floatingpoint -Werten anzufangen
> weiß?

Ja, weiß es. Die Funktion ist nicht ohne Grund als
1
void _delay_us (double __us)
definiert.

Auf einem AVR mit 8MHz z.B. wird ein _delay_us(0.1) zu genau einem NOP 
(also 125 ns).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.