Hallo Leute, vielleicht gibts ja schon jemanden mit ATXMEGA Erfahrung...? Ich verwende momentan ein Gespann aus AT90CAN128 und FPGA. Damit mache ich: Aufgabe1: 5 externe DACs über SPI mit 4MHz Takt synchron ansteuern (d.h. nur ein Taktausgang aber 5 verschiedene Datenleitungen). Grund: Leitungseinsparung (DACs sind galvanisch getrennt) weiters möchte ich: Aufgabe2: 16 PWM-Signale gleichzeitig vermessen (im Bereich bis 15kHz) Aufgabe3: 4 PWM-Signale gleichzeitig generieren und invertiert/nicht invertiert an Push/pull Stufe ausgeben (bis 15kHz). Das sollte ja theoretisch alles auch mit dem XMEGA128A1 alleine gehen. Meine Frage: Hat schon wer ausprobiert, ob die 8 UARTS (im SPI-Modus) oder die 4 SPI-Schnittstellen synchron betrieben werden können? Vielen Dank Gruß Toni
Die SPI könntest du mit viel Glück auch in Software hinkriegen bei 4MHz. Aber ob man dann noch das 15kHz Signal vermessen kann.. Andere Idee: Was ist denn, wenn du eine SPI Einheit als Master laufen lässt und die anderen als Slave. Dann nimmst du die Taktleitung vom Master und schließt sie (neben den DACs auch noch) an die Slaves an. Die Dateneingänge der Slaves bekommen die Datenausgänge der DACs. So kannst du alles mit einem Takt reintakten. Den Takt kannst du statt mit einem SPI Master auch über einen Timer erzeugen.
versteh ich nicht: Wenn nur 1 SPI Master ist, dann können die Slaves zwar den Clock mitbenützen, aber selbst nicht direkt Daten an die DACs raussenden. Stattdessen empfangen sie Daten von den DACs (was nicht geht, denn die AD5441 haben keinen Datenausgang, macht ja auch keinen Sinn?). Wenn die Slaves aber aus anderer Quelle mit den zu schreibenden Daten gefüttert würden, tackern sie am MISO ebendiese wieder raus (verzögert). Das Problem dabei: einerseits die Verzögerung, andererseits die Datenquelle, die ja auch taktsynchron ausgeben muss.... Ist wohl doch nicht so einfach wie gedacht. Vielleicht kann ich die 5 SPI-Übertragungen auch sequentiell starten (genau 1 Takt verzögert)? Dann kann das zuerst gestartete Wort noch 4 Dummy-Bits zu Beginn enthalten, die aus dem Empfangsregister des AD5441 hinten wieder rauspurzeln. Bis der letzte Master sendet, sind alle 5 Datenleitungen synchron. Problem dabei: wie kann ich die weiteren SPI-Master genau 1 Takt später starten?
Toni schrieb: > versteh ich nicht: > > Wenn nur 1 SPI Master ist, dann können die Slaves zwar den Clock > mitbenützen, aber selbst nicht direkt Daten an die DACs raussenden. > Stattdessen empfangen sie Daten von den DACs (was nicht geht, denn die > AD5441 haben keinen Datenausgang, macht ja auch keinen Sinn?). Stimmt, habe im Kopf an ADCs gedacht :-) Aber andersherum geht's doch auch. Stell dir vor die SPI Slaves sind einfach Schieberegister (Parallel In, Serial Out). Du gibst den Takt von extern an die SPI Slaves und die DACs raus. Dann wird das Byte aus den Slaves rausgetaktet und in die DACs rein.
Die SPI-Slaves sind tatsächlich Schieberegister, aber nicht parallel in sondern serial in! Und genau da liegt das Problem, wie bekomme ich einen synchronen seriellen Eingang für jeden Slave?
>Und genau da liegt das Problem, wie bekomme ich einen >synchronen seriellen Eingang für jeden Slave? Da hat jetzt aber jemand ein ziemliches Brett vorm Kopf;) Hat Simon doch oben schon erklärt.
Toni schrieb: > Die SPI-Slaves sind tatsächlich Schieberegister, aber nicht parallel in > sondern serial in! Und genau da liegt das Problem, wie bekomme ich einen > synchronen seriellen Eingang für jeden Slave? Pfff! Slaves können auch senden. Genauer gesagt haben SPI Teilnehmer (egal ob Master oder Slave) ein SI-PO und ein PI-SO Schieberegister. Beim Slave liegt das SI-PO Register hinter dem MOSI Pin. Beim Master am MISO Pin. Das PO-SI Register liegt am MISO Pin beim Slave und am MOSI Pin beim Master. Noch mal: Du baust dir ein SPI Netzwerk auf, wo es keinen Master gibt. Bzw. der Master erzeugt hier NUR den Takt und sendet keine Daten. Das tut er, damit sich die Slaves gegenseitig synchron austauschen. Die SPI Module im ATxmega müssen natürlich auf Slave gestellt werden.
@Holger: sorry, ich habs wohl wirklich noch nicht geschnallt. Nämlich wie ich ein SPI-Slave-(Empfangs)-Schieberegister parallel laden kann?? Wenn das nämlich nicht geht, muss ich seriell meine Daten reinbekommen, damit sie am anderen Ende an die DACs wieder rauspurzeln können. Und da seh ich die Sync-Probleme.
ATXMega: Ein SPI Modul Master die anderen Slaves. Clock an alle Beteiligten legen. Die Ausgänge der Slaves im ATXMega an die DAC Slaves legen. Bevor der Master sendet gibt er erst mal alle Slave Daten in die SPI Register. SS low für die Slaves, Master schreibt in sein SPI Register, und ab gehts! Völlig synchron.
Aha, scheint wohl doch zu gehen: "When configured as a Slave, the SPI interface will remain sleeping with MISO tri-stated as long as the SS pin is driven high. In this state, software may update the contents of the Data register, but the data will not be shifted out by incoming clock pulses on the SCK pin until the SS pin is driven low." Also kann ich doch das Schieberegister parallel laden und dann nach /SS low und Taktanlegen damit rechnen, dass mein Inhalt an die DACs geht..?
Toni schrieb: > Also kann ich doch das Schieberegister parallel laden und dann nach /SS > low und Taktanlegen damit rechnen, dass mein Inhalt an die DACs geht..? Natürlich, Lies dir mal die xmega AppNote von Atmel über das SPI durch. Der SPI Slave bekommt einen Takt und shiftet gleichzeitig Daten über MISO raus und über MOSI rein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.