Forum: Mikrocontroller und Digitale Elektronik Interner Oszilator ATMega8515L


von Markus N. (roboscan)


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?

von Rahul (Gast)


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)...

von The Daz (Gast)


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.

von Markus N. (roboscan)


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?

von Rahul (Gast)


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.

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
Noch kein Account? Hier anmelden.