Forum: Compiler & IDEs RICHTIGER AUFBAU des MAINs


von mathias giacomuzzi (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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...

von mathias giacomuzzi (Gast)


Lesenswert?

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!!

von Thorsten (Gast)


Lesenswert?

> 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

von mathias giacomuzzi (Gast)


Lesenswert?

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

von mathias giacomuzzi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo hier mal das Main von einem Programm, habe das bis jetzt immer so
gemacht ! wie machts ihr??


mfg mathias

von Alex (Gast)


Lesenswert?

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.

von mathias giacomuzzi (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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 :-)

von Don (Gast)


Lesenswert?

"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
Noch kein Account? Hier anmelden.