www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interner Oszilator ATMega8515L


Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)...

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Neubauer (roboscan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>
#include <stdint.h>

uint8_t p;
uint16_t w;

#include <avr/signal.h>
#include <avr/interrupt.h>



SIGNAL (SIG_OVERFLOW0)
{

  if (PORTB)
  {
    PORTB = 0x00;
  }
  else
  {
    PORTB = 0xFF;
  }

}

int main(void)
{

  sei();  //Global Interrupt Enabled  

  //Timer auf 1024 des Taktes setzen
  //TCCR0 = 0b00000101;    //Timer/Counter Control Register
  //TCCR0 = (1<<CS00)|(1<<CS02);
  //TCCR0 = 0b11001010;

  TCCR0 = 0b00000101; //TimerFrequenz
  
  TIMSK = 0b00000010; //Timer erzeugt Interrupt = true
  
  DDRB = 0xFF;
  PORTB = 0xFF;


  //PORTB=0x00;

  while(1)
  {


  }
}

Und wie schaffe ich es dann das er mir ale 1024stel einen Takt auslößt?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.