Archiv verlassen und diese Seite im Standarddesign anzeigen : RAM an 89C52
Import-Script
26.12.2002, 11:40
Moin und Frohe Weihnachten! <BR> <BR>Hab da so ein kleine Problem mit meinem 89C52. <BR>Ich möchte auf ein externes RAM zugreifen, aber er nicht, und dabei verhält er sich ganz komisch... <BR>Ich schreibe erst ein Byte in das RAM und lese es kurze Zeit später wieder aus, um es an Potr 1 anzuzeigen. Das seltsame ist, dass er nicht das geschriebene Byte an Port 1 anzeigt, sondern das low Byte des Datapointers. Und ganz toll ist, dass er das auch ganz ohne angechlossenes RAM macht. <BR>Ich finds äusserst suspekt, ich hab mir schon einige Programmierbeispiele angesehen, aber meiner Meinung nach kann man garnicht soviel falsch machen. <BR> <BR>Help Please! <BR>gruss Flojoe
Import-Script
26.12.2002, 11:54
Was für ein RAM ist das denn überhaupt? Und ein bisschen Quellcode mit Schaltplan wäre auch nicht schlecht. <BR> <BR>Aus deiner Beschreibung erkennt man keinerlei Zusammenhänge zwischen µC, RAM und Programm.
Import-Script
26.12.2002, 14:33
Jo denn: <BR> <BR>Erstmal das Progrämmchen: <BR> <BR>ORL 8Eh,#1 ;LSB des SFR setzen ALE=1 <BR> <BR>MOV DPTR,#0 ;Datapointer initialisieren <BR>MOV A,#10101010b ;Zu schreibendes Byte in A <BR>MOV @DPTR,A ;Byte in EEPROM schreiben <BR>MOV A,#0 ;A Löschen, danach kleines Päuschen <BR>CALL wait_1000 <BR>MOV A,@DPTR ;Byte wieder einlesen <BR>MOV P1,A ;Byte an P1 schreiben <BR> <BR>jmp $ ; Endlosschleife <BR> <BR> <BR>So.. <BR>das verwendete EEPROM ist ein XLS28C16BP-150 vom EXEL, das wie ein statisches Ram angesprochen werden kann und eine Zugriffszeit von ca 100ns besitzt. <BR>Die unteren 8 Adresseingänge sind über ein Latch(74573) an Port 0 des MC angeschlossen, die Datenleitungen habe ich direkt mit Port 0 verbunden. Die oberen Adressleitungen des EEPROMS habe ich einfach auf Masse gelegt, Port 2 des MC liegt frei. Den Takteingang des Latch habe ich über einen Inverter an ALE angeschlossen. Das mache ich deshalb, dass ich die Adresse noch nachmessen kann. <BR>WR und RD sind entsprechend den Pinbelegungen an den MC angechlossen, E liegt auf Masse. <BR>Und wie gesagt, die Adresse schreibt er wunderbar raus, man kann sie am Latch nachprüfen, das Problem liegt im einlesen. Er liest nicht das Byte vom Datenbus, sondern schreibt einfach das Low Byte des Datapointers in den Akku. und das gibt er mir dann an Port 1 aus. Ich habe auch schon das Ram komplett abgeklemmt, es verändert sich garnichts.Auch habe ich schon Pausen zwischen den Zugriffen eingefügt und den ausgang ALE nicht Softwaremässig beeinflusst, es kommt immer das selbe raus. Einen anderen MC habe ich auch schon verwendet, der macht den gleichen scheiss. Ich sitz schon seit ner Weile Dran, aber trotzdem möchte ich nicht ausschliessen das ich einen derben Fehler eingebaut habe... <BR> <BR>Im vorraus schonmal DANKE<IMG SRC="http://progshop.com/elektronik/diskussion/clipart/happy.gif" ALT=":-)" BORDER=0> <BR> <BR>Greez Flojoe
Import-Script
26.12.2002, 14:51
Versuch mal MOVX A,@DPTR beziehungsweise MOVX @DPTR,A (X wie xternes RAM) <BR>ALE müsste dann auch automatisch im richtigen Moment aktiv werden, weil der Prozessor weiß, dass er auf externen Speicher zugreift. <BR>
Import-Script
26.12.2002, 14:52
Hi <BR> <BR>hier mal ein paar Fehler :-) <BR> <BR>MOV @DPTR,A ;Byte in EEPROM schreiben <BR>MOV A,@DPTR ;Byte wieder einlesen <BR>muß jeweils movx heißen. Ansonsten sollte eine Fehlermeldung vom ASM kommen. Wenn nicht -> ASM entsorgen und durch AS ersetzen <BR> <BR>...Inverter an ALE... <BR>Da das 573 ein transparentes Latch ist übernimmt es irgendwas undefiniertes wenn du ALE einfach so invertierst. Schau dir mal das Bustiming an <BR> <BR>Nach dem Schreiben in ein EEPROM mußt du mindestens 1ms warten bis das EEPROM fertig ist mit schreiben. <BR> <BR>Matthias
Import-Script
26.12.2002, 15:16
UPS, das mit dem MOVX war ein Tippfehler meinerseits, im eigentliche Programm stimmts, und das mit der Warteroutine hab ich auch schon versucht, tut nicht. <BR>Und das Latch übernimmt Adressen astrein. da ALE durch den Softwareeingriff auf high liegt und nur bei einer Adressübernahme auf low geht hält das Latch durchden Inverter die Adresse fest, man kann sie mit einem Multi nachmessen, und das Latch gibt exakt die Adressen aus, die ich im Prog definiere. <BR>Aber ich kann nicht verstehen, wie bei dem Befehl MOVX A,@DPTR das untere Byte des Datapointers in nden Akku gelangen kann.
Import-Script
27.12.2002, 11:16
Hey, jetzt hab ichs gefunden! <BR>war wohl doch das Timing. Hab einfach nicht lang genug gewartet. Bei 2-3 ms funktionierts endlich. <BR>Aber das EEprom macht trotzdem noch manchmal was es will.. Übrigens, das mit dem Inverter hab ich gekickt , funzt nicht. Werd ich aber noch zur Ansteuerung eines Multiplexers verwenden <BR> <BR>Also, nochmal Danke für die Hilfe und nen guten Rutsch
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.