Forum: Mikrocontroller und Digitale Elektronik Hilfe!: Quizmaster mit 8 Tastern


von Dave 9. (dave94)


Angehängte Dateien:

Lesenswert?

Ich habe folgendes Problem ich habe 8 Taster die bei jeweiligem Drücken 
verschiedene Aktion ausfüren (Soundtracks abspielen), aber wenn man 2 
oder mehr taste drückt, schaltet sich die nachfolgende Schaltung ab.
Deshalb will ich wie in dieser Schaltung für 4 Taster einen "Quizmaster" 
nach den Tastern anlöten, da dieser die anderen Taster sperrt sobald 
einer gedrückt wurde.
Nun meine Frage: Wie oder kann ich überhaupt diese Schaltung auf 8 
Taster erweitern?

Schaltplan für 4 Taster im Anhang !

Link zur Seite : 
http://www.dieelektronikerseite.de/Circuits/Quizmaster.htm

Vielen Dank schon mal im vorraus !!!

David

von Εrnst B. (ernst)


Lesenswert?

David K. schrieb:
> Nun meine Frage: Wie oder kann ich überhaupt diese Schaltung auf 8
> Taster erweitern?

Jup. den Flipflop-Block duplizieren, und halt die Dioden-Ver"oder"ung in 
der Mitte, die alle andern Tasten sperrt, sobald eine ausgelöst wird, 
entsprechend erweitern.

Wenn ich mich nicht verrechnet habe, brauchst du nachher dafür 56 Dioden 
allein in der Mitte. Macht nix, ab 100 werden die Billiger ;)

von Dave 9. (dave94)


Lesenswert?

DAnke für die Antwort =)

Das kann ja spaßig weden alles zusammen zulöten %)

von NopNop (Gast)


Lesenswert?

Mit nem kleinen TINY kann man das Ganze kleiner und billiger bauen...

von Dave 9. (dave94)


Lesenswert?

Oder ich nehm einen fertigen 8 bit Flip-Flop Baustein und löte "nur 
noch" die dioden an.
Hab leider noch nicht so viel erfahrung mit dem proggrammieren einen 
atmega 8 hab ich zwar noch wüsste aber nicht wie ich das programm 
schreiben sollte.

von NopNop (Gast)


Lesenswert?

David K. schrieb:
> Oder ich nehm einen fertigen 8 bit Flip-Flop Baustein und löte "nur
> noch" die dioden an.

Jou...mit Logigbausteinen geht das mit Sicherheit auch "kompakt".

Mit nem kleinen TINY wird es dann halt ganz klein.
Spannungsversorgung, TINY & Hühnerfutter, Taster, LEDs o.ä für 
Signalisierung...ferdisch.

Programm wäre z.B. einfach nur in der Mainschleife ein Polling aller 
beteiligten Ports (Taster) durchzuführen, dann auszuwerten was für ein 
Taster gedrückt wurde und die LEDs zu setzen. Damit hätten dann zwar 
theoretisch die Schalter die Du als erstes überprüfst eine 
Priorität...aber bei 20MHz (z.B. TINY2313) passiert da nix.

Grüße


P.S.: mit ein paar Relais und Selbsthaltung wäre auch noch eine Lösung 
:-D

von Dave 9. (dave94)


Lesenswert?

Danke nochmal =)
Wie genau müsste ich denn das Programm gestalte für den attiny?
Könnte mir jemand ein beispielprogramm schreiben?
Am besten in Basic oder c++
dann kann ich mir den Aufbau mal genauer anschauen :)

von NopNop (Gast)


Lesenswert?

David K. schrieb:
> Könnte mir jemand ein beispielprogramm schreiben?
Das wäre das ideale Projekt für einen Einstieg in die uC-Welt.
Innerhalb von 1-2 Tagen müsste das für einen Anfänger zu schaffen sein.
(Jemand wo es kann schreibt es in 10min)

Eigentlich musst Du nur
1) Ein- und Ausgänge definieren
2) Portregister für Taster einlesen
3) Taster nacheinander überprüfen ob betätigt
4) wenn ein Taster betätigt, die zugehörige LED anschalten
5) und die anderen LEDs "verriegeln"

6) Wenn der Master-Button gedrückt wurde alle LEDs off

Thats it.

Durch das setzen der LED brauchst Du theoretisch noch nicht einmal eine 
Entrprellung der Taster.


Ich empfehle das Tutorial des Forums:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Grüße

von Dave 9. (dave94)


Lesenswert?

Gut dann werd ich das heute mal versuchen :)
Und danke !

von Bös (Gast)


Lesenswert?

NopNop schrieb:
> Mit nem kleinen TINY wird es dann halt ganz klein.
> Spannungsversorgung, TINY & Hühnerfutter, Taster, LEDs o.ä für
> Signalisierung...ferdisch.

