Hallo Leute,
ich stehe vor einem großen Problem, ich möchte gerne den PinB.7 (OC1c)
im CTC Modus mit Timer 1 nutzen.
Ich habe aber größte Probleme damit !
Auf Timer 3 , OC3a geht es einwandfrei.
ich habe versucht das Problem mit diesem Code vor Augen zu führen, da
der Timer einfach stehen bleibt und seinen Dienst beim Überlauf versagt.
Timer1 bleibt einfach stehen?! spielen noch andere Register eine Rolle ?
Hab ich die Register in der falschen Reihenfolge gesetzt ?
Mir gehen nach mehreren Tagen an diesem Problem die Ideen aus.
Ich hoffe, Ihr könnt mir helfen.
Bascom AVR Code für den AVR Mega128 :
1 | hwstack = 64
|
2 | $swstack = 64
|
3 | $framesize = 64
|
4 | $regfile = "m128def.dat"
|
5 | $crystal = 16000000 'enter the used clock of your actual microcontroller
|
6 | $baud = 38400
|
7 |
|
8 | Dim Timer1reload As Integer
|
9 | Dim Test As Integer
|
10 |
|
11 | Config Portb.7 = Output ' PWM out
|
12 |
|
13 | 'Config Timer1 = Timer , Prescale = 64 , Compare C = Toggle ' 2. Achse
|
14 | 'On Compare1c Compare_1c_int
|
15 | 'On Ovf1 Overf_1_int
|
16 | 'Enable Compare1c ' Enable the use of Timer2
|
17 | 'Start Timer1
|
18 |
|
19 |
|
20 |
|
21 | Tccr1a = &B00000100 ' Compare Output Mode for Channel C
|
22 | Tccr1b = &B00001011 ' ctc Mode 4 , 64 * precaler
|
23 | Tccr1c = &B00000000 'Bit 5 – FOCnC: Force Output Compare for Channel C
|
24 | Etifr = &B00000001 'Bit 0 – OCF1C: Timer/Counter1, Output Compare C Match Flag
|
25 | Etimsk = &B00000001 ' Bit 0 – OCIE1C: Timer/Counter1, Output Compare C Match Interrupt Enable
|
26 |
|
27 | Ocr1ch = 42 ' capture Register high
|
28 | Ocr1cl = 42 ' capture Register low
|
29 |
|
30 |
|
31 | Config Timer3 = Timer , Prescale = 64 , Clear Timer = 1 , Compare A = Toggle ' 1. Achse
|
32 | 'On Compare3a Compare_3a_int ' When Timer3 = Compare3A register
|
33 | Enable Compare3a ' Disable the use of Timer3
|
34 | Start Timer3
|
35 | Compare3a = 500 ' Load the TimerLimit value into the Compare1A (OCR1A) register
|
36 |
|
37 |
|
38 | Timer1reload = 2000
|
39 | Enable Interrupts
|
40 |
|
41 | Do
|
42 | Ocr1ch = Timer1reload
|
43 | 'Compare1c = Timer1reload
|
44 |
|
45 | Compare3a = Timer1reload
|
46 |
|
47 | Decr Timer1reload
|
48 |
|
49 |
|
50 | Print Chr(27) ; "[21;1H" ; " Timer1reload " ; Timer1reload ; " " ; Test
|
51 | Print Chr(27) ; "[22;1H" ; "Tccr1a Tccr1b Tccr1c Ocr1ch Ocr1cl PwmXn Timer"
|
52 | Print Chr(27) ; "[23;4H" ; Tccr1a ; " " ; Tccr1b ; " " ; Tccr1c ; " " ; Ocr1ch ; " " ; Ocr1cl ; " " ; Pwm1c ; " " ; Timer1 ; " "
|
53 | Print Chr(27) ; "[24;4H" ; Tccr3a ; " " ; Tccr3b ; " " ; Tccr3c ; " " ; Ocr3ah ; " " ; Ocr3al ; " " ; Pwm3a ; " " ; Timer3 ; " "
|
54 |
|
55 | Waitms 10
|
56 |
|
57 |
|
58 | Loop
|
59 |
|
60 | End
|
61 |
|
62 | ' interruptroutinen zum test
|
63 | Compare_3a_int:
|
64 | Incr Test
|
65 | Toggle Porta.1
|
66 | Return
|
67 |
|
68 | Overf_1_int:
|
69 | Incr Test
|
70 | Reset Etifr.0
|
71 | Toggle Porta.1
|
72 | Return
|
73 |
|
74 | Compare_1c_int:
|
75 | Incr Test
|
76 | Toggle Porta.1
|
77 | Return
|
vielen dank für eure Hilfe
cu
olby2