Hallo, wie kann ich einen ATMega 8 mit Bascom dazu bringen, den Timer1 mit nem externen Takt hochzuzählen? Wie muß ich den Timer1 Konfigurieren?
"Clock Select" für Timer 1 auf "External Clock" (=> Datenblatt) Dann den Takt an den entsprechenden Pin anlegen ("T1" heißt der mein ich)
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?
=> http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf TCCR1A = 0; TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); /* Wert 0x07, Extclock, rising edge */ (C-Syntax, weiß nicht wie das in Bascom aussehen muss...) Würd ich jetzt spontan sagen...
Ach ja: Seite 100 im verlinkten Datasheet Kann man hier irgendwie editieren?
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 |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.