Forum: Mikrocontroller und Digitale Elektronik Bascom Simulator


von Andre G. (elektrolurch)


Lesenswert?

Hallo
ich habe einmal eine Frage zum Verständnis des Hardwaresimulators von 
Bascom AVR

Ich habe folgenden kleinen Code erstellt um etwas damit zu spielen.
Um ihn zu testen betätige ich die kleine Led des PINC, folgerichtig wird 
auch das Register des Port D einmal auf 255 und einmal 0 gesetzt.
Soweit ist alles klar den so soll es ja auch sein.
Die Leds des PortD allerdings reagieren invers zum Register des PortD.
Schlimmer noch wenn ich also Pinc.0 auf 1 setze sind wie beschrieben die 
roten Leds des Hardwaresimulators dunkel, setze ich nun PinC.1 leuchten 
die 8 roten Leds des PortD.
Nun ist es zwar so wie es sein soll, aber von diesem Pin steht nichts in 
meinem Programm.
Kann mir das jemand erklären?
Liegt der Fehler bei mir oder am Hardwaresimulator.

BYe André
________________________
$baud = 19200
$crystal = 16000000
$regfile = "m8def.dat"
$sim
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portd = Output
Config Pinc.0 = Input

Do
If Pinc.0 = 1 Then
Portd = 255
Else
Portd = 0
End If
Loop
End

von Andreas B. (andreasb)


Lesenswert?

Ohne Bascom zu kennen: Oftmals werden LEDs LOW ACTIVE geschaltet, also 
wenn du die LEDs auf 0 schaltest dann wird die LED eingeschaltet, und 
wenn du auf 1 schaltest ist die LED aus.

z.B. hier erklärt: Beitrag "Schalten mit logischen Pegeln (AVR ATmega8515)"

(passt nicht genau auf deine Frage, ist aber das gleiche Prinzip)


mfg Andreas

von Andre G. (elektrolurch)


Lesenswert?

Hi
Danke für deine schnelle Antwort.
Prinzipiell stimme ich dir zu.
Was mich nur stört, ist dass die Register immer genau so stehen wie sie 
sollen.
Lediglich die Ausgabe Leds stehen falsch oder besser gesagt hängen nach.
Ich habe als den Eindruck mit dem eigentlich nicht benutzten Pin 
triggere ich nur die Ausgabe nach, und führe sie im Hardwaresimulator 
erst richtig aus.
Ich habe schon darüber nachgedacht den Setzbefehl doppelt auszuführen.
Wenn keine Lösungsansetze kommen werde ich heute Abend etwas weiter 
experimentieren.

BYe André

von weinbauer (Gast)


Lesenswert?

Das stammt noch aus der Zeit der Open Collector Ports. Die konnten kein 
High treiben, Lasten wurden also so verschaltet, dass + angeschlossen 
war und GND geschaltet wurde, die LED ging ergo an wenn der Port auf 0 
gelegt wurde und wurde eben so beibehalten im Simulator.
Das STK500 ist auch heute noch so beschaltet.

von Andre G. (elektrolurch)


Lesenswert?

Hi

ich habe nun mal etwas weiter gespielt.
Es ist nun definitiv so, dass egal was ich im Programm anstelle erst im 
Hardware Simulator aktuallisiert wird wenn ich in diesem eine Aktion 
ausführe.(z.B. einen Pin setzen)

Ich habe mein kleines Testprogramm etwas verändert.
1
$baud = 19200
2
$crystal = 16000000
3
$regfile = "m8def.dat"
4
'$sim
5
$hwstack = 40
6
$swstack = 16
7
$framesize = 32
8
Config Portd = Output
9
Config Pinc.0 = Input
10
Portd = &H01
11
Waitms 1
12
Portd = &H02
13
Waitms 1
14
Portd = &H04
15
Wait 1
16
Do
17
If Pinc.0 = 1 Then
18
Portd = 255
19
Else
20
Portd = 0
21
End If
22
Loop
23
End
Wenn ich das Programm jetzt laufen lasse, sollte eigentlich ein 
Lauflicht der 3 Ausgänge zu sehen sein, egal ob high oder Low aktiv.
Es passiert aber rein garnichts, keine Led geht an oder aus.
Betätige ich irgend einen der unbenutzten Pins wird die richtige Led 
gesetzt.
D.h. wenn ich während der drei Schritte immer wieder Pinb.0 betätige, 
kriege ich mein "Lauflicht".

Einmal davon abgesehen, dass ich mittlerweile auch noch feststellen 
mußte, dass Wait oder Waitms mit "$Sim" nicht ausgeführt und ohne "$Sim" 
viel langsamer ausgeführt wird ist der Simulator ganz schön 
eiingeschränkt.

Gibt es da keine Lösung dafür?
Oder gibt es gar eine Alternative zum Simulator oder gleich dem ganze 
Bascom?

Ich habe das Gefühl, dass ich so nicht weit kommen werde. ich wollte 
eigentlich meine Fehler minimieren und nicht die des Simulators 
austesten.

