Moin moin aus dem sonnigen Norden ;) Ich habe vor ein sehr schnelles und flexibles Rechtecksignal zu erzeugen.Da ich relativ neu in der µc welt bin habe ich dazu ein paar grundlegende Fragen. Vorab : Ich verwende einen ATxmega128A3 Was will ich machen : Ein rechtecksignal welches eine Periode von 166 µs haben soll davon 50% high 50% low dazu will ich dieses Signal soweit skalierbar haben das ich die Periode um 0,1 µs verlängern will ( nicht verkürzen , 166 µs bleibt die kleinste Periode). Wenn es geht sogar nur um 50 ns. Die 50/50 Aufteilung soll dabei natürlich beibehalten werden. Da kamen mir verschiedene Lösungsmöglichkeiten in den Kopf ; clock/osci auf 32 Mhz 1. Single-slope PWM Generation 2. simpler Counter ( Pin ~82µs HIGH 82µs LOW ) 3. Frequency Waveform Generation Nun meine Fragen dazu; Ist die harte Anforderung mit einem / allen aufgezählten Lösungen möglich? Wenn nein warum ? Das Board mit dem Chip liegt leider noch nicht vor mir, ist aber unterwegs. Daher kann ich das schwierig testen, würde aber dennoch gerne vorher mir ein bischen Zeit ersparen und von euren Erfahrungen profitieren ;) Vlt. gibt es in dieser Hinsicht schon fertige Lösungen (Assambler only)? Freue mich über jeden konstruktiven Beitrage zu diesem Thema gruß Jendrik
@Jendrik (Gast) >Was will ich machen : Ein rechtecksignal welches eine Periode von 166 µs >haben soll davon 50% high 50% low dazu will ich dieses Signal soweit >skalierbar haben das ich die Periode um 0,1 µs verlängern will ( nicht >verkürzen , 166 µs bleibt die kleinste Periode). Wenn es geht sogar nur >um 50 ns. Die 50/50 Aufteilung soll dabei natürlich beibehalten werden. Wenn du 50 ns jeweils auf HIGh und LOW aufteilen willst, sind das 25ns, sprich 40MHz. Damit ist dein ATXmega übertaktet. Bei 100 bzw. 50 ns = 20 MHZ ist alles OK, das kann sogar ein "normaler" AVR. >1. Single-slope PWM Generation Genau, CTC Mode + PWM mit 16 Bit Timer. >2. simpler Counter ( Pin ~82µs HIGH 82µs LOW ) >3. Frequency Waveform Generation >Nun meine Fragen dazu; Ist die harte Anforderung mit einem / allen >aufgezählten Lösungen möglich? Wenn nein warum ? Kenn die X megas nicht so genau. >Vlt. gibt es in dieser Hinsicht schon fertige Lösungen (Assambler only)? Die drei Register setzen sollte nicht das Problem sein.
Die Auflösung von 0,1µS erfordert eine Taktfrequenz von 10Mhz. Um auf 166µS zu kommen, brauchst Du einen Timer mit mehr als 8 Bit. Das ist beides kein problem. Ich empfehle einen ATtiny44. Du hast aber was von ATxmega128A3 bei 32Mhz geschrieben. Ok, man kann auch mit Kanonen auf Spatzen schießen. 32Mhz sind da aber ganz blöd. Takte ihn lieber mit 10Mhz, sonst kommst Du nicht auf ein exaktes 0,1µS Raster.
Stefan Frings schrieb: > 32Mhz sind da aber ganz blöd. Takte ihn lieber mit 10Mhz, sonst kommst > Du nicht auf ein exaktes 0,1µS Raster. Das Raster ist nicht linear , das ist ein kleines Problem daran ;) im Grenzbereich liege ich bei einem Wunschtakt von knapp 33 ns ^^ deswegen die 32 Mhz dieser Takt muss aber nicht erreicht werden. Da ich an die Hardware gebunden bin will ich nur das best mögliche rausholen (deswegen assembler ?!) Dazu noch eine Frage kann ich die interne clock beliebig langsamer und schneller machen ? oder bin ich da an den prescaler gebunden ?
Jendrik schrieb: > die 32 Mhz dieser Takt muss aber nicht erreicht werden. Da ich an die > Hardware gebunden bin will ich nur das best mögliche rausholen (deswegen > assembler ?!) Quatsch. Bei derartigen Zeiten stellt dein Programm sowieso nur noch Werte in Register ein und überlässt es der Hardware die Frequenz zu erzeugen. Und ob die die entsprechenden Werte in Assembler oder in sonst irgendeiner anderen Sprache, die du beherrscht, in die entsprechenden Register bugsierst, ist völlig wurscht.
Falk Brunner schrieb: > Wenn du 50 ns jeweils auf HIGh und LOW aufteilen willst, sind das 25ns, > sprich 40MHz. Damit ist dein ATXmega übertaktet. Für den genannten XMEGA kein Problem.
> Nun meine Fragen dazu; Ist die harte Anforderung mit einem / allen > aufgezählten Lösungen möglich? Wenn nein warum ? 50ns sind handlebar mit 20MHz ohne deine genannten Lösungen, bloss enthält dein ATXmega keinen Teiler für 32->20, das müsste nämlich ein PLL Teiler sein. Takte ihn also mit 20MHz, dann tut es ein TC0/1.
oki dann noch ne kurze Frage zum PWM-Generator bei einer auflösung von 16 Bit bdeutet das 2^16 oder wirklich nur 16 abstufungen ? weil laut datasheet die berechnung der möglichen Frequenz folgendermaßen: f = (f_clk/prescale)/(PER+1) und die berechnung der auflösung: R_res = (log(PER+1)/(log(2)) PER sind die 2-16 Bit wenn ich für PER nun 2-16 einsetze ist der wert natürlich fürn Po daher meine schlußfolgerung das PER von 2-2^16 geht, kann mir das jemand bestätigen? ;) daraus schlußfolgere ich eruneut das ich um mein Rechtecksignal zu skalieren ich die 32 MHz fix setze und nur den PER-Wert verändere um meine gewünschte aufgabe frequenz zu bekommen
Jendrik schrieb: > bei einer auflösung von 16 Bit bdeutet das 2^16 oder wirklich nur 16 > abstufungen ? Du hast 2^16, also 65536 'Stufen' in der PWM. Für einen Frequenzgenerator ist aber CTC günstiger, beim XMega auch noch in Verbindung mit dem PER Register der Timer. Für hohe Frequenzen solltest du dich mal mit der PLL vertraut machen, dann geht nämlich auch mehr als 32 MHz.
Matthias Sch. schrieb: > Für einen > Frequenzgenerator ist aber CTC günstiger, CTC sagt mir nicht sonderlich viel, tschuldigung , wie gesgat bin relativ neu in der µC-Welt
Jendrik schrieb: > CTC sagt mir nicht sonderlich viel, tschuldigung , wie gesgat bin > relativ neu in der µC-Welt Kein Problem. Such einfach mal im Datenblatt zum uC nach diesem Kürzel. Dort ist die Hardware des uC (die du ja ausreizen willst oder musst) genau beschrieben... Mich würde mal interessieren, was dein eigentliches Problem ist. Wofür brauchst du eine solch feine zeitliche Auflösung?
Viel kann ich nicht sagen da es im Rahmen eines Prototyping läuft und ich erstmal nur Erfahrungen sammel. Aber das Signal dient als Trigger-Signal für anderer Hardware damit gewisse Schaltzeiten eingehalten werden
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.