- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Zeitmessung mit dem Atmega8 - geht das?

  1. #11
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ich melde mich mal wieder zurück.
    Erst mal Danke für die viele Mühe-

    ich hab noch ein paar Fragen zu deinem Code:

    Ich habe das jetzt so interpretiert, dass die einzige Funktion, die immer
    wieder wiederholt wird int main () ist. Und die prüft, ob die flags entsprechend gesetzt wurden und ruft die dazugehörigen Funktionen auf.

    Wie ist es jetzt, wenn ich - banal ausgedrückt - die Taste drücke?
    Wird dann die INTx ISR aufgerufen , die dann erst einmal feststellt "fallende Flanke -> also intx_start merken" und beim zweiten Aufruf "steigende Flanke -> Dauer berechnen und flangs setzen" ausführt?

    Heißt das dann dass der atmega8 also mehrere tasks gleichzeitig (oder so gut wie ?) ausführen kann? Es kann ja sein, dass ich beide tasten gleichzeitig drücken will. Wird int main() während des Abarbeitens einer ISr unterbrochen? Ja oder?.

    Ich weis, Fragen über Fragen, aber ich bin halt neugierig und erst zufrieden mit mir, wenn das Projekt steht

    Nur noch eine allerletzte für diesen post:
    jegliche Zuweisungen...Ports, Pins und flags... geschehen die in c++ hexadezimal? Sry für die vlt dumme Frage, aber ich bin erst dabei C++ zu lernen und hab noch kein brauchbares Tutorial für Einsteiger bezüglich Atmega8 gefunden.
    Vlt kennst du ja eins?

    Also nochmals Danke von mir^^

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Ich habe das jetzt so interpretiert, dass die einzige Funktion, die immer
    wieder wiederholt wird int main () ist. Und die prüft, ob die flags entsprechend gesetzt wurden und ruft die dazugehörigen Funktionen auf.
    Genau...
    in C ist main() eigentlich immer die "Hauptfunktion", d.h. das Programm beginnt immer mit main().

    Die Endlosschleife in main() übernimmt genau die von dir beschriebene Funktion.


    Wie ist es jetzt, wenn ich - banal ausgedrückt - die Taste drücke?
    Wird dann die INTx ISR aufgerufen , die dann erst einmal feststellt "fallende Flanke -> also intx_start merken" und beim zweiten Aufruf "steigende Flanke -> Dauer berechnen und flangs setzen" ausführt?
    Ja, ganz genau so ist es.
    Der Controller ruft - wenn er richtig konfiguriert wurde - die passende ISR automatisch auf, sobald das zugehörige Ereignis eintritt.

    Heißt das dann dass der atmega8 also mehrere tasks gleichzeitig (oder so gut wie ?) ausführen kann? Es kann ja sein, dass ich beide tasten gleichzeitig drücken will. Wird int main() während des Abarbeitens einer ISr unterbrochen? Ja oder?.
    Naja, er kann natürlich nicht wirklich zwei Dinge gleichzeitig tun, aber rein prinzipiell ist das schon so eine Art Multitasking (allerdings recht primitiv).

    Wenn ein Interrupt ausgelöst wird, unterbricht der Controller automatisch das laufende Programm, und springt zur ISR. Sobald er diese abgearbeitet hat, springt er zurück zu der Stelle an der das Programm unterbrochen wurde.

    Dabei ist es übrigens auch möglich daß sich Interrupts gegenseitig unterbrechen.

    Falls du es tatsächlich schaffen solltest die beiden Taster exakt zum gleichen Zeitpunkt zu betätigen ist das auch nicht weiter schlimm, denn der Controller merkt sich von selbst was er noch zu tun hat, und bearbeitet die beiden ISRs dann halt nacheinander.


    Nur noch eine allerletzte für diesen post:
    jegliche Zuweisungen...Ports, Pins und flags... geschehen die in c++ hexadezimal?
    Das nicht, aber eine binäre Zuweisung gibt es in C nicht, und die hexadezimale Schreibweise ist in solchen Fällen sozusagen die nächstbeste Lösung was die Lesbarkeit betrifft (bei dezimalzahlen ist es recht schwer herauszufinden welche Bits denn da nun gesetzt sind und welche nicht, hexadezimal ist das leichter da man die Bits immer schön in 4er Gruppen betrachten kann).


    Ein C Tutorial (C++ macht bei Mikrocontrollern nicht viel Sinn) gibt es unter anderem in unserem Wiki: RN-Wissen C-Tutorial
    So viele Treppen und so wenig Zeit!

  3. #13
    Ich denke ich bin wohl damit, den Code in C/C++ zu schreiben doch etwas überfordert, was bedeutet, ich werde auf Basic und Bascom zurückgreifen.

    Den Sinn, warum die Flags entsprechend zugewiesen werden, hab ich ja mittlerweile raus, nur ist mir immer noch nicht klar, was genau dabei geschieht. (Meine C++ kenntnisse enden leider da, wo ich das erste mal das Wort "Bit" höre )
    Würde es nicht reichen das Ergebnis der ISRs "//kurz oder lang? " statt in flags einfach in zwei Variablen (boolsche) jeweils für INT0 und INT1 zu schreiben?

    Ich hab leider auch nicht so viel Ahnung von Basic, aber nachdem was ich jetzt gesehen habe, ist es doch einfacher als einen AVR mit C zu proggen.
    Gibt es in basic überhaupt funktionen ( In Anlehnung an main())?

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Also natürlich kannst du anstatt der flags auch einzelne Variablen verwenden, der einzige Nachteil dabei ist der höhere Speicherbedarf, was man bei den ersten kleinen Projekten aber getrost vernachlässigen kann.
    So viele Treppen und so wenig Zeit!

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen