MCP23017 mit dem I2C Bus ansteuern Software 2018-10-25

Ein Programm um den MCP23017 mit dem I2C Bus anzusteuern Software

  1. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Hmm… vielleicht finde ich mal Zeit, was über Two-Wire-USI zu schreiben. Wird hier zu komplex -> eigener Thread...
     
  2. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Es gibt von Stefan Friends ein Beispiel dazu. Er steuert 10x Servo von einem 2313 an mit dem I2C Bus. Dabei dient der 2313 als Slave. Kann verschiedene Adressen auswählen mit Jumper. Hatte noch keine Zeit das Programm weiter auseinander zu nehmen und zu verstehen. Vielleicht ist das ein Ansatz.
    achim
     
  3. Hero_123

    Hero_123 Mitglied

    Registriert seit:
    17. September 2010
    Beiträge:
    33
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Sprachen:
    C
    Hallo LotadaC

    Vielen Dank für Deine Antwort - könnte ich zum Programmieren eines ATtiny auch einen Programmieradapter von nicai systems: http://www.nicai-systems.com/de/robotik/nibo2/ucom-ir2-x ( ich habe den "UCOM-IR2" mit STK500V2 Protokoll) nehmen? Der Schaltplan ist auf S/16 im angehängten PDF zu finden.
    Wenn ich den nehmen könnte, müsste ich keinen anderen kaufen bzw bauen, denn den habe ich schon ;)

    Und nochmals zur Programmierung - ich könnte also ein Programm zum Einlesen und Wandeln von z. B. ADC - Werten schreiben (ATtiny mit ADC vorausgesetzt), diese per U(S)ART, TWI oder USI an meinen ATMega8 schicken, dort auswerten lassen und eine Reaktion wieder an den ATtiny schicken (z.B Grenzwertüberschreitung => eine LED anmachen) - ohne dass ich dem ATtiny einen BootLoader vorher verpassen mußte - habe ich das korrekt verstanden?

    mfg

    Hero_123
     

    Anhänge:

  4. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Hallo Hero
    Diesen Programmieradapter von Nicai kenne ich. Hatte damit sehr grosse Probleme im AVR Studio. Er wurde nicht erkannt und Nicai konnte oder wollte nicht helfen. Am besten probieren ob es bei dir klappt.
    Das mit dem Bootloader hast du richtig verstanden. Meine Atm und so programmiere ich mit dem mk2 der ICE über ISP. Dazu stecke ich einfach den Adapter und Board zusammen und schicke die Daten auf den Proz.
    Hatte keinerei Probleme damit. Musst allerdings beachten, das beim ersten mal die Fuse gesetzt werden müssen (Vorsicht !!!) und du nur mit 1/4 der verwendeten Frequenz arbeiten darfst. Danach geht es schneller. Hatte die vorgehendsweise in meinen Tuts genau beschrieben.
    achim
     
  5. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Was vergessen. Für sowas nehme ich einen PCF8591 mit 1 x Out und 4 x In ADC. Der macht super gut. Hat zwar nur 8 Bit Auflösung reicht aber völlig aus. Habe damit z.B. Joustick Ansteuerung gemacht. Ist schnell und leicht anzuwenden. Es gibt noch eine Reihe anderer Typen für sowas, aber noch nicht getestet.
    achim
     
  6. Hero_123

    Hero_123 Mitglied

    Registriert seit:
    17. September 2010
    Beiträge:
    33
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Sprachen:
    C
    Hallo achim S.

    Vielen Dank für Deine Antworten.
    Dieser PCF8951 - den meinst Du doch als ADC - Chip und nicht als Programmer?

    Meine Idee ist eigentlich, einen etwas "intelligenten" Chip zu nehmen, der selbstständig Aufgaben ausführen kann - Analogwerte einlesen, wandeln und dann bei Grenzwertverletzung eine LED anmachen (und den gewandelten ADC Wert per U(S)ART, TWI oder SPI an meinen ATMega8 schickt (damit dieser den Wert auf dem PC (per USART) anzeigen kann und ich per PC einen "höheren Grenzwert" an den ATMega8 schicke und dieser ihn an den "unterlagerten" Chip sendet); und deshalb wollte ich wissen, ob ich ein derartiges Programm auf den Chip flashen kann ohne BootLoader.

    Programmer - sollte der von nicai systems nicht fkt, habe ich noch einen "mySmart USB" von www.myavr.de

    Letzendlich will ich eine Kommunikation zwischen 2 unabhängigen Prozessoren verstehen und implementieren können - Übung ....

    mfg

    Hero_123
     
    #26 Hero_123, 23. November 2018
    Zuletzt bearbeitet: 23. November 2018
  7. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Der PCF8591 ist ein 4x AC-DC Wandler und ein 1x DC AC Wandler. Hat keine weitere Intellegenz drin. Daten kommen per I2C. Wenn du einen anderen intellegenten IC nehmen willst kommt eigentlich nur ein Prozessor infrage der als Slave arbeitet. Es das eigentlich was ich schon angesprochen habe, verteilte Intellegenz. Der Slave misst den Wert einer Spannung, verarbeitet ihn und meldet erst dann weiter wenn der Grenzwert überschritten ist. Ist eigentlich das was ich machen will. Es sollen mehrere Proz. sein die jeder eine Teilaufgabe erfüllen. Diese werden von einem Master überwacht und gesteuert. Das kann das erfassen von Werten sein, ansteuerung eines Servos, Anzeige auf einem Display, schalten von ausgängen in abhängigkeit des Wertes sein und vieles mehr. Der I2C Bus kann bis zu 127 Slave verwalten. Damit kann man eine Menge machen. Bleibt nur noch eine Frage. Wie macht man das? USI ist wohl zu langsam dafür, doch was dann?
    achim
     
  8. Hero_123

    Hero_123 Mitglied

    Registriert seit:
    17. September 2010
    Beiträge:
    33
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Sprachen:
    C
    Hallo achim S.

    Zur Kommunikation zwischen diesen 2 ATxyz - ich denke, man könnte es u.U mittels USART machen - einer ist Master (mein ATMega8), der die Kommunikation anstößt mit synchroner Kommunikation => der Slave ATxyz erhält eine Ziffer("Kennzahl") und es wird dann als erstes diese Ziffer per USART an den Slave übertragen und gewartet, bis vom Slave eine entsprechende Antwort ("ja, bin ich") zurückkommt, bevor die eigentlichen Nutzdaten bzw. Befehle ausgetauscht werden => damit weiß der Master genau, wer antwortet.
    Auf diese Art und Weise könnte man mehrere Slaves "beglücken", denke ich - und man könnte so auch die Kommunikation der Slaves untereinander steuern.
    Vorteil wäre, dass beide ATxyz mit unterschiedlichen Frequenzen laufen können, aber die Baud Rate bei beiden gleich ist.

    siehe auch http://evolutec.publicmsg.de/index.php?menu=software&content=sdascl

    Ist aber noch keine ausgegorene Idee ;)

    Eine andere Möglichkeit wäre SPI (wenn beide ATxyz SPI-fähig sind) - das könnte etwas einfacher als USART oder TWI sein ...

    mfg

    Hero_123
     
    #28 Hero_123, 23. November 2018
    Zuletzt bearbeitet: 23. November 2018
  9. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Hallo
    habe dein Programm mit dem MCP gerade auf meine Hardware angepasst. Sind doch ein paar Unterschide zwischen den Prozessoren, egal läuft jetzt.
    Habe vielleicht eine andereMöglichkeit für dich. Habe doch das Programm von Stefan Frings erwähnt. Er hat einen 2313 als Slave programmiert mit Angabe von 4 unterschiedlichen A0 bis A3 Adress-Einstellungen. Damit kann ich bis zu 10 Servo ansteuern. Bin gerade dabei es zu testen bzw den Slave zu programmieren. Der läuft mit intern 4 MHz. Mal sehen ob das geht. Der hat eigene Intellegenz und man kann einiges machen.
    achim
     
  10. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Ich soll ... ABSCHREIBEN?? Spaß beiseite, wie gesagt - ich mach irgendwann mal 'n seperaten Thread zum I²C und der Umsetzung via USI auf. Dauert aber noch...
    Den Weg/die Idee/die State Machine dann ich C umzusetzen, bleibt Eure Sache - Ihr seid Klammercoder, ich Assemblerer...
     
    TommyB gefällt das.
  11. Hero_123

    Hero_123 Mitglied

    Registriert seit:
    17. September 2010
    Beiträge:
    33
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Sprachen:
    C
    Hallo achim S.

    Dieser ATtiny2313 hat doch (so wie ich das Datenblatt verstanden habe) TWI, USI und USART - da hast Du doch "freie Auswahl" wenn's um die Kommunikation geht ;).

    @LotadaC
    Der Begriff "Klammercoder" ist echt gut :bounce:

    mfg

    Hero_123
     
  12. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Wie gesagt - ich nutze nur das STK und den AVRisp, zu Euren Alternativen kann ich nichts sagen...
    Du mußt natürlich für beide Controller seperate Programme schreiben, und die je irgendwie flashen. ob Du dazu 'n Bootloader verwendest, oder externe Programmierung (SPI-ISP/HVPP/HVSP was auch immer der jeweilige Controller unterstütz) ist Deine Sache. Im späteren Betrieb brauchst die die Controller nicht mehr neu Programmieren.
    Du mußt für Deine Anwendung entscheiden, welchen Kommunikationskanal du verwenden willst (UART/USART/SPI/I²C), kannst selbst das Protokoll gestalten.
    Soll der "Slave" von sich aus senden dürfen (beim I²C wird er dabei strenggenommen zum Master), soll er mittels seperater Leitung 'n IRQ anfordern, oder pollt der "Master" einfach regelmäßig den Status...

    Nochmal zu Beitrag 28: U(S)ART und SPI legen mittels Push/Pull Ausgängen feste Pegel auf die Leitungen. Um Mehrere Slaves benutzen zu können, müssen nicht adressierte Slaves ihren Beine Tristate halten, beim SPI wird das durch die Chip Select Leitungen realisiert.
    Beim U(S)ART könnte man über die Architektur (Kette/Ring) oder irgendein bestimmtes Protokoll was erreichen.

    Der I²C verwendet dominant-rezessive Leitungen, ist für mehrere (bis 127) Slaves vorgesehen. Die Slave-Adressierung ist bereits festgelegt, ebenso die Multi-Master-Arbitrierung.
     
  13. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Ihr seid "Team Klammercode".
    Wir "Team Bitschubse".
    Keine Ahnung, wo ich das damals geschrieben hatte (@TommyB : Du?), für Bascom fehlt mir auch noch der Team-Name...
     
  14. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Schöne Begriffe ...
     
  15. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.726
    Zustimmungen:
    59
    Punkte für Erfolge:
    48
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
    Du kamst mit Klammercode, ich mit Bitschubse :D
    Ich weiß aber auch nicht mehr wo es anfangs war. Zu Basic / Bascom fällt mir jetzt nichts ein. Was ich vorgestern noch gesehen hab, NodeJS - speziell Node-RED. Duplo-Stapler sind das.

    p.s.: Die Inspiration kam übrigens hier her ;)
     
    #35 TommyB, 24. November 2018
    Zuletzt bearbeitet: 24. November 2018
  16. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Wie sieht es den mit dem Attiny 261 aus? Der USI (I2C) und einen 10 Bit ADC. Geht der besser zum Bus als der 2313? Habe noch einen zuliegen mit passender Platine für die verschiedensten Anschlüsse. Haben denn alle Attiny nur USI und die Atmega einen (besseren) I2C Bus?
    achim
     
  17. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Kann ja mal schnell was zu den Kommunikationsschnittstellen der derzeit noch offenen Controller schreiben. Beim USI bin ich damals auf Unstimmigkeiten in den Datenblättern, das Buffer-Register betreffend gestoßen, und habe das bei ATMEL-Support geklärt. Deswegen sind die bereits eingetragen. Alle Tinies mit USI kannst Du also (eigentlich) ablesen. Die X-Cores sind neuer, aber die haben meiner Meinung alle(!) kein USI mehr, sondern ein richtiges (Master-fähiges) TWI (allerdings ähnelt das eher dem der ATXmegas, als dem der ATmegas).
    • ATtiny87/167
      • SPI
      • USI
      • UART (nur asynchronous, dafür LIN-Support)
    • ATtiny1634
      • TWI (nur Slave)
      • USI
      • 2x USART (Master-SPI-fähig)
    • ATtiny40 (der sollte natürlich als TPI-Tiny auch "hellblau" sein
      • SPI
      • TWI (nur Slave)
    • ATtiny43u (das ist der mit dem internen Boost-Converter)
      • USI
    • ATtiny28
      • Nix (der hat'n Pin, der max 60mA verkraftet, und sowas wie 'ne Ur-Form des PWM unterstützt -> IR-LED -> Fernbedienungen)
    • ATtiny48/88
      • SPI
      • TWI (vollwertig)
    • ATtiny828
      • SPI
      • TWI (nur Slave)
      • USART (Master-SPI-fähig)
    Es soll auch Megas mit USI geben - mir ist keiner bekannt (aber mit denen beschäftige ich mich auch nicht).

    Bisher sind mir bei den Tinies (abgesehen vom Buffer-Register) keine Unterschiede beim USI aufgefallen. Die Register liegen fast(?) immer im 0x1F-Raum (sind also direct bit accessible), aber das interessiert Euch wohl weniger.
    Die Slaveonly-TWIs lassen sich (logischerweise) nicht als Master nutzen (hab hier noch ein Projekt mit 'nem I²C-OLED auf Eis - das soll von 'nem Tiny841 angesteuert werden … verdammt … in Software....)
    Mit USI kannst Du beides, sogar Multi Master Arbitrierung…

    P.S.: statt eines Tiny261 würde ich natürlich die A-Version nehmen, aber wenn er da liegt... (hab hier auch noch'n Tiny26L zu liegen...)
    Die 26er bieten (wie die 85er) 'ne PLL für High-Speed-PWM und'n differentiellen ADC.
    Beim x61(A) kannst Du die USI-Beine remappen. Der zweite Timer ist recht speziell PWM-Mode6 oder so. Das, und die drei alternativen Komperatoreingänge sollten ihn für BLDC-Motoren interessant machen (bei größeren Controllern schaltet man einfach ADC-Eingänge über den Eingangsmultiplexer des ADCs auf den Komperator (dadurch wird aber der ADC blockiert).
    Beide externe IRQs benutzen dieselben Sense-Control-Bits (können also nicht auf unterschiedliche Flanken/Level triggern).
     
  18. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Habe noch mal auf den IC geschaut. Ist doch ein Attiny 261 A PU. Ist der richtig? Kannst du kurz auf die Unterschiede eingehen? Bin nicht soweit das ich das alles kann
     
  19. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    401
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sprachen:
    C
    Nach der Liste oben geht der Attiny 48/88 als vollwertiger IC für die Master / Slave Funktion?
     
  20. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.009
    Zustimmungen:
    51
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Hab ich doch mehrfach drauf hingewiesen. Meinen Informationen nach hat der als einziger non-X-Core-Tiny 'n masterfähiges Hardware-TWI. Aber viele haben eben das USI, und das kann auch Master-TWI, auch Multi-Master. Es ist etwas mehr Software-Unterstützung nötig, aber grundsätzlich geht's.
    Datenblatt - ATtiny48/88 - Kapitel 15:
    Hab den selbst aber noch nicht durchgeackert...
    Richtig für was?
    Die "2" von 261 steht quasi für die Speicherausstattung (2 kBytes (=1kWord) Flash, 128 Bytes SRAM, 128 Bytes Eeprom) - der Kleinste (261/461/861).
    Die "1" war sowas wie 'ne Neuauflage des alten 26ers, mit diversen Veränderungen/Verbesserungen/Erweiterungen).
    Das "A" steht für eine weitere "Generation" - hier wurde im wesentlichen die Fertigungstechnik feiner (picoPower-Generation - weniger Stromaufnahme, Verluste,...). es gibt keine Low-Voltage vs. High-Speed Selektion mehr (Serienstreuung reduziert). Hier die wesentlichen Unterschiede (Stromaufnahme (klar), Resetcharakteristik, Unterschiede in zwei Registern (interessiert Hochsprachler eh nicht))
    Das "P" ist die Gehäusevariante (Plastic Dual Inline Package, 20 Beine (Through Hole), RM 2,54mm zu 7,62mm)
    Das "U" für matt verzinnte Beine (gibt's hier gar nicht anders(*)) und den Temperaturbereich von -40..+85°C

    Abgesehen vom fehlenden Buffer-Register hat meiner Erinnerung nach die gesamte 26er-Serie dasselbe USI (Registeradressen beim 26 hab ich jetzt nicht verglichen, aber auch das interessiert Dich unter C nicht).

    ((*) P.S.: meine 25er sind zB. SOICs mit vergoldeten Beinen, statt verzinnten (ATtiny25-20SSH))
     
    #40 LotadaC, 25. November 2018
    Zuletzt bearbeitet: 26. November 2018
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden