mikrocontroller.net

Forum: Compiler & IDEs RICHTIGER AUFBAU des MAINs


Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mathias giacomuzzi (Gast)
Datum:
Angehängte Dateien:

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


mfg mathias

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Don (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.