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.
:
Bearbeitet durch Moderator
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.
Mops schrieb: > es soll eine VGA-Horizontalzeile ausgegeben werden Aber kein Monitor o.ä. braucht doch ein so exaktes Timing? Georg
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: > Ich würde der CPU gerne vier mal nur einen Takt wegnehmen. Dann lass die CPU von einem AVR oder so takten. :-D
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.
Zumindest beim NMOS-Original gibts auch noch einen Fallstrick: Wenn bei Adressberechnungen die unteren 8Bit überlaufen, brauch er einen Takt mehr.
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.
:
Bearbeitet durch User
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?
Nein. Ich habe das irgendwo mal gelesen und meine es war im Zusammenhang mit dem 8051. Nachgemessen habe ich das nie.
Mops schrieb: > es soll eine VGA-Horizontalzeile ausgegeben werden Hat schon mal einer gemacht: https://www.silabs.com/community/mcu/8-bit/forum.topic.html/random_latency_with-qfVn
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!
Und wie hast du jetzt die 4 Takte ausgelassen?
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.
Benötigt: 4 Takte@12MHz => 0,33us Alternative: 12 Takte@36MHz => 0,33us 6 Takte@18MHz => 0,33us (Controller im X2-Modus) Bei deinem Problem passt der Quarztakt einfach nicht.
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 !
Mit einem CPLD oder einem kleinen FPGA sind solche zeitkritischen Sachen ohne großartige Verrenkungen in Griff zu bekommen...
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.