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

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