Forum: Mikrocontroller und Digitale Elektronik Taster als Schalter


von Ephraim H. (ephi)


Lesenswert?

Hallo,

ich suche eine möglichst einfache Hardwarelösung um einen Port Pin eines 
AVRs zu togglen.

Ich habe schon viele schaltungen in diese richtung gesehen, aber die 
schalten alle eine meist etwas größere Last.

eine der lösungen war mit einem T-FlipFlop. Wie muss ich die schaltung 
aufbauen um damit den port zu steuern?

andere möglichkeiten gehen natürlich auch (nur Software in diesem Fall 
nicht)

Gruß

von Hubert G. (hubertg)


Lesenswert?

Willst du den Eingang toggeln? Dann mit einem FlipFlop. Den Ausgang 
kannst du nur über die Software toggeln.

von Nafets S. (sumada)


Angehängte Dateien:

Lesenswert?

Also die einfachste Möglichkeit ist ganz klar ein JK-FF zu nehmen, den J 
und K Eingang auf Vcc schliessen, und den Taster entprell an den Clock 
anschliessen.
Entprellen würde ich am besten mit einem RC-Glied nach dem Taster, mit 
einer Zeitkonstante von etwa 5ms. Im Anhang habe ich dir kurz eine 
solche Schaltung gezeichnet. Die Werte kannst du so übernehmen.
MFG

von Peter D. (peda)


Lesenswert?

Ephraim Hahn schrieb:
> ich suche eine möglichst einfache Hardwarelösung um einen Port Pin eines
> AVRs zu togglen.

Dir ist wohl eine Softwarelösung viel zu effektiv?

Entprellen und Togglen sind doch die Lieblingsaufgaben eines jeden MCs.
Kostet allerdings etwa 0,1% an CPU-Performance.

Oder ist Deine CPU schon zu 99,9% ausgelastet?
Dann nimm nen ATTiny13, der das macht.

Ein Logik-FF kann das nicht wuppen, da er nicht entprellt.


Peter

von Ephraim H. (ephi)


Lesenswert?

Es liegt nicht an der CPU last die zu viel wäre.
In meinem hauptprogramm wird eine Schleife durchlaufen, dieextrem 
zeitkritisch ist, und dazu muss ich dann wenn ich es brauche die 
zustände am PORT abgreifen können, und kann mir keine unterbrechung der 
schleife durch interrupts erlauben.

@sumada:
Vielen Dank! Ich werde es mir heut nachmittag ansehn wenn ich wieder zu 
hause bin.

Kann ich parallel zum PORT Pin da ohne weiteres noch eine LED zur 
statuskontrolle dranhängen? verträgt der FF das von der Last her?

Gruß

von Nafets S. (sumada)


Lesenswert?

Tschau

Eine LED sollte kein Problem sein. Ein uC Eingang zieht kaum Strom. Und 
wenn du nicht gerade eine ultrahelle LED nimmst klappt das. Wenn du es 
als Status benötigst reicht eine Stromsparende allemals. Und bei 2-5mA 
stirbt dir kein Logik IC. Wenn du aber trotzdem bedenken hast, kannst du 
ein JK-FF mit Open Collector nehmen, und mit einem Pullup arbeiten. Aber 
eben wie gesagt, ist kein Problem.

von Winfried (Gast)


Lesenswert?

Das nicht per Software zu machen, halte ich auch in fast allen 
Anwendungsfällen für eine falsche Herangehensweise.

von Karl H. (kbuchegg)


Lesenswert?

Ephraim Hahn schrieb:
> Es liegt nicht an der CPU last die zu viel wäre.
> In meinem hauptprogramm wird eine Schleife durchlaufen, die extrem
> zeitkritisch ist,

Was machst du?

von Nafets S. (sumada)


Lesenswert?

Warum das? Wenn ein uC nun mal nicht dafür eingesetzt werden soll, kann 
man ruhig mal zu Hardwarelösungen greifen. Sind zwar ein wenig teurer, 
5€ vielleicht, mann muss aber nicht irgendwo Platz machen in der 
Software. Und Interruptlösungen sind sowieso scheisse, da mann eine SPI 
kommunikation gefährden könnte zum Beispiel. Lieber wieder so wie früher 
machen. Mit Röhren war alles besser :D

von Peter (Gast)


Lesenswert?

da bin ich auch mal neugierig

Ephraim Hahn schrieb:
> Es liegt nicht an der CPU last die zu viel wäre.
> In meinem hauptprogramm wird eine Schleife durchlaufen, die extrem
> zeitkritisch ist,


kannst du die hauptschleife mal zeigen

von Ephraim H. (ephi)


Lesenswert?

die Sache befundet sich noch in der planung.
Um mir den Roman was ich mache zu ersparen, hier hab ich es beschrieben:
Beitrag "Bauprojekt: kleines Lichtmischpult"

von Karl H. (kbuchegg)


Lesenswert?

Bei allem Respekt.
Aber wenn du bei der Anwendung in Timingprobleme kommst, dann machst 
du etwas grundsätzlich falsch.

von Hubert G. (hubertg)


Lesenswert?

Was du noch nicht geschrieben hast ist, möchtest du einen Eingang oder 
einen Ausgang togglen.
Wenn es ein Eingang ist, wie fragst du ohne Software ab.
Wenn es ein Ausgang ist, würde mich Interessieren wie du ohne Software 
togglest.

von Karl H. (kbuchegg)


Lesenswert?

Und wenn ich mir deine Antworten so durchlese, keimt in mir das Gefühl 
auf, dass du noch keine Ahnung davon hast, welche Power dir so ein µC 
gibt.

> Das Problem ist aber, dass ich wärend der Motor um den Fader
> zu stellen betätigt wird ständig eine Kontrollmessung benötige.
> Sonst weis ich ja nicht wann ich den Motor stoppen muss.

Wenn du alle 1 Millisekunde die Positionen aller Fader feststellst, dann 
reicht das Dicke! Oder bewegen sich deine Fader in 1 Sekunde über einen 
Meter weit?
1 Millisekunde ist aber für einen mit 16Mhz getakteten AVR eine halbe 
Ewigkeit. In der Zeit arbeitet der immerhin, über den Daumen gerechnet, 
rund 15-TAUSEND Befehle ab.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> und kann mir keine unterbrechung der schleife durch interrupts erlauben.
Für eine Tasterabfrage brauchst du bei aktivem uC keinen Interrupt. Ob 
du auf einen Taster nach 50us oder erst 50ms reagierst, merkt keiner, 
der den Taster betätigt. Und 50ms sind eine halbe Ewigkeit für einen 
uC...  :-/

EDIT:
Ich schwöre, das mit der halben Ewigkeit habe ich nicht von Karl Heinz 
abgeschrieben. Zudem wären es dann ja 25 Ewigkeiten, weil ja schon 1 ms 
eine halbe Ewigkeit ist   ;-)

von Ephraim H. (ephi)


Lesenswert?

okay, scheinbar unterschätze ich hier 16Mhz um einiges ;-)

trotzdem bietet mir die Hardwarelösung mit dem togglen eines eingangs 
(alles andere wäre ja schwachsinn...) noch einen vorteil: Ich kann 
paralell die status LEDs togglen, ohne dafür ausgangs Ports verschwenden 
zu müssen.
Immerhin sind das mehr als 26 LEDs, die ich brauche die selbst in einer 
Matrix einige Pins benötigen. Und da das ganze ein Einzelstück wird 
interessieren auch keinen die bisschen mehrkosten.

von Karl H. (kbuchegg)


Lesenswert?

Ephraim Hahn schrieb:
> okay, scheinbar unterschätze ich hier 16Mhz um einiges ;-)
>
> trotzdem bietet mir die Hardwarelösung mit dem togglen eines *eingangs*
> (alles andere wäre ja schwachsinn...) noch einen vorteil: Ich kann
> paralell die status LEDs togglen, ohne dafür ausgangs Ports verschwenden
> zu müssen.

Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine 
gespeicherte Sequenz dir das vorschreibt?

> Immerhin sind das mehr als 26 LEDs, die ich brauche die selbst in einer
> Matrix einige Pins benötigen.

Schieberegister an den AVR dran und du kannst >3000 Leds anschliessen, 
ohne in Probleme zu kommen, weil du am AVR nur 3 Pins dazu brauchst.

> Und da das ganze ein Einzelstück wird
> interessieren auch keinen die bisschen mehrkosten.

Ist schon klar. Darum gehts aber auch nicht.
Software ist flexibel. Alles was du jetzt in Hardware machst, wird über 
die Lebensdauer deines Gerätes gesehen, für immer so bleiben.
Alles was du in Software machst, kannst du immer noch ändern, wenn dir 
das Verhalten nicht gefällt.
Du kommst vielleicht in einem halben Jahr drauf, dass es toll wäre, wenn 
dein Lauflicht auch noch ganz schnell laufen soll. Hast du den 
Taktgenerator dafür in Hardware aufgebaut, musst du mit dem Lötkolben 
ran. Ist der Taktgenerator aber in Software, hängst du dich in die 
Entwicklungsumgebung, fügst zur Timingtabelle des Taktgenerators eine 
Zeile dazu; überlegst dir, wie der Benutzer die auswählst (wenn du die 
Software von vorneherein geschickt aufgebaut hast, geht der Schritt zb 
schon mal automatisch); brennst das ganze in den AVR und bist fertig. 
Ist das Programm einigermassen geschickt aufgebaut, dann ist diese 
Änderung schneller fertig, als dein Lötkolben braucht um warm zu werden.