Sorry für die kleine Abschweifung, aber ich bin für jeden Tipp dankbar.

BYe André

von Paul Baumann (Gast)


Lesenswert?

Das ist nicht richtig:

Die 3 Portpins werden nur einmal bei der Initialisierung für jeweils
1ms eingeschaltet und dann erst kommt Deine Hauptschleife. Da wirst
Du schnelle Augen brauchen.

Das liegt nicht am Simulator.

MfG Paul

von Andre G. (elektrolurch)


Lesenswert?

Hi
ich kann halt schnell schauen. :-)

Spass beiseite.
Wenn ich "$Sim" im Programm lasse, werden die Zeiten nicht ausgeführt, 
das ist ein bekanntes Problem.(eines von vielen?)
Wenn ich es wie in meinem Fall deaktiviere dauert die ms im Simulator 
einige Sekunden. In der Zeit kann ich auch den Pin x mal betätigen.
So sehe ich das langsame Lauflicht.
Das Programm hat auch keinen sittlichen Nährwert. Ich wollte auch nur 
mal so spielen, um zu sehen wie liegt mir das Programm, komme ich da 
schnell zu Potte.
Sieht aber wohl nicht so aus.
Wobei ich sagen muß der Interpreter ist sehr handlich und gut zu 
verstehen wenn man sich beim Test an die IO Register hält kann man auch 
gut sehen was passiert. nur der Hardwaresimulator scheint eine Krankheit 
zu sein.

BYe André

von Paul Baumann (Gast)


Lesenswert?

>In der Zeit kann ich auch den Pin x mal betätigen.
>So sehe ich das langsame Lauflicht.

Nein, Du kannst auf dem Taster herumdrücken, wie Du willst, weil das
"scheinbare" Lauflicht noch vor der Hauptschleife ausgeführt wird. Erst
da drin hat der Taster eine Wirkung, aber auch keine Vernünftige:

Er ist nicht entprellt, so daß es Zufall bleibt, ob Du durch Glück die
LED an oder aus bekommst.

Spiele erst mal selbst auf dem Papier das Programm als "menschlicher
Simulator" durch.

MfG Paul

von Bascommer (Gast)


Lesenswert?

>Wenn ich "$Sim" im Programm lasse, werden die Zeiten nicht ausgeführt,
>das ist ein bekanntes Problem.(eines von vielen?)
du Held, $sim lässt extra Waits weg, damit du in vertretbarer Zeit 
simulieren kannst.

>Das Programm hat auch keinen sittlichen Nährwert.
kannst eben nicht mit Werkzeug umgehen.

Bevor du solche Werkzeuge einsetzt, solltest du verstanden haben, was du 
tust, da hat Paul schon recht.

von Andre G. (elektrolurch)


Lesenswert?

Hi

ich bin mir nicht sicher, ob wir uns verstehen.
Der Hardwaresimulator ist nur ein Programm, keine richtige Hardware.
Wenn ich es so wie beschrieben betreibe läuft das kleine Programm 
sozusagen in Zeitlupe ab.
Vom Programmstart bis zu Wait 1 dauert es schlapp2 45 Sekunden und ein 
Pfeilzeigt mir ja jede Zeile die er gerade abarbeitet.

BYe André

von Andre G. (elektrolurch)


Lesenswert?

Hi

>>Wenn ich "$Sim" im Programm lasse, werden die Zeiten nicht ausgeführt,
>>das ist ein bekanntes Problem.(eines von vielen?)
> du Held, $sim lässt extra Waits weg, damit du in vertretbarer Zeit
> simulieren kannst.
Das habe ich schon gemerkt, das schrieb ich auch schon weiter oben.
Um aber um zu sehen wie das mit dem setzen klappt, lies ich dann $Sim 
weg und nahm die Zeitverzögerung in kauf. Ich wollte nur sehen wie die 
Auswirkung auf den PortD ist.
>>Das Programm hat auch keinen sittlichen Nährwert.
> kannst eben nicht mit Werkzeug umgehen.
Auch hier hast du mich wohl falsch verstanden, ich meinte mein kleines 
Testprogramm.
Wenn ich wüßte wie es geht würde ich vermutlich nicht hier schreiben und 
dir die Zeit stehlen
> Bevor du solche Werkzeuge einsetzt, solltest du verstanden haben, was du
> tust, da hat Paul schon recht.
Da bin ich ja dabei wenn ihr mir helft.


BYe

von mue-c (Gast)


Lesenswert?

Hallo Andre,
um die Rechenzeit klein zu halten, werden im Normalmodus die Variablen 
und Ausgangspins nicht aktualisiert.
Wenn du in der obersten Reihe den Knopf mit der kleinen, gelben Hand 
drückst, dann werden die Variablen refreshed.

von Andre G. (elektrolurch)


Lesenswert?

Hi mue-c

1000 Dank, einer der mich versteht. :-)
Das wars, nun tut der Port was ich erwarte.

BYe André

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.