Interner Oszilator ATMega8515L

OP #269420
Lesenswert?
• ▲
▼
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?
Gast #269421
Lesenswert?
• ▲
▼
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)...
Gast #269422
Lesenswert?
• ▲
▼
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.
OP #269423
Lesenswert?
• ▲
▼
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?
Gast #269424
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.