Hallo! Ich muss mir grad ein wenig Luft machen, da ich mich grade leicht darüber aufrege: Ich plane einen kleinen Seriell->Parallelwandler und brauche dafür einen 8 Bit Datenport den ich möglichst schnell beschreiben und lesen kann. Nun möchte ich dafür gern einen kleinen AVR verwenden. Der Tiny2313 hat nicht genug Pins, nen Mega88 hätte ich sogar noch als TQFP da, super. Nun folgendendes: Port B hat an 5/6 den Quarz liegen (bei schnellem Uart unverzichtbar) und Port D hat auf 0/1 den Uart. Port C hat nur 6 Pins von denen einer noch der Reset ist... Ich möchte doch nur einen 8 bit IO-Port den ich nutzen kann :-( Muss ich ernsthaft ein uraltes MEGA162 Monster in PDIP verbauen für mein kleines Programm was 8bit + ~8 einzelne Leitungen + Uart + Quarz braucht?!? Selbst wenn ich einen neuen AVR bestellen würde: Es gibt scheinbar kein "kleines" Modell wo man neben UART und Quarz nen 8 bit Port frei hat. Im Endeffekt werde ich wohl den mega88 nehmen und 3 zusätzliche CPU Takte pro IO in Kauf nehmen (in/and/or bzw. beim Ausgeben sogar 4 and/and/or/out), auch wenn das recht massiv bremsen dürfte (Ich wollte mal mit ~1 MBps Uart rumspielen, der von nem FT232BM aus dem PC kommt. Da bleiben @16 MHz 16 Takte zwischen den Bytes) Matthias
>Ich wollte mal mit ~1 MBps Uart rumspielen, >der von nem FT232BM aus dem PC kommt. Da bleiben @16 MHz 16 Takte Übrigens 1MBps bedeutet eine Million Bits pro Sekunde. Da ein übertragenes byte aus Start und (mind. einem) Stoppbit besteht, hast du also 0,1 Megabyte je Sekunde. Also kommt alle zehn und nicht alle eine Mikrosekunde ein Byte an. => 160Takte. Aber mal was anderes: Brauchst du das denn überhaupt? Was willst du mit 100Kilobyte an nem Port?
>Ich möchte doch nur einen 8 bit IO-Port den ich nutzen kann :-(
Hast du doch. Port D steht mit vollen 8 Bit zur Verfügung. Niemand
zwingt dich, den UART zu benutzen.
> Ich plane einen kleinen Seriell->Parallelwandler > Niemand zwingt dich, den UART zu benutzen. Passt irgendwie gut zueinander, oder wird hier ernsthaft der Gebrauch der Software-UART angeraten? > Ich wollte mal mit ~1 MBps Uart rumspielen, der von nem > FT232BM aus dem PC kommt. Da allerdings kommt die Frage auf, warum nicht gleich ein FT245 verwendet werden kann.
Outch, das kommt davon, wenn man in zu frühen Phasen des Projekts (eigentlich eine Übernachtidee die ich jetzt verwirklichen wollte) noch nicht klar genug denkt. Das ein BIT vom Uart 16 CPU Takte braucht und nicht 1 Byte habe ich nicht bedacht. Das macht alles sehr viel unkritischer und schöner, ja da kann ich dann ja sogar auf 2 MBit/s gehen :-) Was ich tun möchte bzw. wozu ich so eine hohe Datenrate brauche? Nicht hauen aber ich möchte versuchen, nen alten Parallelportscanner unter Linux USB-Fit zu machen. Das ganze ist halt mehr oder minder ein Spaßprojekt, aber ich denke es wird auch irgendwann funktionieren. Ich habe nen alten Plustek Parallelportscanner, der wird vom plustek_pp sane backend unter Linux unterstützt und die IO Funktionen sind garnicht mal soooo komplex verwürfelt im Code. Dazu wollte ich mir ein kleines serielles Protokoll überlegen, welches einerseits Bitbanging unterstützt und andererseits "Standardparallelkompatibel" ist um z.B. einen EPP-Parallelport zu emulieren. Da auch das noch viel zu langsam sein wird hätte ich gerne noch Blockroutinen, die z.B. 512 Byte auf einmal senden/empfangen können. Das ganze passt dann insgesamt recht gut auf den Scannertreiber, sodass der mit relativ wenigen Änderungen recht performant (für die Scandaten werden intern schon Funktionen benutzt, die immer ganze Zeilen in einer Schleife einlesen, das kann dann halt der µC direkt selbst machen) für den USB/Seriell/Parallel Adapter umprogrammiert werden kann. Einen FT232BM habe ich seit Jahren hier rumliegen und nie benutzt, deshalb ist mir das Projekt jetzt mal so in den Sinn gekommen. Da der Scanner wirklich noch relativ gut ist und mein Laptop keinen Parallelport hat ist das sogar ein "sinnvolles" Projekt. Ich möchte jetzt hier keinen Riesengroßen Thread erzeugen, durch meine Fehlüberlegung hat sich jetzt auch das Grundproblem wieder erledigt - da ich eh 80 Takte (wir reden nun von 2 MBaud) Zeit habe, um mein EPP Timing zu generieren, einen Counter zu zählen und das ganze in ner Schleife zu machen, sollten nun auch noch 3-5 Takte rausspringen, um die 8 Bit auf 2 Ports aufzuteilen. Also mal vielen Dank für die Korrektur :-) Ich bin wieder glücklich. Matthias Edit: Der Blockmodus hindert mich an der Verwendung eines FT245 oder eines kommerziellen Adapters.
Matthias Larisch wrote: > Ich möchte doch nur einen 8 bit IO-Port den ich nutzen kann :-( Muss ich > ernsthaft ein uraltes MEGA162 Monster in PDIP verbauen für mein kleines > Programm was 8bit + ~8 einzelne Leitungen + Uart + Quarz braucht?!? Ich verstehe das Problem nicht ganz. Der Tiny2313 hat mit PORTB einen kompletten 8-Bit-Port, die UART ist auf PORTD. XTAL1 und XTAL2 ist sowieso separat. An PORTD sind dann sogar noch einige Pins frei.
> Der Mega2313 hat mit PORTB einen
Der war guuuuuuut......
~
Matthias Larisch wrote: > ja da kann ich dann ja sogar auf 2 MBit/s > gehen :-) 2MBit kann der FT232 nicht. Erst ab Teilerfaktor 2 kann er auch nichtganzzahlige Teilerfaktoren. Es gehen also nur 3, 1.5, 1411.765, 1333.333 usw.
Benedikt K. wrote: >2MBit kann der FT232 nicht. AN 232B-05: Note: Divisor = 1 and Divisor = 0 are special cases. A divisor of 0 will give 3 MBaud, and a divisor of 1 will give 2 MBaud. Sub-integer divisors between 0 and 2 are not allowed. (Seite 4) Ist daran was falsch? 3 MBit/s gehen mit nem AVR garnicht wie ich das sehe (da bräuchte man irgendwas über 20 MHz als Quarz - da ich eh nur Bauteile nutzen will die ich hier hab bin ich sowieso auf 16 MHz festgelegt) Nurnoch kurz @ linuxgeek: Der Tiny2313 hat leider ziemlich exakt 2 Pins zu wenig. Viele Grüße, Matthias
Matthias Larisch wrote: > Benedikt K. wrote: >>2MBit kann der FT232 nicht. > > AN 232B-05: > Note: Divisor = 1 and Divisor = 0 are special cases. A divisor of 0 will > give 3 MBaud, and a divisor > of 1 will give 2 MBaud. Sub-integer divisors between 0 and 2 are not > allowed. Interessant. Das sollten die vielleicht auch mal im Datenblatt erwähnen, da steht nämlich nur folgendes: The FT232R supports all standard baud rates and non-standard baud rates from 300 Baud up to 3 Megabaud. Achievable non-standard baud rates are calculated as follows - Baud Rate = 3000000 / (n + x) where n can be any integer between 2 and 16,384 ( = 214 ) and x can be a sub-integer of the value 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, or 0.875. When n = 1, x = 0, i.e. baud rate divisors with values between 1 and 2 are not possible. Dem Datenblatt nach sind 2MBit also nicht möglich, der AppNote nach schon...
Das ist in der Tat sehr interessant. Kurzes Googeln ergibt, dass es wohl mit 2 MBaud/s funktioniert (habe einige kurze Beiträge überflogen, in denen der FTDI mit 2 MBaud betrieben wird. Ich werde meine Platine in ner Stunde fertig haben, für nen Schnell-Test was nun funktioniert reichts dann ja schon. Die endgültige Software wird wohl ein wenig auf sich warten lassen :-)
Warum nicht gleich einen Cypress FX2 USB Controller? Da kannst du spielend einfach ein sehr schnelles Parallel-Interface basteln. Und der schafft gleich USB High Speed. Für einen Scanner optimal.
Dann muss aber auch ein USB-Devicetreiber entwickelt werden, sofern nicht die CDC-Geräteklasse mit der Firmware auf dem FX2 implementiert werden. Das macht die Angelegenheit erheblich aufwendiger.
> Übrigens 1MBps bedeutet eine Million Bits pro Sekunde.
Falsch; es bedeutet 1 Mega BYTE pro sekunde.
m = Milli
M = Mega
B = Byte
b = Bit
Naja, die Unterscheidung zwischen Byte und Bit anhand von Groß- und Kleinschreibung ist ... sagen wir mal, umstritten. Und wird nur selten konsistent eingehalten.
Mit den Megabit und Megabyte kenne ich das so: 1Mbps = 1 Megabit pro Sekunde 1MBps (mit großem B) = 1 Megabyte pro Sekunde.
Rufus t. Firefly wrote: > Dann muss aber auch ein USB-Devicetreiber entwickelt werden, sofern > nicht die CDC-Geräteklasse mit der Firmware auf dem FX2 implementiert > werden. > > Das macht die Angelegenheit erheblich aufwendiger. Quatsch. Von Cypress gibts den CyUSB Treiber dazu, damit lassen sich direkt die Endpoints ansprechen. Und die LibUSB lässt sich genauso verwenden. Firmware-Beispiele hat Cypress auch dabei, auf dem FX2 kommen die Daten dann in einem Endpoint Buffer an, auf den man direkt zugreifen kann. Dann muss man sie nur noch richtig am parallelen Port ausgeben. Das Framework für den FX2 ist komplett fertig als Lib dabei, das kümmert sich um alle USB Angelegenheiten, Enumeration usw. damit hat man gar nix zu tun.
Um noch 'ne andere Idee in die Runde zu werfen: einen AT90USBxxx benutzen.
ruhig ruhig :-) Das sind ja alles tolle Ideen, mir bringen die jedoch nichts (mehr). Naja, vielleicht kanns irgendwer anders mal gebrauchen... Meine Platine liegt jetzt jedenfalls vor mir und geht sogleich in die (manuelle) Bestückung :-) Ich bin unglaublich erstaunt, um wieviel besser die Platinenresultate mit frischem Markenmaterial statt mit altem Billigmaterial sind: gut gegen völlig unbrauchbar. Dabei liegts hauptsächlich an der Fotoschicht denke ich. Ich melde mich das nächste mal, wenn das Gerät fertig ist. Vielleicht auch mit einer kleinen Vorstellung in der Codesammlung oder so. Der Nachbau gestaltet sich ja bei so einem Projekt recht einfach. Viele Grüße, Matthias
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.