-
-
Erfahrener Benutzer
Fleißiges Mitglied
grüße!
ich kann dir zwar nicht das konkrete programm in c schreiben .. aber mit timingdiagrammen kann ich dir vielleicht helfen. die dinger lesen sich eigentlich fast wie von selbst .. man schaut sie von links nach rechts an. beschrieben ist, welche datenleitungen sich in welcher zeitlichen reihenfolge ändern müssen um den chip richtig anzusprechen. normalerweise werden diese chips direkt an den adress+datenbus angeschlossen - so wie das bei dir klingt gibt es den bei deiner schaltung nicht und du willst den chip direkt an einen port eines (zB) AVR hängen.
dadurch mußt du die einzelnen chipsignale eben explizit in deinem programm selber erzeugen. du legst also erst an
1111 0011 ( Register F - CS0=0, ALE=0, /RD=1, /WR=1 )
dadurch hast du die adresse schon anliegen und die anderen chipsignale sind noch so, daß der chip sich nicht angesprochen fühlt. danach dann
1111 1011 ( Register F - CS=1, ALE=0, /RD=1, /WR=1 )
das sagt dem chip das er gemeint ist (normal hängt der ja mit x anderen an einem gemeinsamen bus und darf ja nur dann reagieren wenn sein register F gemeint ist und nicht das vom chip daneben
)
anschließend dann
1111 1111 ( Register F - CS=1, ALE=1, /RD=1, /WR=1 )
und gleich danach
1111 1011 ( Register F - CS=1, ALE=0, /RD=1, /WR=1 )
du hast also bei ALE einen positiven impuls herausgegeben und der chip übernimmt dadurch aus den ersten 4 bit die adresse des registers in einen internen zwischenspeicher..
jetzt kommt es drauf an, ob du das register lesen oder schreiben willst. falls lesen, dann ist dies der perfekte zeitpunkt um die ersten vier bit des ports auf eingang zu schalten - sonst hast du da noch die adresse vom register F anliegen und der chip gibt die daten auf deine ausgänge -> kurzschluß!
zzzz 1001 ( ersten vier bit auf eingang! - CS=1, ALE=0, /RD=0, /WR=1 )
nach der zeit "t pzv (R-Q)" liegen die gültigen daten an und du kannst sie aus den ersten vier bit des registers lesen..
=> zzzz einlesen
danach wird der lesezyklus abgeschlossen durch
zzzz 1011 ( Register F - CS=1, ALE=0, /RD=1, /WR=1 )
und weiter mit
zzzz 0011 ( wieder die ausgangssituation - ersten vier bit stehen jedoch noch auf eingang... )
0000 0011 ( ersten vier bit dürfen erst jetzt wieder auf ausgang geschaltet werden da jetzt erst die gefahr eines kurzschlusses vorbei ist )
das ganze funktioniert dann unter der voraussetzung, daß die zeiten aus dem diagramm eingehalten werden - also das die leitung ALE mindestens die zeit "tW (ALE)" lang auf high bleibt und so weiter... bei einer ansteuerung über software ist das VERMUTLICH nicht so kritisch - falls doch muß noch das ein oder andere NOP eingefügt werden.
so, dafür habe ich jetzt aber einen kaffee verdient! :P
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen