Eine Frage auf die ich immer wieder stoße...

Gast #58249
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!
Gast #58250
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.
Gast #58251
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
Gast #58252
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.