Forum: Mikrocontroller und Digitale Elektronik AVR Simulator V1 = V2? Bug im Timer von V1?


von Moritz E. (devmo)


Lesenswert?

Ich habe gerade mal mein asm progi im studio zuerst mit Simulator V1 und 
dann im V2 simuliert, und bemerkt das bei gleichem Device und gleichen 
Options im V1 mein Timer genau doppelt soviele Takte als im V2 benötigt, 
und nach Rechnung (siehe unten) der V1 damit falsch liegt.

(Source Code und Rechnerei unten)

Ist das ein Bug im SimV1? Anders kann ich mir die inkonsistenz nicht 
erklären. Die DeviceDef.inc ist eine eigene, also nicht aus dem 
Stammverz. Oder kann es sein, das V2 automatisch die Stammverz. Def.inc 
nimmt, weil meine eigene sich nicht als 644P, sondern 644 ausweist?


[Edit, in "Known Issues" wird allgemein von Fehlern im Prescaler 
geredet, vermutlich ist es damit beantwortet, deshalb noch eine kleine 
Quizfrage, sind die "xxxP" Modelle abwärtskompatibel? Sprich, kann ich 
mit 644P Simulieren und gleiche Ergebnisse wie beim 644 erwarten, wenn 
ich mit 644Device Datei baue, und nur 644 Funktionen setze? (Keine im 
644 unbenutzten Flags oder Register misbraucht)]

Gruß,

Moritz












Anhang: Source


Ausschnitt aus den Defs:

.equ OSCFREQ   = 20000        ;in kilohertz

.equ IOFREQ  = OSCFREQ/2   ; = 10000

;Clockticks für eine Microsekunde
.equ T_1US  = IOFREQ/1000  ; =10


;Prescaler
.equ T2PRESC   = (0<<CS22)|(1<<CS21)|(1<<CS20)  3bit 0..7: aus, 1, 8, 
32, 64, 128, 256, 1024

;T2 Timerset
.equ T2TAKT  = 100*T_1US/32  ;IRQ alle 100us generelles systemtiming
   ; = 31

Timer Init:


  ldi  Rtemp, T2PRESC
  sts  TCCR2B, Rtemp
  ldi  Rtemp, 1<<WGM21    ;ehemals ctc
  sts  TCCR2A, Rtemp
  ldi   Rtemp, T2TAKT    ;Lade wert für timer2 compare
  sts   OCR2A, Rtemp

  ldi  Rtemp, 1<<OCIE2A
  sts  TIMSK2, Rtemp


31 prescaled T2 ticks macht wieder *32 = 1000, welches V2 liefert, V1 
dagegen das doppelte.

(Mein Device ist AtM644, da SimV2 nur 644P kennt wurde beides auf 
letzterem Simuliert)

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.