schnelles Pin Toggeling

Gast #1221268
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
Gast #1221283
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
#1221287
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
Gast #1221317
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
Gast #1221320
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
#1221321
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.
Gast #1221334
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)
#1221337
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.
Gast #1221349
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.
Gast #1221350
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
#1221391
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.
#1221401
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
Gast #1221403
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.
#1221475
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
#1221524
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren