Forum: Mikrocontroller und Digitale Elektronik Atmega,statt 74HC573 ->74HC193?


von Georg J. (Gast)


Lesenswert?

Hey an alle.

Ich benutze einen ATMEGA8515
Ich stehe vor folgendem Problem.
Ich lade immer 256 Werte hintereinander aus dem externen SRAM.Der untere 
Teil der Adresse beginnt immer bei 0 und endet bei FF.Der höhere Teil 
spielt in dem Fall keine Rolle.

ld rd,Z+
ld rd,Z+
ld rd,Z+
...
...
...
...


Ich möchte jetzt aber einen gewissen OFFSET angeben.
Der Wert der durch den OFFSET angegeben wird soll zuerst geladen werden 
und die anderen sollen darauf folgen. Ein Überlauf ist gewünscht da die 
restlichen Werte vor dem OFFSET zum Schluss folgen sollen.

Bsp:
OFFSET = 250
250,251,252,253,254,255,0,1,2,....,248,249


Die Werte werden wirklich hintereinander geladen und an dem ist auch 
nicht zu rütteln. Deswegen entsteht auch mein Problem.

Nun habe ich mir die Befehle angesehn. Es gibt keinen Befehl der 
gleichzeitig aus dem SRAM ladet und den OFFSET erhöht.
Es gäbe höchstens ld rd,Z+q. Nur dieser erhöht den OFFSET nicht 
automatisch.(Außerdem kann ich nicht mit beliebig hohen OFFSET laden. 
Bis 63?)

Nun habe ich an eine Lösung per Hardware gedacht.
Anstatt des Latch könnte man doch auch einen ladbaren Zähler verwenden.

Der OFFSET wird zu beginn ganz normal in den Zähler geladen und per 
Umschalter in den Zählmodus geschalten. ALE wird dann verwendet um den 
Zähler hochzählen zu lassen.
Wenn ich mir das Timig des externen Interfaces so anschaue müsste das 
ganze doch theoretisch funktionieren. Der 74HC193(zwei für 8Bit) zählt 
bei positiver Flanke. Wird ALE gesetzt(bei ATMEGA8515 High) so zählt der 
Zähler.Und das nächste mal erst wieder bei der nächsten High Flanke.

Wenn ich mir das Ganze so vorstelle müsste es doch funktionieren 
ABER..es wird wohl zu langsam sein.

Meine eig. Frage ist nun, könnte die Überlegung funktionieren? Wenn 
nicht, gibt es Alternativen? Wie würdet ihr das Problem lösen?

MfG Georg

von Peter D. (peda)


Lesenswert?

1
ld rd,Z
2
inc zl
3
ld rd,Z
4
inc zl
5
ld rd,Z
6
inc zl
7
ld rd,Z
8
inc zl
9
ld rd,Z
10
inc zl
11
...


Peter

von Georg J. (Gast)


Lesenswert?

Wenns so einfach wäre. Es kommt aufs Timing dauernd.
Das ganze darf nicht länger als der Befehl ld rd,z+ (2 Takte und 3 Takte 
bei externem RAM). Deine Lösung würde 4 Takte brauchen.

MfG Georg

von Georg J. (Gast)


Lesenswert?

Hups der Fehlerteufel war da:

Wenns so einfach wäre. Es kommt aufs Timing an.
Das ganze darf nicht länger als der Befehl ld rd,z+ (2 Takte und 3 Takte
bei externem RAM) dauern. Deine Lösung würde 4 Takte brauchen.

MfG Georg

von georg (Gast)


Lesenswert?

kann mir keiner helfen? mfg georg

von (prx) A. K. (prx)


Lesenswert?

Georg J. schrieb:

> Der OFFSET wird zu beginn ganz normal in den Zähler geladen und per
> Umschalter in den Zählmodus geschalten. ALE wird dann verwendet um den
> Zähler hochzählen zu lassen.

Yep, das sollte dem Prinzip nach funktionieren. Nur muss man das Timing 
genau nachrechnen, wenn man mit ALE 0=>1 zählt.

Allerdings wird normalerweise ein transparentes Latch verwendet, kein 
flankengetriggertes Register, daher wird das vmtl. nur mit gezähltem 
Zugriff funktionieren, nicht jedoch alternativ mit direktem Zugriff.

> Wenn ich mir das Ganze so vorstelle müsste es doch funktionieren
> ABER..es wird wohl zu langsam sein.

Daher wäre es evtl. sinnvoller, am Ende vom Zyklus hochzuzählen, nicht 
am Anfang. RD als Taktsignal.

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.