Forum: Mikrocontroller und Digitale Elektronik schnelles Pin Toggeling


von Stefan (Gast)


Lesenswert?

Hallo zusammen,

ich möchte Pine eines Mikrocontrollers möglichst schnell setzen und 
rücksetzten.

Nun habe ich diverse Mikrocontroller, vom 8051(20 mhz + 5 PLL) zum 
AVR(20 Mhz) bis zum CortexM3(10 mhz + 5 PLL) versucht und keiner von 
denen konnte ein PIN mit einer geschwindikeit schneller als 5 MHZ 
bewegen.

Kennt jemand von euch einen Mikrocontroller der dies bis zu 25 Mhz kann? 
(KEIN FPGA o. CPLD)

Vielen Dank

Stefan

von Stefan Kunz (Gast)


Lesenswert?

Guten Tag Stefan

soweit mir bekannt ist, gibt es da keinen Mikrocontroller.
Selbst ein DSP(genaue bezeichnung weiß ich leider nicht mehr)
und auch ein ARM9 der mit 200MHz bzw 100MHz MasterClock
läuft kommt an einem PIN nicht über 5 MHz.
Die Frage wäre auch wofür du einen Pin so schnell toggeln lassen
müßtest. Ansonsten würd ich dir zu einer PWM raten.
Ansonsten bleiben dir wirklich nur die FPGAs und CPLDs.

Mit freundlichen Grüßen
Stefan Kunz

von (prx) A. K. (prx)


Lesenswert?

Ubicom/Parallax SX: http://www.parallax.com/tabid/248/Default.aspx
Ist eine Variante der PIC12 bis 75 MIPS also 37,5MHz am Pin.

Mit 20MHz AVR geht übrigens auch 10MHz, wenn man es richtig anstellt. 
Mit PIC24/dsPIC33 immerhin auch 20MHz.

von Falk B. (falk)


Lesenswert?

@Stefan (Gast)

>Kennt jemand von euch einen Mikrocontroller der dies bis zu 25 Mhz kann?
>(KEIN FPGA o. CPLD)

Und wozu soll das gut sein? SPI macht man mit dem SPI-Modul wenn es 
schnell gehen soll.

MFg
Falk

von Peter D. (peda)


Lesenswert?

Stefan wrote:
> Nun habe ich diverse Mikrocontroller, vom 8051(20 mhz + 5 PLL) zum
> AVR(20 Mhz) bis zum CortexM3(10 mhz + 5 PLL) versucht und keiner von
> denen konnte ein PIN mit einer geschwindikeit schneller als 5 MHZ
> bewegen.

Laut Datenblatt benötigen die Silabs 8051 2 Takte um nen Portpin zu 
togglen:

100MHz / 4 = 25MHz


Peter

von John S. (linux_80)


Lesenswert?

Bei den neueren AVRs hat der Port eine Toggle-Funktion, man schreibt 
eine 1 nach PINx.y dann toggelt der Ausgang automatisch.

von Stefan (Gast)


Lesenswert?

Hallo zusammen,

die Theoretischen ansätze sind gut ABER :
@ A. K
Was kann man bei einem AVR falsch machen? bzw. kannst du mir evt. den 
richtigen Code poste? Ich habe einen ATMEGA8 hier rumfliegen an den ich 
den Code gerne testen würde.

