Hi Finn,
(Interrupt Service Routine) oder mein Schieberegister übrig. Wobei ich
nicht weiß ob du für Interrupts schon fit genug bist. Da ist man mannchmal
ganz schön am grübeln (selbst ich noch).
Interrupts arbeiten unabhängig vom programmierten Ablauf. Die werden
also irgendwan von der Hardware angestoßen und reißen den Prozessor
aus seiner normalen Arbeit die du programmiert haßt raus. Dann wird erst
mal die ISR abgearbeitet und danach gehts an der Stelle weiter, wo er
rausgerissen wurde. Wenn das an der Stelle passiert, wo du zB für
bestimmte Impulslängen auf einem Ausgang ne Warteschleife programmiert
hast dann ändert sich dadurch auch die Wartezeit und damit die
Impulslänge (die Laufzeit der ISR kommt ja logischerweise dazu). Bei
meiner LCD-Ausgabe hab ich dadurch beim ersten Versuch total wirre
Zeichen auf dem Display gehabt wie ich ne Taste gedrückt habe.
Das mit dem Schieberegister ist da schon einfacher (überschaubarer).
Du fragst bei jedem Durchlauf der Hauptschleife die Pins mit den Tasten
ab. Wenn der Pin 1 ist dann schiebst Du ne 1 in das Register für die Taste
rein und wenn der Pin 0 ist dann eben ne 0. Das ist wie ne Eimerkette
beim Feuerlöschen wo du mal volle und mal leere Eimer reinreichst.
Wenn das Register dann 8 Einsen drin hat dann wurden bei 8 Durchläufen
ne 1 am Pin gelesen und wenn Du 8 Nullen drin hast dann wurde 8x
ne 0 am Pin gelesen. Dir Zeit, die du sonst für Warten verschwendet
hast kann der Proßzessor dann was anderes in der Hauptschleife machen.
Du hast also eigentlich eine Wartezeit zwischen den Abfragen die so lang
ist, wie die Abarbeitung des restlichen Krams in der Hauptschleife dauert.
Also eine mit Arbeit gefüllte Wartezeit
Gruß
Dino
Ohne verschwendung von Rechenzeit bleibt eigentlich nur eine ISRMit delays kann ich entprellen, dass bekomme ich hin. Nur ich möchte eine schönere Variante finden, damit der Controller keine Rechenzeit verschwendet.
(Interrupt Service Routine) oder mein Schieberegister übrig. Wobei ich
nicht weiß ob du für Interrupts schon fit genug bist. Da ist man mannchmal
ganz schön am grübeln (selbst ich noch).
Interrupts arbeiten unabhängig vom programmierten Ablauf. Die werden
also irgendwan von der Hardware angestoßen und reißen den Prozessor
aus seiner normalen Arbeit die du programmiert haßt raus. Dann wird erst
mal die ISR abgearbeitet und danach gehts an der Stelle weiter, wo er
rausgerissen wurde. Wenn das an der Stelle passiert, wo du zB für
bestimmte Impulslängen auf einem Ausgang ne Warteschleife programmiert
hast dann ändert sich dadurch auch die Wartezeit und damit die
Impulslänge (die Laufzeit der ISR kommt ja logischerweise dazu). Bei
meiner LCD-Ausgabe hab ich dadurch beim ersten Versuch total wirre
Zeichen auf dem Display gehabt wie ich ne Taste gedrückt habe.
Das mit dem Schieberegister ist da schon einfacher (überschaubarer).
Du fragst bei jedem Durchlauf der Hauptschleife die Pins mit den Tasten
ab. Wenn der Pin 1 ist dann schiebst Du ne 1 in das Register für die Taste
rein und wenn der Pin 0 ist dann eben ne 0. Das ist wie ne Eimerkette
beim Feuerlöschen wo du mal volle und mal leere Eimer reinreichst.
Wenn das Register dann 8 Einsen drin hat dann wurden bei 8 Durchläufen
ne 1 am Pin gelesen und wenn Du 8 Nullen drin hast dann wurde 8x
ne 0 am Pin gelesen. Dir Zeit, die du sonst für Warten verschwendet
hast kann der Proßzessor dann was anderes in der Hauptschleife machen.
Du hast also eigentlich eine Wartezeit zwischen den Abfragen die so lang
ist, wie die Abarbeitung des restlichen Krams in der Hauptschleife dauert.
Also eine mit Arbeit gefüllte Wartezeit
Gruß
Dino