Forum: Mikrocontroller und Digitale Elektronik Interupt mit CodeVision


von Robert Nägele (Gast)


Lesenswert?

Hi,

Ich arbeite mit dem CodeVision C Compiler und hab nun
verschiedene Programme schon geschrieben, die Typischen Lauflichter
eben. Denen habe ich nun hinzugefügt das man je nach Tastendruck (
PD0-PD3 ) ein anderes Lauflicht abläuft und zusätzlich an PD4-PD7 eine
Geschwindigkeit und eine Richung angegeben wird. Mich nervt nun
allerdings gewaltig das ich diese Tasten immer gedrückt halten muß.
Kann mir jemand sagen wie ich das Programmieren kann OHNE das ich dies
ständig tun muß ? Dazu kommt noch das ich keinerlei Ahnung habe wie ich
diese Tastenentprellung hinbekomme dabei und was oder wie sind
interupts. Kennt wer eine Seite mit einem einfachen Tutorial für den
C-Compiler ?

MFG ein verzweifelter Jungelektroniker

von crazy horse (Gast)


Lesenswert?

in diesem Fall brauchst du nicht mal eine Entprellung und auch nicht
unbedingt Interrupts.
Welches Lauflicht nun abläuft, machst du vom Stand einer Variablen
abhängig und nicht vom Zustand deiner Taster.
Und wenn du nun noch eine Routine einfügst, die regelmässig die
Schalter abfragt, ist alles in Butter.

void programm_abfrage (void){
if (!PIND.0) Programm=0;
  else if (!PIND.1) Programm=1;
    else if (!PIND.2) Programm=2;
      else if (!PIND.3) Programm=3;
}
Der erste erkannte Tastendruck wird somit gespeichert, weitere haben
keinen Einfluss. Kritischer wirds, wenn du mit nur einem Taster
arbeiten willst und jeder Tastendruck dein Programm weiterschalten
soll. Dann musst du entprellen.
Wenn du dich gleich noch in die Interrupts einarbeiten möchtest, nimm
den Timer0, obiges Programm ist dann schon die fast vollständige
Timer0-ISR, dann brauchst du dich mehr im Hauptprogramm drum kümmern,
die Taster regelmässig abzufragen.

von Robert Nägele (Gast)


Lesenswert?

Ok Danke nur frage ich mich was das mit der Routine soll? Die wird doch
dann auch stetig abgefragt ? z.b. braucht mein Lauflicht max 50ms um
weiterzuschalten und zu prüfen wie die Tasten stehen. Wenn ich doch
dann wieder an der Überprüfung vorbeikomme läuft ja nachdem ich den
Finger abgesetzt habe gar nix mehr ? oder wie ?

von crazy horse (Gast)


Lesenswert?

da dein Programm fehlt, kann ich dir da auch nicht direkt weiterhelfen.
An irgendeiner Stelle musst du ja verzweigen, welches Programm abläuft.
Im Moment tust du das in Abhängigkeit der Tasten. Das schmeisst du raus
und verzweigst analog zu deinem alten Programm in Abhängigkeit vom
Zustand der Variablen "Programm". Steht es auf 0, wird das
1.Lauflichtprogramm ausgeführt, bei 1 das zweite usw.
Wenn du jetzt noch regelmässig "pogramm_abfrage" aufrufst, wird bei
gedrücktem Taster die Variable "Programm" geändert, dementsprechend
läuft dann dein Hauptprogramm anders.

von Robert Nägele (Gast)


Angehängte Dateien:

Lesenswert?

Also nochmal :) Ich glaub ich war da etwas zu vorschnell.

Ich will 1. Das die Taster an PinD alle kontinuirlich geprüft werden.
Damit meine ich das Wenn ich den Taster drücke auch das Programm
gewechselt wird und nicht erst wenn ich aus dem einen Program eine
Abfrage starte. Dies geht soweit nur mit Interupts ? Und wenn ja dann
würde ich gerne wissen wie ich die Nutzen kann ?

Ich schicke hier mal noch im Anhang meine File mit auch wenn sie gerade
vom Compiler mit Errors zurückgewiesen wird.

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
Noch kein Account? Hier anmelden.