PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger/AVR mega32/Multiplexer 4051



codejoker
03.12.2005, 16:24
Hallo Leute,

tolles Forum hier! Bin begeistert über so viel Information in deutscher Sprache...ist halt doch leichter zu lesen und zu verstehen... O:)

Ich möchte mir einen mega32 Programmieren und dabei ein bestehendes Projekt auf Basis eines PIC umstricken.
Bevor ich jedoch Geld in Board, Controller und Bascom stecke, läst mich eine Frage nicht los die ich gerne vorher geklärt hätte.

Würde mich sehr freuen wenn mir jemand von Euch weiter helfen könnten!

Problem:
8 analoge Inputs auf 32 aufbohren.
(geht ganz offensichtlich über den o.g. Multiplexer 4051 (4 Stück davon)).

Ich habe so eine Musterplatine und auch die Pin-Belegung für einem PIC18F452.

Meine Frage:
Kann ich die Port (analog) des mega32 ebefalls multiplexen?
Wenn ja, wie frage ich die 32 Ports dann in Bascom ab?
Wo müssen Adress-Leitungen usw. hin?

Ein kleines Muster wäre sehr hilfreich.
Es muss kein komplettes Konzept sein - um Himmels Willen!
Ich freue mich auch schon über ein paar kleine Schnipel die mich auf den richtigen Weg bringen!

Viele Dank an alle und sorry für so eine (Anfänger)-Frage!
Bin mit Sicherheit ab sofort öfter hier und hoffe auch einmal etwas zum Erfahrungsschatz hier beitragen zu können...O:)

Codejoker

Edit: korrektur

codejoker
04.12.2005, 15:05
Kann mir denn wirklich niemand helfen ???

Ich müsste lediglich wissen wie ich eine (oder mehrere) 4051 an einen
ATmega32 schalte und die Ports dann Abfrage.

Kleiner Tipp vielleicht?

Gruß
codejoker

PicNick
04.12.2005, 16:37
Hi, ich bin derzeit am Basteln für einen "Hackbrett"(sei eine Art Musikinstrument mit 64 Saiten)-auf MIDI Converter mit Mega32.
Dabei muß ich flottest 64 Piezosensoren (+ Vorverstärker) mit ADC einlesen.
D.h. ich habe auf jeden ADC-Input so einen 4051 hängen, die Select-Pins dieser Chips sind parallel auf drei Digital-Pins des Mega's. Auswahl dann eben durch die Select Leitungen + ADC-Channel.
Ist im Detail dann noch etwas komplizierter, da ich nicht einfach nach der Reihe alle 64 abfragen kann, aber bis dahin ist es offenbar recht ähnlich zu dir.
Wo steckt bei dir die Ungewißheit ?

codejoker
04.12.2005, 17:43
Hallo PicNick,

das ist ja klasse, danke für die Antwort!

Ich kenne Hackbretter und es trifft ganz und gar auf meine Anwendung zu!
Ich möchte eine "Tastatur" mit Piezos ausstatten und per Midi einen Sampler ansteuern.
Habe also genau das selbe "Projekt" wie Du.

Mensch, könntest Du mir da (gerne auch per Mail wenn zu umfangreich)
Deine bissherigen "Schaltungen" zukommen lassen.
Details zum Programmablauf wären auch sehr interessant...

Ich würde mich wirklich freuen über Deine Hilfe - noch dazu weil die
beiden Projekte praktisch identisch sind.

Danke im Voraus für jegliche Unterstützung!

Gruß
Codejoker

Vitis
04.12.2005, 23:58
warum 1:8 multiplexer?
nehmt doch den 4067 1:16 oder 4097 2x 1:8 ?

ist im prinzip doch ganz einfach, der ATMega braucht zum Laufen nur Saft
an den Vcc und GND, dann läuft der schon mit 1MHz im Auslieferungszustand.
Per Fuses könnt ihr den intern mit 8MHz laufen lassen.
Ok, für viel Rechenpower brauchts halt n Quarz an XTal1 und XTal2 mit 220nF
gegen GND.

