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
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...
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.