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.
:
Bearbeitet durch User
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.
Fällt mir noch ein: Gibt's nicht einen ganz einfachen AD-Wandler, den ich an das digitale Poti anschließen könnte?
Beitrag #5173908 wurde vom Autor gelöscht.
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.
:
Bearbeitet durch User
@ S. Landolt (Gast)
>ATmega8515 oder ATmega162 mit 35.
Hehe, was es nicht alles gibt. Dann wäre das geklärt.
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?
Lutz eine Anweisung? Kennst Du die verschiedenen Speicherbereiche in einem Atmel AVR SRAM, FLASH und EEPROM ? Was "macht" was ? --> siehe Datenblatt.
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).
Stefan U. schrieb: > dann bleiben noch 30 Ausgänge übrig. Und drei Ausgänge sollen für immer fehlen? Das ist doch keine Lösung des Problems!
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
:
Bearbeitet durch User
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...?
:
Bearbeitet durch User
> 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.
Dietmar schrieb: > Ich weiß halt nicht, wie lange ich dafür brauche C zu lernen Gar nicht. Auf einem Arduino ist der ganze Code
1 | #define TASTERUP 1
|
2 | #define TASTERDOWN 2
|
3 | char pins[33]={3,4,5,6,7....}; // welche Pins auch immer |
4 | char uptaster,upzustand,downtaster,downzustand,n,i; |
5 | setup() |
6 | {
|
7 | pinMode(TASTERUP,INPUT); pinMode(TASTERDOWN,INPUT); |
8 | for(i=0;i<33;i++) pinMode(pins[i],OUTPUT); |
9 | }
|
10 | loop() |
11 | {
|
12 | i=n; |
13 | uptaster=digitalRead(TASTERUP); |
14 | if(uptaster!=upzustand) if(uptaster&&n<33) n++; |
15 | upzustand=uptaster; |
16 | downtaster=digitalRead(TASTERDOWN); |
17 | if(downtaster!=downzustand) if(downtaster&&n>0) n--; |
18 | downzustand=downtaster; |
19 | digitalWrite(pin[i],i==n); |
20 | digitalWrite(pin[n],1); |
21 | delay(10); |
22 | }
|
Mehr muss man da nicht schreiben.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.