0x10 Timer Grundlagen - Polling und Interrupt Modus Hex-Factory https://www.youtube.com/watch?v=40CHmespscA Transkript (automatisch erstellt) 0:00 in diesem video geht es um den timer als peripherie einheit und wozu man diesen braucht das wollen wir uns mal genauer anschauen 0:08 dafür habe ich als beispiel hier mal ein stück code aufgeschrieben und dieser code macht nichts anderes als dass an der led an und ausschaltet ist nur ein 0:17 schreiben das heißt er läuft die ganze zeit in dieser schleife die led doppel funktion schaltet je nachdem ob die led an ist die led aus oder umgekehrt 0:26 und hier haben wir diese dj funktion mit dem parameter 1000 soll heißen das programm pausiert für eine sekunde an dieser stelle und schaltet dann wieder 0:37 die led jetzt wollen wir uns mal die layer funktion genauer anschauen und zwar was macht die die machen nichts anderes als in der schleife befehl 0:46 auszuführen und das ganze macht sich so lange bis die zeit verstrichen ist damit pausieren wir quasi den controller für eine sekunde 0:55 nachdem wir unsere sachen berechnen und schalten dann wieder unsere led an aus jetzt ist das natürlich nicht so ganz geschickt weil unsere controller jetzt 1:05 mit nichts anderem beschäftigt ist außer die led anderen auszuschalten wir können ja während dieser 1 sekunde sehr viele rechenoperationen durchführen andere 1:14 sachen ansteuern irgendwas mit dem controller machen jetzt ja geschickt werden wir nach dem led tafeln einfach einen zähler staaten und dieser uns nach 1:24 einer sekunde benachrichtigt und wir dann wieder die led an oder ausschalten so dass wir eine zwischenzeit viele rechenoperationen der stören kann 1:34 und genau dafür kann man jetzt einen timer gebrauchen dafür habe man hier im blog schallt bild aufgezeichnet von der microcontroller 1:41 zentrale die cpu recheneinheit wie die einzelnen befehle ausführt und an die cpu angebunden drei peripherie einheiten über in grünen gezeichnet den datenbus 1:54 jetzt natürlich kann microcontroller mehrere peripherie einheiten haben angeschlossen sind aber beispielsweise habe ich jetzt nur drei dargestellt das 2:04 einmal der ort ist ein controller die pins anzusteuern jurt eine schnittstelle um mit tausenden zu kommunizieren und letztendlich unten unser thema was ist 2:16 jetzt eine peripherie ein hai und zwar für diese präferieren halten einfach nur dedizierte aufgaben der ich schon erwähnt hat die uhr ist eine 2:25 schnittstelle und dann kann auch nur diese funktionalität von der schnittstelle ausführen und die pekao steuert nun die pins an 2:34 so wie die cdu beispielsweise nur um sein brot aus führt das entlastet einfach die cpu weil das ganze an hardware realisiert ist und das ganze 2:46 gleichzeitig passieren kann dass der große vorteil das heißt werden wir unsere ganze programm cool ausführen von der cdu kann 2:53 beispielsweise der auch irgendwelche pins ansteuern oder joghurt mit der außenwelt kommunizieren und genau das machen wir uns beim timer zunutze wir 3:02 haben wir eben gesagt wir würden gern nachdem wir die led geschalten haben ein counter starten und das ist genau dieser teil 3:08 das funktioniert im prinzip so die cpu setzen befehl absendet den jemand daten muss an diesem thema peripherie einheit und dieses startet dann ein zähler 3:18 der zähler läuft mit einem bestimmten tag den kann man auch noch konfigurieren das kann beispielsweise der halbe cpu takt sein oder ein viertel vom cpu tag 3:27 und dann macht diese tagen nichts anderes als den counter immer wieder hoch zu zählen mit diesem tag sobald er dann einen gewissen wert 3:36 erreicht hat kann man diesen tagen konfigurieren zum beispiel beim wert 1000 benachrichtigte er die cpu über diesen datenbus und diesen kann dann 3:46 wiederum die led schalten so sind wir komplett entlastet und müssen nicht die für diese pause beanspruchen sondern 3:54 beauftragen damit unseren teil jetzt war das ein beispiel mit diesem zähler dem wir konfigurieren und der uns dann benachrichtigt einer sekunde 4:04 der timer hat aber andere volk auch noch andere funktionalitäten da würde ich einfach mal beispielsweise noch zwei nennen und zwar einer wäre die 4:12 pwm erzeugung das ist ja beispielsweise so wir haben ihren rechteck signal und wollen jetzt also dieses recht weg signal ist beispielsweise 5 4:21 mikrosekunden lang auf high und 5 mikrosekunden of low dafür müssen wir hier ein pin dass dieser strich steuern in sand von dem 4:28 mikrokontroller dafür müssen wir den film immer an und ausschalten das kann auch ein teil bei dem die können wir konfigurieren und können dem 4:36 sagen mach genau dies schade den pin alle 5 mikrosekunden heiligen dann wieder los somit können wir die cdu wieder entlasten 4:46 zweites beispiel dazu wäre noch wenn das jetzt nicht einen ausgang mehr wie bei der wm das ist ja in ausgang sondern eingang und wir kriegen es muss jetzt 4:56 keine wm sein sondern einfach ein signal beispielsweise von einer lichtschranke oder von der drehzahl sensor der immer ein impuls kriegt bei einem gewissen 5:06 event und wir wollen das einfach zählen und dass wir dauerhaft diesen bild überwachen müssen und immer schauen was liegt da jetzt an können wir auch 5:15 unseren teil dafür konfigurieren und den können wir beispielsweise sagen hey beiden ansteigenden flanke zählen ein counter wert um 1 zu wir kommen dann 5:24 nach belieben diesem thema dieses counter register abfragen und wissen dann die oft unsere nicht schranke beispielsweise 5:32 oder geschlossen wurde um bei dem beispiel der led zu bleiben schauen wir uns das ganze mal in zeitlichen verhalten an und so einen sogenannten 5:43 politischen bonus sehen wir gleich warum er das zu nennen hier unten habe ich die takte aufgeschrieben ganz wichtig die frequenz 5:50 von der cdu als das bedeutet und welche takt läuft die cdu ist so ein megahertz und der teilnehmer läuft mit einem anderen tag zu zeugen der halben cpu 5:58 frequenz dementsprechend ein megahertz eigentlich ganze zum lächeln als gut weil das bedeutet einen tag dauert eine mikrosekunde sollen wir nach und auch 6:08 brauchen das ganze ist so dargestellt hieß aufgetragenes oberes die cpu und das untere ist der timer viele jeder takt 6:19 ist so ein kästchen dargestellt und innerhalb eines paktes für die cpu ist eine rechenaufgabe durch also hier wird irgendwas oder es muss keine 6:29 rechenaufgabe sein sondern irgendein befehl welt ausgeführt den befehl hatte schon genauer beschrieben und zwar heißt dat einer 6:36 start- und mit diesem befehl sagen will dem teilnahm soll sein counter hoch zellen wie man jetzt sieht das macht er nur alle zwei takte bei der mit der 6:46 halben frequenz läuft spricht wenn der wert und mainz hoch gezählt wird für die cpu 22 befehle aus jetzt haben wir eben festgelegt wir wollen und zur led alle 7:03 eine sekunde ausschalten oder anstalten das bedeutet bei einer frequenz bei einer frequenz von einem megahertz wir müssen ein counter wert von einer 7:15 million erreichen weil eine million mal eine mikrosekunde ergibt genau die sekunde die wir warten wollen warum das ganze jetzt polen wo das heißt 7:24 einfach der tatsache geschuldet dass wir dieser timer get well you funktion den timer fragen wie es denn den zählerstand also der frage was hier gibt mir mal 7:36 wieder da er stand und der timer schreibt dann über das bussystem der cdu-mann zählerstand ist 70.000 3 und das ganze 7:47 machen wir jetzt immer wieder immer mal wieder wenn man es nicht mit jedem tag weil wir wollen ja noch was anderes tun aber ab und zu überprüfen wir mal wie 7:55 groß ist denn der zählerstand und falls einmal größer eine million ist dann wissen wir ja eine sekunde ist vergangen jetzt ist es so wir müssen auf größer 8:06 eine million überprüfen eingestürzte erreichen wir wollen ja wissen wann ist denn gleich 1 millionen weil wir genau nach einer sekunde schalten wollen das 8:14 lässt sich aber quasi nicht realisieren weil dann müssten wir in jedem zweiten tag prüfen wie groß ist denn der stand sonst würden wir hoch zellen des timers 8:24 verpassen das macht aber auch keinen sinn beispielsweise bei einer led da wollen wir ja gar nicht so genau wissen 8:29 das heißt wir prüfung ab und an mal und wenn wir etwas über dem wert sind ist das nicht so schlimm um jetzt wieder auf unser beispiel unser code beispiel 8:40 zurückzukommen wir wissen jetzt dass die zeit von einer sekunde verstrichen ist das haben wir herausgefunden das heißt wir können jetzt wieder unsere 8:47 led doppelfunktion aufrufen und anschließend will mit diesem zähler wert rezepten wieder auf null und das ganze wurde von vorne beginnen wird wird 8:55 wieder unseren timer starten und immer wieder und zum vollen und fragen ist denn der wert und so will sich das ganze wiederholen dass er jetzt schon mal ein 9:06 riesen vorteil im vergleich zu der delay funktion in software da wir jetzt sehr viele taktiken zeit haben um andere dinge zu tun und nur ab 9:16 und zu mal prüfen was uns gar nicht für die einzelnen takt ist völlig okay befragen wir ab und zu ab wie gut es der timer wert und wir können so unsere led 9:25 blinden lassen wenn sie jetzt aber beispielsweise für uns wichtig ist dass wir genau nach einer million wenn account bei einer million ist 9:34 schalten also wir wollen diese kunde ganz genau einhalten weil beispielsweise haben wir ein sicherheitskritisches system dann kommt dieser modus nicht 9:42 mehr zum tragen das funktioniert nicht mehr dafür würden wir einen internet modus benutzen 9:49 ich habe jetzt noch mal zur verdeutlichung hier den quellcode von dem eben genannten polling modus auf skizziert und zwar die funktionen am 9:59 anfang einer statue starten in teil 1 läuft los dass hier durchgeführt dann begeben wir uns in die schleife und prüfen ab ist der welt größter einer 10:09 million sollte das der fall sein led doppeln und den timer neu starten falls nicht überspringen wir den code dann ihren du alles darf machen irgendwelche 10:19 dinge und das ganze wiederholt sich und somit sieht man ja auch schon dass wir immer wieder durch die timer get well i o funktionen laufen und immer wieder mal 10:28 fragen ob der wert größer 1 millionen ist im internet modus läuft das jetzt etwas anders und zwar als erstes für der timer konfiguriert für den passenden 10:39 modus wobei dazu muss ich sagen das muss man auch hier dazu schreiben als in thailand wo ich anfangen immer konfigurieren 10:45 das fehlt hier einfach das heißt wir konfigurieren den teilnahme modus und starten den timer und jetzt ist das besondere hier in der warteschleife wir 10:55 machen einfach irgendwelche dinge aber wir schalten gar nicht die led anderen aus also unser code es hier gar nicht präsent der trick jetzt hier dabei ist 11:05 nämlich das jetzt werden die eine million 600 mal eine million drauf sobald der timer merkt dass er die eine million erreicht hat das haben wir eben 11:17 am anfang konfiguriert wir sagen ihm bei einer million benachrichtige uns ist es jetzt so dass wir den timer abfragen sondern dass er uns einfach bescheid 11:27 gibt den befehl das ende der tuhh auf diesen wert erreicht und was die cdu dann macht ist egal wo ich hier in dem programm bin 11:35 was gerade ausgeführt ist das lied unterbrochen wird angehalten und ich springe quasi hier in eine bestimmte funktion und das ist die teilnahme ist 11:45 dass die interrupts service routine das einfach die routine die jetzt die befehle ausführt die passieren sollen wenn der interop vom tiger zum schlägt 11:56 und was ihr da drin an machen ist ganz einfach das was wir hier drüben im hof gemacht haben wir schalten unsere led an oder aus und starten den timer neu 12:06 sobald jetzt diese funktion verlassen was sieht folgende ist die cdu springt von alleine wieder und an genau an die stelle an der wir 12:15 eben unterbrochen wurde und der ganz normale programm fluss geht weiter die vorteile sind es ganz klar einerseits dass ich genau bei einer million 12:24 benachrichtigt werde also ich habe keine verzögerung und zweiter vorteil ist dass der pole modus ja auch ständig überprüft während der wert gar nicht über einer 12:35 million ist das heißt wir verschenken sozusagen auch noch rechenzeit was in diesem fall nicht der fall ist jetzt ist die frage wenn wir hier so viele 12:45 vorteile haben wir uns überhaupt polling modus verwenden und es ist einfach so dass ich mit diesem internet modus mir probleme einhandeln kann die sehr 12:53 komplex werden können beispiel einfach wäre wir haben jetzt einen timer mit einer internet service routine aber in dem 13:02 komplex am programm habe ich beispielsweise 8 teiler und ich habe noch 14 andere präferieren halten die auch alle internationales routinen 13:09 benutzen das sind auch vom internet service routine und was passiert jetzt in zwei gleichzeitig in ihrer routine springen 13:17 wollen also welche routine und bricht dann die andere das heißt wir müssen diese routine priorisieren wenn wir das überhaupt 13:24 können da merken wir schon direkt das kann ein komplexer werden anderes beispiel wäre wir arbeiten in 13:31 der internetservice routine auf die gleichen daten oder manipulieren die gleichen daten die wie wild schleife auch benutzt da können wir zu daten 13:40 inkonsistenzen kann das ganze führen und da muss man genau wissen was man tut also das kann mitunter umständen sehr komplex werden das thema mit interred 13:49 zum schluss weil man es noch zwei datenblätter anschauen und zwar habe ich hier mal das datenblatt von dem artikel 102 auf dem bildschirm und das sind sehr 13:59 kleiner controller was man hier transit hier gibt es noch 124 byd flash speicher für unseren programmcode und 32 bald internes ram und wenn wir da jetzt 14:09 weiter unten gucken sieht man hier ist in die peripherie einheiten aufgelistet und als allererstes wird beschrieben dass dieser controller ein timer hat und 14:20 zwar ein 16 bit timer 16 bit es jetzt eine interessante grüße auch bezug auf unser beispiel eben weil wir haben ja bis eine million gezählt das würden wir 14:29 mit 16 bit count da gar nicht erreichen das heißt wir müssten diesen timer beispielsweise mit einer millisekunde protec zählen lassen und wenn dann den 14:38 wert 1000 abfragen weiter unten gibt es jetzt hier das blog diagramm und das listet jetzt auf wie internetkontrolle aufgebaut ist was man 14:49 jetzt hier sieht es beispielsweise die cpu wir es eben auch schon auf unserem blog diagramm an der tafel hatten und ich mag ihr das mal hier unten unseren 14:59 timer der wie gesagt über den datenbus an unsere cpu angeschlossen ist wir haben auch nur einen timer und man sieht auch allgemein hat der controller nicht 15:08 vielmehr peripherie einheiten ganz anders sieht das in dem nächsten kontrolle aus denen ich raus gesucht habe und zwar ist das ein sd m 32 7 der 15:19 basiert auf einem arm cortex m 7 und wenn wir da mal etwas leider runterscrollen uns anschauen welche peripherie einheiten es gibt wird man 15:29 hier sehen es gibt hier in diesem controller bis zu 18 timer und es gibt sowohl 16 bit als auch 32 bit timer also man sieht es gibt 15:38 schon wesentlich mehr es ist auch ein größerer controller deswegen schauen wir uns mal das blog diagramm an dass block diagramm ist 15:46 dementsprechend auch komplex wir sehen hier oben links und seinen eigentlichen chor den m 7 und wenn wir jetzt mal runter scrollen 15:53 sieht man hier über die ganzen busse verbunden sind hier unten die teilnehmer hier ist beispielsweise timer neuen time a 10 und auf der anderen seite sind auch 16:02 noch viele teile aufgelistet und was man jetzt einfach sieht ist das in fast jedem controller oder nahezu jedem controller also ein timer mit an bord 16:12 ist sei es ganz kleinen wie demartini oder auch bei wesentlich komplexeren bausteinen