Hallöchen!
Ich würde gerne mit einem 8051 mit 12MHz-Takt eine Echtzeitsteuerung
entwickeln. Doch der 8051 ist um 4 CLK-Takte aus der Phase des
regelmäßig zu erzeugenden Signals. Dabei sind die Signale am Anfang noch
synchron und nur eins am Ende müsste 4 Takte früher ausgelöst werden.
Das Problem wäre zu lösen wenn ich regelmäßig kurz vor dem asynchronen
Zustand 4 CPU-Takte überspringe. Das kann man bestimmt mit einer
externen Logik die von einem CPU-Anschluss ausgelöst wird
bewerkstelligen.
Schadet das Auslassen von 4 CLK-Takten dem internen Ablauf in einem 8051
?
Mops schrieb:> Schadet das Auslassen von 4 CLK-Takten dem internen Ablauf in einem 8051> ?
Egal welcher 8051, im Datenblatt sollte eine Angabe stehen "minimaler
Takt", daraus kann man die zulässige Pause ableiten. Steht da nichts,
ist der Prozessor statisch aufgebaut und Taktstillstand ist zulässig.
Georg
> Schadet das Auslassen von 4 CLK-Takten dem internen Ablauf in einem 8051
Das kommt darauf an(tm). Der 8051 selbst ist fully static IIRC, aber
z.B. ein UART würde bei 4 fehlenden Takten u.U. schlechte Daten lesen
oder senden.
Schau Dir mal EFM8 von Silabs an. Eventuell kanst Du damit Dein Signal
aus dem PCA erzeugen - oder den Chip einfach schneller laufen lassen,
die können IIRC auch 24 MHz.
So ganz verstehe ich das Problem nicht, aber das auslassen von 4 Takten
lässt das Programm ja langsamer ablaufen, insofern wird
Mops schrieb:> und nur eins am Ende müsste 4 Takte früher ausgelöst werden.
so nicht funktionieren.
Statt der CPU extern 4 Takte wegzunehmen, könnte man das Programm auch
mit 4 "NOP" Instruktionen an der entsprechenden Stelle um 4 Takte
langsamer machen...
Auch zu beachten: Quarze haben Toleranzen und Temperaturabhängigkeiten.
Deine momentan 4 gemessenen Takte müssen also nicht in allen
Betriebszuständen gültig sein.
Für Echtzeitanwendungen sollte man eher auf 32768 KHz Uhrenquarze als
Zeitreferenz zurückgreifen.
Mops schrieb:> Dabei sind die Signale am Anfang noch> synchron und nur eins am Ende müsste 4 Takte früher ausgelöst werden.
Dann würde ich 4 NOPs einfügen.
Peter D. schrieb:> Dann würde ich 4 NOPs einfügen.
Ein (1) NOP braucht beim originalen 8051 schon 12 Takte...
Aber mich würde auch mal das eigentliche Problem interessieren, wenn da
so ein rustikaler Workaround zuverlässig helfen könnte.
Ihr wolltet es ja unbedingt wissen :-)
Hier ist es: es soll eine VGA-Horizontalzeile ausgegeben werden bzw. die
Synchronsignale usw. Nach Ende der Zeile gibt es einen Versatz um 4
CPU-Taktzyklen bis zum nächsten H-Sync-Impuls und ein asynchrones
Ereignis (Beginn der vorderen Schwarzschulter der nächsten Zeile).
Ich dachte ich benutze ausschliesslich die als (2) eingezeichnete
Version mit dem Taktsynchronen Beginn der horizontalen Zeile und
verkürze zur Laufzeit den CPU-Takt um 4 Takte bzw. lasse sie aus mit
Hilfe externer Logik. Dazu müsste noch am Zeilen-Ende diese vordere
Schwarzschulter mit Hilfe eines Zählers um ein paar Takte verzögert
ausgelöst werden.
Es scheint alles machbar, ich kenne es aber noch nicht.
Der 8051 hat keine interne PLL, daher sehe ich da kein Problem. Je nach
Variante wird er allerdings dynamische Speicherzellen haben, das heißt
der Takt darf nicht komplett stehenbleiben.
Abdul K. schrieb:> Der 8051 hat keine interne PLL, daher sehe ich da kein Problem. Je nach> Variante wird er allerdings dynamische Speicherzellen haben, das heißt> der Takt darf nicht komplett stehenbleiben.
Ich würde der CPU gerne vier mal nur einen Takt wegnehmen.
georg schrieb:> Aber kein Monitor o.ä. braucht doch ein so exaktes Timing?
Doch, sonst gibt es Bauchtanz.
Mops schrieb:> um 4 CPU-Taktzyklen
Sprichst du hier jetzt von Oszillatortakten oder von Maschinenzyklen?
Oder könntest du da einfach mal echte Zeiten in µs hinschreiben?
> Es scheint alles machbar, ich kenne es aber noch nicht.
Nimm ein 8051 Derviat mit weniger Oszillatortakten pro Maschinenzyklus.
Mops schrieb:> georg schrieb:>> Aber kein Monitor o.ä. braucht doch ein so exaktes Timing?> Doch, sonst gibt es Bauchtanz.
Da könnte auch noch was Andres dahinterstecken (schlecht angepasstes
Signal mit Überschwingern...). Ich kenne "übliche" Monitore auch als
eher tolerant gegenüber solchen Timingverletzungen.
Lothar M. schrieb:>> um 4 CPU-Taktzyklen> Sprichst du hier jetzt von Oszillatortakten oder von Maschinenzyklen?> Oder könntest du da einfach mal echte Zeiten in µs hinschreiben?
Es sind 4 Taktzyklen, genauer gesagt halber VGA-Takt: etwa 12,6MHz.
Lothar M. schrieb:>> Es scheint alles machbar, ich kenne es aber noch nicht.> Nimm ein 8051 Derviat mit weniger Oszillatortakten pro Maschinenzyklus.
Ideal wäre ja einer im x3-Modus, also 4 Oszillator-Takte pro Befehl.
Leider möchte ich mehr in Richtung Retro basteln und diese neuen 8051er
sind zu exotisch. So ein Standard-8051er auf etwa 12MHz ist viel
retro-mäßiger.
Es scheint dass Takte auszulassen Probleme beim Einschalten der
Betriebsspannung mit sich bringt: man muss sicherstellen dass die CPU zu
Beginn ihren normalen Takt bekommt. Nagut, vielleicht kann sie auch
stockend starten und später alles in Grundzustand versetzen ... hmmm
grübel.
Mops schrieb:> Es scheint dass Takte auszulassen
Geht es um die Anzahl der Takte oder um die Zeit? Wenn es um Zeit geht,
kann man ja einen anderen Quarz nehmen.
Klaus
Mops schrieb:> Ideal wäre ja einer im x3-Modus, also 4 Oszillator-Takte pro Befehl.> Leider möchte ich mehr in Richtung Retro basteln und diese neuen 8051er> sind zu exotisch. So ein Standard-8051er auf etwa 12MHz ist viel> retro-mäßiger.>
Naja, irgendwann mußt du dich schon auf die Type festlegen, sonst ist
das diskutieren langsam sinnlos.
> Es scheint dass Takte auszulassen Probleme beim Einschalten der> Betriebsspannung mit sich bringt: man muss sicherstellen dass die CPU zu> Beginn ihren normalen Takt bekommt. Nagut, vielleicht kann sie auch> stockend starten und später alles in Grundzustand versetzen ... hmmm> grübel.
Wie kommst du da drauf? Gemessen?
Im DB wird sicherhlich bei dynamischen Design eine Minimalfrequenz
angegeben sein. Die darfst du eben nicht unterschreiten, auch nicht
momentan.
Mops schrieb:> Leider möchte ich mehr in Richtung Retro basteln und diese neuen 8051er> sind zu exotisch.
Z.B. die AT89LP51RD2 von Michrochip sind full production und bequem per
Bootloader programmierbar.
Es gibt aber noch andere Hersteller von 1-Clockern.
Falls Du mit Retro DIP-40 meinst, die sind in der Tat kaum noch
beschaffbar.
Aber es gibt ja Adapter PLCC-44 nach DIP-40 zu kaufen.
Ja, ich habe keinen so rechten Überblick welche 8051er noch auf lange
Sicht produziert werden. Also sollte ich wohl einen im PLCC-44 Gehäuse
verwenden.
Denkt ihr dass es auf lange Sicht noch 8051er geben wird im PLCC-44
Gehäuse die einen 4-Oszillator-Takte-Maschinenzyklus pro Befehl haben ?
Und ein 80"c"51 auch damit es kein NMOS-Typ ist mit
Überlauf-Extrazyklus, danke dir!
Ich weiß nicht ob das bei den CMOS-Typen anders ist mit dem Extrazyklus.
Es gibt aber definitiv vollstatische 8051.
8051 wird eh uns alle überleben. Unausrottbar. Nur bedrängt vom 6502.
Abdul K. schrieb:> Wenn bei Adressberechnungen die unteren 8Bit überlaufen, brauch er einen> Takt mehr.
Ich hab schon viele 8051-Datenblätter gelesen, aber das höre ich zum
ersten mal.
Hast Du dafür einen Beleg?
Abdul K. schrieb:> Nein. Ich habe das irgendwo mal gelesen und meine es war im Zusammenhang> mit dem 8051. Nachgemessen habe ich das nie.
Meinst du vielleicht den Unterschied zwischen LJMP und AJMP? Beide
können vom Compiler/Assembler als Umsetzung für unbedingte Sprünge zu
absolut gegebenen Zieladressen werden.
Es entscheidet sich beim Assemblieren, ob der Jump innerhalb des selben
2k-Blocks bleibt. Dann reichen 2 Byte zum Kodieren des Befehls. Wenn der
JMP außerhalb des aktuellen 2k-Blocks reicht, dann muss mehr Adressinfo
geladen werden (3 Byte Befehl), was bei einigen 8051-Varianten länger
dauern könnte.
Nein, meine ich nicht. Aber eventuell verwechselt mit 6502 ? Ist einfach
zu lange her. Vielleicht probierts einfach einer an einer NMOS-Version
mal aus. Ich habe da nichts mehr trotz Messi-Verhalten.
Zumindest Siemens hat übrigens diverse Maskenvarianten für die
Abkömmlinge 80515 und folgend.
Echtzeit-Anwendung?
Die reagiert mit maximaler (vorhersagbarer) Verzögerung
auf Ereignisse von außen.
- Also schon mal der falsche Name für's Problem.
> es soll eine VGA-Horizontalzeile ausgegeben werden
Ganz einfach:
Entweder ist der Systemtakt unpassend,
oder der Ausgabe-Ablauf schlecht "getimed".
Solche Krücken mit Taktunterdrückung bedeuten viel Aufwand
(mit -ach-herrjeh- unerwünschten Nebeneffekten...)
den man besser in Quarz-Auswahl und Programm-Ablauf stecken
sollte!
Das wurde schon in den 1980ern mit 8-Bit µPs und
problem-angemessener PFIFFIGER Programmierung gelöst...
Nach langer Bastel-Flaute ging es endlich weiter:
Ich habe eine Minimalplatine mit einem 8051er und EEPROM gebastelt und
mit den anderen Bauteilen aufs Steckbrett gesteckt.
Kurioserweise hing sich der 8051 beim allerersten Einschalten auf und es
war nur durchgehender CLK zu sehen am DSO! Vielleicht haben ihn die
DSO-Messleitungen am Takteingang gestört. Jedenfalls ging er zum Glück
nach dem Resetten (oder Neu-Einschalten, ich weiss es nicht mehr).
Möglicherweise braucht es da einen externen Pullup am Steuerpin, der zu
der Lückenlogik geht.
Ich muss wohl noch ein wenig herumprobieren - grundsätzlich scheint es
aber zu funktionieren!
Stefan U. schrieb:> Und wie hast du jetzt die 4 Takte ausgelassen?
Ich habe in einer Endlosschleife abwechselnd den Steuerpin auf 0 und 1
gesetzt. Wenn man das nur 4 mal wiederholt dann hat man nach einigen
Befehlen die geforderten 4 Taktlücken. Die Lücke muss nicht auf einmal 4
Takte lang sein.
Es ist der halbierte Standard-VGA-Quarztakt (25.175MHz denke ich waren
es). Ich muss den Controller dazu synchron halten, aber die Erzeugung
des Synchronsignale benötigt normalerweise Signalerzeugungen im
4-Takte-Raster. Der 8051 arbeitet aber im 12-Takte-Raster, was man aber
durch Auslassen von 4 Takten irgendwie angleichen kann. Es ist ja nur
eine Theorie da man damit zwar die grundlegenden Synchronsignale
hinbekommt aber die (pixelgenauen) Schwarzschultern und eventuelle
sekundäre Steuersignale auch noch da sind.
Mir kam auch die Vermutung dass der Reset der Prüfplatine des 8051 nicht
so sauber ist. Ich habe nachgeschaut und einen 47uF-Kondensator
eingelötet anstatt 4,7uF :-) Bisher hatte ich ohne Probleme einen mit
10uF benutzt.
Ich habe aber gerade eine Bastelflaute da mich die schwerhörige
Nachbar-Oma mit ihrem Küchenbombardement aus meinem Bastelzimmer
vertrieben hat :-) Sie hat gewonnen ... ich habe auch mein Bett
rübergeschafft ins andere Zimmer, nur das Bastelzeug und der PC ist noch
hier. Wie kann man nur Küchen-Arbeitsplatten und -Schränke direkt an
eine Trommelfell-artige dünne Zimmerwand schrauben - DAS IST SPARTA !