Natürlich kann man das mit nem "Tiny" oder "ATMega" machen, obwohl das 
eigentlich nicht die Frage war. Es drängt sich der Verdacht auf, dass 
ein Großteil der hier Postenden mit der diskreten Schaltung schon 
überfordert ist.

Schade, dass da jetzt erst wieder ein Programm geschrieben werden muss. 
Das Forum heisst doch Mikrocontroller und Elektronik. Davon abgesehen, 
dass man ein paar elektronische Bauteile benötigt um einen "Tiny" zu 
betreiben, haben hier doch viele Fanboys keinen blassen Schimmer von 
Elektronik an sich.

NopNop schrieb:
> Thats it.
>
> Durch das setzen der LED brauchst Du theoretisch noch nicht einmal eine
> Entrprellung der Taster.

Ok, von Programmierung haben hier auch viele keine Ahnung. Also was 
solls...

von NopNop (Gast)


Lesenswert?

Bös schrieb:
> Natürlich kann man das mit nem "Tiny" oder "ATMega" machen, obwohl das
> eigentlich nicht die Frage war. Es drängt sich der Verdacht auf, dass
> ein Großteil der hier Postenden mit der diskreten Schaltung schon
> überfordert ist.

Was ist denn bitte an ein paar FF überfordernd? Wie gesagt...theoretisch 
geht es auch mit ein paar Relais.
Wenn ich dass allerdings mal kurz überschlage kostet die oben 
vorgeschlagene Transistorschaltung um die 4,80 Euro (bei annahme 
24xTransistor á 4 Cent, 34xWiderstand á 8 Cent und 56xDiode 2 Cent).
Nen TINY2313 bekommt man für 1,70 Euro, dann noch nen Spannungsregler 
dran für 20 Cent, evtl. noch nen Pullup-Widerstand und ein paar 
Kondesatoren, dann ist man alles in allem bei 2 Euro.

Man kann die Schaltung mit ATINY also 2,5 Mal öfters aufbauen als 
diskret.
Vom Platz und wahrscheinlich auch vom Stromverbrauch mal ganz zu 
schweigen.

Da es bei so einem Gerät evtl. um ein tragbares Gerät gehen soll also 
auch nicht gerade unwichtig.

Bös schrieb:
> Das Forum heisst doch Mikrocontroller und Elektronik.

So eine Schaltung passt in meinen Augen sowieso besser in das Unterforum 
"Analogtechnik".

Bös schrieb:
> NopNop schrieb:
>> Thats it.
>>
>> Durch das setzen der LED brauchst Du theoretisch noch nicht einmal eine
>> Entrprellung der Taster.
>
> Ok, von Programmierung haben hier auch viele keine Ahnung. Also was
> solls...

Was soll an dieser Aussage falsch sein!?
Wenn ein Taster betätigt wurde ist sowieso jede weitere Ausgabe 
gesperrt...ansonsten könnten die anderen Teilnehmer ja auch noch 
drücken.
Und selbst wenn die eine LED durch das Prellen mehrere Male gesetzt 
werden soll...was soll das bitte ausmachen?

Grüße

von Dave 9. (dave94)


Lesenswert?

Währe das eine möglichkeit ?
oder ist das alles nur müll?

$regfile = "m8def.dat"
$crystal = 1000000

Config Pinc.0 = Input
Portd = 1
Config Portd = Input
Portd = 1
Config Portb = Output


Do
  If Pind.0 = 0 Then
   Pinb.0 = 1
  Goto Warten
  Else
  Pinb.0 = 0
    End If

   If Pind.1 = 0 Then
   Portb.1 = 1
   Goto Warten
  Else
  Pinb.0 = 0
    End If

   If Pind.2 = 0 Then
   Portb.2 = 1
   Goto Warten
  Else
  Pinb.0 = 0
    End If

   If Pind.3 = 0 Then
   Portb.3 = 1
   Goto Warten
  Else
  Pinb.0 = 0
    End If

   If Pind.4 = 0 Then
   Portb.4 = 1
   Goto Warten
  Else
  Pinb.0 = 0
     End If

   If Pind.5 = 0 Then
   Portb.5 = 1
   Goto Warten
  Else
  Pinb.0 = 0
     End If

   If Pind.6 = 0 Then
   Portb.6 = 1
   Goto Warten
  Else
  Pinb.0 = 0
     End If

   If Pind.7 = 1 Then
   Portb.7 = 1
   Goto Warten
  Else
  Pinb.0 = 0
     End If



Loop

Warten:

If Pinc.0 = 0 Then
Portb = 0
Else
Return

End If


End

von Dave 9. (dave94)


Lesenswert?

Ups hab was übersehn =)
nach dem else natürlich den entsprechenden pin auf 0 setzen (lassen)

LG

von NopNop (Gast)


Lesenswert?

