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
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
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.
@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
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
Bei den neueren AVRs hat der Port eine Toggle-Funktion, man schreibt eine 1 nach PINx.y dann toggelt der Ausgang automatisch.
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
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
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.
@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)
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.
@ 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.
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
Oder man nimmt gleich einen Quarzoszillator mit 25MHz, dann spart man sich den µC...
@Benedikt Les dir den ganzen Thread durch, es geht nicht ums einfache Bittoggeln. @Sebastian Hast vollkommen recht
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.
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
>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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.