Forum: Mikrocontroller und Digitale Elektronik Dynamisch ein paar Takte auslassen bei der 8051 CLK


von Mops (Gast)


Lesenswert?

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 
?

von georg (Gast)


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

> 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.

von Joe F. (easylife)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Mops (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von georg (Gast)


Lesenswert?

Mops schrieb:
> es soll eine VGA-Horizontalzeile ausgegeben werden

Aber kein Monitor o.ä. braucht doch ein so exaktes Timing?

Georg

von Mops (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Mops (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Zumindest beim NMOS-Original gibts auch noch einen Fallstrick:
Wenn bei Adressberechnungen die unteren 8Bit überlaufen, brauch er einen 
Takt mehr.

von Mops (Gast)


Lesenswert?

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!

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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?

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Nein. Ich habe das irgendwo mal gelesen und meine es war im Zusammenhang 
mit dem 8051. Nachgemessen habe ich das nie.

von Lothar (Gast)


Lesenswert?

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

von Achim S. (Gast)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von Jakob (Gast)


Lesenswert?

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...

von Mops (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Stefan F. (Gast)


Lesenswert?

Und wie hast du jetzt die 4 Takte ausgelassen?

von Mops (Gast)


Lesenswert?

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.

von Bernhard S. (b_spitzer)


Lesenswert?

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.

von Mops (Gast)


Lesenswert?

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 !

von Tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.