Forum: Mikrocontroller und Digitale Elektronik Maximale Übertragungsrate


von LC-HC (Gast)


Lesenswert?

HI, ich hab wieder mal eine Frage zum M16C/62A.
Im Moment sende ich Daten mit 500kHz an die serielle Schnittstelle
S I/O 3. Allerdings benötige ich eine Bandbreite von 1Mhz. mit 500kHz
klappts, mit 1Mhz kommt nur müll raus. Mal kurz zur Anwendung:
Über den S I/O 3 Empfange ich wie gesagt mit 500kHz 252 Bytes, die ich
mir nach dem 252ten Byte per printf() anzeigen lasse. Dies klappt auch
soweit, jedoch liefern mir mit 1Mhz übertragene Daten unzulässige
Ausgaben. Mich interressiert jetzt eigentlich nur, ob es eine
Einschränkung in der Taktfrequenz gibt. Ich kann wie immer dazu nichts
finden.

mfg und danke,

LC

von Wolfram (Gast)


Lesenswert?

Fehlen da nicht ein paar Angaben?
z.B. Taktrate der MCU, Programmcode der Empfangsroutine etc.
hast du schonmal dran gedacht das die Zeichen schneller reinkommen,
als
du sie abholst?

von LC-HC (Gast)


Lesenswert?

Erstmal danke für die Antwort. Die CPU läuft mit 10 Mhz, das solte
schnell genug sein, um aus dem S I/O 3 Register BYytes lesen zu können,
die mit 1Mhz ankommen. Die Empfangsroutine ist eine ganz gewöhnlich
ISR,
die jedes Byte in einem incrementierten Array speichert. Mir geht´s
eigentlich nur um eine eventuelle Beschränkung der Taktrate von der ich
nichts finden kann, die aber eine Erklärung darstellen würde.

mfg,

LC

von Wolfram (Gast)


Lesenswert?

hast du schonmal in Assembler nachgerechnet ob das wirklich klappt?
Ein schneller Test wäre auch am Anfang der ISR Portpin setzen und am
Ende löschen und die Zeiten am Oszi anschauen. Oder am Ende der ISR
nachschauen ob schon wieder Daten in der Schnittstelle sind-> dann
wirds knapp.

von Christoph W. (christoph)


Lesenswert?

Schau mal genau nach, wieviele Takte ein ISR-Aufruf benötigt. Bei einem
AVR zum Beispiel dauert ein Interruptaufruf 4 Takte, dazu noch reti von
3 (villeicht sogar 4). Dazu noch ein paar Takte, die du in der ISR
selbst "verbrätst" und du kommst schnell über die 10 dir zur
Verfügung stehenden.
Versuche (vor allem bei solchen Datenraten) das Auslesen sequenziell in
einer Routine ohne ISRs zu machen, weil das einfach zu viele
Ressourcen ins nichts verbrät.

von Michael (Gast)


Lesenswert?

Verwende doch bitte den DMAC. Alles andere ist zwecklos.

von arc (Gast)


Lesenswert?

Wenn sich nichts geändert haben sollte (altes Datenblatt von 2000), gilt
bei den asynchronen Seriellen: interner Takt /1, /8 oder /32 danach
durch Baudrate und zum Schluss durch 16 (/2 synchron). Das hieße für
10MHz maximal 625kbit/s (62500 Interrupts) asynchron und 5Mbit/s
(625000 Interrupts) synchron

von LC-HC (Gast)


Lesenswert?

Hey, großes Danke für die vielen Anregungen. Mach jetzt Feierabend...
;)
Den Tip mit DMAC hab ich auch g´rade bekommen. Das Setzen des Portpins
hatte ich auch schon getan, jedoch mit den erwarteten Wert am Oszi,
aber trotzdem ideal zum debuggen. Morgen früh wird nochmal getestet.

Thx, cya, mfg,

LC

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.