Dann braucht ihr 1 - 2 Ports vom Port A, die gehen als ADCin.
Zum Verwenden des ADC braucht ihr noch die ARef als vergleichsspannung.
für die auswahl des Muxports braucht Ihr noch 3-4 Datenleitungen um die
Multiplexer mit Adressen zu versorgen. Hier würde sich dann der Port B
anbieten, je nach dem was der Mega halt noch können muss 3-4 der verpleibenden Ports.

Schon kanns losgehen mit der Programmierung

codejoker
05.12.2005, 00:14
Hallo Vitis,

vielen Dank! Der Tipp mit der Alternative 4067 ist gut! ;-)

Ok, die Beschaltung scheint also nicht DAS große Thema zu sein...
Aber wie sieht es mit der Verarbeitung in Bascom aus?
Wie komme ich möglichst schnell an alle 16/32/oder mehr Eingänge ran,
bzw. wie werden diese abgefragt oder besser signalisiert?

Hast Du da vielleicht einen Code-Schnipel auf dem ich aufbauen könnte?

Vielen Dank für Deine Info - hat mich wieder ein Stück voran gebracht!

Gruß
Codejoker

Vitis
05.12.2005, 07:43
Beispiel Port B 0 bis 2 zur Ansteuerung:

DDRB=00000111

PortB= 00000000
PortB= 00000001
PortB= 00000010 etc.
bis
PortB= 00000111

danach jeweils GetAdc

so in etwa läufts, schau mal in die Bascom Hilfe für die exakte
Syntax ... ach so, Config für den ADC nicht vergessen.
Du kannst auch einfach ne for - next - Schleife verwenden und
den Port einfach hochzählen und bei jedem Schritt fragste den
ADC ab, thats it

PicNick
05.12.2005, 09:32
Meine Auswahl für 4051 und nicht auf 1:16 oder mehr ist, daß die Sache mit den 64 ADC-Pins auf irgendeinem Stecker ja nicht getan ist.
Ich brauch für jeden Piezo einen Vorverstärker und Gleichrichter.
Dann mußte ich das Problem lösen, daß ich ja nicht gemütlich die 64 Kanäle gemütlich nacheinander abfragen kann, das würde zu lange dauern. Ich kriege ja Peaks, die recht schnell abfallen. der gemessene Pegel würde zu sehr davon abhängen, WANN ich zu dem Channel hinkomme.
Ich mach das mit Komperatoren bei jedem Piezo, der mir ein Triggersignal über Row & Column liefert, wie eine Tastatur. Ich meß dann nur den oder die Kanäle mit ADC, die auch getriggert haben.
Das ergibt ne Menge Leitungen, die bei einer 1:16 Muxerei einfach nicht mehr sinnvoll zu verkabeln und layouten sind
(Weil ich mir eine SMD Fummlerei einfach nicht antue)
Außerdem, wenn ich im Mega bereits 8 ADC habe, nehm ich die auch.

BTW: AN sich macht man das bei tatsächlichen Keyboards (Tasten) eigentlich NICHT mit Piezos, sondern mit Doppeltasten für die Anschlagsgeschwindigkeit. Ist dadurch viiiiel einfacher

PicNick
05.12.2005, 09:52
Zum Gucken stell' ich mal Teile der Schaltungen rein. Einiges davon ginge wahrscheinlich einfacher und eleganter (was die Vorverstärker betrifft) aber da ich keine Fehlschläge brauchen kann (muß beim ersten Mal gleich funzen), bin ich sehr konventionell und brav geblieben.
Beim Board sind Tasten und display wegen der Einbau-Art nicht erwünscht, also hab' ich aber doch (obwohl nicht verlangt) eine MIDI Input Schnittstelle vorgesehen, um über Sequencer und Komputer und Sysex oder so Kontrollmöglichkeiten zu haben.
Und nur zum Entwickeln und Testen hab ich auch einen MAX für ein RS232 Interface drinnen (Jumper MIDI od. RS2323), weil das einfach praktischer ist.

