-
        
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: 33Khz mit 2313 PWM und Bascom

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461

    33Khz mit 2313 PWM und Bascom

    HI

    Ich wüsste gerne, ob man mit der PWM des AT90S2313
    33Khz für einen TSOP (TSOP1733) generieren kann, und das Ganze möglichst noch unter BASCOM... Müsste halt 50% Duty-Cycle usw. sein.

    Ich habe an den 2313 einen 10Mhz-Quarz angeschlossen.
    scheint auch mit dem zu funktionieren. (Habe nichts an den Fuse-Bits geändert, weil AVR-Studio sagte, dass dieses Modell die Serielle-Fuse-Bit-Änderung nicht unterstütze. )

    Frage: Ist das möglich, und wenn ja, hätte mir jemand einen Codefetzen?
    Ich blick' nämlich in meinem BASCOM-Buch nur schwer durch.

    Wäre lieb, deshalb DANKE schonmal jetzt...

    Liebe Grüße, Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  2. #2
    Gast
    Wär' mit einem Timerinterrupt gut möglich.

    TimerX_ISR:
    TimerX = XYZ 'halbe Periode
    Pinx.y = not Pinx.y
    return

    sind so meine ersten Gedanken wie ich die Frequenz generieren würde.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461
    Zitat Zitat von Anonymous
    TimerX = XYZ 'halbe Periode
    Hä? Muss ich nicht den Timer auf PWM setzen?
    Was heißt XYZ?
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  4. #4
    Gast
    Ich weiß ja nicht genau was Du brauchst.
    Ein Taktverhältniss (wenn Du es nicht verändern willst) von 50% kriegste mit einem einzigen Timer hin.

    XYZ ist der Wert auf den der Timer, nach dem er die Interruptroutine ausgelöst hat, jedes mal neu eingestellt wird weil er sonst bei 0 anfängt zu zählen. (deshalb brauchst Du nur den Zählerstand für eine halbe Periode nehmen)

  5. #5
    Gast
    Hi

    achso.
    Ich bräuchte einfach nur 33khz an einem Ausgang des 2313.

    Also müsste XYZ = 3,03 sein??

    Das ist also die ISR, der rest funzt wie in den Beispielen von BASCOM.?

    Und was ist der Prescaler?
    Welchen Wert muss er haben?

    Danke soweit!
    Tobi

  6. #6
    Gast
    Hallo

    Bei 33 KHZ beträgt die Zykluszeit 1 / f = 1 / 33000 = 30,3 us. Bei einem 50% Duty-Cycle muß du das Signal 15,15 us einschalten und 15,15 us ausschalten.

    Dein Timer 0 kann sich bei 10 MHz alle 100 ns um eins erhöhen. Also in 15,15 us ungefähr 151 mal.

    Dein Timer erzeugt beim erreichen von 255 auf 256 einen Overflow Interrupt. Wenn du deinen Timer jetzt mit 255 - 151 = 104 vorlädst, erreichst du alle 15,15 us einen Interrupt..

    Also


    Config Timer0 = Timer , Prescale = 1

    'Define the ISR handler
    On Ovf0 Tim0_isr

    Enable Timer0 ' enable the timer interrupt
    Enable Interrupts 'allow interrupts to occur
    Do
    'your program goes here
    Loop

    'the following code is executed when the timer rolls over
    Tim0_isr:
    Tcnt0 = 104
    Toggle PORTB.1
    Return

    Müsste so stimmen, habe ich aber nicht getestet.

    MFG
    Dieter

  7. #7
    Gast
    Hi

    Ahsoo Jetzt blick' ich das.

    Müsste es nicht
    Config Timer0 = PWM, Prescale = 1
    heißen?

    Wieso muss man eigentlich, wenn man nur Timerinterrupts will
    alle interrupts einschlaten?

    Danke!!
    Tobi

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461
    ...das war dann wohl ich...
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  9. #9
    Gast
    Hallo

    Du willst keine PWM machen., sondern eine feste Frquenz erzeugen.
    Bei PWM erzeugtst du eine feste Frequenz, deren Tastverhältnis du ändern kannst. Du erreichst aber keine 33 KHz damit, daher die Lösung wie oben.

    Mit
    Enable Timer0 ' damit erlaubst du den Timer0 Overflow Interrupt
    Enable Interrupts ' Hiermit erlaubst du generell die Interrupts.

    MFG
    Dieter

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    26
    Beiträge
    1.461
    Hi

    Achso!

    Vielen vielen Dank, das hat mir wirklich richtig weitergeholfen!


    Viele liebe Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •