Hallo Gemeinde, ich brauche Hilfe zum grundlegenden Aufbau/Struktur meines µC-Programmes. Folgendes soll das Programm erledigen: - zeitliche Ansteuerung zweier Relais ( Auf- und Abfahren eines Motors) - Relais AUF soll jede Stunde zwei Sekunden angesteuert werden (Interrupt-gesteuert) - Relais AB soll angesteuert werden, wenn die Gesamtzahl von Aufwärtsfahrten erreicht ist, solang bis das Gerät an einen Endschalter fährt. Dateiaufstruktur: Main.h/c: - Initialisierung - GetStunde() / GetMinute() / GetSekunde() Abfrage volle Stunde abgelaufen (JA: Rufe Funktion Fahre AUF mit x-Sekunden / NEIN nop) - Ist AnzahlFahrten >= GesamtAnzahlFahrten (JA: Rufe Funktion Fahre AB bis Endschalter) Motor.h/c: - Funktion FahreAUF(int AnzahlSekunden) - Funktion FahreAB() Timer.h/c: - Uhrzeithandling - Funktion GetStunde() / GetMinute() / GetSekunde() - Wie würdet ihr die Sache angehen? Bin für jeden konstruktiven Kommentar dankbar. Grüße,
SpäterPan schrieb: > Wie würdet ihr die Sache angehen? Die 30 Zeilen Code würde ich in eine C-Datei stecken. Da ist nichts großartiges dabei, was man für andere Projekte groß wiederverwendbar brauchen könnte. > - Funktion FahreAUF(int AnzahlSekunden) Schon falsch. Das ganze läuft auf einen Timer hinaus, der zb alle 1ms eine ISR aufruft. In der ISR werden entsprechende Zähler hochgezählt und bei bestimmten Zählerständen bzw. je nach Zustand von Flags werden die Relais geschaltet. Einziger Punkt den man überlegen kann: Steckt man alles in die ISR oder macht man sich die Arbeit Jobflags zu benutzen so dass die Hauptschleife in main() die Arbeit macht. Da es aber nur auf das Umschalten von Portpins zu geeigneten Zählerständen rausläuft, würde ich der Einfachheit halber alles in der ISR machen. Wenn du in der µC Programmierung mit der Denkweise kommst: mache das dann warte x Sekunden dann mache das dann hast du schon verloren. Solche Dinge gibt es zwar, sie kommen zb in der Bahndlung von Datenübertragungen vor, in denen die Wartezeit im µs Bereich sich bewegt, aber den Fall hast du nicht. Bei dir gehts um Sekunden und da ist diese Denkweise schon daneben. Deine Denkweise muss lauten: jetzt sind x Zeiteinheiten vergangen, was gibt es da genau jetzt zu tun und was folgt daraus? Zeitsteuerung bedeutet auf einem µC immer den Einsatz eines Timers. So wie bei deiner Armbanduhr. Dein Programm ist wie ein Benutzer, der bei jedem Ticken der Armbanduhr auf das Zifferblatt schaut und sich überlegt, was er tun muss, wenn der Sekundenzeiger genau da steht, wo er steht. Das erledigt er schnell und danach legt er sich wieder auf die faule Haut. Bis zum nächsten Ticken des Sekundenzeigers.
@ SpäterPan (Gast) >Wie würdet ihr die Sache angehen? Bin für jeden konstruktiven Kommentar >dankbar. Wie Karl Heinz schon sagte, das bissel Kram kann man problemlos in einer Datei platzieren. Wesentliche Mittel sind Timer, statemachine und Multitasking, wenn auch nur wenig.
Hallo Leute, vielen Dank für eure Hilfe. Ich hab mir die Artikel die Woche über mal angesehen und gestern Abend gleich mal mit codieren begonnen. Jetzt bin ich schon am Ziel.... danke nochmals und vg, peter
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.