codejoker
05.12.2005, 12:41
Hallo Vitis und PicNick,

vielen Dank für die Infos!

@Vitis, soweit so klar.
Aber wie PicNick schon erwähnt hat sielt die Abfragezeit eine wichtige Rolle.
Auch in meinem Fall sind es Spitzen die ohne „verzögerung“ gemessen und
ausgewertet werden müssen.
Die Abfrage in einer Schleife ist da vermutlich zu langsam…

Aber danke trotzdem – es ist in jedem Fall eine Anregung zum weitermachen!

@PicNick: Deine Schaltung ist sehr interessant!

Ist mir aber leider viel zu hoch, da steig ich im Moment noch nicht durch…

Der Vorverstärker ist ja noch klar…aber dann…
Ich dachte dass ich das „relative einfach“ über die 4051 bzw. 4067 lösen
könnte. Puh, das ist deftig!

Wir bekommst Du das Programmtechnisch unter Kontrolle?

Wie viel Zeit ginge Dir verloren bei einer „seriellen Abfrage“ in einer Schleife?

Geht da gar kein Weg hin? Ich bräuchte wie gesagt so an die 32-40 Kanäle.

Grüße
Codejoker

PicNick
05.12.2005, 13:01
Ich brauch überschlagsmäßig je ADC Abfrage ~60 µS. Auf der anderen Seite bringt MIDI einen EVENT (On oder OFF) in ~1 mS über den Draht.
Ich würde bei 64 Tasten also (worst case) ~3 mS brauchen, um eine Taste zu erkennen. Bei zweien wären also auch 6 mS möglich, und das war mir dann auf jeden Fall zuviel.
Es gibt Schaltbeispiele, da mach einer 8-Drum Pads nur mit dem ADC. Das scheint also noch zu gehen (wenn es denn wahr ist)
Man müßte probieren können, ob man solche Delays (bei Akkorden) dann auch wahrnehmen kann. Vielleicht hört man eh nix, aber ich will mich darauf nicht einlassen (und blamieren)
Die Überlegung war eben, vorverstärken muß ich so oder so, also hab ich die OP am Hals. der Komperator für die Trigger macht's dann aber auch nicht aus und die insgesamt zwei gemuxten 74244 auch nicht. Und damit denk ich doch, daß es SICHER zu schaffen ist.

Wie ist es denn: MUSST du Piezos nehmen ?

PicNick
05.12.2005, 13:04
Fortsetung: Ich hatte ja ursprünglich einen anderen Weg vor: Ich hab mir gedacht, je fester er draufhaut, desto länger bleibt auch der Komperator oben und umgekehrt, ich könnte dann OHNE ADC einfach die Zeit messen.
Ich wett' schon, daß das ginge. Aber ich das war mit dann einfach zu unsicher.

PicNick
05.12.2005, 13:07
Noch was: Wenn du mit der genauen MIDI Velocity nicht heikel bist, wäre für dich in der letzgenannten Variante sicher auch was drin

codejoker
05.12.2005, 13:33
Hi PicNick,

ja, ich brauche unbedingt auch Piezos – das ist ja das Übel… ;-)

Ich habe mir Deine Schaltung gerade mal genauer angesehen und
könnte mich schon damit anfreunden...

Mal eine Frage zum Verständnis:

Was liegt wo genau an?

Was kommt an PC0…PC7 an ?
Was an PB0…PB2 ?
Und an PA0…PA7 die Analog IN?

Wir fragst Du diese Zustände in Deiner Software ab?
(kleiner Hinweis auf die Abfolge würde reichen)
Also wie entscheidest Du wer-wann-wo...?

Mann, ich bin echt sooo doof das ich das aus Deiner Zeichnung nicht
entnehmen kann…
Könntest Du mir das bitte mal genauer erläutern???

Vielen Dank!

Codejoker

PS: Zur Verarbeitungszeit: Ich habe mir sagen lassen das ab 5ms
eine Latenz hörbar ist…

PPS: Sorry wenn ich so penetrant nerve, aber ih muss das gelöst haben
(für mich verständlich) bevor ich investiere und meine Energie da hinein
stecke... Tut mir leid für das viele Nachfragen!

PicNick
05.12.2005, 14:06
5 mS ? mhhh, wenn ich das auf einem Delay-Kistel einstelle, hab ich einen ganz leichten double-effekt. Nun, gut
Erläuterung: Wenn ein Trigger schnackelt, passiert folgendes: er lädt je nach Stärke eine Kondensator, löst aber auch schon mit dem geringsten Pegel den Trigger aus, der mit zwei Dioden getrennt ein Signal auf ein X -Port und ein Y Port legt.
X u. Y gehen umschaltbar beide auf PC0..PC7 (schalter sind PD6 u. PD7)

Im Programm schalt ich die ..244 auf X und schau, ob was kommt (serielle Bit-abfrage).
Kommt was, schalte ich auf Y und frage da die Bits ab. Dadurch weiß ich genau die adresse von dem Trigger, stelle die auf den ADC u. 4051 ein und messe den Pegel.
Die Adresse mappe ich auf Tonhöhe, den Pegel auf Velocity. Dann schau ich in der Key Tabelle, ob die Taste schon aktiv ist. Wenn ja, quetsche ich ein NOTE-OFF rein, sonst eben nur ein NOTE-ON.
Dann schau ich mir die Bits oben weiter an.
Zwischendurch gehe ich in die Tabelle, zähle die Zeit der Töne, und wenn sie abgelaufen ist, NOTE-OFF
Eine Tabellen- und Bitabfrage-Wurstlerei halt.

Anfangen tu ich mal mit BasCom mit ein wenig inline Assembler, wenn es eng wird.
Zum ein- aus- und umbauen ist der BasCom ideal.

Dazu kommt als parameter die Grundstimmung und +- (das übliche)
Eben auch die Duration (Tonlänge, denn eventuell will er mit dem Hackbrett dann auch strings oder sonstwas spielen)


Die 4051 sind auf jeder Vorverstärker (8 Trigger) platine einer drauf.
d.h auf der Hauptplatine ist jedem 16-er stecker ein ADC vom Mega32 zugeordnet.
select von 4051 geht über PB0..PB2 (3 stück, enable is fix )

Anbei noch eine der 8 Preamp Platinen

codejoker
05.12.2005, 14:58
Hallo PicNick,

jetzt wird das ganze schon durchsichtiger für mich... =D>

Muss mir nur noch mal Deine Abfragetechnik mit Bascom durch den
Kopf gehen lassen, dass habe ich nämlich noch nicht ganz kapiert...

Aber das Prinzip habe ich (hoffe ich) schon verstanden.
Etwas aufwändig, aber wenn es zum Ziel führt ist es letztendlich auch gerechtfertigt...

Das mit X und Y Umschaltung habe ich noch nicht ganz gefressen,
daran muss ich noch arbeiten...
Muss mir Dein Schaltbild mal zerlegen und nur mal 8 Kanäle verfolgen,
vieleicht geht es dann etwas leichter.

Vielen Dank für die vielen Hinweise und Infos.
Ich denke das ich das jetzt einfach mal in Angriff nehmen werde und
mal verusche das alles zu realisieren.

Wenn noch jemand etwas zur Auflösung beitragen kann... her damit!

PicNick:Wenn Dir noch etwas einfällt was mir das Leben leichter macht
dann ebenfalls her damit! Schon mal vielen Dank für die gelieferten Einblicke in
Dein Projekt. Bin in jedem Fall weiter gekommen!

Grüße
codejoker

PicNick
05.12.2005, 15:29
....mal 8 Kanäle verfolgen....

Jeder ADC Eingang geht zu einem der 8 Stecker
d.h.
getadc(0) liest von der 1. PreAmp-Platine
getadc(1) liest von der 2.
Auf der Platine ist jeweil EIN 4051, der auf eine der 8 Trigger geschaltet werden kann.
Die Select Leitungen sind parallel auf alle 4051, da ich ja eh' nur den kriege, den ich mir dem getadc(x) ausgewählt habe

