Hi. Was spricht eigentlich dagegen den internen Oszillator z.B. auf 4 oder 8 MHz zu benutzen ohne einen externen? Das wäre doch für die Schaltung einfacher auf zu bauen. Gibt es bei der Sache einen Haken? Noch etwas was ich nicht so ganz kapiere. Beispiel: Meine Taktfrequenz ist 4MHz. Ich habe einen Timer laufen der bei CPU /1024 einen Interrupt auslöst. Das sind bei mir : 4 000 000Hz / 1 024 = 3 906,25Hz Jetzt lasse ich jeden Interrupt eine LED entweder an oder ausschalten wo ich dann bei 1 953.125Hz bin. Aber ich kann die LED blinken sehen? Also kann ich ja nicht bei 1953... Hz sein. Wo is da mein Fehler?
Teil deine Blinkfrequenz noch mal durch 65536. Das ist nämlich der Überlaufwert, des Timers, dessen Blinken du beobachten kannst. Der interne RC-Oszillator ist nicht so genau wie ein Quarz (-oszillator)...
Spricht nichts degegen. Ein externer Quarz ist halt temperatur-stabiler was wichtig ist, wenn man Zeiten einigermassen genau messen will. Zu deinem 2. Problem waere ein angehaengter Quellcode hilfreich.
1 | #include <avr/io.h> |
2 | #include <stdint.h> |
3 | |
4 | uint8_t p; |
5 | uint16_t w; |
6 | |
7 | #include <avr/signal.h> |
8 | #include <avr/interrupt.h> |
9 | |
10 | |
11 | |
12 | SIGNAL (SIG_OVERFLOW0) |
13 | {
|
14 | |
15 | if (PORTB) |
16 | {
|
17 | PORTB = 0x00; |
18 | }
|
19 | else
|
20 | {
|
21 | PORTB = 0xFF; |
22 | }
|
23 | |
24 | }
|
25 | |
26 | int main(void) |
27 | {
|
28 | |
29 | sei(); //Global Interrupt Enabled |
30 | |
31 | //Timer auf 1024 des Taktes setzen
|
32 | //TCCR0 = 0b00000101; //Timer/Counter Control Register
|
33 | //TCCR0 = (1<<CS00)|(1<<CS02);
|
34 | //TCCR0 = 0b11001010;
|
35 | |
36 | TCCR0 = 0b00000101; //TimerFrequenz |
37 | |
38 | TIMSK = 0b00000010; //Timer erzeugt Interrupt = true |
39 | |
40 | DDRB = 0xFF; |
41 | PORTB = 0xFF; |
42 | |
43 | |
44 | //PORTB=0x00;
|
45 | |
46 | while(1) |
47 | {
|
48 | |
49 | |
50 | }
|
51 | }
|
Und wie schaffe ich es dann das er mir ale 1024stel einen Takt auslößt?
Im CTC-Mode des Timers ist das recht simpel... (sofern dien Controller das unterstützt) Da kann man im OCR einen Wert eintragen, bei dem der Counter resetet wird. (in deinem Fall also irgendwas um 1024 herum...). Gut davor bist du ja.
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.