Hallo BurningBen!
Ich kenne den Asuro gar nicht, aber wie kann im schlafendem µC Programm laufen?
MfG
warum kannst du während der motorfahrt denn die Taster nicht abfragen?
Benutzt du Sleep um die 15 Sekunden zu "verbraten"?
Du könntest mit nem Timer am Anfang die Motoren starten, und dann nach 15sek. wieder ausschalten. Dazwischen kann doch dein Programm machen was es/du will(st)
Hallo BurningBen!
Ich kenne den Asuro gar nicht, aber wie kann im schlafendem µC Programm laufen?
MfG
Nein, er meint das anders.
Dass der Bot fährt, entscheidet ja letztendlich nur ein Bit in einem Port. D.h. Ich setze das Bit und programmiere einen Timer so, dass er das Bit nach 15 Sekunden wieder löscht. (Der Timer macht das im Hintergrund mithilfe von Interrupts.)
Danach kann ich also ins Hauptprogramm gehen und machen, was ich möchte:
- Taster abfragen
- ne Melodie spielen
- Pi berechnen
- etc.
Die Taster könnte man darüberhinaus auch komplett auf Interrupts auslagern, so dass ein Timer sich um das fahren kümmert, ein Interrupt um die Tasten und mein Hauptprogramm dreht Däumchen. Und schon haben wir drei "Tasks". Während der Timer und der Interrupt kooperativ laufen, läuft das Hauptprogramm preemptiv.
Ja das geht, aber für mich ist deine Beschreibung nicht ganz klar. Angenommen wir haben nur ein Timer der in regelmässigen Abständen beim Überlauf ein Interrupt auslöst.
Vor dem Starten des Timers wird der Portbit für die Motoren gesetzt. Dann kann man bei jedem Interrupt in ISR die Tasten abfragen und die Interrupts zählen. Wenn bestimmte Anzahl von interrupts gezählt wurde, wird der Portbit für Motoren gelöscht. Das Programm wird nur für Ausfürungszeit der ISR unterbrochen. So habe ich das (hoffentlich richtig) verstanden.
MfG
Hi @All,
ja natürlitsch, logitsch!
Matze 3 hat halt gefragt ob da was mit MT geht und dementsprechend hab ich dann geantwortet. State Machines, Timer udgl. geht natürlich auch immer, kann aber sehr unübersichtlich werden bei komplexen Aufgaben.
O.
Hmmm, und was ist mit dem ADC? Der wandelt bei mir Daten - während einiges andere "im Programm" abläuft. Oder sehe ich das falsch? Parallel dazu "wartet" der PCI und der extINT (bei mir) ob sich in der Welt draussen was tut . . . . und die kann ich doch, mal etwas pingelig gesprochen, doch auch nicht als Timer ansehen. Oder sehe ich das falsch?Zitat von PICture
Ciao sagt der JoeamBerg
Hallo oberallgeier!
Natürlich kann auch der ADC, wie ein Timer, paralell zum Programm laufen. Und der "interrupt on change" kann sogar den Prozessor vom Schlaf aufwecken. Ich habe aber leider nicht an alles gedacht, wenn ich schnell die Antwort geschrieben habe.
MfG
Das siehst Du richtig.
Alle Hardware-Aufgaben laufen parallel zum µC. Sprich Timer/PWM/RTC, Interrupts, ADC, TWI/I2C/USI, JTAG, UART/USART/RS232, SPI, Watchdog, EEPROM...
Ich unterbrech euch nur ungern bei den ganzen Interrupts.. Aber kann mir einer sagen wie ich den internen Timer vom Atmega auslesen kann? Wisst ihr was ich meine? Die C-Control Dinger haben so ne schöne Timer Variable die ich nutzen kann um mir halt nen eigenen Sekunden Timer zu basteln und mein Programm weiter laufen zu lassen.. da der interne timer vom controller ja eh immer läuft..
so zb in Basic
brauch halt die den Timer vom Atmega und vllt ne kleine angabe dazu.. 36 war 1ms oder?Code:DEFINE Zeit Word Zeit = Timer ... ...Schleife... IF (Timer - Zeit) >= 50 THEN GOSUB Ausgabe ... .. #Ausgabe Zeit = Timer PRINT.. RETURN
mfg
Um einen Sekundentimer zu basteln, nimmst Du einen Timer, stellst ihn auf einen Wert ein, der ein Teiler von einer Sekunde ist und zählst in dem Timer eine Variable hoch. Sobald die Variable den Wert erreicht hat, der eine Sekunde ergibt, kannst Du irgendwas auslösen, eine Variable setzen, wie Du eben willst.
Ein wunderbares Beispiel dazu ist im Wiki. Unter "LED blinken lassen" oder so.
Lesezeichen