Forum: Projekte & Code Emulator Microchip PIC16F84


von Aleksandar K. (Firma: Mikrocontroller & Software) (aleks_1970)


Angehängte Dateien:

Lesenswert?

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.

von Nick (b620ys)


Lesenswert?

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?

von Rob R. (robr)


Angehängte Dateien:

Lesenswert?

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.

von Dieter S. (ds1)


Lesenswert?

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
von Cartman E. (cartmaneric)


Lesenswert?

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

von Michael M. (Gast)


Lesenswert?

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?

von Aleksandar K. (Firma: Mikrocontroller & Software) (aleks_1970)


Lesenswert?

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

von Aleksandar K. (Firma: Mikrocontroller & Software) (aleks_1970)


Lesenswert?

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 ?

von Aleksandar K. (Firma: Mikrocontroller & Software) (aleks_1970)


Lesenswert?

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" 
:)

von Aleksandar K. (Firma: Mikrocontroller & Software) (aleks_1970)


Lesenswert?

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!

von Cartman E. (cartmaneric)


Lesenswert?

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.

von Nick (b620ys)


Lesenswert?

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