Hallo Besucher, der Thread wurde 17k mal aufgerufen und enthält 91 Antworten

letzter Beitrag von Ballblazer am

Overlay64: Modul zur Anzeige von digitalen Schaltzuständen auf dem Bildschirm

  • Das Teil reagiert total sporadisch.
    Nach 10 mal AUS/EIN wird es endlich mal korrekt im Gerätemanager erkannt.
    Das ist langweilig...


    Ich habe die Platine so wie vorgesehen, komplett verkabelt im C64 mit dem PC verbunden.
    Also Spannungsversorgung vom C64.


    Egal ob ich das USB-Kabel erst vor oder nach dem Einschalten anstecke. Das ganze spinnt sich aus, dass es eine Freude ist.


    Mit dem Keyman64 hatte ich keine solchen Probleme.


    PS:
    Kleiner Schreibfehler in dem Beispielscript:


    when 00 write 1 10 "BEIDE EINGAENGE SIND HIGH "


    00 müsste wohl 11 heißen.

  • DerSchatten:


    Ich habe jetzt bei mir Windows 8.1 installiert und konnte das Problem dort jetzt auch reproduzieren und weiter eingrenzen. Offensichtlich ist Windows 8.1 sehr viel weniger tolerant, was geringe Verzögerungen bei der Enumeration von USB-Geräten angeht, als es noch Windows 7 und generell Linux und MacOSX sind.


    Anbei eine Firmware-Version, die das Problem zumindest auf meinem frischen Windows 8.1 System behebt.


    Ich empfehle, das kombinierte Firmware Image "overlay64-application-and-bootloader-1.2.hex" (oder .bin) in einem externen Programmiergerät über ISP zu programmieren.


    Alternativ kann auch die "overlay64-application-1.2.hex" über "overlay64 update overlay64-application-1.2.hex" programmiert werden, dazu muss das USB-Gerät allerdings zumindest einmal korrekt erkannt sein.


    Sofern die Erkennung der Geräte mit dieser Firmware auch bei dir nun verlässlich funktioniert werde ich kurzfristig eine neue Firmware-Version veröffentlichen.


    Allgemein gilt:


    Da ich primär auf Linux entwickle und die Unterstützung unter Windows und MacOSX von meiner Seite aus nicht mehr als ein Zugeständnis ist, bin ich bei Problemen unter Windows auf eure konstuktive Mithilfe angewiesen, da ich höchstens ein Windows-System zur Verfügung habe und somit keine Möglichkeit habe, auf allen anderen Windows-Varianten zu testen. Ich muss dabei davon ausgehen, dass die Geschichte prinzipiell überall funktioniert, sofern sie auf meiner Windows-Variante läuft.

  • Henning, wenn du es schon erfreulicherweise für windows anpasst dann sei bitte so gut und teste das mit windows 10 ...8.1 nutzt doch sogut wie keiner mehr! Danke.

    Willi, lies doch bitte nochmal den letzten Absatz meines vorherigen Beitrags. Vor allem vor dem Hintergrund, dass ich dir bereits einen Bausatz geliefert habe. Deine Chance, zur Abwechslung mal etwas Konstruktives beizutragen...

  • Warum funktioniert das nicht so wie ich will:



    Bit 0 ist bei mir die RESET-Leitung die nach jedem KERNAL-wechsel kurzzeitig auf LO gezogen wird.
    Der Screen notify sollte dann auch kurz den Text RESET einblenden.
    Tut er aber nicht. Der Rest funktioniert soweit.

  • Kann es sein das man in der gleichen Zeile kein mehrmaliges "write" verwenden kann?
    Also ein


    write 28 2 "test1"
    write 28 46 "test2"


    Muss man einzelne write Anweisungen an erste Stelle setzen?
    Oder können sich die auch nach einem when befinden?


    Irgendwie hab ich den Verdacht als würde sich das spießen.

  • Der Rest funktioniert soweit.

    Da die von mir zuletzt angehängte Firmware noch nicht heruntergeladen wurde, gehe ich davon aus, dass sich "der Rest" nicht auf die USB-Erekennung unter Windows 8.1 bezieht.

    Irgendwie hab ich den Verdacht als würde sich das spießen.

    Vielleicht könntest du deinen Verdacht nochmal etwas präzisieren, u.U. sogar durch einen eindeutigen Testfall inklusive erschöpfender Beschreibung des erwarteten sowie des beobachteten Verhaltens konkretisieren. In dieser Form werde ich daraus nicht schlau, außer, dass irgendetwas wohl nicht so funktioniert, wie du es erwartest.


    Wie auch immer: Leerzeichen und Zeilenumbrüche sind (außer innerhalb von Zeichenketten und im Falle von Kommtentaren) äquivalent, d.h. es können durchaus mehrere Direktiven nacheinander auf einer Zeile stehen:


    screen manual sample 0 when 0 write 0 0 "foo" write 0 10 "bar" when 1 write 7 7 "quux"

    Bit 0 ist bei mir die RESET-Leitung die nach jedem KERNAL-wechsel kurzzeitig auf LO gezogen wird.
    Der Screen notify sollte dann auch kurz den Text RESET einblenden.

    Was auch immer Bit 0 heißen soll, (ich sehe da nur "sample 2"), und was immer auch "kurz" hier heißen soll, versuch's doch mal mit

    Code
    1. screen notify
    2. sample 2
    3. when 1 write 0 2 "RESET"

    Dazu nur soviel: die Auswertung erfolgt wann immer dafür Zeit ist, d.h. immer, wenn gerade nichts gerendert werden muss, und somit je nach Konfiguration durchaus auch mehrmals pro Frame. Und alles andere ergibt sich aus den beschriebenen Regeln.

  • Wenn du die 1.1 meinst, doch, die habe ich bereits in Verwendung, was allerdings das ursprüngliche "wird nicht korrekt erkannt im Gerätemanager" nicht behoben hat.
    Nur der von dir vorgeschlagene Workarount, den LM1881 für den Flashvorgang zu entfernen, löst das Problem.
    Was ich jetzt allerdings mal nicht als entgültige Lösung ansehe...


    Zu dem Programmcode habe ich folgendes festgestellt:


    Werden write's mitten im Code gesetzt, also nach einem sample, werden diese nicht am Screen angezeigt. Writes müssen demnach immer ganz am Anfang des Codes stehen.
    Beispiel:

    Code
    1. write 0 16 "KERNAL:"
    2. write 1 15 "CHARSET:"
    3. write 0 45 "ID:"
    4. sample 1 0 # SD2IEC ID A6, A7
    5. when 00 write 0 49 "11"
    6. when 01 write 0 49 "10"
    7. when 10 write 0 49 "09"
    8. when 11 write 0 49 "08"

    funktioniert.


    funktioniert nicht.


    Screen notify funktioniert einfach nicht.


    (Bit 0 soll natürlich Bit 2 heißen)


    Hier mal mein komplette Code:


  • 1881 für den Flashvorgang zu entfernen, löst das Problem.
    Was ich jetzt allerdings mal nicht als entgültige Lösung ansehe...

    Es scheint, als hättest du #62 komplett übersehen. Den LM1881 zu entfernen war nur ein Tipp, um dir das update auf diese Firmware zu erleichtern.

    Werden write's mitten im Code gesetzt, also nach einem sample, werden diese nicht am Screen angezeigt. Writes müssen demnach immer ganz am Anfang des Codes stehen.

    Falsch. Es gibt einfach kein "nach einem Sample" in diesem Sinne.

    Das letzte write gehört natürlich noch zu "when 11". Es können auf eine when-Klausel durchaus mehrere Befehle folgen. Ein Zeilenumbruch hat wie oben beschrieben keine semantische Bedeutung, es gibt generell keine den aktuellen Kontext explizit terminierende Schlüsselwörter, die nicht gleichzeitig einen neuen Kontext öffnen würden. Das aktuelle "when" wird erst implizit durch die nächste "when", "sample" oder "screen"-Anweisung terminiert.

    Screen notify funktioniert einfach nicht.

    Kann ich leider nicht reproduzieren.

  • #63 hatte ich tatsächlich überlesen.
    Habe ich aber gleich nachgeholt.


    Ändert allerdings leider nichts an dem fehlerhaften Verhalten.
    Gut, kann ich damit leben das ich den LM permanent raus/rein heble. Der Sockel wird's schon verkraften.


    Das mit den write's habe ich jetzt soweit verfolgt das sich offensichtlich Texte in Zeilen, wo bereits Texte eingefügt wurden, an einer anderen Stelle nicht erneut setzen lassen.
    Was in dem Sinne allerdings auch nicht erforderlich ist, da man den kompletten Text ja bereits in einer Zeile festlegen kann.
    Das war auch der Grund warum Screen notify in dieser Zeile nichts angezeigt hatte.


    Aktuell habe ich die config jetzt soweit fertig gebastelt.


    Gibt es irgend einen Trick wie man die permanente komplette Anzeige mittels Steuer-Leitung komplett ausblendet und wieder einblendet?
    Also falls irgend ein Programm den kompletten Screen nutzen sollte und der Text dadurch störend wirken könnte.


    Oder muß man das dann mit "Screen notify" machen?

  • Ändert allerdings leider nichts an dem fehlerhaften Verhalten.
    Gut, kann ich damit leben das ich den LM permanent raus/rein heble. Der Sockel wird's schon verkraften.

    Ich habe das Problem bei mir reproduziert und behoben. Ohne weitere Informationen kann ich auch nichts weiter tun.

    Das mit den write's habe ich jetzt soweit verfolgt das sich offensichtlich Texte in Zeilen, wo bereits Texte eingefügt wurden, an einer anderen Stelle nicht erneut setzen lassen.

    Das ist das implementierte Verhalten und das ist auch so dokumentiert.

    Gibt es irgend einen Trick wie man die permanente komplette Anzeige mittels Steuer-Leitung komplett ausblendet und wieder einblendet?

    Du willst keine permanente Anzeige? Dann solltest du auch nicht "always" verwenden sondern "manual".

  • Ich will da gerade mal reingrätschen. ;)


    "manual" bedeutet, dass der Screen angezeigt wird, wenn die Control Line auf low liegt, und wieder ausgeblendet wird, wenn sie wieder auf high geht.


    "notify" bedeutet, dass der Screen für <Timeout-Zeit> Frames angezeigt und dann wieder ausgeblendet wird.


    Siehe hier: http://henning-bekel.de/overlay64/#configuration


    Beste Grüße,
    c0z

  • ahhh, ok. Dafür gibt es den Befehl "control".
    Jetzt ist es mir klar, danke!


    Etwas funktioniert aber trotzdem noch nicht.
    Das ganze sieht jetzt mal so aus:




    Damit läßt sich aber nur der "Screen notify" mit der Leitung 3 aus und ein schalten. Ich würde aber gerne den Manual Bereich damit schalten.


    Und was der absolute Hit wäre ist, das ich sowohl bei bit-Änderung den Manual Bereich für 5 Sekunden EIN schalten kann sowie auch mittel der Steuerleitung 3 AUS und EIN schalten kann.
    Geht das?

  • Die screens werden von 0 beginnend nummeriert:


    control 3 manual 0 -> schaltet deinen ersten screen ("manual")
    control 3 manual 1 -> schaltet deinen zweiten screen ("notify")


    Und was der absolute Hit wäre ist, das ich sowohl bei bit-Änderung den Manual Bereich für 5 Sekunden EIN schalten kann sowie auch mittel der Steuerleitung 3 AUS und EIN schalten kann.
    Geht das?

    Kein Problem, dann musst du den Screen als "notify" definieren aber halt mit einem "manual" control schalten.


    Ich mache das in meiner config genauso, siehe https://github.com/hbekel/over…lob/master/overlay64.conf


    Mein MixSID-Screen ist notify und zeigt sich also immer kurz, wenn sich was ändert. Mein Reprom-Screen ist nur manual. Beide schalte ich zusammen über eine Leitung im manual mode ein/aus, wenn ich eine dauerhafte Anzeige mit "allen" Informationen will:


    control 16 manual MIXSID_AND_REPROM








    Und den Mixsid-Screen nochmal kurzzeitig über ein control notify, wenn ich nur mal kurz gucken will (keyman zieht Kontrolleitung kurz runter und wieder hoch):


    control 17 notify MIXSID


    Wobei MIXSID_AND_REPROM als "0 1" definiert ist und MIXSID als "0".


    Eine control-Anweisung kann auch mehrere screens schalten.