Assembler errechnen der periodendauer T ??

1avr2

Neues Mitglied
21. Jan. 2010
28
0
0
Sprachen
guten abend ins forum,

habe ein problem mit dem errechnen der periodendauer meines timers, vielleicht kann mir jemand den fehler erlaeutern?

taktfrequenz gesetzt mit sut_cksel auf 4,8Mhz (tiny13)

rechnung 4800000(1/s)/1024=4687,6/255=18,3(1/s) -> T=1/s -> ca 0,054s.

meine led leuchtet jedoch mit ziemlich genau einem hertz bzw 1s pd.





;selbst umgeschrieben von atmega8 -> tiny13

.include "tn13def.inc"

.def temp=r16
.def leds=r17

.org 0x0000
rjmp main ;reset handler

.org ovf0addr
rjmp timer0_overflow ;timer overflow handler

main:
;stackpointer
ldi temp,ramend
out spl, temp

;port b auf ausgang
ldi temp,0xff
out ddrb,temp

ldi leds,0xff

;timer_b config
ldi temp,(1<<cs00)|(0<<cs01)|(1<<cs02) ;teiler setzen
out tccr0b,temp

;timer overflow intr
ldi temp,(1<<toie0)
out timsk0,temp
sei

loop: rjmp loop

timer0_overflow:

out portb,leds
com leds
reti


p.s. beim kopieren des files verschwinden die tab's?
 
Hi
Jetzt wo ich antworten will, fällt's mir auch auf. Wo ist das Icon für "Code" ? Habt ihr mal wieder etwas kaputtgeändert ?:)
Zum Thema kann ich noch nix sagen, außer der Fehler liegt nicht in der LED:cool:
Im Ernst, ich muss mir dazu erst mal das Datenblatt holen und deine Formel nachvollziehen. Etwas ungeschickt ist jedenfalls der Ansatz :
4800000(1/s)/1024=4687,6/255=18,3(1/s) -> T=1/s -> ca 0,054s.
1. Schritt 4800000(1/s)/1024=4687,6(1/s)
2. Schritt 4687,6(1/s)/255=18,3(1/s)
Nun muss ich dazu nur noch herausbekommen, welcher Schritt ist Teiler, welcher Interrupt....
Gruß oldmax
 
Hi
Nun hier mal mein Ergebnis.... also Datenblatt von Atmel steht drin: da gibt es einen Prescaler auch für Systemclock und "original Text" :
Interrupts must be disabled when changing prescaler setting to make sure the write procedure is
not interrupted.hee setting. The Application software must ensure that a sufficient division factor
is chosen if the selected clock source has a higher frequency than the maximum frequency of
the device at the present operating conditions. The device is shipped with the CKDIV8 fuse
programmed.
Mein bescheidenes Englisch besagt, das der Chip mit einem Prescaler von 8 ausgeliefert wird und das ergibt:
Prescaler Systemtakt : 4 800 000/8 = 600 000
Prescaler Timer 600 000/ 1024 =585,9375
TimerOverflow 586/ 256 =2,28
in Zeit: 1/2,28 = 0,436... gefühlte halbe Sekunde also Blinktakt 1 Sek. (grob)
Gruß oldmax
 
erst mal vielen dank fuer deine muehe und schnelle antwort.

gruss bernhard.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)