Also ich hab da mal eine Sache die mir sehr viel Kopfzerbrechen bereitet! Denn bis jetzt dachte ich immer das ich das richtig mache: siehe Codesammlung Display Menue für normale LCDs Nämlich folgendes. Ich denke es musste jeder der mit uC Arbeitet schon mal so was machen, 1: Daten auf eine Display darstellen und dann auch in gewissen zeitabständen updaten. so jede sekunde zum Bsp. 2: Tasten Einlesen und auswerte, vielleich 3 oder 4 oder noch mehr, da gibt es ja 2 möglichkeiten oder: ich denke so alle 300-500ms abfragen oder mit einem ODER hardware mässig auf eine externe interrupt und dann nur abfrage wenn einer gedürckt wird. oder wie macht ihr das..? 3: Spannung lesen zum Beispiel alle 250ms, Temperatur lesen zum Beispiel alle 2s von mir aus. ... das sind ja alles nur beispiele!! 4: Und ja dann vielleicht noch das schlimmst irgendwas Messen zum Beispiel über den ADC und dann damit was Regeln, zum Beispiel über eine PWM ==> und das muss ja dementsprechen schnell sein sonst ist der Beste Regel-Algorithmus für die Katz! 5: Evetnuell noch gleichzeitig zu allem auf serielle Daten anwort geben wenn eine Anfrage kommt usw. .... Vieleicht könntet ihr mal eine Paar sachen dazu schreiben wie ihr das alle so macht, vielleich auch mit Code Ausschnitten dazu denn gut Kommentierter Code ist besser als 1000 Worte! g na ja ich denke ihr wiss was isch meine!! Besten Dank im Voraus mfg mathias
Hättest dir die Zeit für das Abtippen des Textes schenken können und lieber auf dieser Seite rumklicken sollen. -> Wiki -> Linksammlung -> avr-gcc Tutorial -> Codesammlung Wenn du dort nicht fündig wirst dann weiß ich auch nicht. Wenn du die eierlegende Wollmilchsau suchst, dann sieht es jedoch schlecht aus...
Wenn du die eierlegende Wollmilchsau suchst, dann sieht es jedoch schlecht aus... ....nein die suche ich nicht!! ich suche beiträge die mir was bringen und der tuts sicher nicht!! und ja das habe ich schon gemacht und ich kenn das alles aber so sei es halt nicht richtig!!
> und ja das habe ich schon gemacht und ich kenn das alles aber so > sei es halt nicht richtig!! Wie meinst du das, so sei es nicht richtig? Wer hat das gesagt bzw. was konkret ist denn nicht richitg? Jedenfalls würde ich das mit Timern und Interrupt machen. Einfach einen Timer so einrichten, daß er z. B. alle 10ms einen Interrupt auslöst. In der ISR zählst du dann Variablen hoch, und zwar eine für jeden auszuführenden Task. Wenn Variable1 z. B. den Wert 25 hat, dann mißt du die Spannung und setzt gleichzeitig diese Variable wieder auf Null. Damit könnte man theroretisch schon viel erschlagen. Die Sache mit dem seriellen Datenwort könnte auch mit Interrupt laufen. Wenn ein Datenwort über die serielle kommt, wird ein Interrupt ausgelöst. In der ISR dann schickst du die notwendige Antwort raus (einfaches schreiben in ein spezielles Register). Wenn die Antwort rausgeschickt wurde, könnte ja wieder ein Interrupt kommen, fals dann noch weiteres geschehen sollte. Gruß Thorsten
ja dann schau dir bitte das mal an auf Codesammlung in bei meinem Displaymenue dort im main habe ich das so gemacht und das steht auch was dazu bitte danke !!! mfg mathias
Hallo hier mal das Main von einem Programm, habe das bis jetzt immer so gemacht ! wie machts ihr?? mfg mathias
So wie es z.B. Peter Dannegger immer predigt: Nur das wichtigste in die ISR, der Rest in die Main-Schleife. Für einfache Testprogramme ist deine Variante zulässig, in einem großen Projekt jedoch nicht empfehlenswert.
Ja das ist ja das wichtigste was ich im main mache: adc wert holen, tasten einlesen, und display updaten und später dann noch regelung mit PWM ==> was soll ich denn davon ins main tun um es besser zu machen? Wie macht ihr bzw. wie macht du sowas Alex? Welche sachen erledigt ihr so in der main schleife ==> wäre es zum Beispiel besser wenn ich den Menü aufruf in der main schleife mache und mir nur in der ISR merke ob und welche Taste gedrückt wurde?? Besten Dank im Voraus ==> ich will ja nicht das ihr mir irgendwelchen Code schreibt! mfg mathias
Im Interrupt eine Statusvariable setzen, welcher der Hauptschleife signalisiert, dass ein Interrupt aufgetreten ist. Diese arbeitet daraufhin den Code, der bei dir in der ISR steht, ab. Bei einer ISR scheint das wenig Sinn zu machen, wenn du jedoch mehrere im Betrieb hast, sorgt das für mehr Betriebssicherheit. So weißt du, dass egal was in der Main-Loop steht, dieses auch abgearbeitet (serielle Arbeitsweise) wird. Sonst kann es passieren, dass bei zu vielen "Ereignissen" der Controller nur noch in den ISR herumgeistert. Es ist jedoch legitim, sehr kritische Sachen in den ISR zu erledigen (Displayausgaben gehören selten dazu :-)
"So wie es z.B. Peter Dannegger immer predigt: Nur das wichtigste in die ISR, der Rest in die Main-Schleife." Das gilt so pauschal nicht. Ich mache es oft so, dass ich zwei IRQ-Level benutze (beim AVR leider nur in Software moeglich) und dann den LCD-Refresh in Low-Level-IRQ (Timer) mache. Die Main ist dann nur fuer das Aendern des Display-Inhaltes zustaendig. Tastatur, Zeit, USART, I2C laufen dann mit hoher Prio. Das laeuft wunderbar und macht vieles einfacher.
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.