Vitis
05.12.2005, 15:59
Der haken dabei ist aber, das der Mega nicht 8 ADC hat sondern
8 Eingänge für einen ADC, die intern gemultiplext werden ;)
Für eine Umwandlung braucht der dabei 65 uS, für 32 wärens dann
2080 uS oder 2,08 ms nur für die Wandlung ohne nebenbei
noch Operationen auszuführen.

Das wären dann 500Hz umgerechnet. Nach Shanon wären das maximale
abzutastende Frequenz 250 Hz.

Bei maximalem Delay von 5ms
passen da noch bei 16MHz Taktung 5300 1-cicle Operationen rein.
klingt viel, kann aber schnell eng werden. Für alle 32 Kanäle wäre dann
zwischen jeder Messung 165 Befehle Platz ... das is nicht viel

PicNick
05.12.2005, 16:01
Der haken dabei ist aber, das der Mega nicht 8 ADC hat sondern 8 Eingänge für einen ADC, die intern gemultiplext werden ;)

Wie recht du doch hast. Was ist der Haken ?

codejoker
05.12.2005, 16:35
@PicNick, noch eine Frage:

Warum hast Du zwei LM324 pro Kanal?

@Vitis:

Sehr interessant!

Kannst Du mal ein Rechenexempel machen wenn ich zwei 4067
in einer Schleife abfragen würde? ;-)

Und noch eine sehr brennende Frage:
Muss das eigentlich so kompliziert sein? Gibt es denn keine Möglichkeit
das der 4067 signalisiert wenn ein Signal anliegt (Interrrupt?) und ich
DANN die Adresse auslese und den Kanal Abfrage kann.
Muss ich unbedingt schleifen um alle Kanäle permanent abzufragen???

Mir kommt das nicht besonders Intelligent vor in Zeiten Ereignis-
gesteuerter Programmiertechnik usw…


Apropos Schleife:

Wenn ich in einer andauernden Schleife hänge, wie verarbeite ich
dann Menübefehle und Display-Steuerung (Interrupts ?)

Ihr seht, ich bin wirklich Anfänger und dann gleich in die vollen…
Aber hilft halt nichts, ich habe mir das in den Kopf gesetzt und möchte
es auch realisieren... bin sehr hartnäckig!

Habe mir ein Testboard und sonstige Bauteile bereits bestellt, möchte
(dank euerer Unterstützung! O:) ) jetzt einfach ran an die ganze Sache!

Vielen Dank im Voraus für jeden weiteren Input!

Grüße
Codejoker

PicNick
05.12.2005, 18:20
Du meinst 2 OP je Kanal, d.h. ein LM324 für zwei Kanäle.
Einer ist VorVerstärker und einer ist ein Komperator, der ab dem Minimalpegel ein volles 5V Signal setzt.
Ereignisgesteuert: Wenn du einen Controller mit 32 getrennten Pin-Interrupts findest, sagst du's.
Um welche Ecke herum (4051 oder 4067) du schaltest, is egal, der ADC selber (der einzige, wie wir jetzt ja wissen) braucht beim Multiplexen seine acquisition Time, und Vitis hat es dir ja vorgerechnet.
Schleife: Menu, Tasten, Midi-IN, etc : das IST die Schleife.

codejoker
05.12.2005, 19:49
Hallo PicNick,

das mit der Schleife ist schon klar soweit.
Nur ich wollte wissen, ob ich Menüabfragen (Taster, Eingabe),
Midi IN/OUT UND die Abfrage der ANI-Ports in ein und derselben
Schleife machen muss.

Das wäre ja nicht gerade Zeitgemäß… ](*,)

Ich habe mir gedacht das man die Ports z.B. per Interrupt
überwachen kann und den REST in einer Schleife… und Schleife wird
bei Interrupt-Ereignis unterbrochen usw.
So käme wenigstens halbwegs Ereignissteuerung in die ganze Musi!

Also heißt das, dass ich von „natur“ aus keinerlei Info bekomme wenn
am externen MUX irgendein Signal ansteht???

