Problem mit der Programmierung Bascom

OP #775626
Lesenswert?

Hallo freunde der Programmierung!!

Ich veruche mich an der Programmierung eines ATmega8 mit Bascom. 
Eigentlich klappt auch alles ganz gut! Nur jetzt will ich eine 
gegenseitige verrigelung programmieren! hab schon etliches versucht hab 
aber keine lösung dafür gefunden! Könnt ihr mir helfen? denke das das 
doch kein Problem für euch sein wird! :-) So wie ich euch kenne

DANKE DANKE DANKE

Jan
#775642
Lesenswert?

@ Jan Bölting (janosch2405)

>Eigentlich ganz einfach! will mit 4 tastern 4 ausgänge ansteuern! und
>wenn ich einen taster drücke kann man mit den anderen Tastern nicht mehr
>die jeweiligen ausgänge ansteuern erst nach einem Reset z.B. wie eine
>Schützverriegelung.. quasi..

Für Jeopardy? ;-)

MfG
Falk
Gast #775662
Lesenswert?

Das kann ja wohl nicht so schwer sein, dass mans nicht mit ein bisschen 
Überlegung hinkriegen kann.

In Endlosschleife packen:


IF (alle Lichter aus)
  {
  {Tastenzustände abfragen}

  IF (Taste A gedrückt) {Licht A einschalten}
  IF (Taste B gedrückt) {Licht B einschalten}
  IF (Taste C gedrückt) {Licht C einschalten}
  IF (Taste D gedrückt) {Licht D einschalten}
  }


Sobald irgendein Licht an ist, werden die Tasten einfach nicht mehr 
abgefragt - das ist die geniale Idee :-).

Zum Rücksetzen brauchst Du nur eine Master-Taste vorsehen, die alle 
Lichter ausschaltet.
Gast #775705
Lesenswert?

>Dann MACH es mal ganze real und praktisch nutzbar!

Ist das mein oder Jans Projekt?

>Dein Pseudocode kann das nämlich nicht.

Der soll auch kein fertiges Programm sein, sondern das Prinzip 
verdeutlichen. Diese Aufgabe erfüllt er, denk ich.

Nochmal das Prinzip: Man fragt in einer Endlosschleife periodisch (z. B. 
timergesteuert alle 20 ms --> Entprellungsproblem gelöst) ab, ob ein 
Taster gedrückt wurde.  Wenn ja, schaltet man sofort das zugehörige 
Licht ein.  Die Tastenabfrage findet jedoch nur statt, solange noch 
kein Licht an ist.  Rücksetzen aller Lichter auf "aus" mit einem 
gesonderten Taster.

Fertig.
#775709
Lesenswert?

Ich würde noch eine Variable mehr spendieren. Das vereinfacht die 
Abfrage und macht die Lampen nicht zum Eingabegerät.
1
oben:
2

3
Lampe := 0
4

5
Solange(Lampe == 0) {
6
  Wenn (Taste 1 gedrückt) { Lampe := 1 }
7
  Sonst Wenn (Taste 2 gedrückt) { Lampe := 2 }
8
  Sonst Wenn (Taste 3 gedrückt) { Lampe := 3 }
9
  Sonst Wenn (Taste 4 gedrückt) { Lampe := 4 }
10
}
11

12
SchalteLampeAn(Lampe)
13
Solange ('Reset' nicht gedrückt) { Chips essen }
14
SchalteLampenAus()
15

16
Zurück nach oben: in einer möglichst strukturierten Weise

Geht je nach Beschaltung auch generischer.
#775723
Lesenswert?

@  Paul Baumann (Gast)

>Dateianhang: Verriegel_4_Tasten.bas (906 Bytes, 3 Downloads)

>Hier noch eine Variante von Falk's Idee.

Ähh, und was soll das? Und vor allem, hast das mal durch BASCOM gejagt? 
Der Compiler meckert garantiert. Und einen Fehler hast du auch 
eingebaut, der Pull-Up für PB0 fehlt jetzt . . .

Nur Einmal mit  . . .

MfG
Falk
Gast #775733
Lesenswert?

Na klar habe ich das durch den Compiler gejagt. ...und er hat nicht mal 
gemeckert. Deinen Code habe ich dagegen nicht heil durchgebracht. Das 
war der der Grund für: "Was soll das?" ;-)

MfG Paul
Gast #775742
Lesenswert?

Loop expected, hat er gesagt. Ich habe Deinen Code nun direkt 
abgespeichert
und es geht fehlerfrei. Wahrscheinlich hatte ich vorhin bei "Copy und 
Paste" ein Stück abgesägt.

Entschuldige ein paar Mal

MfG Paul
Gast #775754
Lesenswert?

>Ich würde noch eine Variable mehr spendieren. Das vereinfacht die
>Abfrage und macht die Lampen nicht zum Eingabegerät.

Deine Variante mit der Lampen-Variable hat noch einen Vorteil: Sollten 
mal  zwei Taster zum exakt gleichen Zeitpunkt gedrückt werden, geht dann 
trotzdem garantiert nur eine Lampe an (bei Deinem Code haben in diesem 
Fall die "höheren" Priorität vor den niedrigeren).
#775769
Lesenswert?

@ AVRFan (Gast)

>Deine Variante mit der Lampen-Variable hat noch einen Vorteil: Sollten
>mal  zwei Taster zum exakt gleichen Zeitpunkt gedrückt werden, geht dann
>trotzdem garantiert nur eine Lampe an (bei Deinem Code haben in diesem
>Fall die "höheren" Priorität vor den niedrigeren).

Werfe er eine Blick auf meinen Code.

MfG
Falk
Gast #775787
Lesenswert?

>Werfe er eine Blick auf meinen Code.

Ist ja gut, habs nun auch gesehen, die "elseif"s in Deinem voll 
lauffähigen und schlechthin als hervorragend zu bezeichnenden Code ;-) 
gewährleisten diese Funktionalität ebenfalls.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren