Ne Multitasking kann der AVR nicht, ausser du schreibst dir eine art Betriebsystem
Wenn du eine LED im Sek Takt blinkel lasen willst, dann nimmst du einfach einen Timmer.
Hallo
ich versuche irgendwie mit sub befehlen und call sub einen Struktur zu schaffen wo ich haupt und unterprogramm habe aber es funktioniert nicht.
Ich lese zum Beispiel Analoge Ports ein und möchte aber auch noch eine LED zum leuchten bringen. Sowie ich aber nur irgendwo waitms 1000 einbaue dann steht alles für diesen Zeitraum und das wo doch nur die LED die 1000ms stehen soll.
Wie macht man sowas ich komme nicht klar der µController scheint wohl gar nichts parallel verarbeiten zu können oder wie sehe ich das ?
Ich Suche Codebeispiele zu dem Problem wenn mir jemand erklären könnte wie ich irgendetwas Parallel ablaufen lassen kann wäre es klasse.
Danke und Gruß
Steffen
Ne Multitasking kann der AVR nicht, ausser du schreibst dir eine art Betriebsystem
Wenn du eine LED im Sek Takt blinkel lasen willst, dann nimmst du einfach einen Timmer.
Befehle echt synchron ausführen kann der AVR nicht, da er nur eine Prozessoreinheit hat. Das heist du musst versuchen deinen Code so zu strukturieren, dass der AVR verschiedenste Aufgaben direkt hintereinander ausführt. Das ist dann zwar immer noch nicht echt synchron, kommt aber fast hin...
Wait-Befehle sollte man sowieso nur mit Bedacht einsetzen, da der AVR in dieser Zeit wirklich stillsteht, das heist er macht in dieser Zeit nichts, aber auch gar nichts anderes!
Wenn du feste zeitliche Routinen einbauen willst, also zum Beispiel das LED-blinken, nimmst du Timer mit Interrupts. Dann handelt dein AVR ganz normal dein Programm ab und jedes mal wenn der Timer überlauft springt er aus dem Programm, lässt deine LED aufblinken und springt sofort wieder an die Stelle im Code wo er zuletzt war.
Schau also mal im Wiki unter Timer
ok super danke
ich habe jetzt schon eine Art kompromis gefunden die LED blinken zu lassen ohne das das Hauptprogramm beineinflußt wird. Ich muß sagen das ist ganz schön schwierig ein wenig Multitasking hätte echt nicht geschadet
Vielen Dank für die Tips
Gruß
Steffen
Multitasking ist mit dem AVR auf jeden Fall machbar, aber benötigt natürlich etwas RAM und FLASH. Es stellt sich bei Multitasking immer die Frage, ob der verwendete RAM und FLASH die vereinfachte Programmierung wert ist. Bei komplexen Projekten, die nicht zeitkritisch sind ist Multitasking perfekt einsetzbar.... bei zeitkritischen Sachen ist es oft ein Hinderniss.
Gruß,
SIGINT
aha gibt es da irgendwo Code Beispiele wie ich so etwas bewerkstelligen kann ?
Gruß
Steffen
es laufen verschiedene Bereiche des µC quasi im Multitasking.
Die UART, die TWI, der Timer beispielsweise.
Diese Hardwareeinheiten können Interrupts auslösen, also
Programmunterbrechungen, sprich das aktuelle Programm wird
kurz unterbrochen um das empfangene Zeichen z.B. bei der UART
zu verarbeiten und springt dann in das ursprüngliche Programm
zurück. selbiges gilt auch für die Timer, die dann beispielsweise
LED aus- einschalten können.
Software Multitasking würde bedeuten, das Programme immer Stück
für Stück nacheinander abgearbeitet werden. So macht das der PC
übrigens auch. Auch der kann nicht x Programme parallel auf einem
Prozessor laufen lassen, sondern auch nur je ein Programm nach dem
anderen, nur eben so schnell, das es der Anwender nicht mitbekommt.
Vor den Erfolg haben die Götter den Schweiß gesetzt
aha jetzt wird mir einiges klarer und jetzt verstehe ich auch endlich warum das mit dem TWI immer ohne Probleme funktioniert hat. Mit Timern muss ich mich mal mehr beschäftigen bis jetzt habe ich damit noch gar nichts gemacht obwohl das Programm schon ziemlich groß geworden ist was ich im µC habe.
Danke für die interessanten Erkenntnisse
Gruß
Steffen
Lesezeichen