www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM mit den AVRs.. oder Wie bringt man leicht eine Frequenz


Autor: Gregi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte, zwecks einer RC5-ausgabe eine 36KHz-Frequenz an einen Pin 
bekommen, eigentlich müsste das doch mit dem PWM-Timer des 2313 
funktionieren, oder?
bei dem pwm-timer hab ich momentan nicht ganz den überblick.

ciao
gregi

p.s.: das ganze wird für ein PCAT=>RC5 interface, lies ich hänge eine 
standardtastatur an meinen prototypen an und kann dann minidiscs 
leichter "beschriften".

Autor: Meiserl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmmm würds mit einem Timer machen (nicht im PWM-Mode)

Autor: Gregi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs in der zwischenzeit schon gelöst. durch viel rechnen.
ein problem hab ich noch..
36 KHz, bedeutet das dass der zustand der leitung alle 0,027per ms 
wechselt oder alle 0,0135 ms?

ciao gregi

Autor: Meiserl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus elektrotechnischen Grundlagen T=1/f wobei
T=Periodenzeit in sec. (eine Vollschwingung) und f=Frequenz (in Hz)
ergibt sich eine periodenzeit von 2,7777 msec
in dieser Zeit muß einmal LOW und einmal HIGH gewesen sein.
Bei einem Tastverhältnis von 1:1 so beträgt die HIGH-Zeit 1,3888msec und 
die LOW-Zeit 1,3888msec. und somit ist eine Periode fertig.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft das folgende weiter



/*
      Test program for Timer/Counter 0 in the Interrupt Mode
      Every time the Timer starts an interrupt routine the led variable
      is written on the PORTB and increased one time.
      Leitner Harald
      07/00
*/

#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>

uint8_t led= 0;
uint8_t ton= 0x00;
uint8_t dur= 0x00;
uint8_t nnn= 0x00;

SIGNAL (SIG_OVERFLOW0)
 {
   outp(~led, PORTB);  if (led++ >=2) led = 0;

   outp(ton,TCNT0);                /* reload timer with initial value */

   if( dur++ == 100 )
     {
       if( ton++ > 0xf0 ) ton= 0x00;
       dur= 0;
/*
       if( ++nnn > 0x10 ) outp( ~(1<<TOIE0), TIMSK);
*/
     }
 }

int main( void )
 {
    outp(0xFF, DDRB);             /* use all pins on PORTB for output */

    outp((1<<TOIE0), TIMSK);      /* enables the T/C0 overflow interrupt 
*/
    outp(       ton, TCNT0);      /* start value of T/C0 */
    outp(         2, TCCR0);      /* prescale ck / [1,2,3,4,5] */

    sei();                        /* set global interrupt enable */

    for (;;){}
 }

Autor: Gregi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm..
bei mir ist
1/36000
0,000027777 = 0,02777 ms

aber ich glaub ich habs schon geschafft.. hab sicher 15 min an einem 
fehler gesucht.. er hat sich manchmal, ganz unregelmäßig resettet 
(startadresse)
fehler war bei einer interrupt-routine einen pop/push dreher (pop am 
anfang, push am ende)

wenn die ganze senderoutine fertig ist, werde ich sie hier mal posten, 
vielleicht braucht jemand soetwas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

lann man so einen Quelltext auf die Downloadseite bringen?
Mich würde interessieren wie ich 30 HZ ausgebe und dabei das 
Tastverhältniss ändere.

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.