Die Kunst liegt daran, den Mittelweg zu finden zwischen
* was mach ich in Software
* was mach ich in Hardware

Sofern nicht massive Timingprobleme dagegen sprechen, versucht man immer 
möglichst viel in die Softwareschicht zu verlagern. Warum? Weil Software 
felxibel ist und der erste Entwurf nie vollständig ist bzw. fehlerhaft 
ist.

von Peter D. (peda)


Lesenswert?

Ephraim Hahn schrieb:
> Immerhin sind das mehr als 26 LEDs

Dann nimm eben 3 Stück ATtiny2313, die je 9 Tasten entprellen und 
togglen.

Ne andere Möglichkeit: Tastenabfrage per 74HC165, LEDs per 74HC595.

Oder pro Fader+Motor+Taste+LED nen ATtiny24 und alle 26 ATTiny24 
parallel am I2C-Bus.


Oder hast Du schon ne Hardwarelösung gefunden, die auch entprellt?


Peter

von Ephraim H. (ephi)


Lesenswert?

> Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine
> gespeicherte Sequenz dir das vorschreibt?
Das laden hätte ich einem eigenen controller überlassen, der quasi 
parallel zum taster angeschlossen ist.

das entprellen hätte ich mittels RC glied geregelt.

eine weitere möglichkeit die ich mir ausgedacht habe wäre jedem Kanalzug 
einen eigenen kleinen controller zu spendieren. Dieser kümmert sich dann 
um die auswertung des faders mittels ADC, um die taster für den kanal 
und um die motorsteuerung.

Ist der I2C denn schnell genug um von 8 controllern nacheinander den 
10bit ADC wert und die tasterzustände (4 taster pro kanal) mit einer für 
den benutzer unbemerkbarer Latenz an den hauptcontroller zu schicken?

haben die ATTinys überhaupt einen ADC?

und noch eine ganz andere Frage:
ich muss am schluss ja das 0-10V signal ausgeben.
das hätte ich per pwm und OPA gelöst: 
Beitrag "0-10V mit PWM am AVR"
aber kann denn ein großer avr wie z.B. der 1280 überhaupt 6 10bit pwm 
signale gleichzeitig ausgeben?

von Nafets S. (sumada)


Lesenswert?

Peter Dannegger schrieb:
> Ephraim Hahn schrieb:
>
> Oder hast Du schon ne Hardwarelösung gefunden, die auch entprellt?

Hardwarelösung die entprellt? ist nicht dein ernst oder? RC-Glied an 
Schmittrigger, Tau so einstellen dass bei 5ms Einschaltschwelle erreicht 
ist. OK 5ms ist untere grenze wenn mach nach Lernbuch geht. kannst auch 
10ms nehmen

von Nafets S. (sumada)


Lesenswert?

Sorry im Zitat ist zu viel mitgekommen

von Karl H. (kbuchegg)


Lesenswert?

Ephraim Hahn schrieb:
>> Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine
>> gespeicherte Sequenz dir das vorschreibt?
> Das laden hätte ich einem eigenen controller überlassen, der quasi
> parallel zum taster angeschlossen ist.

Das meinte ich nicht.
Wie schaltest du dann die LED per µC ein oder aus, wenn das 
hardwaremässig gar nicht vorgesehen ist, weil der Taster selber die LED 
mit ein bzw. ausschaltet.

> eine weitere möglichkeit die ich mir ausgedacht habe wäre jedem Kanalzug
> einen eigenen kleinen controller zu spendieren. Dieser kümmert sich dann
> um die auswertung des faders mittels ADC, um die taster für den kanal
> und um die motorsteuerung.

Blos nicht.
Das war ein Scherz von PeDa.
Du bist mit einem Prozessor schon überfordert. Wenn du nicht 16 ADC 
Kanäle brauchen würdest, würde ich dir sogar das jetzige 2 Prozessoren 
Konzept ausreden.
Aber 2 Prozessoren mittels TTL-UART miteinander zu verbinden: Da reden 
wir dich schon durch. Das kriegen wir hin.

Aber viele Prozessoren: Du hast keine Ahnung worauf du dich da einlässt.