Hm, dann ist Deine Lösung wohl der einzig gangbare Weg um die
Verarbeitungszeit beim Schleifen in Grenzen zu halten, oder!?

Bäh, das ist ja zum heulen…!

Warum ist das alles Schleifen und Abfrageorientiert?

Mir wäre es ja egal, aber die Verarbeitungszeit (und die daraus
resultierende Latenz) ist wohl das Problem dabei.

Grüße
Codejoker

codejoker
06.12.2005, 06:05
Hallo Zusammen,

ich habe noch so eine Idee für die ich jetzt wahrscheinlich
gesteinigt werden, aber trotzdem…

Wäre es möglich das ich „einfach“ mehrere kleine Controller
die Analogport Arbeit überlasse und mit diese dann auf den großen
einen Interrupt auslösen und gleich den kompletten Wert übermitteln?

So müsste ich nur auf ein Ereignis warten und könnte den übermittelten
Wert gleich verarbeiten. Angeliefert werden sollten der Port und der
Wert natürlich

Ich bräuchte halt dann mehrere davon, z.B. 6 x mega8 oder so etwas…

Kostenmäßig wäre es doch egal, denn ein mega8 ist für 2,75 Euro
zu haben. Anstatt also mit Multiplexer bis zum Abwinken, ginge es
doch auch so, oder?

Gibt es irgendwelche Einwände gegen so eine Vorgehensweise?

Dumme Idee????

Danke für alles Konstruktive!

Gruß
Codejoker

Edit: Noch eine weitere Frage:
Kann ein Quarz für mehrere Controller gleichzeitig verwendet werden?

Wenn ja, wie? Einfach parallel schalten?

Vitis
06.12.2005, 09:21
man bräuchte ... hmmm ... trigger ... Monoflop für
jeden Eingang, der dann auf ne z.B. über dez zu bin-encoder
auf digitale IO des uC gibt, der dann den Port auslesen kann
und den Gedrücktstatus daraus erkennt. das geht sehr flott
vonstatten.
Ist der Status erkannt kann immernoch der Analogwert ausgelesen
werden, des entsprechenden Eingangs natürlich nur.
Das solle so Zeit sparen.

EDIT: gönn doch jedem Controller seinen Quarz

EDIT2: Naja, Du kannst natürlich auch 4 Mega8 nehmen und deren ADC
direkt aufschalten und messen. Die Kommunikation zum "Zentralrechner" muß aber schon flott vonstatten gehen und Kolissionen dürfen halt auch nicht sein. Die Datenmenge ist aber auch nicht zu verachten.
Du müsstest Dann (ADC=10Bit ergo 2 Datenbyte) 16 Byte je Mega 8
(16*4) 64 Byte ohne sonstiges Protokoll in 5 ms von den Slaves in den
Master rüberbeamen. Das wär ne Datenrate von 12800 Byte/Sekunde.
Das wär machbar. Beispiel I2C wären bis 50000 Byte/Sekunde drinn
(Rechenfehler könnten aber auch drinne sein) wobei man I2CStart,
I2CStop Aderssierung nicht vergessen darf, die brauchen auch n bissl was.
Wären aber ja nur je Zyclus und Slave nur einmal.
Du könntest aber die Datenrate etwas schonen, indem du nur 8 der 10
Bit verwendest, sind dann halt nur 256 Abstufungen je Kanal anstatt 1024.
wär keine große Sache, Shift ADwert right 2 , und schon sinds nur noch 8 Bit, nurnoch den lowbyte extrahieren und versenden.
Aber vom Timing her bista dann nicht viel besser, die Übertragungszeit
musste dann in die Samplingrate mit einkalkulieren.
Klar, du kannst dann mit 4-6 Mega8 gleichzeitig AD-wandeln, die können
das dann parallel machen, das spart wieder ne Menge Zeit.

Insgesamt ist die Geschichte schon gut machbar, du brauchst aber n bus.
du hast auch externe Interrupts, die du für die Fallsteuerung verwenden kannst und die dann nen quasi chipselect ausführen. Die Leiterplatte
routen wird n mords Spaß!

Ich würde so an die Sache ran gehen ...
Was soll das Ding können, wo kann ich Kompromisse machen,
Das SOftware Grundgerüst entwerfen (von wegen der benötigeten Ports),
Die Platine layouten und dann das Programm (die Programme)
verfeinern (Feinschliff).

PicNick
06.12.2005, 09:45
... hmmm ... dez zu bin-encoder..

Üble sache, wenn mehr als einer triggert.

Das ist der Grund, warum Gott und die Welt Tasten mit row & column scanned und nicht so. Aber sonst bist du schon gut unterwegs

codejoker
06.12.2005, 10:44
Hallo zusammen!

Schon mal Dank für die erneuten Ausführungen!!

Als totaler Amateur habe ich mir das so gedacht:

Ich schalte z.B. 6 Stück mega8-16 vor.
Dabei sind die Ports (z.B. d) parallel geschaltet…
(nicht Lachen – ich weiß es nicht besser…;-))
Diese Teile horchen (jeder für sich) an den Analog Ports.
Kommt jetzt etwas rein (an einen mega8/Analog), dann wird
der zugehörige Wert ermittelt und gemäß des Wertes
die Ports d geschaltet (also eine eigene Codierung).

Die Ports d der mega8-16 sind mit den Ports (z.B. auch d)
des mega32 (der „Zentralrechner“) verbunden.

Nachdem jetzt etwas geschaltet wurde, wird am mega32
ein Interrupt ausgelöst und ich sehe anhand der Beschaltung
der Ports d welchen Wert ich zu verarbeiten habe…

Das würde bedeuten:
Das analoge Schleifen machen die „kleinen“ für sich, ebenso
das ermitteln der Werte. Der mega32 nimmt lediglich die
Information entgegen (wenn ein Interrupt ausgelöst wird) und
kümmert sich dann um die restliche Verarbeitung.
Unter anderem auch um das Menü, die MIDI-Geschichte usw…

Das müsste doch blitz schnell gehen, oder?

- Kein Protokoll
- Kein Rumgeschupse über x Ebenen

Einfach Binär anhand der Port-Codierung übergeben…

Würde das denn nicht funktionieren?

Dann bräuchte ich lediglich 8 Leitungen vom mega8 nach
mega32. Die Analogports am mega32 bräuchte ich in diesem
Falle dann überhaupt nicht…

Ohje, ich sehe schon euere Gesichter ;-)

codejoker
06.12.2005, 11:55
Nachtrag:

Da ich den gemessenen Wert am mega8-Analog ohnehin auf 127
Abstufungen auflösen muss (Midi Velocity = max. 127) sind also
8 Bit nicht das Problem.

Aber da wirft sich eine andere Frage auf:
Wie erhalte ich den Information über den Port der den Wert „gesendet“
hat? Mist!

Noch eine Frage:
Kann ich denn an einem 4067 überhaupt nicht feststellen ob etwas
an den Ins ansteht ohne ewig in einer Schleife zu radeln…?

Wie funktioniert dieser Multiplexer genau?

Ist das so, dass der Multiplexer praktisch gar nichts tut und nur auf
Zuruf die Ports schaltet und liest?
Will damit sagen: Ich muss an den Adressleitungen alle Adressen
immer und immer wieder abklappern?

Vitis
06.12.2005, 12:14
Also, der Multiplexer ist das elektronsiche äquivalent des guten alten
EMD-Wählers vonder Deutschen Bundespost Fernmeldedienst:

http://www.s-storbeck.de/altetelefone/vermittlungstechnik/t2060gestelle3.html

http://de.wikipedia.org/wiki/Edelmetall-Motor-Drehw%C3%A4hler

