Forum: Mikrocontroller und Digitale Elektronik Timer1 -- ATTiny45


von Robert S. (razer) Benutzerseite


Lesenswert?

Hallo an alle

Ich versuche seit 2 Tagen den Timer 1 des Attiny45 im Overflow Modus zu 
initialisierern :( Doch es funktioniert einfach nicht. Den Timer0 hab 
sofort zum Laufen bekommen

Hier der Code:
1
.org OVF1addr
2
  rjmp test
3
...
4
5
  ldi temp, 0x06    ;Presacler = 32
6
  out TCCR1, temp
7
8
  ldi temp, 0x04         ;Enable Timer1 Overflow Interrupt
9
  out TIMSK, temp
10
11
  sei    ;Enable Interrupts

Hat jeand eine Ahnung was da los ist?

Danke im Voraus
mfg Robert

von Robert S. (razer) Benutzerseite


Lesenswert?

Keiner eine Ahnung?

von Peter D. (peda)


Lesenswert?

Robert Schilling wrote:

> Hier der Code:

Wo denn ?

Ich sehe nur irgendwelche Fragmente.


> Hat jeand eine Ahnung was da los ist?

Was geht denn nicht ?

Simulierst Du (kann Dein Simulator überhaupt T1) ?
Oder debuggst Du ?
Oder Real Life ?


Real Life ist immer das, was wirklich zählt.


Peter

von Robert S. (razer) Benutzerseite


Lesenswert?

Hier der ganze Code:
1
.include "tn45def.inc"
2
3
.org 0x000
4
  rjmp main
5
.org INT0addr
6
  rjmp EXT_INT
7
.org OVF1addr
8
  rjmp test
9
10
.def temp = r16    ;Tempregister
11
.def puls = r17    ;Pulslänge
12
.def highLow = r18  ;High oder Low Flanke
13
.def pattern = r19   ;aktuelles Muster
14
15
.equ RISING = 0x00
16
.equ FALLING = 0x02
17
18
19
main:
20
  ;Stackpointer initialisieren
21
  ldi temp, LOW(RAMEND)
22
  out SPL, temp
23
  ldi temp, HIGH(RAMEND)
24
  out SPH, temp
25
26
  ldi temp, 0x1B  ;Setze PB0, PB1, PB3, PB4 als Ausgang und PB2 als Eingang
27
  out DDRB, temp
28
29
  ldi temp, 0x00  ;schalte alle Leds an PortB aus
30
  out PORTB, temp
31
32
  ;Konfiguriere externen Interrupt
33
  ldi temp, 0x01    ;Logikpegeländerung löst Interrupt aus
34
  out MCUCR, temp  
35
36
  ldi temp, 0x40    ;Enable externen Interrupt
37
  out GIMSK, temp
38
39
  ldi temp, 0x01    ;Enable CTC Timer 1, Presacler = 32
40
  out TCCR1, temp
41
42
  ldi temp, 0x04    ;Enable Timer1 Overflow
43
  out TIMSK, temp
44
45
  ldi highLow, RISING    ;highLow initialisieren. 1. Flanke ist eine HIGH
46
47
  sei    ;Enable Interrupts
48
49
loop: rjmp loop   ;Haupschleife
50
51
EXT_INT:
52
  cpi highLow, RISING  ;Der Puls ist eine Steigede Flanke
53
  brne FALLING_EDGE  ;Wenn eine Fallende Flanke, spring zur Routine
54
  ldi temp, 0x00
55
  out TCNT1, temp    ;Counter resetten
56
  ldi highLow, FALLING  ;Nächster Puls ist eine Fallende Flanke
57
  reti
58
59
FALLING_EDGE:
60
  ldi puls, TCNT1
61
  ldi highLow, RISING    ;Nächser Puls ist eine Steigende Flanke
62
  reti
63
64
test: reti

> Was geht denn nicht ?
TCNT1 wird nicht erhöht und bleibt auf 0.

> Simulierst Du (kann Dein Simulator überhaupt T1) ?
> Oder debuggst Du ?
> Oder Real Life ?

Ich simuliere mit dem Simulator von AVR Studio.

mfg Robert



von Matze (Gast)


Lesenswert?

Ich glaub der Simulator hat einen Bug beim dem Tiny und dem Timer. Suche 
mal hier im Forum. P.S. Ich habe dabei auch schon einige Stunden 
verloren.
Im Prozessre geht der timer aber.

Beitrag "Timer 1 vom Tiny25 leuft nicht an"

von johnny.m (Gast)


Lesenswert?

> ldi puls, TCNT1
"ldi" lädt einen konstanten Wert in ein Rechenregister. Das ist aber 
sicher nicht das, was hier gemacht werden soll. Du willst ja vermutlich 
nicht die Adresse von TCNT1 in puls stehen haben, oder irre ich mich? 
Ich denke, an dieser Stelle (und auch an ein paar anderen Stellen) ist 
der Befehl "in" Dein Freund...

von Robert S. (razer) Benutzerseite


Lesenswert?

Danke, das war der Bug des Simulators. Mit dem Simulator 2 funktionierts 
super.

Danke Jonny, für den Tipp. Bin halt noch Assembler Anfänger.

von Dannecker (Gast)


Lesenswert?

Hallo,

Habe das gleiche Problem!

Aber welches ist der "Simulator 2" welcher dieses Problem lösen soll?

von Gast (Gast)


Lesenswert?

Simulator 2 gibts im neusten AVR Studio 4.13
www.atmel.com

von Robert S. (razer) Benutzerseite


Lesenswert?

Ja mit dem Simulator 2 funktionert das Ganze.

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.