> den benutzer unbemerkbarer Latenz an den hauptcontroller zu schicken?

Ich sag mal so:
Wenn dein Prozessor zwischendruch noch zur eigenen Belustigung 200 
teuflisch schwierige quadratische Gleichungen löst, wird dein Benutzer 
das immer noch nicht mitkriegen.

> haben die ATTinys überhaupt einen ADC?

Datenblätter.
Die gibts auch in einer Kurzform, bzw. bei Atmel gibt es eine Tabelle 
mit den Eigenschaften aller im Verkauf befindlichen Produkte.

> aber kann denn ein großer avr wie z.B. der 1280 überhaupt 6 10bit pwm
> signale gleichzeitig ausgeben?

Sicher. Wenn man die PWM zb in Software macht, keine übertriebenen 
Anforderungen an die PWM Frequenz hat und das ganze hinten nach 
ordentlich filtert.
Aber an der Stelle könnte man dann tatsächlich über eigene PWM Module 
nachdenken. Ob man Platinenplatz in ein aufwändiges Filter investiert 
oder in ein PWM Modul, welches dank höher PWM Frequenz die Anforderungen 
an das Filter senkt, ist Jacke wie Hose. Aber: man darf auch nicht 
übertreiben. Irgendwann ist auch der beste Prozessor überlastet, wenn 
man ihm zuviel zumutet. Eine PWM wird in deinem Projekt immer eine PWM 
bleiben und da wird sich auch nichts ändern. Ob man die in Software 
macht oder in Hardware ist so gesehn vom Aufwand her wahrscheinlich 
egal. Verschiebt man aber die PWM aus der Software in die Hardware 
kriegt man wieder Rechenzeit frei ohne das man im Gesamtkonzept 
Flexibilität aufgeben muss.

von Dieter S. (accutron)


Lesenswert?

Um einen Taster abzufragen braucht man normalerweise keine 
Interrupt-Steuerung. Normalerweise ... kommt natürlich drauf an, wo es 
in der Hauptschleife noch so zu Verzögerungen kommen kann bzw. wie lange 
die Durchlaufzeit der Schleife dauert.

Gruß

Dieter

von Peter D. (peda)


Lesenswert?

Karl heinz Buchegger schrieb:
> Blos nicht.
> Das war ein Scherz von PeDa.

Nö, war es nicht.
Wenn man viele gleichartige Baugruppen hat, bietet sich eine 
Modularisierung geradezu an.
Jedes Modul kriegt nen Dipswitch zum Einstellen der Adresse, fertig.

Mit 2 Modulen testet und programmiert man und dann kann man beliebig 
erweitern oder auch defekte Module blitzschnell austauschen.
Und der Kabelwust reduziert sich auch erheblich.

Professionelle Anlagen dürften auch so aufgebaut sein.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:

> Professionelle Anlagen dürften auch so aufgebaut sein.

Du willst jetzt aber nicht wirklich einem Anfänger ein
Mehrprozessorkonzept unterjubeln?

von Peter D. (peda)


Lesenswert?

Nafets Sumada schrieb:
> Hardwarelösung die entprellt? ist nicht dein ernst oder? RC-Glied an
> Schmittrigger

Dann sind wir also schon bei 52 Widerständen, 26 Kondesatoren, 26 
Schmitt-Trigger, 26 T-FF.
Mit 74HC14, 74HC112 sind wir dann bei insgesamt 96 völlig überflüssigen 
Bauteilen, die geroutet und gelötet sein wollen.


Peter

von Peter D. (peda)


Lesenswert?

Karl heinz Buchegger schrieb:
> Du willst jetzt aber nicht wirklich einem Anfänger ein
> Mehrprozessorkonzept unterjubeln?

Das könnte etwas sportlich werden.
Man kann ja erstmal mit 2 Fadern anfangen.


Peter

von Michael Wilhelm (Gast)


Lesenswert?

Gurgel mal nach LSD 8. Da werkelt nur ein ATMEGA 64 drin und etwas 
Peripherie. Mach es nicht komplizierter als es sein muss.

MW

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> Karl heinz Buchegger schrieb:
>> Du willst jetzt aber nicht wirklich einem Anfänger ein
>> Mehrprozessorkonzept unterjubeln?
>
> Das könnte etwas sportlich werden.

:-)
Uff. Aufatmen

Du hast natürlich recht. Profimässig würde man so ein Kanalmodul mit 
Tiny, Motorfader, Tastern und LED machen. Das ganze an einem Bus und 
fertig ist die Sosse. Mein Akkulader hat auch so einen Aufbau für die 
Ladeinseln mit zentraler Anzeige.

