www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pwm erzeugen


Autor: vianney (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
ich hoffe ihr könnt mir helefen,
ich versuche bei avr mit ATMEGA88 2 pwm-signlae für ein transistor zu 
erzeugen, die gleichzeitig laufen werden. Die aufgabe besteht dadrin 2 
gleichmäßige pwm-signale (gleiche frequenz) zu erzeugen, wobei ein 
signal eigentlich die verschobene version des anderem ist, d.h wenn das 
obene bei 1 ist muss das untere bai 0 sein usw.
wie kann ich es denn machen?

Autor: J. M. (Firma: OCL) (lorcan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verschoben oder invertiert?

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier im AVR-Tutorial ist das ausführlich für den ATMega8 beschrieben
(PWM Artikel).

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
flip-flop kaskade

Edit:
(Wenns nur wenige Takte verschoben sein soll)
oder schieberegister

Edit:
Ach ne vergiss es, da braucht man ja den Timer-Takt

Autor: vianney (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
nicht invertiert sonder verschoben, damit will ich einen transitor 
versorgen, 2 signale wo wenn das erst bei 1 ist, ist das zweite bei 0 so 
sollte das aussehen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn sich der Pegel des einen Signals immer exakt zur gleichen Zeit 
ändert wie der Pegel des anderen Signals und das auch immer der Fall ist 
und dann auch noch immer entgegengesetzt (A=1->B=0, A=0->B=1), dann ist 
das invertiert.
Verschoben ist dann da eine etwas sehr unglückliche Ausdrucksweise, weil 
das ja nur für einen ganz speziellen Fall richtig wäre.

Außerdem: .doc ist kein schönes Format für Dateianhänge :-(

Autor: vianney (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich verstehe schon was man mit invertieren meine hab ich auch probiere 
aber das ist net was ich brauche, weill mit invertierend ist genau das 
gleich aber nur die 0-achse ist umgedreht. ich brauch aber 2 gleiche 
signalen, wo das andere einfach 1 nach rechts bzw nach links verschoben 
ist

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

Bewertung
0 lesenswert
nicht lesenswert
Welche Zeitvorgaben hast du beim Umschalten? Welche Zeitdauer kannst du 
dir erlauben wenn A wieder auf 0 geht und B auf 1 gehen muss.


Mit dem Timer 1, den beiden Compare Match und dem Overflow Interrupt 
kann man das schon machen. Mann muss sich nur die Register entsprechend 
einstellen und in den Compare Match ISR die Pins selbst bedienen.



    +-------------+          Signal A
    |             |
    |             |
    |             +------------------------------



                  +------------+       Signal B
                  |            |
                  |            |
     -------------+            +-----------------


     ^            ^            ^
     |            |            |
     |            |        Compare Match B, schaltet B Signal auf 0
     |            |
     |         Compare Match A, schaltet A auf 0 und B auf 1
     |
  Overflow Interrupt, schaltet A auf 1


Wobei: Signal A könnte auch die Hardware noch ganz alleine erzeugen. 
Aber für B musst du "händisch" den Pin umschalten.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, du musst zwischen invertiertem PWM-Mode und invertiertem 
PWM-Registerinhalt (für den Dutycycle) unterscheiden.

Was du beschreibst, ist der invertierte PWM-Mode, der hier nicht passt.
Da wird quasi die Grundlinie invertiert.
Was die anderen meinen, ist den PWM-Registerwert zu invertieren.
Hier erhälst du das gewünschte Ergebnis.

Aber vielleicht lässt sich das ja auch alles aus einem Timer und etwas 
Logik erzeugen. Vermutlich sind zwei Timer aber einfacher und flexibler.

Autor: vianney (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke
der zeitdauer darf nicht größer asl 10us sein.
ich probier mal danke

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tschuldigung. Ein Timer reicht natürlich, ich meinte 1 oder 2 PWM 
Ausgänge.
Evtl. lässt es sich mit einem Ausgang machen, den man per Logik 
invertiert. Zwei Ausgänge sind aber vermutlich einfacher und flexibler.

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

Bewertung
0 lesenswert
nicht lesenswert
vianney schrieb:
> danke
> der zeitdauer darf nicht größer asl 10us sein.

Kommt natürlich auf die Taktfrequenz an. Aber 10µs sind schon eine Menge 
Holz, das sollte möglich sein.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das signal ist nicht invertiert,

die high-low-flanke des 2. Signals stimmt nicht mit der low-high-flanke 
des ersten überein.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man könnte versuchen den 2.Timer im ersten compare match des 1. Timers 
zu starten


also im Interupt:
timercounter zurücksetzen,
timer starten.
Interupt deaktivieren, da beide timer von nun korrekt laufen.

wenn du mit der geringen Latenz von einigen Takten leben kannst.
wenn nicht, könntest du schauen, wie viele Takte die ISR zum aktivieren 
des 2. Timers braucht und den CompareB des ersten Timer entsprechend vor 
den Compare A feuern lassen und in dessen ISR den 2. Timer starten.

Autor: vianney (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin aber net wo weiter gegegangen, weil mir fällt es schwer aus, dan 
ganze sowearemäßig umzustellen. kann mir jdn herlfen?

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

Bewertung
0 lesenswert
nicht lesenswert
vianney schrieb:
> ich bin aber net wo weiter gegegangen, weil mir fällt es schwer aus, dan
> ganze sowearemäßig umzustellen. kann mir jdn herlfen?

Das ist jetzt aber nicht dein Ernst. Oder?

Das sind 3 Interrupt Funktionen mit jeweils einem 3 Zeiler, der 
lediglich aus Bit setzen/löschen an einem Port besteht. Und wie 
geschaltet werden muss, habe ich dir in der 'Grafik' sogar dazu 
geschrieben.

Dazu noch die Berechnung der Compare Werte in main und das wars.

Der Schwierigkeitsgrad deiner Aufgabenstellung passt nicht zu deinem 
Wissen. Und damit bin ich raus. Ich helfe nämlich nicht länger mit, 
jemanden einen Abschluss für irgendeinen Kurs zu verschaffen, für den er 
nicht im entferntesten qualifiziert ist.
Wenn du das alles hobbymässig brauchst, dann machs so wie alle anderen, 
und fange vorne mit lernen an.
Wenn du das beruflich brauchst, dann bezahle jemanden der das gelernt 
hat.

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.