mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM als Taktquelle für IC (AT91SAM7)


Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

gibt es die Möglichkeit, über PWM einen Takt für einen am MC 
angeschlossenen IC zu erzeugen?

Wenn dem so wäre gibt es auch eine Möglichkeit zu erfahren, wie es 
gerade auf dem PWM-Ausgang aussieht (high oder low)?

Danke für jede Hilfe,
Peter

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibt es die Möglichkeit, über PWM einen Takt für einen am MC
>angeschlossenen IC zu erzeugen?

Ja.

>Wenn dem so wäre gibt es auch eine Möglichkeit zu erfahren, wie es
>gerade auf dem PWM-Ausgang aussieht (high oder low)?

Ja.

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, gibt es da was zu beachten?

Hast Du vielleicht ein Beispiel?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aha, gibt es da was zu beachten?

Vieleicht.

>Hast Du vielleicht ein Beispiel?

Nein.

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm. Schade eigentlich.

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja, er hat umfassend und vollständig geantwortet, in Anbetracht der 
von dir gegebenen Informationen :-)

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade den Titel gesehen, also du hast zumindest schonmal die 
Microcontrollerfamilie angegeben, hatte ich eben übersehen, daher kann 
man schon etwas mehr antworten: Den AT91SAM7S128, den ich kenne, hat 
einen PWM-Controller. Den kann man so programmieren, daß er neben dem 
PWM-Ausgang auch einen Interrupt generiert, sodaß du zumindest den 
Anfang einer Periode mitbekommst (und ich glaube man könnte auch auf den 
Flankenwechsel einen Interrupt programmieren). Wenn du zu beliebigen 
Zeitpunkten den Status abfragen willst, wäre es am einfachsten, den 
Ausgang noch auf einen freien Port reinzugeben und den dann einfach 
auszulesen (ich glaube man kann den Port, der als PWM-Function 
geschaltet ist, nicht einlesen). Die Frequenz darf aber nicht zu hoch 
sein, sonst wird das nicht gehen.

Warum brauchst du das denn? Meist sind externe Chips ja per SPI o.ä. 
angeschlossen.

Autor: Helmut S. (helmuts)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Mit PWM kannst du hardwaremäßig nur durch 2^n teilen, wenn du einen Takt 
erzeugen willst. Die PWM wird auf 50% Tastverhältnis eingestellt.

Fclk/2,
Fclk/4
Fclk/8
Fclk/16
...


Vielleicht gibt es ja auch einen uP bei dem man den PWM-Mastertakt mit 
beliebigem Teilerfaktor aus dem Quartztakt erzeugen kann.

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helmut S. schrieb:
> Mit PWM kannst du hardwaremäßig nur durch 2^n teilen, wenn du einen Takt
> erzeugen willst. Die PWM wird auf 50% Tastverhältnis eingestellt.
>
> Fclk/2,
> Fclk/4
> Fclk/8
> Fclk/16
> ...
>
>
> Vielleicht gibt es ja auch einen uP bei dem man den PWM-Mastertakt mit
> beliebigem Teilerfaktor aus dem Quartztakt erzeugen kann.

Ja, geht mit der AT91SAM7-Famílie (siehe Titel des Postings). Diese 
Chips haben ein Capture Compare Register, sodaß man auch viele andere 
beliebige ganzzahlige Teiler hinbekommt.

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist dann 1MHz zu viel, oder geht das noch mit PWM?

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PWM generieren mit 1 MHz ist kein Problem, aber kommt drauf an, was du 
sonst noch machen willst. Wenn du z.B. 55 MHz maximalen internen Takt 
verwendest, dann wird es eng per Interrupt, wegen Latenz und bei 55 
Takten pro PWM-Takt kann man auch nicht allzuviel Code schreiben. Also 
in einer Endlosschleife einen Port-Pin testen, wo das Singal wieder 
reinkommt. Timings vorher anschauen, ob der PIO so schnell ist.

Was willst du denn machen, vielleicht gibt es Alternativen?

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...also eigentlich möchte ich einen "externen" Chip Takten (SID 8580). 
Der benötigt 1MHz. Ich muss nicht die ganze Zeit testen, ob der Pegel 
gerade high oder low ist. Ich brauche das eigentlich nur, wenn ich Daten 
an den Chip schicke...

Benötigen die 1MHz PWM denn auch Rechenpower (wenn man nicht einen 
Interrupt verwendet, der immer was ausführt...). Es soll wirklich nur 
die Taktquelle sein, solange ich nichts "schreibe"...

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der PWM braucht keine Rechenpower, läuft parallel zum Programm in 
Hardware ab. Aber brauchst du wirklich den Status des Taktsignals zu 
messen? Hier ist ein Timing-Diagramm am Ende:

http://www.sidmusic.org/sid/sidtech3.html

für den Schreibzyklus und das steht nichts von einer Maximalzeit. Also 
Chipselect initial auf High, Adress- und Datenleitung auf Ausgang, r/w 
permanent auf low. Dann die Adresse- und Datenleitungen auf Ausgang 
setzen und das zu programmierende Register setzen. Dann Chipselect auf 
low, etwas warten (mindestens ein SID-Takt), chipselect wieder auf high 
und das Register sollte eigentlich beschrieben sein.

Mit einem AT91SAM7 macht aber ein SID als externer Chip meiner Meinung 
nach keinen Sinn, da der bei 55 MHz schnell genug ist, daß man das in 
Software emulieren kann, notfalls auch mit Code aus dem VICE-Projekt 
einen original SID, mit Filter usw., falls du einen Chip-Tune Player 
bauen willst :-) Aber viel interessanter wäre es, selbst so eine 
Soundsynthese zu entwickeln.

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank Buss,

danke für Deine Beiträge.

Ich habs schon mal probiert mit der Emulation im ARM komplett.
Die ausgabe funktioniert auch schon. Allerdings ohne Filter. Selbst ohne 
Filter hat er es nicht geschafft, die Daten mit 44KHz zu erzeugen. Also 
ich bezweifle, dass das geht. Zumal man ja den 6510 auch noch emulieren 
muss. Zugegeben, das ist kein Hexenwerk, aber in der Summe wirds mit 
55MHz schon sehr eng. Also wenn, dann denk ich geht das nur in 100% 
Assembler mit viel Gefühl fürs Optimieren...

MfG
Peter

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

werde jetzt dann gleich mit dem Löten loslegen.

Wäre klasse, wenn noch jemand ein Beispiel hätte, wie ich auf PA0, PA1 
oder PA2 ein PWM mit 1MHz hinbekomme (brauche keine Interrupts. Soll nur 
"schwingen")...

Vielen Dank schon mal,
Peter

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Entwicklungsumgebung hast du denn? Oder ein Dev-Kit mit Linux? Da 
wäre glaube ich ein PWM-Treiber bereits enthalten.

Standlone geht natürlich auch. Dazu bietet Atmel eine große Auswahl an 
fertigen Beispielen. Hast du dir schonmal das Software Package hier 
angesehen?

http://www.atmel.com/dyn/products/tools_card.asp?t...

Dort drin unter packages\basic-pwm-project-at91sam7s-ek-*.zip findes du 
ein fertiges Beispiel für verschiedene Compiler. Brauchst nur noch die 
Frequenz in dem define zu ändern und schon sollte es laufen (ggf. noch 
anpassen an dein Board). Oder die Teile rauskopieren, die für dich 
interessant sind, wenn du schon eine Entwicklungsumgebung hast.

Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich verwende yagarto. Hab das Demo-Projekt schon gesehen. 
Allerdings hab ich es noch nicht auseinandergenommen. Ich habe nur 
gesehen, dass die wohl per Interrupt die PWM ändern, so dass die LED 
"einblendet" und "ausblendet"... Aber wie gesagt. Wenig Zeit und 
ziemlich müde :-)

Also am liebsten wäre mir

<pseudocode>
Watchdog aus
PWM an Pin pa0
PWM 1MHz
PWM start
</pseudocode>

MfG
Peter

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Interrupt-Code brauchst du ja nicht. Ein wenig mehr Eigeninitiave 
musst du aber schon zeigen, sonst kannst du das Projekt ja gleich an 
einen professionellen Entwickler in Auftrag geben :-)

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.