Beiträge von pyro

    Die nicht symmetrische Form des Holzstückes führt bei mir auch zu der Frage wie man die einzelnen Scheiben dort sauber herausschneidet, sodass die Schnittkanten parallel verlaufen und alle Scheiben die gleiche Dicke aufweisen. Mit einer Kappsäge wird das nicht, da man es nicht auflegen kann, bzw. dann alle Schnitte beim Verschieben anders ausgerichtet sind. Hat da schon jemand eine Idee zu?

    Du hast nicht verstanden wie das Multiplexing von Leds in der Matrix funktioniert. Die Idee ist, jeweils nur eine Led pro Stromquelle anzuschalten und durch schnelles Umschalten in Bezug auf die Trägheit des Auges den Eindruck zu erwecken, das die gewünschte Anzahl von Leds und ggf. auch alle Leds gleichzeitig leuchten.


    Du solltest dich unbedingt mal in die Grundlagen für dein Projekt einarbeiten, da scheint noch so ziemlich alles zu fehlen. Bevor du an I2C denkst, solltest du schon die notwendigen Grundlagen beherrschen ansonsten gibt das nichts.

    Hm naja wenn das so ist dann bleib ich leiber bei zweimal 8x16 Anzeige :P



    Zitat:
    " und noch ein zusätzliches Paar direkt dort wo SDA bzw. SCL plazieren (wieder gegen VCC).

    Sorry sollte heißen, ein zusätzliches Paar Widerstände dort plazieren, wo in der Zeichung der Text SDA bzw. SCL an den Leitungen steht.


    Da du ja die Hardware für I2C im MC verwendest bin ich nicht sicher wie einfach man dort noch Probleme korrigieren kann. Ich glaube nicht das es welche gibt, will aber hier nichts schreiben dessen ich mir nicht sicher bin.


    Bzgl. der Widerstandswerte sollten dir die Stichworte Parallelschaltung von Widerständen bzw. Ersatzwiderstand genügen bzw. genug Hinweise für die Recherche geben.

    Mit Inhibit kannst du den Multiplexer so schalten, dass keine Verbindung besteht zwischen MC und den TAs. Siehe Truth Table im Datenblatt.


    Ablauf stimmt, die Adressen sind kein Problem. Eher der Multiplexer-Baustein, ich bin mir nur nicht sicher ob es beim Umschalten den Multiplexers nicht einen Spannungseinbruch auf dem Bus gibt, der fälschlicherweise als Startbit durch den MC erkannt werden könnte. Das müsste man dann u.U. im Programm berücksichtigen. Vll. sollte man auch statt der 4.7 kO besser jeweils 10kO nehmen, und noch ein zusätzliches Paar direkt dort wo SDA bzw. SCL plazieren (wieder gegen VCC). Zusätzliche Verzögerungen durch den Multiplexer können auch unter Umständen für Probleme sorgen, deshalb testen.

    Hier eine Skizze für 4 TCA6424. Bevor du das auf eine Platine umsetzt, würde ich es erst mal auf einem Breadboard aufbauen und testen. Bei dieser Variante könntest du sogar noch zwei weitere TCA6424 anschließen.


    Irgendwie lässt du so ein bisschen das Engagment vermissen - erst gibst du zwanghaft eine Lösung vor. Dann gefallen dir deren Einschränkungen nicht. Zudem scheinst du auch nicht wirklich mit der Technik vertraut zu sein (I2C, Basiswiderstände, Vorwiderstände) und hast wohl auch keine Lust dich da einzulesen. Spätestens bei der Ansteuerung der I2C-Expander wirst du mit dieser Einstellung nicht weiterkommen.


    2 Minuten Google liefert als möglichen Kandidaten den MCP23016. Näheres findest du im Datenblatt.

    Zitat

    das ganze soll schon von selbst funktionieren und nicht dass ich da
    noch per Hand was umschalten muss oder wie genau ist das gemeint?

    Hast du dir das Datenblatt mal angeschaut? Nein! Das umschalten erledigt natürlich dein MC in seinem Programm.

    An deiner Stelle würde ich erst einmal mit den TCA6424 anfangen (z.B. auf einem Steckbrett) und für z.B. einen das Multiplexing umsetzen. Die Software ist in diesem Projekt vermutlich anspruchsvoller als der Aufbau der HW. Aber das ist letztendlich deine Entscheidung.


    Bei mehr als 2 TCA6424 kannst du verschiedene Strategien verfolgen:
    - MC mit mehr als einem I2C Port (z.B. Cortex M3 haben z.B. 3 unabh. I2C Ports)
    - Diskreter Aufbau mit Schieberegistern wie dir jkunz vorgeschlagen hatte
    - Multiplexer in die Busleitung einbauen wie z.B. MC14053B. Aufbau: Commons OUT/IN an MC, dann an die Ausgänge jeweils die TCA6424 und dort kommen dann auch die Pullup-Widerstände hin. Du musst dann jeweils von Hand umschalten zwischen den beiden Bussträngen. Ist aber nur ein Schnellschuß, ob das problemlos läuft kann ich dir nicht garantieren.

    Abbildung 4 ist gibt die Adresse (Slave Adress) an, auf die der jeweilige TCA6424 reagiert. Jedes I2C Telegram beginnt mit der Übertragung der Adresse und wird von dem angesprochenen Baustein bestätigt (ACK-Feld). Die Bausteine am I2C Bus mit einer anderen Adresse ignorieren die gesamte Übertragung. ADDR ist aber auch ein Pin des TCA6424, wenn du
    den Pin auf VCC legst, dann hört der TCA6424 auf alle Telegramme die an die Adresse 0x23 gerichtet sind (ADDR Bit in der Slave Addresse High). Legst du den Pin auf GND, hört der TCA6424 auf alle Telegramme die an die Adresse 0x22 gerichtet sind (ADDR Bit in der Slave Addresse Low) [Tabelle 4 + Bild 4].

    Ja ist es mir. Aber die beiden TCA6424 wissen davon ja nichts. Du musst sie also in passender Weise durch ein Programm in deinem MC ansteuern. Zu einem beliebigen Zeitpunkt haben die TCA6424 lediglich einen Zustand (bestimmte Pins sind auf High bzw. Low geschaltet). Dieser wird beibehalten, bis du erneut umschaltest. Ich habe dir in meinem Post nur skiziert wie deine Ansteuerungslogik aussehen könnte.

    Vorwiderstände sind abhängig von den verwendeten Leds und der benötigten bzw. maximal zulässigen Stromstärke. Transistoren benötigst du in der NPN Ausführung. Die Berechnung der Basiswiderstände ist hier erklärt http://www.mikrocontroller.net/articles/Basiswiderstand. Alternativ kannst du auch LogicLevel Mosfets wie IRLML2502 (SMD) benutzen und auf die Basiswiderstände verzichten.


    Die Pullup Widerstände für I2C benötigst du, da der Bus wenn keine Knoten sendet einen definierten Zustand haben muss, um eine neue Übertragung erkennen zu können. Im I2C Standard wurde hierfür als Pegel +VCC gewählt, um eine 0 zu übertragen ziehen ein Baustein jetzt den jeweiligen Bus-Pin auf GND (deshalb benötigen die Bausteine eine gemeinsame Masse).
    Schau dir am besten mal im Datenblatt des AVR das Kapitel TWI an und ließ den Artikel zu I2C in der Wikipedia als Einstieg. Die Lib die ich in meinem vorherigen Post angeführt hatte ist zwar in C, kann aber auch helfen den Ablauf zu verstehen.

    Die Ausgänge SCL, SDA der beiden TCA6424 und des MC werden miteinander verbunden. Zusätzlich benötigen beide Leitungen einen Pullup nach VCC mittls jeweils einem 4.7 kOhm Widerstand. VCC des MC verbindest du mit VCCI und VCCP des TCA6424. Ebenso verfährst du mit GND.


    Wie im Datenblatt beschrieben kann durch das Belegen von ADDR mit GND oder VCC das 6 Bit der Adresse festlegen (Tabelle 4). Wie schon beschrieben hast erfolgt die Ansteuerung der Leds durch Multiplexing. D.h. für einen Lauftext bestimmst du für eine Bild (in dem der Text still steht), welche Leds leuchten müssen.


    Die Darstellung dieses Bildes erfolgt durch Multiplexing, indem du die Pins der Zeilentreiber der Leds, welche leuchten sollen einschaltest und jeweils eine entsprechende Spalte der 1. 8x16 Matrix. Dies erreicht du indem du dem TCA6424 eine I2C Telegram mit den entsprechenden Daten schickst. Für die zweite 8x16 Matrix verfährst du analog. Da beide über unterschiedliche Adressen verfügen, die bei jedem I2C Telegram am Anfang stehen, beeinflusst du hierbei Einstellungen für die Pins der ersten TCA6424 nicht. Nun hast du die erste Spalte dargestellt und machst das ganze für die nächste Spalte beginnend wieder bei der ersten TCA6424. Bist du am Ende der Matrix angekommen fängst du wieder von vorne an.


    Um nun den Text laufen zu lassen, bestimmst du für das nächste Bild (z.B. alle Buchstaben um 1 verschoben), welche Leds leuchten müssen und gibst dieses Muster wie zuvor beschrieben aus. Um eine schöne Animation zu bekommen musst du dir überlegen wie lange jedes Bild angezeigt werden soll. Um unschöne Effekte zu verhindern solltest du den Wechsel von einem Bild auf das andere jeweils dann durchführen, wenn dein Multiplexing von der letzten auf die erste Spalte springt.


    Wenn du mit AVRs und C arbeitest gibt es eine ganze brauchbare Lib für I2C http://homepage.hispeed.ch/peterfleury/avr-software.html (I2C Master Interface). Ich hoffe dein Fragen damit beantwortet zu haben, ansonsten musst du etwas konkreter werden.


    Mfg
    pyro