mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM ausgeben


Autor: Oktoberfestbesucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe einen ATtiny25 und möchte eine PWM aus einer Tabelle ausgeben 
und das etwas filtern und so einen Analog-Wert ausgeben.
Wenn der Zähler mit 64MHz läuft, würde ich eine PWM Frequenz von
64MHz/256 = 250 kHz erwarten.
Meine Tabelle ist 250 Werte lang und so könnte ich mein Signal mit 1kHz 
ausgeben.

Hat jemand ein paar Code-Schnipsel für mich, wie ich das machen kann.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie weit kommst du alleine?

Du postest jetzt schon lange genug, um mitbekommen zu haben, dass hier 
nur sehr selten komplette Programme angeboten werden. Und wenn, dann 
auch nur dann, wenn sich im Tutorial gar nichts zu diesem Thema findet. 
Die allgemeine Regell lautet: Du zeigst was du hast, sagst wo du 
Probleme hast und jemand hilft beim nächsten Schritt.

Zudem ist das Thema 'Funktionsgenerator' ja nicht unbedingt ein Seltenes 
hier im Forum. Deine Stichworte sind zb DDS

Autor: Oktoberfestbesucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Du zeigst was du hast, sagst wo du
> Probleme hast und jemand hilft beim nächsten Schritt.

Also, ich habe eine Timerinterruptroutine wie z.B.
void interrupt_init(void)
{
   TCCR1 = 0b00001110;     // Prescaler = CK / 8192
   TIMSK |= (1 << TOIE1);  // Timer1 Overflow Interrupt Enable
   sei();                  // Enable Interrrupt
}
//*************************************************************
ISR(TIMER1_OVF_vect)
{
    static unsigned char n;
    x =  pgm_read_byte(&(My_weird_function[n++]));
    if(n >= 250) n=0;
}

Was mir jetzt fehlt ist, wie ich den PWM-Timer auf 64MHz bekomme und 
dann immer nach 256 Takt-impulsen einen Interrupt, damit ich einen neuen 
Wert aus der Tabelle holen kann.

Autor: Oktoberfestbesucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir jetzt fehlt ist, wie ich den PWM-Timer auf 64MHz bekomme und
dann immer nach 256 Takt-impulsen einen Interrupt, damit ich einen neuen
Wert aus der Tabelle holen kann.

Autor: ramius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein blick ins datenblatt kann wunder bewirken ;)
PLLCSR = (1<<PLLE);
while(! PLLCSR&(1<<PLOCK));
PLLCSR |= (1<<PCKE);

wäre ne möglichkeit

Autor: Oktoberfestbesucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ramius schrieb:
PLLCSR = (1<<PLLE);
while(! PLLCSR&(1<<PLOCK));
PLLCSR |= (1<<PCKE);
>wäre ne möglichkeit
Danke, du bist ein Schatz.

> ein blick ins datenblatt kann wunder bewirken ;)
Beitrag "Problem mit IL300 Analog-Optokoppler"
seufz...

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.