Vor paar Wochen habe ich angefangen einen Emulator für den Microchip PIC16F84 zu schreiben. Nach 5 Wochenenden, kann es alle Isntrukctionen dekodieren, dissasemblierten Code anzeigen und alle Instruktionen bis auf ClearWatchdog und Sleep ausführen. Interrupts funktioneren noch nicht, der nächste Schritt wird vermutlich Timer 0 sein.
Aleksandar K. schrieb: > Vor paar Wochen habe ich angefangen einen Emulator für den Microchip > PIC16F84 zu schreiben. Tolle Herausforderung! Gibts den PIC16F84 nicht im Emulator von MPLAB-X?
Hi Alex, Cool!. Kannst du mal den angehängten Emulator in Python mit deinem vergleichen; dieser kann wesentliche Befehle bis auf Timer0, Interrupts und EEPROM Kontext. Dieser wurde innerhalb 1 Min von AI generiert. Mich würde mal die Qualität(sunterschiede) interessieren.
Oder hier schauen: "A PIC16 Assembler & Emulator (Interpreter)" https://codeberg.org/MJaoune/pic-emulator "PIC Emulator for a PIC16F74" https://github.com/zhemao/pic_emu
:
Bearbeitet durch User
Aleksandar K. schrieb: > ... der nächste Schritt wird vermutlich Timer 0 sein. Das wird noch eine Herausforderung werden. Insbesondere die korrekte Simulation der Errata. ☺ Der Simulator im MPLAB kann das. ...
Aleksandar K. schrieb: > Emulator für den Microchip > PIC16F84 Chapeau für die Leistung. Als Übung um den Kopf zu bewegen und klüger zu werden als man ist oder gibt es darüber hinaus ein Grund für das Unterfangen?
Michael K. schrieb: > Aleksandar K. schrieb: >> Emulator für den Microchip >> PIC16F84 > > Chapeau für die Leistung. > Als Übung um den Kopf zu bewegen und klüger zu werden als man ist oder > gibt es darüber hinaus ein Grund für das Unterfangen? Danke! In der ersten Linie um etwas Hirnübung zu bekommen, aber bei einigen kleinen Projekten habe ich mir einen Emulator mit C oder C++ API gewünscht: 1. habe eine kleine 2D Grafik Library für 18F angefangen zu schreiben und eigentlich muss man nur das "richtige" Raster im Speicher schreiben. Nach jeder Änderung flashen und checken macht keinen Spaß. Konkret für diese Anwendung könnte man noch alles so schreiben dass es multi-Plattform unterstützt und dann auf dem PC nur simulieren, aber wenn man PIC-spezifische Sachen verwendet (zum Beispiel Bit setzen ohne logische Arithmetik, dann weiß man nicht, ob es auch im PIC genauso funktioniert. Zweiter Punkt ist Messung der genauen Geschwindigkeit. Im Emulator bekommt man ganz genau Anzahl der Instruktionstakte mitgeteilt. Drittens kann man auch den Rest mindestens teilweise emulieren (zum Beispiel grafische Ausgabe im Interrupt, quasi als Idle() Implementierung. Simulation hilft da sehr sehr wenig. https://www.youtube.com/watch?v=zxCLgEudm6U 2. Habe noch ein größeres Projekt auf dem Schirm, und da geht es eigentlich 95% um die Abläufe. Eine große Uhr mit DCF, SPI für Displayausgabe, I2C für RTC und Infrarot Empfang für Fernbedienung. Hier könnte man eigentlich fast alles simulieren, aber für einen 24/7 Dauertest unter maximalen "Last" wäre es nicht schlecht das man auch im Emulator auszuprobieren. Simulation für Display lässt sich über C-API in paar Stunden schreiben und man kann es komplett auf dem PC entwickeln, zusammen mit unterschiedlichen Tests. https://www.youtube.com/watch?v=FZXpTR_msO0
Cartman E. schrieb: > Aleksandar K. schrieb: > >> ... der nächste Schritt wird vermutlich Timer 0 sein. > > Das wird noch eine Herausforderung werden. Insbesondere die > korrekte Simulation der Errata. ☺ > > Der Simulator im MPLAB kann das. ... Ja, allgemein wird die Simulation der integrierten Peripherals das vermutlich schwierigste Teil sein, und die Errata sollte man auch wahrheitstreu emulieren, wenn es geht. Aber gerade die Errata-Liste von 16F84 ist ziemlich leer. Meinst Du das allgemein, oder kennst Du konkret irgendwelche Fehler im Timer 0 von 16F84 ?
Nick schrieb: > Aleksandar K. schrieb: >> Vor paar Wochen habe ich angefangen einen Emulator für den Microchip >> PIC16F84 zu schreiben. > > Tolle Herausforderung! > Gibts den PIC16F84 nicht im Emulator von MPLAB-X? JA! Aber, bei allen Projekten, in denen es um mehr geht als paar LEDs zu steuern, braucht man irgendwie auch den Rest der Simulation. Ich habe zum Beispiel eine Uhr mit SPI Ansteuerung und eine kleine grafik-Library und in beiden Fällen hätte ich sehr gerne irgendeine Anzeige auf dem PC für die beiden Ausgaben. Die Simulation (vermutlich ist es Emulation) von Microchip bietet Simulation der Eingaben als Stimulationsdateien in einem VHDL-ähnlichen Format, aber für die Ausgabe braucht man API um die Ausgabe selbst irgendwie auf dem PC zu simulieren. Soweit ich es verstanden habe, existiert sogar eine API zum Emulator, aber in Java. Ich brauche sie in C. Aber es geht eigentlich vor allem darum Spaß zu haben - "because we can" :)
Rob R. schrieb: > Hi Alex, Cool!. Danke. > Kannst du mal den angehängten Emulator in Python mit > deinem vergleichen; dieser kann wesentliche Befehle bis auf Timer0, > Interrupts und EEPROM Kontext. Dieser wurde innerhalb 1 Min von AI > generiert. Mich würde mal die Qualität(sunterschiede) interessieren. Wow! Hätte nicht gedacht, dass die KI das so gut hinbekommt! Welches Tool hast Du benutzt und was genau hast Du alles eingegeben um das Ergebnis zu bekommen? Auf den ersten Blick sieht es gut aus, 2-3 kritische Punkte wurden richtig behandelt (zum Beispiel, dass man Schreiben in Speicher über Funktion implementiert), damit kann man tatsächlich was anfangen. Wenn ich mehr Zeit habe, vergleiche ich den Code mit meinen und poste die Ergebnisse hier. Teile sehen im Vergleich sogar sehr ähnlich aus!
Aleksandar K. schrieb: > Cartman E. schrieb: >> Aleksandar K. schrieb: >> >>> ... der nächste Schritt wird vermutlich Timer 0 sein. >> >> Das wird noch eine Herausforderung werden. Insbesondere die >> korrekte Simulation der Errata. ☺ >> >> Der Simulator im MPLAB kann das. ... > > Ja, allgemein wird die Simulation der integrierten Peripherals das > vermutlich schwierigste Teil sein, und die Errata sollte man auch > wahrheitstreu emulieren, wenn es geht. Aber gerade die Errata-Liste von > 16F84 ist ziemlich leer. Meinst Du das allgemein, oder kennst Du konkret > irgendwelche Fehler im Timer 0 von 16F84 ? In der Interruptroutine wird ein Wert auf den Timer0 aufaddiert, um eine selbst gewählte Periode zu erzeugen. Timertakt und Codeausführung des Additionsbefehls sind aber asynchron zueinander. Das Ergebnis ist Jitter. Wenn man nur Bits im Timer0 setzt, gibt es keine Probleme. Z.B. für einen 100er Teiler: bsf TMR0,7 bsf TMR0,5 Das solltest du im Simulator vom MPLAB (nicht -X) einmal ausprobieren. Der Simulator kann dort auch zyklengenau die Ausführungszeit anzeigen.
Aleksandar K. schrieb: > Aber es geht eigentlich vor allem darum Spaß zu haben - "because we can" Das ist Begründung genug!
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.
