Ich habe 2 Taster und 33 Ausgänge. Mit den Tasten möchte ich einfach nur
rauf und runterschalten können, so dass jeweils nur einer der 33
Ausgänge high ist. Beim Tippen soll jeweils am Ende Schluss sein, also
nicht von 33 auf 1 springen bzw. umgekehrt. (Es sind wirklich 33 und
nicht 32, ließe sich notfalls auf 31 reduzieren).
Der Zustand soll allerdings beim Ausschalten gespeichert bleiben und
nach dem Wiedereinschalten sollen die Ausgänge beim Betätigen der Taster
an der richtigen Stelle wieder weiterschalten.
Da mir für einen Mikroprozessor die Programmierkenntnisse und auch das
Programmiergerät fehlen, dachte ich an handesübliche CMOS oder
TTL-Bausteine mit einem EEProm. Die Zahl der Bauteile dürfte eigentlich
in überschaubarem Rahmen bleiben. (Die Entprellung der Taster erst mal
außer Acht gelassen).
Vor 20 Jahren war ich mit den Logikbausteien mal ziemlich fit.
Inzwischen bin ich jedoch völlig aus der Materie raus, was mich gerade
etwas erschrickt.
Also weiß jemand wo ich zu meinem Anliegen Schaltbeispiele finde? Oder
hat jemand einen groben Lösungsansatz?
Welchen Bausteine nehme ich und wie schreibe ich die Daten ins EEProm
und vor allem, wie bringe ich die gespeicherten Daten beim Einschalten
wieder in den Zähler?
Das Grundverständnis ist irgendwie noch da, aber beim Zusammensetzen des
Puzzels haperts dann doch bei mir.
Dietmar schrieb:> Welchen Bausteine nehme ich und wie schreibe ich die Daten ins EEProm
Tja, ohne Microcontroller, hmm.
Mal die analoge Lösung: Ein digitales nonvolatile Potentiometer wie
http://www.analog.com/media/en/technical-documentation/data-sheets/AD5116.pdf
erzeugt eine variable Spannung und eine LED-Lichterkette wie
https://www.mikrocontroller.net/attachment/12327/U1096B.pdf
uups, uralt und auch nur 30, aber will man wirklich 4 LM3914 kaskadieren
?
zeigt die an. Da analog, muss es genau stimmen, die Spannung auf
1/33tel.
Blöd sind die 33, weil das Poti bis 63 hochtaktet und wenn man dann
wieder DOWN drückt kommt man erst zu 62, 61, bis bei 32 endlich eine
andere LED leuchtet.
Also müsste noch eine Sperre hinzu, die den UP Taster inaktiv macht,
wenn die 33. LED schon leuchtet, das kann man beim LM3914 erreichen in
dem die Spannung an der LED zur Spannung für den Taster wird, wenn sie
nicht leuchtet ist es VCC, leuchtet sie, ist die Spannung zu niedrig für
den Logikpegel, ggf. mit Widerständen anpassen.
An ein digitales Poti hab ich auch schon gedacht.
Lassen wir mal die krumme Zahl von 33 weg. Und der Ausgang darf auch
Binär oder BCD sein.
Da gäbe es ja noch den Arduino, bei dem ich die paar Codezeilen
vielleicht mit etwas Einarbeitung hinbekommen könnte. Weiß aber nicht,
ob ich mit Kanonen auf Spatzen schießen will... Außerdem brauche ich die
Schaltung in dreifacher Ausfertigung.
Dietmar schrieb:> Fällt mir noch ein: Gibt's nicht einen ganz einfachen AD-Wandler, den> ich an das digitale Poti anschließen könnte?
TC826, aber du wolltest 33 Digitalausgänge, nicht ein LCD Dot Display.
Dietmar schrieb:> Da gäbe es ja noch den Arduino, bei dem ich die paar Codezeilen> vielleicht mit etwas Einarbeitung hinbekommen könnte. Weiß aber nicht,> ob ich mit Kanonen auf Spatzen schießen will...
Solche Kanonen kosten als fertig bestücktes Board keine 2€ und da
funktioniert das Schreiben vom EEPROM schon.
Ich werf da mal den 4017 in den Raum. Die kann man auch kaskadieren,
braucht aber noch etwas Kleinkram dafür. Vier Stück davon, ein paar
Flipflops dazu, und ...fast fertig. Zum Speichern eventuell einen
kleinen Akku, der die 4017 versorgt. die sollten ja nicht so viel
verbrauchen.
Was hängt denn an den Ausgängen dran?
@ Dietmar (Gast)
>Da mir für einen Mikroprozessor die Programmierkenntnisse und auch das>Programmiergerät fehlen,
Dann frag mal freundlich im Forum, ob dir einer so einen IC
programmiert. Das ist keine große Aktion. Nimm einen DIL 40 AVR, ein
kleines Programm, das den Zustand im EEPROM speichert, fertig.
>Welchen Bausteine nehme ich und wie schreibe ich die Daten ins EEProm>und vor allem,
AHA! Dafür brauchst du auch ein Programmiergerät. Nix gewonnen.
Das mit TTL & EEPROM aufzubauen ist möglich, aber im Jahr 2017 maximal
sinnlos.
Edit: Hmm, ein 40er AVR hat aber nur 32 IOs, also müsste man entweder
auf deine 31 Ausgangsvariante umschwenken und die beiden Taster über ein
IO-Pin einlesen (mittels ADC).
Oder du kaufst dir einen Arduino Mega, der hat genügend IOs.
cmos schrieb:> Ich werf da mal den 4017 in den Raum. Die kann man auch kaskadieren,> braucht aber noch etwas Kleinkram dafür. Vier Stück davon, ein paar> Flipflops dazu, und ...fast fertig
Und wieherum muß man die einlöten, damit sie rückwärts zählen?
Falk B. schrieb:> Dann frag mal freundlich im Forum, ob dir einer so einen IC> programmiert.
ATtiny25 (o.ä) und ein paar Schieberegister (4094, 74xx595) lösen das
Problem mit (fast) beliebig vielen Ausgängen.
Dietmar schrieb:> Da mir für einen Mikroprozessor die Programmierkenntnisse und auch das> Programmiergerät fehlen
Schon mal von Arduino gehört? Wenn sogar "Künstler" damit was
brauchbaren hinkriegen, dann kriegt das so jemand doch locker hin:
Dietmar schrieb:> Vor 20 Jahren war ich mit den Logikbausteien mal ziemlich fit.
Wenns der Arduino zu wenig IO Ports hat dann suche nach dem Stichwort
"Porterweiterung".
Wenn immer nur einer der Ausgänge High sein soll, und es notfalls auch
31 Ausgänge sein können, was spricht gegen einen Zähler mit 2
nachgeschalteten 16-1-Demultiplexern, beispielsweise 74HC4067, und einer
entsprechenden Rückführung?
Hanns schrieb:> Wenn immer nur einer der Ausgänge High sein soll,
Sofern LEDs angesteuert werden sollen, kann man auch eine 6 x 6 Matrix
mit einem 20-pol. µC ansteuern. Wäre je nach Anordnung der LEDs bloß ein
bißchen blöd zu verdrahten.
Viele tolle Tipps, danke!
Wenn ich so darüber nachdenke, sehe ich jetzt nur noch zwei sinnvolle
Möglichkeiten. Entweder ich nehme ein digitales Poti und 8 LM339 (hab
ich beides noch in größeren Mengen herumliegen) und nagle das am
Wochenende auf Lochraster oder wenn ich mich schon einarbeite, lasse ich
das mit den Logikbausteinen und versuche mich mal an einem
Mikroprozessor. Wird ja eigentlich auch mal Zeit :) O.k. oder halt
Arduino als dritte sinnvolle Lösung.
Ich hätte da selbst noch eine verrückte Idee. Ursprünglich wollte ich
das Thema nämlich ganz anders eröffnen. Mein allererster Gedanke für
meinen Zweck waren bistabile Relais, wodurch ich dann auf Speicherzellen
aus einem Kondensator und einem FET oder einem hochohmigen OpAmp kam.
Halten den Zustand eingegossen ein paar Wochen, wenn nicht länger. Sowas
hab ich als Kind mal aus einem Grundig-Fernseher ausgeschlachtet.
S. Landolt schrieb:> ATmega8515 oder ATmega162 mit 35.
Oder AT89LP51ED2 mit 36 IOs im DIP-40, bzw. 40 IOs im PLCC-44.
Das Programm paßt bequem in die Demoversion des Keil C51. Geflascht wird
es über den UART-Bootloader im ROM.
Dietmar schrieb:> wie bringe ich die gespeicherten Daten beim Einschalten> wieder in den Zähler?
Wie heißt die Anweisung, dass bei einem Reset bestimmte Zellen nicht
verändert werden?
Ich finde, das ist ein guter Aufhänger, die µC Programmierung zu lernen.
Man könnte mit einem Blue-Pill Board (STM32F103C8T6) für ca. 1,50€ bei
Ali Express anfangen. Das hat (wenn man auf USB und Uhrenquarz
verzichtet) 31 freie I/O Pins. Einen davon könnte man analog für die
beiden tasten verwenden, dann bleiben noch 30 Ausgänge übrig.
Oder das nächst größere STM32F103RET6 Board, das kostet allerdings 6
Euro.
Als Schnittstelle zum PC brauchst du einen USB-UART oder ST-Link
Adapter. Ich würde den ST-Link bevorzugen, weil man damit auch debuggen
kann.
Die Board werden beide von der Arduino IDE unterstützt (via Plugin).
Dietmar schrieb:> Entweder ich nehme ein digitales Poti ... oder ... versuche mich mal> an einem Mikroprozessor. ... oder halt Arduino als dritte sinnvolle Lösung.
Der Zahlenraum bis Zwei ist schon unübersichtlich.
Auf einem Arduino Board werkelt ein Mikrocontroller ;-)
Stefan U. schrieb:> Das hat (wenn man auf USB und Uhrenquarz> verzichtet) 31 freie I/O Pins. Einen davon könnte man analog für die> beiden tasten verwenden, dann bleiben noch 30 Ausgänge übrig.
Was soll die IO-Zählerei. Solange der Controller zwei/drei Pins für SPI
oder I2C besitzt, lassen sich doch etliche LEDs damit steuern. Über I2C
mit 4x PCA9538 bekommt man ohne Zusatzzirkus 32 IOs, mit 2x MCP23017
ebenfalls, mit PCA9554 käme man auf bis zu 64 IOs, um nur ein paar zu
nennen. Für SPI gibts den 74hc595, MCP23S17 und und und ...
Dietmar schrieb:> Mit den Tasten möchte ich einfach nur> rauf und runterschalten können, so dass jeweils nur einer der 33 Ausgänge> high ist...
....
Dietmar schrieb:> Lassen wir mal die krumme Zahl von 33 weg. Und der Ausgang darf auch> Binär oder BCD sein.
???
Ein Ausgang aktiv oder BCD bzw. binär? Das ist schon ein Unterschied.
Was soll es denn nun sein?
Für die Lösung mit einem Ausgang würde ich 74HC154, 74HC4514 mit
entsprechenden Zählern davor verwenden.
Alternativ, aber Old School wäre ein 16 Bit-Eprom und ein Zähler davor.
Wobei, 74er sind auch Old School?
Und wer auf I2C oder SPI verzichten möchte (Neueinsteiger oder noch
keine Erfahrung damit), der kann 4 simple Schieberegister , z.B.
TPIC6C595DG4 (bis 33V Schaltspannung) oder preiswertere Typen mit
geringerer Spannungsfestigkeit an einen 8-beinigen µC, z.B. PIC12F...,
hängen.
Damit hat man 4*8=32 Schieberegister- Ausgänge und bei Bedarf hat der µC
noch einen Pin frei für Ausgang Nr. 33.
Der EEPROM des µC hält ca. 1Mio. Schreibzyklen aus, was für einige Zeit
reichen sollte ;-)
Gruß
Johannes
Ich weiß halt nicht, wie lange ich dafür brauche C zu lernen und das
dann nicht auf einem PC sondern gleich auf einem Mikrocontroller.
Assembler werde ich auch nicht schneller begreifen. Ich hatte damit noch
nie zu tun und das letzte was ich programmiert habe war BASIC und PHP3.
Also eeeewig her. Habe ich mir damals zwar auch selbst beigegracht, aber
das war doch im Gegensatz so einfach wie Kaugummie kauen. Gut, eine LED
werde ich sicher zum blinken bringen, aber wenn's darum geht statt den
Tasten einen Drehgeber anzuschließen, werde ich garantiert die ersten
Schwierigkeiten bekommen, die ich ohne fremde Hilfe nicht lösen kann.
Also gut, ich schaue mir die Vorschläge mal an und besorge mir ein
Entwicklerboard.
Oder wäre doch Arduino was? Ich könnte den Controller später auch ohne
Board in meine Schaltung einzubauen:
https://www.arduino.cc/en/Main/Standalone
Nochmal wegen den 33 Ausgängen. Es reichen ja auch 8. Braucht dann halt
ein paar weitere Bauteile um aus dem Binärcode 33 Signale zu erhalten.
Dietmar schrieb:> Nochmal wegen den 33 Ausgängen. Es reichen ja auch 8. Braucht dann halt> ein paar weitere Bauteile um aus dem Binärcode 33 Signale zu erhalten.
Warum schreibst Du nicht mal was Du genau machen möchtest?
Vielleicht auch mit Skizze....
Dietmar schrieb:> Oder wäre doch Arduino was? Ich könnte den Controller später auch ohne> Board in meine Schaltung einzubauen:> https://www.arduino.cc/en/Main/Standalone
Ein Attiny xx oder ein Atmega328 in Verbindung mit einem MAX7219 ginge
evtl. auch. Da kannst Du jede Forme von Code ausgeben wie Du willst. Die
Signale sind halt nicht statisch.
...aber, wir wissen ja nicht was Du genau vorhast...?
> Braucht dann halt ein paar weitere Bauteile um aus> dem Binärcode 33 Signale zu erhalten.
Nicht ein paar, sondern eine ganze Menge Bauteile. Da wäre mir ein
Mikrocontroller mit ausreichend Pins 10 mal lieber, selbst wenn der am
Ende möglicherweise ein bisschen mehr kostet.
Ich habe gerade nochmal genau nachgezählt, jetzt wo ich Zugriff auf
meine Unterlagen habe. Das Arduino kompatible aber nicht darauf
festgenagelte 1,50€ Bluepill Board hat 33 I/O Pins, die du verwenden
kannst. Der USB Stecker darf dann nicht benutzt werden, aber den
brauchst du ja auch nicht.
Wenn du den Jumper "Boot1" abziehst, bekommst du noch einen weiteren Pin
PB2 als Bonus dazu. Den kannst du als Eingang verwenden. Du könntest
dort einen Taster so anschließen, dass der Pin nur beim Drücken auf High
geht, dann kollidiert er nicht mit der seriellen
Programmierschnittstelle.
Ansonsten musst du zwei weitere Pins für den Programmieradapter doppelt
belegen. Im seriellen Fall sind das PA9 und PA10. Wenn du den ST-Link
Adapter verwendest, sind es die beiden mittleren Pins an der 4-poligen
Stiftleiste PA13 und PA14.
Ich weiß nicht, was du da als Last anschließen willst. Um auf Nummer
Sicher zu gehen könntest du an den beiden programmier-Pins Jumper
vorsehen, welche die Last während des Programmiervorgangs abklemmen.
Wie gesagt gibt es für etwas mehr Geld auch größere Boards ebenfalls mit
einem STM32F103 Mikrocontroller aber wesentlich mehr I/O Pins.
Mehr Infos dazu hier: http://stefanfrings.de/stm32/index.html
Dietmar schrieb:> Ich weiß halt nicht, wie lange ich dafür brauche C zu lernen ...> ... und das letzte was ich programmiert habe war BASIC und PHP3.
Ich meinte nicht C sondern eine "lesbare" Programmiersprache, auch wenn
die C-Fans das vielleicht nicht hören/lesen möchten.
Bei mikroe.com gibt's das MikroBASIC als kostenlose Testversion bis 2k
Programmworte. Das reicht dicke für diesen Anwendungsfall.
(Ich habe vor 8 Jahren als Anfänger mit dieser 2k-Testversion einen
Modellbau- Servotester mit PIC16F819 mit
- Anzeige von Impuls- und Wiederholungsrate und numerische
und %-Angabe auf LCD 16x2
- Spannungs- und Strommessung des Servos
- Messung der Senderimpulse und Taktrate
- Erzeugung von Servoimpulsen 1...2ms, Einstellung mittels Poti
- Erzeugung von Servo-Dauerlauf als Sinus- oder Dreieckfunktion mit
einstellbarer (Poti) Geschwindigkeit
realisiert)
Gruß
J.Ro.
Na gut, meine Befürchtung war, dass ich hier in der Luft zerissen werde,
wenn ich mein Vorhaben schildere, weshalb ich das drumherum schon gleich
weggelassen habe.
Ich bin dabei mir einen Hifi-Receiver mit Internetradio zu bauen.
Internet und Display laufen über einen Banana Pi (mit einem
Konsolenplayer, der auch Radio streamen kann). Das funktioniert bereits
incl. Software. Die Endstufe ist auch fertig.
Für die Bedienung benötige ich drei Drehgeber. Einmal für Senderwahl und
Steuerung des Players. Dann noch zwei für die Klangregelung.
Für die Steuerung des Players habe ich 2 TTL IC (7486 und 7403) genommen
um den Drehgeber auszuwerten und dazu noch ganz pragmatisch ein IC aus
einer alten Computertastatur, das aus den Impulsen die Steuercodes
macht.
Da die Klangregelung über zwei parametrische Equalizer erfolgen soll und
ich ich keine 6 Potis auf der Frontplatte möchte, soll die Bedienung
über zwei Drehgeber erfolgen. (In Stufen, also keine digitalen Potis.
Vielleicht je 16 Stufen für Abschwächung und Verstärkung, für Frequenz
und Bandbreite weiß ich noch nicht). Über die Taste des Drehgebers wähle
ich zwischen Frequenz, Bandbreite und Verstärkung und durch Drehen
verändere ich die Werte. Also sozusagen 3 Ebenen. Die Bauteilewerte für
den Equalizer werden dann über 4066 Bausteine umgeschaltet.
Die Drehgeber werte ich auch hier einfach über TTL-Bausteine aus, so
dass ich zwei Leitungen für UP und Down habe und eine dritte für die
Ebene (Frequenz, Bandbreite und Verstärkung).
Es fehlte mir bisher nur noch die Möglichkeit die eingestellten Werte
auch zu speichern (z. B. In ein EEProm), weshalb ich dieses Thema
eröffnete.
Da ich nicht davon ausgehe, dass ich es aufgrund meiner fehlenden
Kenntnisse in einem vernünftigen Zeitrahmen schaffe 3 Drehgeber und
mehrere Ebenen mit so vielen Ausgängen über einen Controller oder auch
drei Controller zu steuern, dachte ich an einen diskreten Aufbau.
Deshalb habe ich die Drehgeber erst gar nicht erwähnt.
So das sind die Hintergründe.
Ja ja, immer diese Hobbyelektroniker die mit ihrem Halbwissen utopische
Projekte realisieren wollen ;) Aber bisher bin ich ja auch weit gekommen
und alles funktioniert prima, bis auf die Sache, dass ich die
Equalizer-Einstellungen nicht speichern kann. Also auf der einen Seite
habe ich die Up/Down Impulse von den Drehgebern und auf der anderen die
Reihe mit 4066-Bausteinen. Das zu verbinden wäre ja noch kein Problem,
aber mit Speicherung der letzten Einstellungen schon.
Michael B. schrieb:> Gar nicht.>> Auf einem Arduino ist der ganze Code
Danke, das werde ich dann auch mal ausprobieren und versuchen zu
verstehen.
Heute Morgen habe ich mich bei Tinkercad registriert und werde mal ein
wenig im Simulator mit dem Arduino spielen um überhaupt einen Einstieg
zu haben.
Dietmar schrieb:> Also auf der einen Seite habe ich die Up/Down Impulse von den> Drehgebern und auf der anderen die Reihe mit 4066-Bausteinen
Meinst du nicht, daß schon das ungeschickt ist, und man mit CD4051 viel
leichter umschalten könnte, mit weniger Verbindungen ?
Und wenn man schon CD4066 verwendet, dann muss man nicht einzel
dimensionierte Widerstände oder Kondensatoren umschalten, sondern kann
eine 1k und einen 2k und einen 4k und einen 8k Widerstand jeweils einzel
zu und wegschalten damit man 1..15k herausbekommt.
Übrigens könnte der bPi sowohl die Drehencoder decodieren als auch den
Equalizer im Sound gleich einrechnen, man braucht gar keine zusätzliche
Hardware.