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
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
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é
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.
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é
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
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é
>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
>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.
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é
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.