Aber ich denke für ihn wäre Schieberegister für Taster, LED und Motor 
sowie ein 8-pol Flachbandkabel für die Potis momentan die vernünftigste 
Lösung. Ergibt immer noch schöne 'Module'.
Wenn man mal Aufwand zu Lernkurve berücksichtigt.

von Ephraim H. (ephi)


Lesenswert?

Nun gut.
Ich habe so das gefühl ich würde mich alleine gnadenlos in heillosem 
Chaos verrennen ;-)

Ganz ehrlich wäre ich sehr für diese mehrprozessor Lösung, da ich in 
weiterer Zukunft ein Projekt ins auge fasse für das ich ganz ähnliche 
Fadersteuerungen benötige, nur weitaus mehr (25).

von Ephraim H. (ephi)


Lesenswert?

ich glaube ihr hab das etwas falsch aufgefasst insgesamt sind hier 6 
kanalzüge + 2 busse + masterzug von Nöten also insgesamt 9 Module,
 um das nochmal festzuhalten

von STK500-Besitzer (Gast)


Lesenswert?

>ich glaube ihr hab das etwas falsch aufgefasst insgesamt sind hier 6
>kanalzüge + 2 busse + masterzug von Nöten also insgesamt 9 Module,
> um das nochmal festzuhalten

Schön gerechnet...
9 ADC-Kanäle hat leider kein AVR...
Versuch doch erst mal einen Motorfader anzutreiben.

von Ephraim H. (ephi)


Lesenswert?

der 1280 hat sogar 16 (gemultiplext)

von Ephraim H. (ephi)


Angehängte Dateien:

Lesenswert?

Soo ich hab mal ein wenig gebastelt:

Ich habe mir mal eine Schaltung für ein Kanalmodul mit einem Tiny261 
gezeichnet. Wenn der vom speicher zu knapp wird kann ich ja problemblos 
einen 461 oder gar 861 nehmen.

Noch eine frage zum I2C Bus: Atmel nennt den ja TWI.
Ich bin mir nun nicht ganz sicher, ob der Tiny den hat. Die pins SDA und 
SCL sind zwar vorhanden aber im datenblatt steht nichts davon.
Oder ist dieses USI das selbe in grün?
und vertragen sich die beiden pullups am TWI mit dem ISP beim flashen?

Auch die Motoransteuerung habe ich noch nicht mit eingezeichnet, da ich 
nicht wirklich weis wie ich das realisieren soll.
reicht es den motor mit einer konstanten spannung einfach an und aus 
zuschalten oder muss ich den per pwm regeln? Wie soll ich die 
vorwärts/rückwärts umpolung mit dem tiny machen?

von Ephraim H. (ephi)


Lesenswert?

noch die motordaten:
Rated voltage of motor     10V DC
Maximum current of motor   800mA or less (at 10V DC)

von Peter D. (peda)


Lesenswert?

Ephraim Hahn schrieb:
> Ich habe mir mal eine Schaltung für ein Kanalmodul mit einem Tiny261
> gezeichnet.

Sieht ganz o.k. aus.
Die 10k an den Tasten braucht man nicht unbedingt, man kann die internen 
Pullups (50k) nehmen.
Quarz brauchst Du für I2C auch nicht, Du kannst die internen 8 oder 
16MHz nehmen.


> Noch eine frage zum I2C Bus: Atmel nennt den ja TWI.

Ja, als Slave ist das USI vollkommen ausreichend. Nur der Master sollte 
das große I2C haben (irgendein ATmega, z.B. ATmega328P).


> Auch die Motoransteuerung habe ich noch nicht mit eingezeichnet, da ich
> nicht wirklich weis wie ich das realisieren soll.

Für nen DC-Motor brauchst Du ne Vollbrücke zum Umpolen.


Peter

von Ephraim H. (ephi)


Angehängte Dateien:

Lesenswert?

okay, hab die schaltung mal soweit angepasst.

Für den Motor habe ich nun einen L293D genommen, habe gelesen dass der 
schonmal erfolgreich mit nem motorfader verwendet wurde.
Muss ich mir für die vergleichsweise kurzen motor laufzeiten über die 
kühlung gedanken machen?

ist der rest okay so?

von STK500-Besitzer (Gast)


Lesenswert?

Spendier den ICs noch 100nF-Kondensatoren an den Versorgungspins.

von Ephraim H. (ephi)


Lesenswert?

hab ich mir der übersichthalber im schaltplan erstmal gespart, da ich 
das ding erstmal auf lochraster aufbaue. Da werde ich dann natürlich 
welche hinpappen.

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.