Peter Dannegger wrote:
> Nach meiner Erfahrung ist es genau umgekehrt.
> D.h. die Simulatoren können sehr viel weniger als der reale Chip oder
> haben mehr Bugs.
Da hast du natürlich Recht. Kein Simulator kann die Hardware zu 100%
simulieren in allen Aspekten.
> Daher ist immer nur der reale Chip das Maß, ob etwas richtig ist und
> nicht der Simulator.
>
> Das ist ja auch logisch, denn wenn man etwas programmiert, dann muß es
> im Chip laufen. Wenn es nur im Simulator funktioniert, nützt das keinem.
Genau das sehe ich nicht so.
Es ist klar, daß das Ziel sein muß, das Programm am Ende im Controller
zum laufen zu bringen. Dieses Ziel erreicht man aber deutlich einfacher,
wenn man das Programm vorher sorgfältig im Simulator getestet hat.
Schon alleine die Tatsache, daß der Simulator nicht alle Aspekte
simulieren kann ist für mich ein Grund mehr, daß ich das was möglich ist
erst mal virtuell testen will. Wenn das Programm dann im Simulator
einwandfrei funktioniert fange ich an es auf die Hardware aufzuspielen.
Somit habe ich mich dann nur noch mit eventuellen Problemen
herumzuplagen, welche ich eben nicht simulieren kann, kann mich aber auf
den Rest des Codes relativ gut verlassen. Mit diesen Arbeitsschritten
fahre ich schon seit etlichen Jahren sehr gut.
Aber lassen wir das, denn das weitet sich ansonsten zu einer
Grundsatzdiskussion aus welche sowieso zu nichts führt. Jeder hat da
eben seinen eigenen Arbeitsablauf. :)
Ich habe den Fehler aber nach etwas studieren des Datenblatts gefunden.
Leider ist der Grund, weshalb es im Simulator und auf der Hardware nicht
geht, im Datenblatt nur schlecht dokumentiert.
Das Problem liegt dadran, daß der Pin für T0 gleichzeitig mit SCL des
I2C Interface zusammenliegt. Dieser Pin stellt eine Ausnahme der
möglichen Port Konfigurationen dar.
Man kann fast jeden Pin des Controllers in einen der vier möglichen
Konfigurationen betreiben. Diesen Pin kann man aber nur in zwei
möglichen Konfigurationen betreiben. Das wären "input-only" und
"open-drain". Ich habe in meinem Programm anfangs, genauso wie der
Author dieses Threads, den Pins versucht als "quasi-bidirectional" zu
konfigurieren. Sobald man den Pin als "open-drain" konfiguriert
funktioniert die PWM Generierung an diesem Pin einwandfrei.
Man benötigt dann aber einen Pull-Up Widerstand, falls man das Signal
direkt am Pin messen möchte.
Um den Pin als open-drain zu konfigurieren hier die Einstellungen:
// T0 = P1.2 = open-drain (einziger möglicher Ausgangsmodus)
P1M1 |= 4;
P1M2 |= 4;
Da habe ich selbst auch mal wieder etwas neues dazu gelernt. Und der
Simulator hat es auch völlig korrekt simuliert. ;)
Ciao,
Rainer