Forum: Mikrocontroller und Digitale Elektronik Warum liegen eigentlich die Portfunktionen bei den kleinen Megas so ungünstig?


von Matthias L. (matze88)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Matthias L. (matze88)


Lesenswert?

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.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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.

von Sinusgeek (Gast)


Lesenswert?

> Der Mega2313 hat mit PORTB einen

Der war guuuuuuut......

~

von Benedikt K. (benedikt)


Lesenswert?

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.

von Matthias L. (matze88)


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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

von Matthias L. (matze88)


Lesenswert?

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 :-)

von Christian R. (supachris)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Johnny (Gast)


Lesenswert?

> Übrigens 1MBps bedeutet eine Million Bits pro Sekunde.

Falsch; es bedeutet 1 Mega BYTE pro sekunde.

m = Milli
M = Mega
B = Byte
b = Bit

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Naja, die Unterscheidung zwischen Byte und Bit anhand von Groß- und 
Kleinschreibung ist ... sagen wir mal, umstritten. Und wird nur selten 
konsistent eingehalten.

von Markus F. (5volt) Benutzerseite


Lesenswert?

Mit den Megabit und Megabyte kenne ich das so:

1Mbps = 1 Megabit pro Sekunde
1MBps (mit großem B) = 1 Megabyte pro Sekunde.

von Christian R. (supachris)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Um noch 'ne andere Idee in die Runde zu werfen: einen AT90USBxxx
benutzen.

von Matthias L. (matze88)


Lesenswert?

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