Was heißt mittendrin abbrechen bei dir? Paar Infos mehr wären nett.
mfg
Hallo liebe Mitglieder,
ich bin neu hier und habe auch noch keine Forum Erfahrungen, habe mir aber gedacht ich versuche es mal hier.
Vor kurzem habe ich angefangen mit C zu programmieren. Ich Programmiere mit AVR 5 den ATMega32 und habe auch schon erfolgreich Programme geschrieben bin nur an ein Problem gestoßen was ich nicht gelöst kriege.
Mein Problem ist das ich ein Programm habe es aber nicht mittendrin abgebrochen bekomme durch ein Signal. Habe schon irgendwas von interrupts gelesen bin da aber leider garnicht durchgestiegen.
Würde mich über Hilfe freuen.
Gruß Titooo
Was heißt mittendrin abbrechen bei dir? Paar Infos mehr wären nett.
mfg
Also bei mir läuft ein Programm auf dem ATMega32. In dem Programm werden verschiedene Ausgänge angesteuert um LED's leuchten zu lassen.
Jetzt ist eine for Schleife drin die 100x den Befehl _delay_ms(10) druchläuft. Mein Wunsch ist es jetzt den Ablauf zu unterbrechen und an eine Bestimmte Stelle im Programm zu springen, von mir aus an den Anfang des main Programms. Weil wenn ich z.B. einen Zeitablauf habe der 1h dauert möchte ich den gerne Abbrechen können ohne die Stromversorgung zu entfernen oder den RESET Knopf zu drücken.
mfg
if(Signal) {
-- PORTX auf Input //PortX hängt an Reset
}
Dann gibts einfach nen Reset und alles fängt wieder von Vorne an.
mfg
Hi,
du könntest auch den Watchdog starten und den AVR dann in eine Endlosschleife schicken
Gruß
Chris
Wsk8, aber da muss das Programm doch an dieser stelle vorbeilaufen um das Signal zu bekommen.
Che Guevara, was ist ein Watchdog und wie wende ich ihn an?
Was ich meine ist (habe so etwas gelesen) ein Ohr was die ganze zeit lauscht ob ein Signal auf einem bestimmten Port kommt. Wenn ja wird das Signal dem Programmablauf vorgezogen und reargiert dann irgendwie.
Gruß
Hi,
meinst du vielleicht einen Interrupt an einem Pin? Irgendwie blick ich jetzt doch nicht mehr so ganz durch, was du willst.
Drück dich bitte mal sachlich korrekt & eindeutig aus
Ein Watchdog ist eine Art Timer, bei dessen Überlauf der AVR resettet wird.
Er wird üblicherweise verwendet, um das hängenbleiben eines µCs zu erkennen und darauf zu reagieren.
Gruß
Chris
Ja, er meint wohl einen Interrupt. Aber ein Interrupt unterbricht dein Programm nicht ewig und fängt dann von Vorne an, sondern
Programm läuft ... Interrupt wird ausgelöst -> Interruptcode wird abgearbeitet ... Programm läuft normal weiter.
Wär toll wenn du dich etwas konkreter ausdrückst. Du klingst grad etwa so: Ich habe gehört, wenn ein Auto nicht funktioniert, dann muss man in ein Loch eine Flüssigkeit schütten.
mfg
Wie es genau in C aussehen muss kann ich dir nicht sagen...
Bei Bascom würde es so ablaufen...
Gruss, JoeCode:... Config Pind.2 = Input 'Am Atmega8 der Int0-Pin ... Config Timer1 = Timer , Prescale = 8 ' Timer konfigurieren und Takt einstellen Config Int0 = Change ' Interrupt bei >wechselnder Flanke< des Echosignal starten On Int0 Interuproutine_Name ' Bei Interrupt zu InteruptSubroutine springen Enable Int0 ' Wenn auf Echo gewartet wird wechselt Echo-Signal auf High Enable Interrupts ' Interrupts global aktivieren ... SPRUNGMARKE_A Hauptprogramm blabla Hauptprogramm ... Interuptroutine_Name: ' Interrupt startet bei Signalwechsel am Int0-Pin If Pind.2 = 1 Then ' Wenn Pin zu High wechselt ... Goto SPRUNGMARKE_A ' Oder z.b. eine Variable setzen, die im Main immerwieder abgefragt wird End if Return
JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.
Das mit dem Watchdog klingt doch gut. Wenn ich einen Taster drücke wird der Grenzwert überschritten (z.B. eine erhöhung von 0 auf 1) und das Programm wird RESETET. Also es Startet einfach ganz von vorne ohne den Reset-Knopf zu drücken.
Aber wie wende ich so einen Watchdog an, an einem ATMega32 (ich Programmiere in C mit AVR). Habe geguckt werde aber aus dem Watchdog nicht schlau.
Sorry wenn ich mich nicht gut ausdrücke. Bin aber ganz neu in der Thematik.
Gruß
Lesezeichen