Icon Ressource

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

  • Frohe Ostern

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

Hero_123

Mitglied
17 Sep 2010
79
2
8
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

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

Hero_123

Mitglied
17 Sep 2010
79
2
8
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
 
Zuletzt bearbeitet:

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

Hero_123

Mitglied
17 Sep 2010
79
2
8
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
 
Zuletzt bearbeitet:

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.143
58
48
Hennigsdorf
Sprachen
BascomAVR, Assembler
Es gibt von Stefan Friends ein Beispiel dazu. Er steuert 10x Servo von einem 2313 an [...] 2313 als Slave [...] Vielleicht ist das ein Ansatz
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...
 
  • Like
Wertungen: TommyB

Hero_123

Mitglied
17 Sep 2010
79
2
8
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
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.143
58
48
Hennigsdorf
Sprachen
BascomAVR, Assembler
könnte ich zum Programmieren eines ATtiny auch einen Programmieradapter von
Wie gesagt - ich nutze nur das STK und den AVRisp, zu Euren Alternativen kann ich nichts sagen...
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?
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.
 

TommyB

Premium Benutzer
17 Mai 2010
1.764
63
48
35
127.0.0.1 ;)
Sprachen
Assembler, LunaAVR, VB.Net, Python, C#
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...
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 ;)
 
Zuletzt bearbeitet:

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.143
58
48
Hennigsdorf
Sprachen
BascomAVR, Assembler
In meiner Tiny-Übersicht sind bisher nur Tinies mit Slave-only-TWI (wenn überhaupt), also nichts mit Multi-Master Arbitrierung. Wenn ich mich recht erinner (nagel mich nicht drauf fest), besitzt der Tiny48/88 'n vollwertigen (Master-fähigen) TWI. Der Tiny1634 nur Slave. Der Tiny40 sollte auch irgendeinen TWI haben... muß da echt mal weitermachen

Und dann haben meiner Meinung nach alle (insbesondere auch die 8/16beiner) X-Core-Tinies 'n Hardware-TWI.
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).
 

achim S.

Premium Benutzer
16 Jan 2010
462
6
18
Nähe Basel
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
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.143
58
48
Hennigsdorf
Sprachen
BascomAVR, Assembler
Nach der Liste oben geht der Attiny 48/88 als vollwertiger IC für die Master / Slave Funktion?
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:
15. TWI – Two Wire Interface
15.1 Features
• Phillips I2C compatible
• SMBus compatible (with reservations)
• Simple Yet Powerful and Flexible Communication Interface, only two Bus Lines Needed
• Both Master and Slave Operation Supported
• Device can Operate as Transmitter or Receiver
• 7-bit Address Space Allows up to 128 Different Slave Addresses
• Multi-master Arbitration Support
• Data Transfer Speed Up to 400 kHz in Slave Mode
• Slew-rate Limited Output Drivers
• Noise Suppression Circuitry Rejects Spikes on Bus Lines
• Fully Programmable Slave Address with General Call Support
• Address Recognition Causes Wake-up When AVR is in Sleep Mode
Hab den selbst aber noch nicht durchgeackert...
Ist doch ein Attiny 261 A PU. Ist der richtig?
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))
 
Zuletzt bearbeitet:

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)