Pages: 1 [2] 3   Go Down
Author Topic: Kondensatoren als Spannungsglättung bei Stepsequencer  (Read 1964 times)
0 Members and 1 Guest are viewing this topic.
Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yep, das hab ich auch bemerkt, dass 32 Buttons mittels Spannungsteiler ein Quirks sind.
Du meinst mittels 74HC165 + Matrix? Wie kommst du auf 2 Pins? (Ich komme auf 3)
Hab mir auch überlegt, es mit 74C922N Key Encoder zu lösen, finde aber so schnell keine Schaltpläne...
Die dritte Lösung, die mir noch einfiel, fällt leider flach: Ich hab eine alte serielle Tastatur ausgeschlachtet, nur wird meine serielle Schnittstelle schon für Mididaten verwendet und diese haben höchste Priorität.

LG
matthias
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20300
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich sprach nicht von Schieberegistern sondern von I2C Port Expandern; hab ja auch ein Modell genannt. Der I2C Bus braucht nur 2 Leitungen.
Ok, Udo sprach davon, wobei ich auch nicht verstanden habe wieso er 2 Leitungen schreibt und nicht 3. (jede Taste auf eine Eingang des Schieberegisters und mehrere Schieberegister in Reihe (bei 32 Tasten 4 Schieberegister zu 8 Eingängen)
Wenn Du eine Matrix aus Schieberegistern bauen willst dann brauchst Du mindestens 4 Leitungen weil Du 2 Schieberegister ansteuern mußt; ein SIPO und ein PISO.

Der 74C922 wertet automatisch eine 4x5 Matrix aus und gibt auf 6 Ausgängen daß eine Taste gedrückt ist, die Zeile und die Spalte.

Grüße Uwe
« Last Edit: December 28, 2012, 02:13:10 pm by uwefed » Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lieber Uwe, meine Antwort bezog sich auf das Posting von Udo smiley
Hab mir mal 10 Stück von den MCP23017´s bestellt (1,5 Euro/Stk, Versandkostenfrei) smiley-wink Die kann ich immer brauchen. V.a. in diesem Projekt hab ich schon IC2 Eproms, d.h. ich gewinne sogar einen zusätzlichen Pin.
Wichtig ist mir, dass ich nicht das Gesamtkonzept verwerfen muss und das fertige Mainboard  ändere (Step Buttons sind glücklicherweise mit den LED´s auf einer anderen Platine)
Theoretisch, wenn ich als Inputs HC165 nehme, kann ich sicher von den vorhandenen 595er 1-2 Pins (Clock) "abzweigen" und dies programmtechnisch lösen. Sauberer wäre wohl der/die MCP23017

Zwecks besserer Beschreibung, kurz meine Auflistung der Pins:
Pin A0= analoge Potis (durch Multiplexer)
Pin A1= Seq Buttons (würde frei werden)
Pin A2= Control Buttons (die funktionieren mittels Spannungsteiler ohne Probleme = 16 Stk, sind auch 1% Widerstände)
Pin A3= free
Pin A4=Eeprom I (I2C)
Pin A5=Eeprom II (I2C)
Pin D0=RX (Midi)
Pin D1=TX (Midi)
Pin D2= DS (shift register)
Pin D3= ST_CP (shift register)
Pin D4= SH_CP (shift register)
Pin D5 = Encoder I
Pin D6 = Encoder II
Pin D7 = LCD I ( LiquidCrystal595 Lib)
Pin D8 = LCD II ( LiquidCrystal595 Lib)
Pin D9 = LCD III ( LiquidCrystal595 Lib)
Pin D10 = Multiplexer I
Pin D11 = Multiplexer II
Pin D12 = Multiplexer III
Pin D13 = free (maybe control LED)

Liebe Grüße
Matthias
« Last Edit: December 28, 2012, 02:42:42 pm by madias » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Meine Buttons schaun ja auch nicht sooooo schlecht aus. Nur das Bohren muss ich noch etwas üben.


* IMAG0327.jpg (528.1 KB, 2592x1552 - viewed 15 times.)
Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Verwendest du einen Bohrständer oder freestyle? smiley Hab mir jetzt extra einen zugelegt, weil ich mit der Hand nicht gerade bohren konnte
Buttons waren sicher teurer - sind die mit LED´s?
Zwecks interesse, was kann dein Stepsequencer?
Geb mal die Eckdaten von meinem her:
Keymatrix: 4x8 Steps (d.h. 4 Reihen)
Unterteilung in:

Pattern: klassischer Patternmodus bis zu 16 Parts pro Song
pro Pattern 5 Parts:, davon:
2x Drumparts: jeder Drumpart besteht aus 4x8 Steps, mit den Potis wird die Velocity eingestellt (Midichannel + note number frei definierbar)
3x "Melody"parts: Stepbuttons regeln 1-4 Notekeys, d.h. 4 fach polyphon pro Step. Potis können nach Reihen eingestellt werden, d.h. entweder: Velocity (für alle 4 Noten zusammen), Pitch, Length, 4x frei definierbare (d.h. pro Pattern) Controller

Song: (max 7 pro EEprom)
(fixe) Aneinanderreihung von Parts, Potis sind komplett frei (Midichannel, Typ)

Performance:
ähnlich wie Songmodus, nur kann mittels der Steptasten das nächste Pattern vorgewählt werden

Die größte Hürde war der kleine RAM Speicher von 2kb, da muss ich permanent in die I2C EEprom´s auslagern (immer pro Pattern, der Lebensdauer zuliebe)
Als Eingabe verwende ich 16 Menütasten + einen Encoder, sowie die analogen Potis.
Das Ding ist eigentlich ein gewachsener Prototyp, quasi überhaupt mein erstes Arduino Projekt, wollte wissen, was mit dem kleinen Käfer alles zu bewerkstelligen ist. Als  nächstes Projekt werden sicher 16 Steps kommen, dafür nur 1x16 Buttons (4x16 wäre ein Lötwahnsinn, v.a. auf Loch/streifenraster).

Kleiner Tipp: Sehe, dass du es mit Bleistift und Lineal die Bohrungen aufzeichnest, ich verwende ein einfaches Zeichenprogramm und drucke es auf Laserklarsichtfolie auf, Klebebandstreifen und fertig.
« Last Edit: December 28, 2012, 03:41:49 pm by madias » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Zum Thema Beschriftung: Mir ist dann auch gekommen, dass ich eine selbstklebende Folie bedrucken hätte können und diese dann aufkleben. Nun ja, zu spät.
Eigentlich wollte ich den Sequenzer für einen SID bauen, hab mich aber dazu entschlossen den dann über MIDI anzusteuern, als externes Gerät.

Mein Sequenzer soll können:

8 Steps, bis zu 4x8 erweiterbar.
Noten entweder per Regler oder Tastatur auswählbar
3 Regler um CC auszuwählen, 3 Potis um Wert einzustellen
Anschlag einstellbar
Er soll auch über das Display bedienbar sein
Tempo einstellbar
usw.

Über das Speichern hab ich mir noch keine Gedanken gemacht, will mich mit dem Projekt Schrittweise nach vorne tasten.

Ich nutze einen Atmega 2560, hab aber trotzdem noch Schieberegister mit drauf, außerdem kann ich mit dem Atmega 2560 mehrere Midi Ausgänge bauen.

Wenn du noch fragen hast, meld dich ruhig.

Edit: Ständerbohrmaschine, aber nicht die richtigen Bohrer dazu.

Taster: http://www.ebay.de/itm/280874502549?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Mein Projekt dokumentiere ich zeitweise hier: http://www.machzin.de/blog/portfolio/arduino-8-step-mid-step-sequenzer/
Auf der Seite bin ich als andreas erreichbar.


P.s.: Ich bin eigentlich die Akai MPC Reihe gewohnt, deshalb bin ich mit den Step Sequenzer Funktionen von Korg und Co. nicht so ganz vertraut.
« Last Edit: December 28, 2012, 03:52:32 pm by komika » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20300
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lieber Uwe, meine Antwort bezog sich auf das Posting von Udo smiley
Habs später bemerkt.  smiley-wink
Grüße Uwe
Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich lese mir gerade deine Beitrag bzgl. Encoder durch - wofür sind die 10k Widerstände? Ich bin "faul" und verwende eine Encoder Library, die funktioniert ganz ok, ich muss jedoch bei meinen alle Werte durch 4 dividieren.
http://www.pjrc.com/teensy/td_libs_Encoder.html
Du willst lt. Projektseite 8 Encoder verwenden - zwingst du den Atmel damit nicht vollkommen in die Knie?
Billiger als eine Selbstklebefolie ist ein A4 Fotopapier (schön dick!), mit Tinte ausgedruckt und mit Sprühkleber befestigt. Vielleicht sogar noch Sprühlack als letzte Schicht darauf. Damit spar ich mir auch die Buttons (siehe Foto des Hauptgeräts), die drück ich mit dem Fotopapier durch, erinnert ein bisschen an die alten DX7 oder Alpha Juno´s smiley
Mit dem 2560er hast du ein bisschen mehr RAM "Luft", aber auch nicht berauschend. Mein Tipp, den ich mir beim Beat707 Projekt abgeschaut habe, ist mit I2C EEproms zu arbeiten. (Am besten immer mittels Pagewrite und pro Patternseite). Schreiben ist eher langsam, lesen kein Problem, va.. beim Patternwechsel in Echtzeit.
Als Timer"herzstück" verwende ich die TimerOne Library mit Interrupt, wo im Subprogramm immer - zeitgenau - bis acht gezählt wird. Die Midifunktion hab ich bis jetzt noch nicht programmiert, die wird zuletzt kommen, ist aber das geringste Problem.
Weil du auch in deinem Blog schreibst bzgl. SMD Version: Ja, den 2560er gibt´s nur als SMD, leider bin ich zu spät auf den hier gestoßen: http://maniacbug.wordpress.com/2011/11/27/arduino-on-atmega1284p-4/ gibt´s für 6 Euro bei Reichelt! Hat 16kb Ram, 128kb Flash, 4kb EEprom und 32 I/O Pins und ist in PDIP Ausführung. Lt. Recherche auch mit der Arduino IDE zum Laufen zu bringen.
Die Taster schauen cool aus, dürften aber der Entprellwahnsinn sein...

Bin ja mal gespannt, wie sich unsere beiden Projekte entwickeln werden!
Leider ist mein Code noch nicht fertig und schlecht dokumentiert und tw. noch hirnrissig programmiert, falls du doch die ein oder andere Idee verwenden willst: https://docs.google.com/folder/d/0B3sgtwOcRTSUeE0wMEF0MGpMMnM/edit

PS: Halte mich gar nicht an Korg usw, sondern bau mir "meinen" Sequencer zusammen, irgendeinen Vorteil soll unsere Bastelei ja haben!

@Uwe: Kein Problem!
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20300
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Statt den EEPROMs kannst Du serielle FRAMs von RAMTRON verwenden. Sie sind pinkompatiebel zu den EEPROM und lassen sich schnell beschreiben.
Die Widerstände werden wahrscheinlich Pullup oder Pulldown-Widerstände für die Eingänge sein.
Grüße Uwe
« Last Edit: December 28, 2012, 04:57:13 pm by uwefed » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mit meinem Encoder Code hab ich mir ein bischen Speicherplatz gespart.

Ich hatte zuerst keine 10kOhm Widerstände, dann hat er aber beim drehen unkontrolliert nach oben oder nach unten gezählt. Mit den Pullup Widerständen hab ich das Problem nicht mehr.
Den 2560 habe ich günstige bei Ebay bekommen. Da mir da erstmal keine Grenzen an Pins gesetzt sind, aber kaum zu glauben, die sind auch schnell aufgebraucht. Außerdem wollte ich mehr als einen Midi Ausgang.
Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@uwe: Ja, das mit den FRAM hab ich auch schon gelesen, NACHDEM ich die EEproms verlötet hatte und alles auf die optimiert hatte smiley Leider sind die verhältnismäßig teuer!
@komika:
komisch, meine Encoder funktionieren tadellos, kann sein, dass ich sowieso welche verwendet hatte (jaja, immer brav den Schaltplan nachschreiben beim löten....)
So einen billigen Mega hab ich auch, wollte aber es einfach komplett "selbst" bauen. Die Pins sind nur beim 328er ein Problem, da wird es echt eng, beim 1280er nicht. Für die analogen Potis verwende ich CD4051er, mit ein paar Zeilen Code mehr. D.h. 8 Potis für 3 digitale + 1 analogen Pin (je mehr man zusammenhängt, umso "billiger" wirds). Für die Shiftregister verwende ich eine Library, wo ich mit zwei Befehlen jedes LED einzen ansteuern kann: http://bildr.org/2011/08/74hc595-breakout-arduino/
Wegen Midi: Softserial (d.h. tx/rx mit jedem Pin möglich auch mehrfach) Library wäre ein Zauberwort, hab aber noch keine Erfahrung damit, v.a. wegen Miditiming usw.. Arduino - SoftwareSerial

LG
Matthias

Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 140
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hardwaremäßig werde ich heute fertig, denke ich.
Softwaremäßig muss ich noch einiges tun, da kommen immer wieder neue Ideen und andere Ideen werden wieder verworfen.

Hab leider auch nicht immer Zeit, da meine kleine Tochter immer Aktion haben will smiley-grin
Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Frage zum Auslesen per Schieberegister:

Quote
Wie kommst du auf 2 Pins? (Ich komme auf 3)

Mit 2 Pins kann ich jeden beliebigen Output bei einem Schieberegister erzeugen. 2 Pins reichen IMMER um ein SR zu belegen. 1 Pin für Clock, 1 Pin für Daten. Falls das SR einen Latch Pin hat kann man den hinteren seriellen Ausgang an den Latch Pin schalten um den dritten Ausgabepin zu sparen. Angenommen Latch = 1 übernimmt die Daten an die Ausgänge, dann würde z.B. das einschieben von

1110 1111 1 den dritten Pin auf low setzen.

Also 2 Pins reichen um einen von n Schaltern mit Spannung zu versorgen. Jetzt der Trick. Die Schalter werden alle mit Dioden entkoppelt und per 1k Widerstand an den Datenpin angebunden. So, daß ein gedrückter Schalter der mit low bedient wird das low per 1k Widerstand weitergeben kann. Zum Auslesen wird dann der Datenpin kurz auf Input gesetzt. Damit kann man den Schalter auslesen. Wohingegen als Output die 1k Last locker ignoriert werden kann.

Alternative: SR per I2C anbinden.
Logged

Check out my experiments http://blog.blinkenlight.net

0
Offline Offline
Full Member
***
Karma: 2
Posts: 108
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tolless Projekt muss ich sagen.
Übrigens, Porexpander für den I²C Bus gibts für 5,6€ in der Bucht inkl. Versand nach Österreich

http://www.ebay.de/itm/I2C-IIC-I-C-PCF8574-P-Portexpander-DiL-DIP-8-Bit-I-O-Exp-Philips-PCF8574P-16-/170889561528?pt=Bauteile&hash=item27c9cfc5b8#ht_1071wt_1159
Logged

Vienna (Austria - Europe)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 56
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@udo: ok, theoretisch ist´s mir klar, müsste ich nur mal in die Praxis umsetzen, d.h. es wäre dann vom Materialaufwand her eine Diode + ein Widerstand / Schalter. Anscheinend kann man die SR auf mit nur einem Pin ansteuern: http://www.openmusiclabs.com/learning/digital/input-matrix-scanning/hacks/
Beim Stepsequencer möchte ich halt so wenig (v.a. rechenintensiven) Code, wie nur möglich verwenden, werd mal mit dem Breadboard verschiedene Lösungen testen. Wie meinst die die Anbindung der SR mittels I2C?
@komika: Äh, ja, das mit der kleinen Tochter kenne ich und meine Frau will auch noch Aufmerksamkeit smiley D.h. zum Löten od. Basteln komm ich gar nicht mehr wirklich... Würde dir echt nur dringend die Lösung mit dem TimerOne zwecks "Masterclock" ans Herz legen. Da wird immer nanosekundengenau bis 8 gezählt, egal, welche Aufgabe gerade erledigt wird. Hab auch eine Idee in meinem Hauptcode, wo ich quasi Prioritäten setze:
Ist im Moment nur theoretisch, den praktischen Nutzen hab ich noch nicht erprobt. Die Idee dahinter ist, dass ich im Loop alle "unwichtigen" Funktionen (wie Tasten- Potiabfragen) nur jeden x-ten (ich hab mal 8 genommen) Durchlauf aufrufe, die zeitkritischen Midifausgaben werden jedesmal abgefragt:

Code:
void loop() {
  lauflicht();
savecpu++;
if (savecpu >= 8) // timing vs handling check out best value
{
 matrixbuttons_read();
  menubuttons_read();
  potivalues_read();
savecpu =0;
}
// midi functions
}
Anbei noch meine Masterclock Funktion, die nur aus ein paar Zeilen besteht:
Der Trick ist, dass Play und Stop mit einem einfachen Funktionsaufruf machen kann:
Play: clockwork() ;
Stop: stop_seq();

Code:
void songtempo_calc() // calculate nanoseconds from BPM
{
  Encoderwert=bpm;
  songtempo=(15000000/bpm);
  //songtempo= 1000000;
}
// ------------------------------------------------------------------------------------------------------
void clockwork_setup()
{
  //Timer setup: value = 1 microsecond = 1000 millisecond
  songtempo_calc();
  patternstep = 0;
  Timer1.initialize(songtempo); // 16tel: 15000/bpm *1000
  Timer1.attachInterrupt(clockwork); // attach the service routine here  
}
// end Timer setup
// ------------------------------------------------------------------------------------------------------

void clockwork() // Masterclock, zählt von 0-7.
{
  if (patternstep <7) patternstep ++;
  else patternstep = 0;

  // Toggle LED  digitalWrite( 13, digitalRead( 13 ) ^ 1 );
}
// ------------------------------------------------------------------------------------------------------
void stop_seq()
{
  Timer1.stop();
  patternstep=0;
  midi_allnoteoff();
  // writepattern();
}
// *** end timer function ***
Liebe Grüße
Matthias
« Last Edit: December 29, 2012, 06:09:03 am by madias » Logged

Pages: 1 [2] 3   Go Up
Jump to: