IO´s mit Taster richtig schalten

OP #5035510
Lesenswert?

Hallo Leute,
für meinen Pi möchte ich eine "Steuerung" realisieren. Im Prinzip sollen 
Taster einen Impuls an den Pi senden der einen Reboot auslöst. Je 
nachdem welcher Taster gedrückt wird, soll ein anderer Reboot erfolgen 
(2 verschiedene PIN´s am PI).
Nachdem ich gut 10 Jahre nicht mehr wirklich programmiert habe war schon 
das eine Herausforderung was ich als Code angehängt habe. Andererseits 
denke ich, ist es eine gute Übung, da es im Prinzip ähnliche Routinen 
sind und es einfach Tasterabfragen.
Meine Frage ist nun: ENTPRELLEN... im Internet findet man tausende 
Philosopienen (die einfachste ist ein delay). Allerdings würde ich gerne 
eine Lösung anstreben, die für diesen Anwendungsfall passt und nicht zu 
kompliziert ist. Hier würde ich einen Tipp benötigen. Könnt ihr mir hier 
helfen? Vielen Dank!


Code:
1
int main(void)
2
{
3
  int i;
4
  DDRD = 0b10101010;  //Port definition: Ein-/Ausgang
5
  /*  D0 = Taster 1
6
    D1 = LED 1      
7
    D2 = Taster 2  
8
    D3 = LED 2      
9
    D4 = Taster 3
10
    D5 = LED 3      
11
    D6 = Taster 4
12
    D7 = LED 4      
13
  */
14
  DDRB = 0b00000111;
15
  /*  B0 = Signal PI    reboot 1
16
    B1 = Signal PI    reboot 2
17
    B2 = TFT    Transistor TFT
18
  */
19
        
20
    while (1) 
21
    {
22
  PORTB = 0b000000;  //Startinitialisierung Port B  
23
            //B0-B7 aus
24
  PORTD = 0b000000;  //Startinitialisierung Port D
25
            //D0-D7 aus
26
    
27
  /*...*/
28

29
  
30
  if (PIND & (1<<0))      //Taster 1
31
    {
32
    PORTD = 0b00000010;    //LED 1 ein
33
    PINB |= (1<<TFT);    //TFT ein
34
    PINB |= (1<<0);      //reboot 1
35
    _delay_ms(200);
36
    PINB |= (0<<0);      
37
    }
38
    
39
  else if (PIND & (1<<4))            //Taster 3
40
    {
41
    PORTD = 0b00100000;    //LED 3 ein
42
    PINB |= (1<<TFT);    //TFT ein
43
    PINB |= (1<<1);      //reboot 2
44
    _delay_ms(200);
45
    PINB |= (0<<1);
46
    }
#5035976
Lesenswert?

Tekkineo T. schrieb:
> Je
> nachdem welcher Taster gedrückt wird, soll ein anderer Reboot erfolgen
> (2 verschiedene PIN´s am PI).

Wozu will man denn sowas verrücktes?
Das erinnert mich an mein Praktikum im Studium. Da gab es einen 
Mainframe, an 2 Tagen wurde VMS gebootet und an 3 Tagen UNIX.

Tekkineo T. schrieb:
> Meine Frage ist nun: ENTPRELLEN... im Internet findet man tausende
> Philosopienen (die einfachste ist ein delay).

Im Internet findet man leider viel Müll und nur wenige Perlen.
Der Grund ist, daß viele das Problem nicht verstehen (wollen) und 
Entprellen für popeleinfach halten, was man ohne Überlegen einfach so 
hinrotzen kann.

Tekkineo T. schrieb:
> Allerdings würde ich gerne
> eine Lösung anstreben, die für diesen Anwendungsfall passt

Das ist der falsche Ansatz. Da muß man ja bei jedem Programm von neuem 
darüber nachdenken, d.h man verschwendet nur unnötig Entwicklungszeit.
Besser ist eine Lösung, die für jeden Anwendungsfall paßt und so wenig 
wie möglich Seiteneffekte hat.
Gast #5035980
Lesenswert?

Was genau bedeutet "ein anderer Reboot"?

Worin unterscheiden sich die beiden Reboot's und reden wir wirklich vom 
Rebooten im Sinne des "reboot" Kommandos?

Warum du da etwas entprellen willst, ist mir völlig rätselhaft. Man muss 
Taster nur entprellen, wenn die ANzahl der Tastendrücke eine Rolle 
spielt. Also wenn man damit zum Beispiel die Zeit einer Uhr einstellt.

Ich verstehe deinen Anwendungsfall aber so: Jeder Taster löst genau eine 
Reaktion aus. Dann mach das doch. Was gibt es da zu entprellen? Bis der 
Rechner rebootet hat, ist der Taste schon laaaaaange fertig mit Prellen.
Gast #5036004
Lesenswert?

> Ach das hatten wir doch schon 1000 mal erklärt.

Der Tekkineo kennt deine Entprellroutine und vor allem die Erklärungen 
dazu offensichtlich noch nicht. Sonst hätte er warscheinlich nicht 
gefragt.

@Tekkineo: Such mal nach "Peter Dannegger Entprellen", der hat sich mit 
dem Thema wirklich intensiv auseinandergesetzt und eine Menge gutes dazu 
geschrieben.

Allerdings sehe ich in dieser konkreten Anwendung tatsächlich keinen 
Bedarf, überhaupt zu entprellen. Vielleicht liegt es auch daran, dass du 
nur einen Teil des Programmes gezeigt hast.
OP #5036201
Lesenswert?

Hallo,
nun, einmal soll ein Reboot in Kodi erfolgen und einmal nach Raspian 
bzw. Recalbox. der Pi so an seinen IO "gucken". Jenachdem welcher Io 
eben ausgelöst wird soll ein script starten, dass einen Reboot mit dem 
entsprechend passenden OS ausführt. Daher diese idee.
Grundsätzlich habt ihr recht. Ein Taster soll eine Aktion auslösen. Dass 
man dann diese Taste 5Minuten lang gedrückt hält ist eher 
unwahrscheinlich :). Aber man soll einen Anwender (oder Kinder) nicht 
unterschätzen :).
Ohne entprellen wäre es mir sicherlich lieber, da dann der Aufwand auch 
sinkt (und ich das iwann nachprogrammieren kann. Danke für den Tipp 
bzgl. Peter Dannegger. Ich werde mir das mal zu gemüte füren und hoffe 
etwas schlauer zu werden was die Wissenschaft des Entprellen angeht. 
spätestens bei einem Drehimpulsgeber holt mich das ganze ja doch wieder 
ein...
#5036222
Lesenswert?

Eine Taste wird ja nicht entprellt, weil sie von irgendwem 5Min lang 
gedrückt werden könnte, sondern weil sie auch schon bei einem kurzem 
Druck "schwingt".

Entprellen ist eigtl. keine große Sache und sollte m.M. nach so gut wie 
immer gemacht werden.
Damit schließt man schon einmal eine große Fehlerquelle, bzw. 
ungewolltes Programmverhalten aus und mit der Zeit erachtet man es als 
Routine und kann sich auf den Rest des Programmes, bzw. der Schaltung 
konzentrieren.
OP #5047409
Lesenswert?

@Clemens:
Ja, ich bin auch der Meinung dass die Enptrellung dazu gehört (sicher 
ist eben sicher)... vorteil ist dass ich das Nachträglich ja recht 
einfach implementieren könnte, sofern die Experten hier meinen es ist 
(noch) nicht notwendig.

@Mario:
wie gesagt möchte ich die Steuerung aus zweierlei Gründen realisieren:
Primär: umd den Pi zu entlasten
Sekundär: damit ich mich mit der Materie besser beschäftige

@Route66:
warum meinst du das Bit-Schiebe-, Bit-Setz- und Bit-Löschbefehlen hier 
sehr von vorteil sind?


Nachdem ich heute heim gekommen bin hoffe ich das Programm am WE mal auf 
die schnelle auf den Mega32 spielen zu können und dann mal kurz 
probelaufen zu lassen. Die Beschaltung ist ja recht schnell aufgebaut 
bzw. am STK500 kann ich das ja ganz gut sehen was passiert
Gast #5047672
Lesenswert?

1) Beide Tasten lösen den RESET aus.
   Entprellen nicht nötig, muss SOFORT wirken.

2) Beim (Re)-BOOT wird geschaut, welche Taste (noch) gedrückt ist.
   (Default - keine Taste: Code 1.)

3) Es wird gewartet, bis beide Tasten "lange genug" wieder
   losgelassen, also unbetätigt sind (z.B. 100...500 ms), dann
   wird je nach Taste in den gewünschten Code 1 / 2 gesprungen.

Fertig.

Und wenn beide Tasten gedrückt werden, kommt halt was Unbestimmtes
raus. Das kann auch niemand "entprellen"...

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