er macht nichts anderes als den gewünschten (adressierten) Eingang auf den
Ausgang zu schalten ... Drehschalter im Prinzip. Nur die Stellung auf der
er steht ist durchgeschaltet. die anderen sind blind in dem Moment.
Der Mux kann selbst nicht entscheiden welchen Ausgang er wählen soll ...
nee kannernich ... definitiv ... er kann nur blöde aus den Eingängen
einen auswählen und auf den Ausgang schalten, Ende der Fahnenstange.
Wenn Ihr mit Multiplexern arbeiten wollt müsst ihr in die Tretmühle
und reihum alle Kanäle abfragen (Zyklisch).
Ich hab das System für Temperatursensoren verwendet, geht ganz gut
und auch recht flott. Nur die AD-Wandlung braucht halt Zeit.

Anderer Ansatz: anstelle des internen ADC externe schnellere verwenden und per I2C oder parallelem Port Daten übertragen? Da könnte sich was an
Zeit einsparen lassen.

codejoker
06.12.2005, 12:35
Hähä, sieht ja grausam aus!

Aber ok, jetzt habe auch ich verstanden das der Multiplexer rein
gar nichts tut außer auf Zuruf schalten. Ziemlich blöd!

Also @Vitis das ist so:
5ms sind ein absoluter maximal Wert für die Verarbeitung!
Man sagt eben, dass 5ms schon hörbar sind – und genau das soll
ja nicht der Fall sein! Es gilt also diesen Wert weit zu unterschreiten…

Für die gesamte Verarbeitung wohl gemerkt:
- Analog in
- Wert feststellen
- Midi Notenummer basteln (Ton, Velocity…)
- über Midi absetzen
---------------------------
Gegengerät:
- Midi emfangen
- Samples aufbereitung
- Audio out
- Mensch hört

Das muss alles weit unterhalb von 5ms geschehen, denn der Empfänger
(Sampler, Soundkarte oder was auch immer) hat ja ebenfalls eine
Latenz in unbekannter Größe.

Das dumme ist, dass ich wenigstens 32 Kanäle benötige und deshalb
mit den Multiplexern rumgedacht habe.

Ich kenne ein ähnliches Projekt auf PIC Basis und die behaupten,
das gemultiplexte 64 Analog INS mit einer Latenz von nur 1ms abgearbeitet
werden. In anbetracht der Infos von euch beiden kann ich das aber nicht
mehr ganz glauben…

Was hältst Du von oben genannter Lösung (meine Amateur-Vorstellung)?
Führt da ein Weg hin das so zu machen???

Vitis
06.12.2005, 13:36
Wenns der PIC kann kanns der AVR allemal (weil schneller ;)).
Kommt halt auf die Aussenbeschaltung, Deinen Bus, Datenmenge,
Programmablauf usw. usw.
an. Die Nötigen Infos haste nun allemal bekommen, mach das Beste draus
und dann bau die Version 2 mit den gewonnenen Erkenntnissen der Version 1.
Wenn Du magst kann ich mir später mal Dein Routing anschaun ob mir
noch was brauchbares einfällt bevors zur Platinenfertigung geht.

Phantasie ist der Schlüssel ... ok, n bissl knoff hoff is auch bei.

Ich würd mal klein anfangen, einzelne Bausteine besorgen, Punktraster-
Platine und Testschaltungen. In 2 Tagen ist das Ganze eh nicht realisiert.
Mal n Mega 8 und n 32 verbrutzeln (Sockel) und schaun was der so alles
kann in der Praxis.

Schritt für Schritt

codejoker
06.12.2005, 13:54
Hi Vitis,

klar, Input habe ich jetzt jede Menge!

Und getreu dem Motto Deiner Signatur werde ich jetzt einfach mal loslegen.

Ich versuche erst mal zu Multiplexen, dann guck ich weiter
wo noch optimierungspotential stecken könnte…

Wenn alle Stricke reisen, dann muss die Schaltung von PicNick
herhalten ;-)) Der Gute hat sich sicherlich etwas dabei gedacht…

Vielen Dank vorerst für die vielen Tipps und Ratschläge!

Ich werde hier in diesem Thread weiter posten sobald ich die
ersten Ergebnisse präsentieren kann. Dann kannst auch
(wie von Dir angeboten) mal über die Schaltung gucken.

Danke Euch! =D>

Gruß
Codejoker