Forum: Mikrocontroller und Digitale Elektronik Schnelles Rechtecksignal


von Jendrik (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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.

von Wusel D. (stefanfrings_de)


Lesenswert?

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.

von Jendrik (Gast)


Lesenswert?

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 ?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

> 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.

von Jendrik (Gast)


Lesenswert?

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

von Jendrik (Gast)


Lesenswert?

ich bitte die etwaigen Rechtschreibfehler zu entschuldigen ;)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Jendrik (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Jendrik (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.