Timer1 -- ATTiny45

Persönliche Seite #548908
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
#549235
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
Persönliche Seite #549298
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


Gast #549335
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...

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