Timer1 extern takten

OP #801043
Lesenswert?
• ▲
▼
Danke für deine Antwort.

mir geht es aber um die Register, wie ich die setzen muß.
Ich probiere jetzt schon sein 4 Stunden und ich kriege den T1 nicht auf 
den Zähler durchgeschaltet.

Wie müssen die Register TCCR1A, TCCR1B gesetzt werden?
Muß ich weitere Register oder Bits setzen?
OP #801139
Lesenswert?
• ▲
▼
Hi Sebastian,

habe die Register geprüft.
TCCR1A ist 0 gesetzt und TCCR1B ist (dezimal) 7.
Der Simulator zeigt dies an. Trotzdem gehts nicht.

Im Datenblatt (Seite 100) ist die Tabelle mit der 
Clock-Select-Description. Direkt darunder steht noch ein Satz, den ich 
nicht verstehe.

Soll ich den Pin D5 (T1) wirklich als Ausgang schalten? Oder verstehe 
ich das falsch? Da steht Software-Control des Zählers.

Was bedeutet dieser Satz?

Hier mal der Quellcode von mir:
1
' MCU:         ATmega (noch nicht genau definiert / 8 oder 16 ist pinabhängig)
2
' Clock:       3,686400MHz
3

4

5

6
' Beschreibung:
7
' Frequenz-Zähler
8

9

10
$regfile = "m8def.dat"                                      ' ATMega8
11
'$regfile = "m16def.dat"                                     ' ATmega16
12
$Crystal = 3686400                                          ' Takt extern 3,6864MHz
13
$hwstack = 32
14
$swstack = 24
15
$framesize = 24
16

17
$baud = 9600
18

19
' -----------------------------------------------
20
' Konstanten und Variablen
21
' -----------------------------------------------
22

23
Dim ZeitBasisCount as Byte
24
Dim Flags as Byte
25
Dim Zaehlerstand as Word
26

27
LEDRed Alias PortC.2
28
config LEDRed = output
29

30

31
' -----------------------------------------------
32
'     Zeitbasis mit Timer2 konfigurieren
33
' -----------------------------------------------
34

35
   on oc2 ISR_Zeitbasis
36
   enable oc2
37
   config Timer2 = Counter , Prescale = 256 , Clear Timer = 1
38
   compare2 = 144 - 1
39
   start Timer2
40
   enable interrupts
41

42
' -----------------------------------------------
43
'     Zähler-Eingang mit Timer1 konfigurieren
44
' -----------------------------------------------
45

46
   'on tov1
47
   'enable tov1
48
   config Timer1 = counter , Edge = Rising
49
   tccr1a = 0
50
   tccr1b = 7
51
   'portd.5 = 0
52
   'config portd.5 = output
53

54
' -----------------------------------------------
55

56
'                 Hauptschleife
57

58
' -----------------------------------------------
59

60

61
do
62
   If Flags.0 = 1 then
63
      Flags.0 = 0
64
      toggle LEDRed
65
      print Zaehlerstand
66
   end if
67
Loop
68

69
End
70

71
' OC2-Interrupt von Timer 2
72
' wird alle 0,01 Sekunden aufgerufen
73
ISR_Zeitbasis:
74
   incr ZeitBasisCount
75
   if ZeitBasisCount = 50 then
76
      Zaehlerstand = timer2
77
      ZeitBasisCount = 0
78
      Timer2 = 0
79
      Flags.0 = 1
80
   end if
81
Return
OP #801822
Lesenswert?
• ▲
▼
Hallo Leute,

vielen Dank für eure Hilfe.
Den Fehler konnte ich jetzt finden.

Es lag nicht an den Registern.
Sondern meine Output-Compare2 Interruptroutine war falsch.

Ich Dödel (ups) muß doch den Timer 1 zurücksetzen und auch diesen 
auslesen!


' OC2-Interrupt von Timer 2
' wird alle 0,01 Sekunden aufgerufen
ISR_Zeitbasis:
   incr ZeitBasisCount
   if ZeitBasisCount = 50 then
      Zaehlerstand = timer2
      ZeitBasisCount = 0
      Timer2 = 0
      Flags.0 = 1
   end if
Return

Jetzt funzt es! :)

Danke an alle!

Gruß Mitch

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