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!
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.