Da sollte ein BASCOMIANER drüber schauen...kenne mich da mit dem Syntax 
nicht aus. Habe dennoch mal ein paar Kommentare dran gemacht (ohne 
Gewähr).
1
$regfile = "m8def.dat"
2
$crystal = 1000000
3
4
Config Pinc.0 = Input  'Rücksetztaster als Eingang
5
Portc.0 = 1        '==> Sollte das nicht Portc.0=1 heißen für den Pullup an c.0 ?
6
Config Portd = Input   'Andere 8 Taster als Eingänge
7
Portd = 1        'Alle Pullups für Taster an
8
Config Portb = Output  'PortB komplett Ausgänge (LED)
9
10
11
Do                  
12
If Pind.0 = 0 Then  'Taster 0 gedrückt
13
  Pinb.0 = 1        'Zugehörige LED an
14
  Goto Warten       'Sprungbefehle sind wahrscheinlich auch in BASCOM nicht so schön aber ok...
15
End If
16
  
17
Elseif Pind.1 = 0 Then
18
  Portb.1 = 1
19
  Goto Warten
20
End If
21
  
22
' Und so weiter für die anderen Taste...  
23
Loop
24
25
Warten:
26
Do                 'Solange der Rücksetztaster nicht gedrückt wurde warten
27
If Pinc.0 = 0 Then
28
  Portb = 0        'Alle LEDs aus
29
  Return           'Zurück zur Hauptschleife
30
End If
31
32
Loop
33
34
End


Keine Ahnung ob das so passt...bin gerade etwas in Eile, da Feierabend 
:-D
Grüße

von Peter D. (peda)


Lesenswert?

In C gehts einfacher:
1
#include <avr/io.h>
2
3
4
int main()
5
{
6
  uint8_t mask, input;
7
8
  DDRB = 0xFF;                  // output on
9
  PORTD = 0xFF;                 // input: pullups on
10
  PORTC = 1;                    // PC.0 = reset input
11
12
  while( 1 ){
13
    PORTB = 0;                  // all outputs off
14
    mask = 1;
15
    input = ~PIND;              // invert (low active)
16
    do{
17
      if( input & mask ){
18
        PORTD = mask;           // output on
19
        while( PINC & 1 );      // until reset pressed
20
        break;                  // leave loop
21
      }
22
      mask <<= 1;               // next bit
23
    }while( mask );
24
  }
25
}


Peter

von NopNop (Gast)


Lesenswert?

Peter Dannegger schrieb:
> In C gehts einfacher:

Find ich auch schöner zu lesen...aber ich glaube kürzer wie so geht 
nicht mehr :-D

von Jobst M. (jobstens-de)


Lesenswert?

1
.include "m48def.inc"
2
3
; IN  = Port D (Low-active)
4
; OUT = Port B (High-active)
5
; Reset = Reset (Low-active)
6
7
.def temp  = r16      ; allgemeines Register
8
9
.org 0x0000
10
  ; Stack wird nicht benötigt
11
12
    ldi  temp, 0xFF
13
    out  PORTD, temp ; Port D mit Pullup
14
    out  DDRB, temp  ; Port B als Ausgang
15
16
    ldi  temp, 0x05  ; Power down & Sleep-Enable
17
    out  SMCR, temp
18
19
    clr  temp
20
    out  MCUCR, temp  ; PUD  - Pullups erlauben
21
    out  DDRD, temp   ; Port D als Eingang
22
    out  PORTB, temp  ; Port B auf L
23
24
wait_for_key:
25
    in  temp, PIND  ; Eingang lesen (Ports alle '1' wenn nicht aktiv)
26
    com  temp    ; Invertieren
27
    breq  wait_for_key  ; Wenn Z gesetzt ist keine Taste gedrückt - also weiter nach Taste gucken
28
29
    out  PORTB, temp  ; Taste gedrückt und ausgeben
30
31
death_end:
32
    sleep
33
    jmp  death_end  ; Auf Reset warten

Nochwas in ASM

Edit: geht noch etwas kürzer ...
;-)


Gruß

Jobst

von Dave 9. (dave94)


Lesenswert?

Vielen Dank für die Hilfe !
Dann werd ich das mal in c testen =)

von NopNop (Gast)


Lesenswert?

David K. schrieb:
> Dann werd ich das mal in c testen =)

Und vorallem versuch es zu verstehen was da gemacht wird.
Hätte das selbst nie so geschrieben, aber ich finde es echt Wahnsinn wie 
kompakt man das zusammenbekommt.

Grüße

von Jobst M. (jobstens-de)


Lesenswert?

Peter Dannegger schrieb:
> PORTD = mask;           // output on

Hmmm ... Ehr: Pullup on

Ich denke, daß das PORTB sein soll ...


Gruß

Jobst

von Peter D. (peda)


Lesenswert?

Jobst M. schrieb:
> Ich denke, daß das PORTB sein soll ...

Stimmt.

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.