@Peter Dannegger
Genau den habe ich.... Ist leider auch nicht alles wahr :(
12,5 war max(berg ab bei gutem wind ).

@Falk
Ich habe einen 8 Bit breiten Datenbus mit welchem ich die Daten fix 
übertragen muss.


Weiterhin vielen Dank für die Anregungen

von Stefan Kunz (Gast)


Lesenswert?

Wenn du einen Datenbus hast benutzt einen µC mit EBI und DMA.
Der AT91SAM9263 besitzt beides und der Bus kann auf 100MHz laufen.
Damit muss man keine Verrekungen über GPIOs machen, die nicht für
sowas ausgelegt sind.

Der AVR xMega dürfte das auch beherrschen, nur weiß ich leider nicht
in welcher Geschwindigkeit.

MfG
Stefan

von (prx) A. K. (prx)


Lesenswert?

Stefan wrote:

> Was kann man bei einem AVR falsch machen?

Mit SBI/CBI geht nur Clock/4, mit der erwähnten Toggle-Funktion der 
Ports oder OUT geht Clock/2. Immer hübsch ein OUT nach dem anderen, 
abwechselnd gesetzt und gelöscht.

> Ich habe einen ATMEGA8 hier rumfliegen an den ich
> den Code gerne testen würde.

Wobei der die Toggle-Funktion noch nicht beherrscht. Und bei 16MHz am 
Ende ist, also maximal 8MHz zustande bringt.

von Stefan Kunz (Gast)


Lesenswert?

@A.K
Das Problemn ist dann wohl ehr das er das bis zu 8 mal machen muss
da er einen 8 Bit breiten Datenbus hat.

Zu meiner Schande muss ich gestehen das ich diese Funktion
beim AVR nicht kenne. Kann man damit dann gezielt mehrere Pins
ändern? (Vorrausgesetzt, dass sie am selben Port liegen)

von (prx) A. K. (prx)


Lesenswert?

Die 8 Bit einzeln auf den Datenbus zu geben ist ja wohl höherer 
Blödsinn. Ich kann mir allenfalls vorstellen, dass Steuersignale 
bitweise bedient werden wollen.

Wäre sicherlich praktischer, wenn er mal ein bischen mehr über das 
Problem verrät, beispielsweise Details über den Bus.

Wenn du die Toggle-Funktion nicht kennst: Schau mal in Datasheet eines 
Tiny2313 oder Mega88 rein, was passiert wenn man auf PINx schreibt.

von Stefan Kunz (Gast)


Lesenswert?

@ A.K.

Stimmt.
Wobei er ja nun schon preis gegeben hat, dass es sich
um einen 8 Bit breiten Buss handelt, ich vermute da einfach mal
einen normalen Parrallelbus.


Die Datenblätter werd ich mir mal zu Gemüte führen.
Danke für den Hinweis.

von Sebastian (Gast)


Lesenswert?

Ganz Klar, EBI und DMA, oder mindestens EBI. Alles andere ist Pfusch.

8MHz aufm Mega8 gehn auch nur, wenn du genug Flash hast. Wenn du das als 
Schleife schreiben musst brauchst du zwischendrin schon wieder 
rechenzeit. Wenn man dann auch noch Daten schicken muss, muss man die ja 
auch erst laden.

Wenn es aber wirklich nur ums Pin-Togglen geht: Bei manchen Megas kann 
man so weit ich weiß einen Timer auf einen Ausgangspin legen und diesen 
dann bis Clock/2 hochtakten. Dann hat man ganz ohne Prozessorlast 8 bzw. 
16MHz.

Sebastian

von Sebastian (Gast)


Lesenswert?

Gemeint sind natürlich 8 bzw 10MHz. Sorry

von Benedikt K. (benedikt)


Lesenswert?

Oder man nimmt gleich einen Quarzoszillator mit 25MHz, dann spart man 
sich den µC...

von Stefan Kunz (Gast)


Lesenswert?

@Benedikt
Les dir den ganzen Thread durch, es geht nicht ums einfache Bittoggeln.

@Sebastian
Hast vollkommen recht

von Benedikt K. (benedikt)


Lesenswert?

Stefan Kunz wrote:
> @Benedikt
> Les dir den ganzen Thread durch, es geht nicht ums einfache Bittoggeln.

Das kann ich dem Thread nicht eindeutig entnehmen.
Stefan schreibt zwar dass er Daten übertragen möchte, aber dass diese 
von dem µC auch erzeugt werden, davon steht da kein Wort.
Vielleicht sollte er langsam mal den Sinn von dem ganzen Erklären, 
ansonsten bekommt er keine brauchbaren Antworten.

von Peter D. (peda)


Lesenswert?

Stefan wrote:
> @Peter Dannegger
> Genau den habe ich.... Ist leider auch nicht alles wahr :(
> 12,5 war max(berg ab bei gutem wind ).

Warum soll das Datenblatt nicht stimmen?
Hast Du die PLL auch auf 100MHz gesetzt?
Zeig mal den Code.

Bzw. hier mal für 16 Perioden mit 25MHz:
1
        rept 32
2
          cpl P2.0
3
        endm


Peter

von Stefan Kunz (Gast)


Lesenswert?

>Autor: Stefan (Gast)
>Datum: 07.04.2009 13:23
>
>Hallo zusammen,
>
>die Theoretischen ansätze sind gut ABER :
>@ A. K
>Was kann man bei einem AVR falsch machen? bzw. kannst du mir evt. den
>richtigen Code poste? Ich habe einen ATMEGA8 hier rumfliegen an den ich
>den Code gerne testen würde.
>
>@Peter Dannegger
>Genau den habe ich.... Ist leider auch nicht alles wahr :(
>12,5 war max(berg ab bei gutem wind ).
>
>@Falk
>Ich habe einen 8 Bit breiten Datenbus mit welchem ich die Daten fix
>übertragen muss.
>
>
>Weiterhin vielen Dank für die Anregungen

Im letzen Satz schreibt er das er einen 8 Bit Breiten Bus hat.
Natürlich fehlt die Information woher er die Daten zum Übertragen
hat, Aber er hat am Anfang des Threads expliziet nach einem µC gefragt.
Brauchbare Antworten hat er ja schon bekommen.
Ich verweis mal hier auf EBI und DMA. Schneller kann man Pins nicht
toggeln ;-).

Wenn er nicht antwortet scheint er sein Problem ja gelößt zu haben.

von Falk B. (falk)


Lesenswert?

@Stefan (Gast)

>Ich habe einen 8 Bit breiten Datenbus mit welchem ich die Daten fix
>übertragen muss.

Dann nimm einen AVR mit externem Speicherbus, 8515 fällt mir da spontan 
ein. Da kannst du AFAIK 1Byte/3 Takte übertragen, die Generierung der 
Strobes macht die Hardware. Macht bei 20 MHz schlappe 6MB/s++ auf dem 
AVR!
OK, man muss auch noch lesen, das dauert auch ein paar Takte. Aber 2MB/s 
sollten drin sein.

MfG
Falk

von Benedikt K. (benedikt)


Lesenswert?

Falk Brunner wrote:

> Da kannst du AFAIK 1Byte/3 Takte übertragen,

Ja, passt.

> Macht bei 20 MHz schlappe 6MB/s++ auf dem AVR!

Der 8515 ist nur bis 16MHz spezifiziert. Ab 20MHz aufwärts gibt es 
vereinzelt Probleme, aber mit selektierten AVRs und wenn man nicht ganz 
an die Grenzen des Temperaturbereichs geht, sollte es gehen.

> OK, man muss auch noch lesen, das dauert auch ein paar Takte.

Das kann man mittels einer Pseudo DMA Konfiguration umgehen, wenn die 
Daten in einem externen Speicher stecken. So wie hier:
Beitrag "LCD Controller für 640x480 LCD mit mega8515"

> Aber 2MB/s sollten drin sein.

Es sind sogar noch mehr. In obiger Software erreiche ich etwa 2,5MByte/s 
und dabei ist der AVR (@18,432MHz) nur zu etwa 50-60% ausgelastet.

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.