Forum: Mikrocontroller und Digitale Elektronik PWM ausgeben


von Oktoberfestbesucher (Gast)


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.

von Karl H. (kbuchegg)


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

von Oktoberfestbesucher (Gast)


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.
1
void interrupt_init(void)
2
{
3
   TCCR1 = 0b00001110;     // Prescaler = CK / 8192
4
   TIMSK |= (1 << TOIE1);  // Timer1 Overflow Interrupt Enable
5
   sei();                  // Enable Interrrupt
6
}
7
//*************************************************************
8
ISR(TIMER1_OVF_vect)
9
{
10
    static unsigned char n;
11
    x =  pgm_read_byte(&(My_weird_function[n++]));
12
    if(n >= 250) n=0;
13
}

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.

von Oktoberfestbesucher (Gast)


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.

von ramius (Gast)


Lesenswert?

ein blick ins datenblatt kann wunder bewirken ;)
1
PLLCSR = (1<<PLLE);
2
while(! PLLCSR&(1<<PLOCK));
3
PLLCSR |= (1<<PCKE);

wäre ne möglichkeit

von Oktoberfestbesucher (Gast)


Lesenswert?

ramius schrieb:
1
PLLCSR = (1<<PLLE);
2
while(! PLLCSR&(1<<PLOCK));
3
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...

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.