www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI Frequenz ARM


Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich steuere mit einem AT91Sam7S einen AD9834 DDS über SPI an um 
verschiedene Signalformen zu erzeugen.
Da ich auch noch USB brauche, läuft der ARM mit 48MHz. Der DDS verträgt 
maximal eine SPI Frequenz von 40Mhz, also habe ich den 2x-Teiler 
gesetzt, SPI läuft also mit 24Mhz.
Leider ist die Ansteuerung des DDS etwa zu langsam, ich müsste also mit 
der SPI Frequenz höher gehen, wenn möglich auf 40Mhz.
Gibt es eine Möglichkeit die SPI Frequenz zu ändern und dabei auch noch 
die richtige Frequenz für USB bereitzustellen?

Autor: Der Albi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht könnte SoftwareSPI helfen...?

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
40MHz Software-SPI? Leider nein...

Autor: Selma (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brauchst du denn wirklich einen so hohen SPI-Clock? Beschreib doch mal 
kurz deine Anwendung.

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich steuere mit einem AT91Sam7S einen AD9834 DDS über SPI an um
verschiedene Signalformen zu erzeugen.
Und je schneller der DDS angesteuert wird desto bessere Signalformen 
kommen am Ende raus.
40MHz SPI Takt wären optimal, im Moment habe ich 24MHz (FCPU/2)

Autor: Selma (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit habe ich das schon verstanden. Der AD9834 kann Sinus und Dreieck 
und die Signalform bestimmt doch der DDS. Ob ich den Baustein via SPI 
jetzt mit 1kHz Takt oder mit 40MHz Takt einstelle, ist doch egal.

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist eben nicht egal da ich einen Sweep machen will.
Ich bin mir sicher dass ich die hohe Frequenz brauche...

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@lukas,
das wird mit dem at91sam7s nicht gehen da sowohl sub takt als auch spi 
takt von MCK abgeleitet sind und die prescaler nur mit vielfachem von 2 
einstellbar sind.

gruss
gerhard

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der LPC214x verfügt über zwei PLLs, wobei die zweite PLL nur für die 
48MHz des USB da sind. Leider läuft das SPI Interface nur mit maximal 
PCLK/8, der SSC mit PCLK/2. Damit wären 30MHz möglich, falls dir das 
etwas hilft.

Gruss,

Dominic

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mindestens weiss ich jetzt das mit dem at91 nicht mehr drinn ist.
Umsteigen auf Phillips lohnt sich im jetzigen Stadium nicht mehr.

Autor: Toni 23 (toni23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist die Hardware, also der AD9834 DDS mit dem AT91Sam7S fest verdrahtet?

Ansonsten schließe den SPI Periperie Baustein über einen seperaten Port 
an den µC an. Setze den MCK meinetwegen wieder auf 48MHz. Programmiere 
einen der Timer auf 40 MHz und erzeuge dir einen Timerinterrupt. In 
diesem Interrupt erzeugst du das SCK Signal für deinen Baustein. Zwei 
andere Ports benutzt du für MOSI und MISO eine dritte Leitung für CS und 
programmierst dir deine SPI Schnittstelle einfach selbst.

So müsste es funktionieren.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst einen 40 MHz-Interrupt implementieren?

Auf einem Prozessor, der mit gerademal 48 MHz läuft?!

Autor: Robert Teufel (robert_teufel_nxp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Toni & Der Albi,

wann habt ihr das letzte mal eine Software geschrieben, die einen 
seriellen Kanal emuliert hat oder einen Timer programmiert??

Ein Timer kann im allgemeinen ganzzahlige Teilerfaktoren der 
Prozessorfrequenz erzeugen, Ausnahmen, ein paar PWM Timer mit PLL. Also 
40 MHz mit einem 48 MHz Takt, das ist echt schwierig!
Ein software SPI, obwohl generell einfach, kann im besten Fall so ca. 
CPU-Takt / 20 erzeugen, dann passiert aber sonst nicht mehr viel im 
System.

Konnte mir das nicht verkneifen :-|

Robert

Autor: Christof Rieger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Zweiten Contoller eisetzen, der mit 40MHZ arbeitet und die Daten 
8-Bit Paralell vom ersten abnimmt bzw. zum ersten ausgibt. (SPI-Paralell 
Wandler)

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder nen cpld ...
der kann dann noch schneller :-)

Autor: Toni 23 (toni23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Robert Teufel

Ich habe letztes Jahr einen I²C Bus auf einem 8051 Derivat nachgebildet, 
Du hast aber mit der Geschwindigkeit vollkommen recht. Ich hatte 12 MHz 
Taktfrequenz zur Verfügung, wobei 1Mhz effektiv galt. (Da ein Befehl 12 
Maschinentakte benötigt) und habe 400kHz realisiert. Das System war 
ausgelastet.

Aber es hat funktioniert. Und vieleicht braucht - luky - in seinem 
System nur einen SPI, dann ist die Auslasstung egal, aber er kann mit 
der Hardware arbeiten und muss nichts neues entwickeln.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keinen zweiten Controller verwenden, sondern ein einfaches 
Schieberegister mit etwas externer Logik, das mit 40 MHz Takt betrieben 
wird und parallel vom ARM mit Daten gefüttert wird. Nach Befüllen des 
Schieberegisters und "Triggern" der externen Logik werden 8 Taktimpulse 
an das Schieberegister gesandt und danach der Takt abgeschaltet.

Das müsste sich mit einem PLD o.ä. realisieren lassen.

Allerdings sollte man auch mal eine Realismusbetrachung anstellen.
Bei 40 MHz SPI-Takt stehen gerade mal 200 nsec für die Übertragung eines 
einzelnen Bytes zur Verfügung. Das auf dem Controller laufende Programm 
muss also schon sehr schnell die entsprechenden Daten heranholen können, 
auch ist zu klären, wie schnell der Controller überhaupt seine I/O-Port 
beschreiben kann. Die hier erforderliche Datenrate von 5 MByte/sec wäre 
beispielsweise mit einem der alten LPC21xx-Modelle gar nicht möglich.

Ein 48-MHz-Controller hat gerade mal 9,6 Taktzyklen pro Byte zur 
Verfügung.

Bei 24 MHz SPI-Takt stehen immerhin 333.- nsec für die Übertragung eines 
Bytes zur Verfügung, der 48-MHz-Controller hat aber auch hier nur 16 
Taktzyklen pro Byte zur Verfügung.

Ein ARM7 benötigt aber mehr als einen Taktzyklus für eine einzelne 
Maschineninstruktion.

Daher erscheint mir die Anforderung ziemlich realitätsfern.

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.