Simulation in Bascom

Gast #50596
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
Gast #50597
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
Gast #50598
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
Gast #50599
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
Gast #50600
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
Gast #50601
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 =)
Gast #50602
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)?
Gast #50604
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren