Forum: Mikrocontroller und Digitale Elektronik Eine Frage auf die ich immer wieder stoße...


von eXc (Gast)


Lesenswert?

Hi Leute,

ich bin absoluter Anfänger was mC betrifft. Bis jetzt habe ich alles
mit haufenweise 74XX oder 4XXX aufgebaut. Beim Lernen von mC Technik,
(lerne gerade PICs) kommt mir immer wieder die selbe Frage: was mache
ich bei Zeitkritsichen Anwendungen die "parallel" ausgeführt werden
müssen?! Bsp. An irgentwelchen Eingängen liegt eine ständige serielle
Datenübertragung an mit z.B. 9600 bps. Das heißt ja, daß alle 104 µS
ein neues Bit ankommt und ich den Eingang dann alle 104 µS abfragen
muss. Bis dahin ja kein Problem. Was ist aber, wenn ich Gleichzeitig
auf der anderen Seite immer ein anderes Signal mit 1Mhz (also jede 1
µS) sende?! Dann müsste ich ja, wenn ich eine Endlosschleife habe die
jede µS etwas sendet einen Zähler oder einen Timer haben der nach 104µS
den Eingang abfragt. Und wenn ich für diese Abfrage meine laufende
Schleife unterbreche, dann stimmen ja die Zeiten nicht mehr, weil der
Prozessor ja auch ein bisschen Zeit braucht um einen Algorithmus
abzuarbeiten der den Eingang liest und auswertet?! Und je nach Zustand
des Eingangs könnte dieses Unterprogramm ja länger oder kürzer dauern,
also nicht kalkuliertbar! Und was ist jetzt, wenn mein mC zusätzlich zu
dem Empfangen und senden mit unterschiedlichen Frequenzen auch noch auf
Interrupts reagieren soll, die z.B. durch das Drücken einer Taste von
aussen eintreten? Irgentwie verstehe ich nciht, wie man bei solchen
Aufgaben "synchron" bleiben kann?!

Ich hoffe Ihr versteht was ich meine. Wahrscheinlich ist das für euch
"Profis" eine leichte Frage aber ich habe da ein paar
Verständnisprobleme!

Thx für Hilfe!

von crazy horse (Gast)


Lesenswert?

Dafür gibts mehrere Lösungen, entweder zusätzliche Hardware auf dem Chip
(z.B. eine UART) oder affenschnellen Prozessoren, die kaum zus.
Hardware on Chip haben, alles per Software erledigen, dafür aber sehr
kleine Befehlsausführungszeiten haben.
Mit einem einfach gestrickten MC ohne besonders dolle Rechenleistung
steht man irgendwann vor unlösbaren Problemen. Eine Weile hilft noch
sehr geschickte Programmierung, irgendwo ist aber das Ende erreicht.

von Andreas Jäger (Gast)


Lesenswert?

Viele PICs haben einen USART. Damit kann sehr einfach eine serielle
Datenübertragung aufgebaut werden. Ein Flag/Interrup meldet dann, wenn
ein komplettes Byte empfangen bzw. gesendet wurde.

Soll die Sende-Geschwindigkeit anders sein, als die
Empfangs-Geschwindigkeit, benötigt man entweder zwei USARTs (haben auch
einige PICs) oder man nimmt einen externen USART-Baustein oder man
implementiert entweder das Senden oder das Empfangen softwaremäßig.

MfG
Andreas Jäger

von Gunter (Gast)


Lesenswert?

Hi,

prinzipell hast Du Recht!
Ein Controller arbeitet das Programm sequentiell ab und wenn Du, wie
beschrieben,
eine Schleife programmierst bekommst Du genau diese Effekte.

Deshalb haben die uC verschiedene Hardware integriert:
Timer/Counter, UART, AD-Wandler, I²C usw.
DIESE können aber sehr wohl parallel arbeiten.

z.B. "meldet" sich der UART erst, wenn er ein komplettes Byte
empfangen hat.
In der Zwischenzeit kann der uC anderes tun (bei manchen uCs, z.B. dem
NEC V25,
kann man den UART so einstellen, daß er einen ganzen Puffer-Bereich
empfängt oder
sendet bevor er sich "meldet").

Ähnlich ist es bei I²C: noch während ein Byte gesendet wird, kannst Du
das nächste
-wenn der uC mal kurz Zeit hat- schon mal dort ablegen.

D.h. für alle parallelen Aktionen brauchst Du interne oder externe
Hardware, die
asynchron bedient werden kann.
Dadurch entspannt sich die Situation i.d.R. soweit, daß genug Zeit
bleibt auch Port-
Pins zu bedienen. Da ist dann die Frage wie zeitkritisch sind Deine
Anforderungen.
Kannst Du mit +/- einigen uS leben? Wenn nicht: s.o.: Hardware!

hth
Gunter

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.