Forum: Mikrocontroller und Digitale Elektronik Simulation in Bascom


von Paul Baumann (Gast)


Lesenswert?

Hallo Männers!
Ich habe das PRG geschrieben, um einen GENAUEN 1 Hz Impuls zu
erhalten.
Wenn ich es in den Chip lade, scheint es auch zu gehen.
ABER: Wenn ich es in Bascom simuliere, muss ich mich 2 mal rasieren,
bevor ein
Pegelwechsel an PB2 stattfindet.
FRAGE: Was kann man tun, damit die Simulation in Echtzeit läuft??
....und sind meine Gedankengänge richtig, wenn ich die Quarzfrequenz
durch 256 teile,
müssten es dann als Takt für Timer1 15625 Hz sein. Dann lade ich den
Timer mit 49911
vor, damit er ab da bis 65536 hochzählt und dann den Interrupt auslöst.
Das wäre dann
nochmal eine Teilung durch 15625 und das eine Hertz wäre fertig.
Ist das richtig so??

Mit freundlichen Grüßen Paul




'Das Programm soll 1Hz-Impulse an PB2 erzeugen
'---------------------------------------------------------
$Regfile = "2313def.dat" 'AT90S2313-Deklarationen
$crystal = 4000000                                    'Quarz: 4 MHz

Ddrb.2 = 1                                                  'Pin PB2
auf Ausgang setzen

Dim fToggle As Bit
Dim W As Word


On Timer1 Ontimer1
'Interrupt-Routine für Timer1Overflow
Config Timer1 = Timer , Prescale = 256           'Takt: Quarz/256
Enable Timer1
'Timer1-Overflow-Interrupt einschalten
Enable Interrupts
'Interrupts global zulassen
'---------------------------------------------------------
Do                         'Hauptschleife

Loop
'---------------------------------------------------------
Ontimer1:
'Interrupt-Routine
  Timer1 = 49911                                            'Timer 1
voreinstellen
  W = Timer1
  fToggle = Not fToggle                                 'Toggle-Bit
invertieren
  Portb.2 = Ftoggle
'Leuchtidiot als Anzeige


Return

von ThomasB (Gast)


Lesenswert?

hi paul:
der simu im bascom avr compiler,ist kein echtzeitsimulator,habe´s auch
mal versucht,geht irgenwie nicht.
.....
   Ontimer1:
   Tcnt1l = &HF7
   Tcnt1h = &HC2
   Toggle Portb.2
Return

Stimmt schon timer1 mit 49911 laden,(HEX=C2F7)


ThomasB

von Paul Baumann (Gast)


Lesenswert?

Hallo Thomas!

Danke für die Antwort. Ich freue mich, dass
ich den Timer richtig erwischt habe.
Ich baue mittlerweile schon jahrelang Elektronikkram,
aber noch nichts mit Mikrokontrollern. Da muss ich mich erst
mal ein wenig freischwimmen.

MfG Paul

von Kalle (Gast)


Lesenswert?

Hallo,

BASCOM kann nicht in Echtzeit simulieren....
Die abgelaufene Zeit kann man sehen, wenn man die Maus während eines
Simulationslaufes in der Statuszeile hin und her bewegt. Mit der
rechten Maustaste kann der "Zeitzähler" gelöscht werden.

Also sinnvoll Breakpoints setzen, "Zeitzähler" löschen und so die
Laufzeit messen ...


mfg Kalle

von Paul Baumann (Gast)


Lesenswert?

Danke Dir Kalle!

Das klappt einigermassen, wie Du es beschrieben hast.

Am besten ist es wohl, wenn man denkt, das PrG ist fertig,
es in NATURA auszuprobieren.
...und bei dem Wetter kann man ja auch mal einen Chip brennen!


:-))))

MfG Paul

von Flix (Gast)


Lesenswert?

ein kleiner verbesserungsvorschlage noch:
nimm alles unnötige aus der timer routine raus!!!
bereits nach weniger als einer minute konnte ich eine leichte
ungleichheit zwischen dem ticken meines weckers und der led feststellen
:D

Ontimer1:                    'Interrupt-Routine
  Portb.2 = Not Portb.2      'LED Port invertieren
  Timer1 = 49911             'Timer 1 voreinstellen
Return

das wichtigste kommt immer zuerst, danach hat man dann zeit fürs
voreinstellen des timers

mfg Flix =)

von Mike (Gast)


Lesenswert?

bedeutet dies, daß ich bei recht viel quelltext im timerbereich eine
zeitverschiebung erlebe?

nur wie soll ich  dann mit bascom in einem bestimmten zeitraum (von 1ms
hin bis zu 0,1s - je nach anwendung und gebrauch) die pins abfragen und
anhand des status (0 oder 1) dann weiterverfahren (led blinken lassen,
optokoppler etc)?

von Mike (Gast)


Lesenswert?

*hochschieb
Tashunka Witko?
Herr Dannegger?
hat einer da eine antwort drauf?

von Micha (Gast)


Lesenswert?

Hallo Paul,

um Deine Hautirritationen beim Rasieren in Grenzen zu halten kannst Du
ein

$sim

an den Anfang Deines Programms setzen und nochmal compilieren. Der
Programmdurchlauf beschleunigt sich in der Simulation, hat aber mit
"Echtzeit" nichts zu tun. Wait Befehle werden beispielsweise nicht
korrekt simuliert. Nicht vergessen vor dem Brennen $sim wieder zu
entfernen.

Gruß Micha

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.