Multitasking im Mikrocontroller

Thomas Finke <finke.thomas@gmx.de>:

Wie wird dieses Multiplexing denn programmtechnisch (interessant wäre
Assembler und C) realisiert? Wie werden die Tasks zeitlich verwaltet?
Weil ja z.B. beim 7-Segement-Multitasking die Segmente alle gleich
lang angesteuert und gleich lang stromlos sein sollten, dass die
Helligkeit einigermaßen stimmt.
Dafür braucht's kein Multitasking, jedenfalls dann nicht, wenn man nicht
gleichzeitig rechnen und anzeigen will. Ein praktisches Beispiel findest
Du hinter
http://www.mystrobl.de/ws/pic/mm47/index.htm genauer gesagt hinter dem
Link http://www.mystrobl.de/ws/pic/mm47/mm47bas.htm

Es geht nur um die beiden Schnipsel "display" und "convert". Das ist
m.E. kurz genug, um ohne weitere Erklärung verständlich zu sein.

Realisiert wird so ein zweistufiger Multiplex, es leuchten immer maximal
zwei Segemente gleichzeitig. Das Ergebnis ist brauchbar, wie man dem
(unretouchierten) Foto sieht.

N.B. In - simulierter - Aktion kann man sich das übrigens auf
http://tech-www.informatik.uni-hamburg.de/applets/hades/webdemos/72-pic/90-mastermind/fast-mastermind-mux.html
ansehen, worauf mich kürzlich ein Bekannter hinwies. Nett, wenn man
Feierabendbasteleien, mit denen man sich vor vielen Jahren mal die Zeit
vertrieben hat, Jahre später auf diese Weise recycled findet.

Wollte man gleichzeitig rechnen und anzeigen, würde man den
Zustandswechsel (quasi die "inner loop") in der (hier stillgelegten)
Interruptroutine erledigen. Das erfordert immer noch keine
Zeitverwaltung.


Ich weiß zwar, dass dies eine Elektronik-Newsgroup ist und keine
über's Programmieren...aber hier wird es sicher einige Programmierer
geben, die sowas schon des Öfteren implementiert haben.
Na ja, eigentlich nur einmal. :)

Mir ist auch bekannt, dass es zig verschiedene Arten von Multitasking
gibt, aber vielleicht kann mir trotzdem jemand kurz auf die Sprünge
helfen, wie ich sowas am einfachsten in nen Controller implementiere.
M.E. genau so: in der "idle loop" werden die einzelnen Segemente in
einem festen Schema angesteuert (in meinem Beispiel also nacheinander
alle vier Anzeigen, dann innerhalb einer Anzeige vier Blöcke a jeweils
zwei Segmente). Natürlich ist das an einige Bedingungen geknüpft
(beispielsweise sollte der Test, so vorhanden, ob die idle-loop
verlassen werden soll, nicht lange und vor allen Dingen nicht variabel
lang dauern), aber Du fragtest ja nach "am einfachsten".


--
Wir danken für die Beachtung aller Sicherheitsbestimmungen
 
Am Wed, 11 Jan 2006 22:53:36 +0100 schrieb Wolfgang Strobl
<news2@mystrobl.de>:

M.E. genau so: in der "idle loop" werden die einzelnen Segemente in
einem festen Schema angesteuert (in meinem Beispiel also nacheinander
alle vier Anzeigen, dann innerhalb einer Anzeige vier Blöcke a jeweils
zwei Segmente). Natürlich ist das an einige Bedingungen geknüpft
Was ist der Vorteil dieses unüblichen Multiplex gegenüber dem normalen
stellenweisen, wo man 7 Seg+DP als 8bit Wort rausschreibt, dann die Stelle
aktiviert usw. ?

--
Martin
 
Martin <martin.lenz@gmx.at>:

Am Wed, 11 Jan 2006 22:53:36 +0100 schrieb Wolfgang Strobl
news2@mystrobl.de>:

M.E. genau so: in der "idle loop" werden die einzelnen Segemente in
einem festen Schema angesteuert (in meinem Beispiel also nacheinander
alle vier Anzeigen, dann innerhalb einer Anzeige vier Blöcke a jeweils
zwei Segmente). Natürlich ist das an einige Bedingungen geknüpft

Was ist der Vorteil dieses unüblichen Multiplex gegenüber dem normalen
stellenweisen, wo man 7 Seg+DP als 8bit Wort rausschreibt, dann die Stelle
aktiviert usw. ?
Probier's aus. :)

Es ist lange her, ich habe die genauen Werte nicht mehr im Kopf und mag
sie nicht nachschlagen, aber grundsätzlich ist es so. Ein PIC-Port kann
nur 20 mA liefern und 25 mA als Senke vertragen (oder umgekehrt),
insgesamt ist man auf ca 100 mA beschränkt. Ein Segment zieht lt.
Datenblatt 30 mA.

Nun überlege, wie es sich auswirkt, wenn man einen Port als gemeinsame
Kathode benutzt und alle acht Segmente über ihre Anoden gleichzeitig
einzuschalteten versucht: statt acht leuchtender Segmente siehst Du gar
nichts leuchten. Schon zwei Segmente sind rechnerisch zu viel, aber wie
man an dem Photo sieht, reicht die so erzielte Gleichmäßigkeit aus.

Natürlich behilft man sich in der Praxis mit separaten
Ansteuertransistoren. Ein Pfiff bei den PIC ist aber die recht robuste
Beschaltung der Pins, die - s.o. - sowohl als Stromquelle als auch als
Senke dienen können*), das wollte ich ausnutzen. Ein Ziel bei dieser
Fingerübung war, mit einem Minimum an Bauteillen auszukommen, vier oder
zwölf weitere Transistoren hätten sich da nicht so gut gemacht.

*) Im Ersatzschaltbild hat man einen FET gegen Plus, einen weiteren
gegen Masse.

--
Wir danken für die Beachtung aller Sicherheitsbestimmungen
 
Thomas Finke schrieb:

Hallo,

es wird ja bei Mikrocontrollerprojekten oft eine Art Multitasking im
Mikrocontroller implementiert ...
Ich hätte da auch noch was beizutragen:

http://www.embedded.com/2000/0009/0009feat4.htm

Gruß

Wolfgang
--
www.ibweinmann.de
 

Welcome to EDABoard.com

Sponsor

Back
Top