Ich habe ein DOG-M163 und vier Taster auf eine selbst erstellte Platine gebracht und steuere das Display wie im Datenblatt beschrieben an. Funktioniert prima. Nur sind echt viele Kabel für das Display und die Taster notwendig. In Summe 10+2 Stück! (GND, VCC, 4xTaster, 4xDisplay, EN_Backlight und EN_Display, letztere Zwei kann man natürlich immer auf VCC legen und sich sparen). Nun hatte ich gedacht der Platine einen µC zu verpassen und über I2C / TWI zu betreiben. Das zu bauen bekomme ich bestimmt hin, was ich mich frage ist, wie das mit den Tastern gehen soll. Dann muss die Platine ja beim Tastendruck proaktiv dem "Haupt-µC" bescheid geben, wenn eine Taste gedrückt wurde gibt es ja noch den Unterschied zwischen lange und kurz. Wennn der Controller dann die ganze Zeit sendet ist das wohl nicht so gut. Würde man dass dann mit einer zusätzlichen Leitung machen, die dann sagt jetzt wird gerade eine Taste gedrückt, bitte Abfrage starten welche und wie lange? Wer weiß Rat...!?
Tino Kühn schrieb: > Zeit sendet ist das wohl nicht so gut. Würde man dass dann mit einer > zusätzlichen Leitung machen, die dann sagt jetzt wird gerade eine Taste > gedrückt, bitte Abfrage starten welche und wie lange? Wer weiß Rat...!? Wie willst du 4 Taster mit einer Leitung abfragen ? 4 Taster = 4 Leitungen, mit weniger gehts nicht, 4 Taster multiplexen sparrt auch keine Leitung. Jeder der 4 Taster schaltet nach Masse, Pullup drauf, PCINT nehmen.
um GND und VCC kommst eh nciht herum. Display könntest über i2c ansprechen (mach ich immer so), macht 4 leitungen. taster könntest du "analogmultiplexen", d.h. über einen Spannungsteiler mit "geschaltenen" Widerständen das teilerverhältnis ändern, und mit einer Leitung an den ADC. Das funktioniert erstaunlich gut, mit etwas gehiernschmalz kriegt man sogar gleichzeitiges Drücken mehrerer tasten mit. Das wären dann 5 leitungen...
Michael Reinelt schrieb: > um GND und VCC kommst eh nciht herum. Display könntest über i2c > ansprechen (mach ich immer so), macht 4 leitungen. > > taster könntest du "analogmultiplexen", d.h. über einen Spannungsteiler > mit "geschaltenen" Widerständen das teilerverhältnis ändern, und mit > einer Leitung an den ADC. Das funktioniert erstaunlich gut, mit etwas > gehiernschmalz kriegt man sogar gleichzeitiges Drücken mehrerer tasten > mit. > > Das wären dann 5 leitungen... Wie gesagt, ich möchte so wenig Leitungen wir möglich, sprich das ganze Tasterabfragen über den dann auf der Display-/Tasterplatine enthaltenen µC machen. Was übrig bleibt wird dann natürlich VCC, GND und SDA, SCL sein. Was ich mich ja frage ist, wie das mit dem Tastendruck fuktionieren soll. Sprich was macht mein µC in diesem Falle. Sendet er oder wartet er bis er gefragt wird ob was gedrückt wurde? Man könnte wie gesagt eine Stuerleitung nehmen, über die signalisiert wird das gerade Tasten gedrückt wird/wurden... Aber ist das die richtige Lösung?
Tino Kühn schrieb: > soll. Dann muss die Platine ja beim Tastendruck proaktiv dem "Haupt-µC" > bescheid geben, wenn eine Taste gedrückt wurde Eines der wesentlichen Prinzipien bei I2C (oder TWI, wie es bei Atmel heisst) besteht darin, das es einen Master gibt, der immer und zu allen Zeiten das Sagen hat. D.h. deine Platine gibt nicht (zumindest nicht bei I2C) Bescheid, dass eine Taste gedrückt wurde, sondern der Master befragt die Platine, ob es einen Tastendruck gegeben hat. Die Platine hat natürlich die Möglichkeit über eine zusätzliche Leitung (die nicht Teil vom I2C ist) auf sich aufmerksam zu machen. Und das wird auch oft so gemacht. Beim Master landet diese Leitung entweder auf einem Eingangspin oder sie kann zb einen Interrupt auslösen. Aber egal wie, die I2C Kommunikation wird vom Master aus angeleiert. > gibt es ja noch den > Unterschied zwischen lange und kurz. Ein weiteres Merkmal von typischen I2C Szenarien ist es, dass sich der Master den Client als eine Sammlung von Registern vorstellt. D.h. der Master tut einfach so, als ob der Client adressierbare Speicherzellen (die Register) hätte, in denen er alles was ihn interessiert vorfindet. In deinem Fall, mit 4 Tastern würde es sich zb anbieten, ein 8 Bit Register zur Verfügung zu stellen, welches der Master auslesen kann und in dem 2 Bits für jede Taste reserviert sind. Das eine Bit sagt aus, ob die Taste gedrückt wurde, das andere Bit sagt aus, ob es sich um einen kurzen oder einen langen Tastendruck gehandelt hat. (Wobei natürlich das Problem entsteht, dass jeder lange Tastendruck irgendwann mal als kurzer Tastendruck begonnen hat. Aber das Problem hast du bei derartigen Sachen immer und es ist auch unabhängig von I2C). > Wennn der Controller dann die ganze > Zeit sendet ist das wohl nicht so gut. Der Controller kann nicht die ganze Zeit senden. Das geht prinzipiell schon mal gar nicht. Er ist nicht Master und kann daher den Bus nicht für sich in Anspruch nehmen. Die Gewalt über den Bus liegt beim Master und er ist es auch, der den Takt generiert, der den Bus letztendlich antreibt. > Würde man dass dann mit einer > zusätzlichen Leitung machen, die dann sagt jetzt wird gerade eine Taste > gedrückt, bitte Abfrage starten welche und wie lange? Wer weiß Rat...!? Im Prinzip ist das ein mögliches Szenario. Ich würde das etwas allgemeiner formulieren, und die Taste aussen vor lassen. 'Am Client ist etwas passiert, was möglicherweise eine Aktion vom Master erfordert'. 'Eine Taste wurde gedrückt (oder losgelassen), fällt dann automatisch mit hinein.
:
Bearbeitet durch User
Karl Heinz schrieb: > D.h. deine Platine gibt nicht (zumindest nicht bei I2C) Bescheid, dass > eine Taste gedrückt wurde, sondern der Master befragt die Platine, ob es > einen Tastendruck gegeben hat. So wie ich das verstanden habe, ist auf der Platine nur sein Display, welches er mit Mikrocontroller verbinden will und zwar so, dass er weniger Leitungen braucht ?
Karl Heinz schrieb: >> gibt es ja noch den >> Unterschied zwischen lange und kurz. > > Ein weiteres Merkmal von typischen I2C Szenarien ist es, dass sich der > Master den Client als eine Sammlung von Registern vorstellt. > .... Sieh dir einfach mal ein paar I2C Chips an, wie die das machen. Dann wird das Prinzip schnell klar. Ich hab mal willkürlich einfach einen ADC-Wandler ausgewählt http://www.analog.com/static/imported-files/data_sheets/AD7992.pdf (ab Seite 17 im PDF) Aus logischer Sicht stellt der IC einfach einen Satz Register bereit, in die der Master schreiben kann oder aus denen er Lesen kann. Je nach Register sind da unterschiedliche Dinge in den Register wie zb Konfigurationsdaten oder auch die Ergebnisse der Wandlungen, die der IC zuletzt vorgenommen hat. Wie diese Werte dann letzten Endes zustande kommen, bzw. wie geschriebenes innerhalb des IC weiter verwendet wird, ist nicht das Problem des Masters. Für ihn besteht der ADC-Wandler lediglich aus einem Satz Register in die er Werte schreibt bzw. von wo er sich Werte abholt.
:
Bearbeitet durch User
Es geht natürlich so wie von Karl Heinz beschrieben. Aber - nur wegen vier Tastern einen eigenen uC? Wenn du Erweiterungen planst, kann das sinnvoll sein. Wenn nicht - eine Leitung mehr, analog-multiplexen wie oben beschrieben. macht die Sache signifikant einfacher. Anderersets - wenn schon eigener uC, dann könntest gleich Display enable/disable damit abdecken, und sogar Backlight-Helligkeit per PWM steuern.
Michael Reinelt schrieb: > Es geht natürlich so wie von Karl Heinz beschrieben. Die Idee, da I2C einzusetzen, ist ja von ihm gekommen. Man könnte da ja auch zb eine UART nehmen, das ganze als Serielle Verbindung ansehen und damit so etwas wie ein 'Terminal für Arme' bauen. Möglichkeiten gibt es viele. > Aber - nur wegen > vier Tastern einen eigenen uC? Wenn du Erweiterungen planst, kann das > sinnvoll sein. Wenn nicht - eine Leitung mehr, analog-multiplexen wie > oben beschrieben. macht die Sache signifikant einfacher. Auch ein Weg. > Anderersets - wenn schon eigener uC, dann könntest gleich Display > enable/disable damit abdecken, und sogar Backlight-Helligkeit per PWM > steuern. Eben. Ab einer gewissen Komplexität kann es sich lohnen, der Peripherie eine gewisse Eigenintelligenz zu verpassen. Kann, muss aber nicht. Die Entscheidung liegt bei ihm.
Also die Platine wie auf dem Bild ist natürlich nur der Träger und das mit der Ansteuerung und den Kabeln ist fix. Ich wollte eine neue machen (v0.2), damit es nicht so kompliziert mit den ganzen Kabeln ist. Wenn ich das lese was Karl Heiz geschrieben hat, so war ich schon auf dem richtigen Weg. Das der Slave natürlich nicht einfach so senden darf war mir erst beim durchlesen wieder bewußt. Natürlich werden alle Befehle, wie dimmen, on/off und Tastenabfragen zentral über einen µC gemacht. Vielen Dank für die Unterstützung!
Tino Kühn schrieb: > Dann muss die Platine ja beim Tastendruck proaktiv dem "Haupt-µC" > bescheid geben Das Problem besteht also im Kern in der starren Rollenverteilung Master<->Slave. Ich würde deswegen gleich mal die I2C-Idee beerdigen und auf UART setzen. Spart die Taktleitung und macht sie als Leitung für die zweite Datenrichtung verfügbar, womit jeder seinen Dreck loswerden kann, wann immer er anfällt. Ohne jeden Programmieraufwand ist jeder Partner so gleichzeitig Master und Slave.
c-hater schrieb: > Tino Kühn schrieb: > >> Dann muss die Platine ja beim Tastendruck proaktiv dem "Haupt-µC" >> bescheid geben > > Das Problem besteht also im Kern in der starren Rollenverteilung > Master<->Slave. > > Ich würde deswegen gleich mal die I2C-Idee beerdigen und auf UART > setzen. > > Spart die Taktleitung und macht sie als Leitung für die zweite > Datenrichtung verfügbar, womit jeder seinen Dreck loswerden kann, wann > immer er anfällt. Ohne jeden Programmieraufwand ist jeder Partner so > gleichzeitig Master und Slave. Klingt logisch. Wenn ich mir die ganzen Produkte bei Adafruit und Co. anschaue dann gibs dort aber immer nur I2C und nicht UART. Woran liegt's?
Tino Kühn schrieb: > Klingt logisch. Wenn ich mir die ganzen Produkte bei Adafruit und Co. > anschaue dann gibs dort aber immer nur I2C und nicht UART. Woran > liegt's? Doofe Frage. Die haben wohl mehrheitlich keine Taster. Genau das hat dich ja wohl animiert, welche dranstricken zu wollen...
So, ich erstelle gerade die Platine und auch die Software für den Controller. Ich fange einfacher an, sprich mit Befehlen die per RX/TX versendet werden. Was mich zunächst interessiert, wie würde ich meinen Befehl beginnen? Sprich was sende ich an das Display damit es weiß das es gemeint ist? Und wie trenne ich dann zwischen Daten und Befehlen?
Du könntest gleich das Display an einen PCA9555 hängen (I2C-16Bit-I/O-Port-Expander) und hast gleich noch ein paar Pins für Tasten übrig.
So, die Platine mit Atmega8 drauf ist da und funktioniert auch schon. Nun soll die Software zum Leben erweckt werden. Sprich die Logik damit auf RX und TX reagiert wird. Das Display soll ja unterschiedlich reagieren, entweder Text darstellen oder Befehle abarbeiten. Ich habe ein altes serielles Display und da beginnen die Befehle mit '27&' danach ein Buchstabe für den Befehl und dann evtl. noch ein Wert. Text wurde so geschickt. Frage: Ist das zweckmäßig oder ist das eher doof. Hat jemand eine gute bessere Idee? Danke für Tips und Hinweise...
Tino Kühn schrieb: > So, die Platine mit Atmega8 drauf ist da und funktioniert auch schon. > Nun soll die Software zum Leben erweckt werden. Sprich die Logik damit > auf RX und TX reagiert wird. Das Display soll ja unterschiedlich > reagieren, entweder Text darstellen oder Befehle abarbeiten. Ich habe > ein altes serielles Display und da beginnen die Befehle mit '27&' danach > ein Buchstabe für den Befehl und dann evtl. noch ein Wert. Text wurde so > geschickt. Frage: Ist das zweckmäßig oder ist das eher doof. Hat jemand > eine gute bessere Idee? Danke für Tips und Hinweise... Soory, das 27 ist der Escape Carakter und das & (UND) ist ein ASCII Zeichen
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.