-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: mega32 pwm

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106

    mega32 pwm

    Anzeige

    hallo
    ich möchte mit einem mega32 melodien über einen piezo oder sowas abspielen (soll eine spielkonsole werden). das hauptprogramm soll natürlich unbehindert davon weiterlaufen. ich hab versucht die frequenz über einen pwm ausgang auszugeben aber ich check einfach nicht wie das funktioniert...
    kann mir vllt mal jemand der ahnung davon hat nen beispielprogramm schreiben das an einem beliebigen pwm ausgang ne 440 Hz schwingung ausgibt oder kann mir zumindest jemand nen link schicken wo der ganze PWM kram schön einfach erklärt wird ??
    grüße
    martin

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    www.roboternetz.de/wissen/index.php/Pwm
    http://www.mikrocontroller.net/artic...itenmodulation
    Ob PWM zum Melodien erzeugen das richtige ist bezweifle ich.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106
    die hab ich beide schon gelesen, ich weiß auch, das pwm eigentlich dazu da ist, ohne DA wandler leistungen zu regeln. aber dass kann man doch auch zum erzeugen von melodien verwenden, dem piezo ist das tastverhältnis natürlich (fast) egal, den interessiert eigentlich nur die frequenz.
    aber wie ich das ganze praktisch realisiere, sagen mir die beiden artikel auch nicht

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    wenn dem Piezo das Tastverhältnis egal ist und es nur auf die Frequenz ankommt, möchtest du den Timer nicht im PWM sondern im CTC- Mode einsetzen. Über den Prescaler bestimmst du einen Frequenzbereich und über den Wert im Compareregister die Frequenz innerhalb des Bereiches.

    Gruß

    Jens

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Bei der PWM bleibt die Frequenz gleich, es ändert sich nur das Tastverhältnis.
    Du musst einen Timer den Prescaler einstellen das du bei Überlauf die tiefste Frequenz erreichst die du willst. Compare Match und CTC einstellen. Die Werte im CompareMatch Register ergeben dann die Tonhöhe. In der ISR dann ein Port toggeln.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106
    mir wird einiges klar^^
    ich probiers mal aus, danke schonmal

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.383
    könnte man die steifen rechteckimpulse nicht noch irgendwie mitm bissl elektronik(spule und kondensator) glätten und das ganze ein wenig sinusfürmiger erscheinen zu lassen ?

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Man kann sicher ein Pi-Filter nachschalten, dem Piezo-Pfeiferl wird es aber ziemlich egal sein.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    26
    Beiträge
    106
    ich hab mich jetzt durch irgendwelche datenblätter gekämpft und versteh trotzdem nichts... dieses programm soll nen 440Hz Ton am OC1A pin ausgeben (atmega32) . funzt aber nicht...
    int main(void) {

    DDRD|=1<<OC1A;
    PORTD|=1<<OC1A;

    TCCR1A = (1<<COM1A1); // Set OC1A when upcounting, clear when downcounting
    TCCR1B = (1<<WGM13); // Phase/Freq-correct PWM, top value = ICR1
    TCCR1B|= (1<<CS10);

    ICR1H= 0x6a;
    ICR1L= 0x88;

    OCR1AH = 0x6a;//440Hz
    OCR1AL = 0x88;

    while(1) tuwas();
    }

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Sollte es nicht eher so gehen:
    Code:
    DDRD=0x20;
    OCR1A=0xfa;
    TCCR1A=(1<<COM1A0);
    TCCR1B=(1<<WGM12)|(1<<CS11);
    In OCR1A kommt dann der Wert des Tons. Bei 8MHz etwa 2f für 440Hz, habe ich aber nicht genau nachgerechnet.

    Eher 2ff.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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