Go Down

Topic: Sammelbestellung: 64 Port I2C-Expander als Arduino-Shield (Read 18044 times) previous topic - next topic

skorpi080

#45
Jun 21, 2014, 09:27 pm Last Edit: Jun 21, 2014, 11:28 pm by skorpi08 Reason: 1
Mal kleines Update und ne Frage,
wenn ich diesen Sketch nehme, Blinkt die LED am Port 57.
Wie wähle ich den IC daneben, also Pin 41?

Bei Adress steht der jumper auf 0, interne Spannungsversorgung.
R3 und R4 machts kein Unterschied, ob Widerstand dran oder nicht.
INTA_D2 und INTA_D3 machts auch kein Unterschied ob mit Lötbrücke oder ohne.

Habe den ersten IC abgelötet da die Kontakte da abgebrannt waren. (IC neben EXTERN Stiftleiste)
Was sollen die Beschriftungen über den ICs:
X00/X01/X10/X11



Code: [Select]
// Example code for Centipede Library
// Works with Centipede Shield or MCP23017 on Arduino I2C port

#include <Wire.h>
#include <Centipede.h>


/* Available commands
 .digitalWrite([0...127], [LOW...HIGH]) - Acts like normal digitalWrite
 .digitalRead([0...127]) - Acts like normal digitalRead
 .pinMode([0...127], [INPUT...OUTPUT]) - Acts like normal pinMode
 .portWrite([0...7], [0...65535]) - Writes 16-bit value to one port (chip)
 .portRead([0...7]) - Reads 16-bit value from one port (chip)
 .portMode([0...7], [0...65535]) - Write I/O mask to one port (chip)
 .pinPullup([0...127], [LOW...HIGH]) - Sets pullup on input pin
 .portPullup([0...7], [0...65535]) - Sets pullups on one port (chip)
 .init() - Sets all registers to initial values

 Examples
 CS.init();
 CS.pinMode(0,OUTPUT);
 CS.digitalWrite(0, HIGH);
 int recpin = CS.digitalRead(0);
 CS.portMode(0, 0b0111111001111110); // 0 = output, 1 = input
 CS.portWrite(0, 0b1000000110000001); // 0 = LOW, 1 = HIGH
 int recport = CS.portRead(0);
 CS.pinPullup(1,HIGH);
 CS.portPullup(0, 0b0111111001111110); // 0 = no pullup, 1 = pullup
*/

Centipede CS; // create Centipede object


void setup()
{
 Wire.begin(); // start I2C

 CS.initialize(); // set all registers to default

 CS.portMode(0, 0b1111110111111111); // set all pins on chip 0 to output

 TWBR = 12; // uncomment for 400KHz I2C (on 16MHz Arduinos)

}


void loop()
{  
 
   IO.digitalWrite(9, HIGH);
   delay(1000);
 
   IO.digitalWrite(9, LOW);
   delay(1000);

}



Edit:
Warum auch immer es beim ersten Test nicht lief....
Code: [Select]
CS.portMode(1, 0b1111110111111111);
Hier wird der IC ausgewählt. nur die Reihenfolge stimmt nicht.
0 ist X11
1 ist X01
2 ist X10
3 wäre X00, hab ich aber bei mir nicht drauf, kann daher nicht testen.

playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Wulffi

Quote
Was sollen die Beschriftungen über den ICs:
X00/X01/X10/X11


Das sind die Adressen für die einzelnen ICs.
Das "X" bestimmst du mit dem Jumper, da man zwei Shields verwenden könnte.
Setzt du den auf "1" so haben die ICs die Adresse-Bits 100, 101, 110, 111.
Der Rest dazu ist in der Dokumentation des ICs zu finden.


juiplus

Hatte gerade diesen Thread gefunden.
Kleine Frage zum Status: Laufen die Prints und ist es möglich noch ein Kit zu bestellen?

Danke im voraus,
Jui

olmuk

Hallo, wie ist denn nun der Status ?
Ich hatte mich ja für 2 Kits angemeldet.

Gruß

olmuk
Uno, Nano, ESP32, MFRC522, 4x20 I2C LCD

Wulffi

Hallo zusammen,

ich war die letzten Tage im Urlaub und kann daher erst jetzt antworten...
Die Nachfrage nach dem aktuellen Status ist berechtigt, kann ich aber nicht 100%ig beantworten...

Es ist folgendes... Ich habe die Platinen und alle Teile zu Hause, der Schaltplan wurde damals hier veröffentlicht und nachdem alle Änderungen übernommen wurden, habe ich daraus die Platinen erstellen lassen. Mittlerweile habe ich drei Test-Sets zum Aufbau verschickt, da ich es selbst nicht kann.

Von allen Teilnehmern habe ich keine verlässliche Rückmeldung erhalten. Soll heißen ich habe immer noch die Platinen und Teile, kann aber nicht zu 100% garantieren, dass alles geht!

Gerade deshalb hatte ich ja Test-Sets verschickt, um die vorher testen zu lassen und nicht z.B. 25 "defekte" Sets zu verschicken.

Gerne kann ich das Projekt jetzt wie geplant abwickeln, allerdings immer mit der Info, dass ich keine Funktionsgarantie geben kann :(

Viele Grüße,
Daniel

skorpi080

Bei meinen Tests haben die LEDs geleuchtet wie es programmiert wurde, also von meiner Seite aus gibts grünes Licht.
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Wulffi

Das ist super!
Dann kann es eigentlich losgehen! :)

Ich schreibe zum Wochenende alle Teilnehmer nochmal an und frage nach, ob noch Interesse besteht... Es ist ja doch einiges an Zeit vergangen...

Viele Grüße,
Daniel

skorpi080

Eine Sache wär da noch, das Layout.
Manche stellen sind da schrecklich zum Löten, die Pads/Durchkontaktierungen  sind zu nah aneinander.

Bei nächster Bestellung könnt mans besser Layouten, der Autorouter ist zu doof dafür.
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Zanderber

Hallo zusammen,
ich weiß, dass dieser Thread schon etwas älter ist, bin aber erst jetzt dazu gekommen das Shield zu testen.

Mir sind 2 Fehler aufgefallen:
1. Die gesamte VCC Versorgung der IC's ist separiert (siehe Bilder).
2. Der IC 1 und IC 4 sind gleich Adressiert (es ist mir erst aufgefallen, als ich folgenden Code aufgespielt habe).

Code: [Select]

#include <Wire.h>
#include <Centipede.h>

Centipede CS;             // erstelle Centipede Objekt

#define TIME 300

void setup()
{
Wire.begin();       // start I2C
CS.initialize();    // set all registers to default
Serial.begin(9600);

CS.portMode(0, 0b0000000000000000); // setze alle pins auf dem chip 0 auf output
CS.portMode(1, 0b0000000000000000); // setze alle pins auf dem chip 1 auf output
CS.portMode(2, 0b1111111111111111); // setze alle pins auf dem chip 2 auf input
CS.portMode(3, 0b1111111111111111); // setze alle pins auf dem chip 3 auf input

CS.portWrite(0, 0b1111111111111111); // setze alle pins auf dem Chip 0(Shield #1) auf HIGH (relaiskarte arbeitet mit negativer Schaltlogik)
CS.portWrite(1, 0b1111111111111111); // setze alle pins auf dem Chip 1(Shield #1) auf HIGH (relaiskarte arbeitet mit negativer Schaltlogik)
CS.portWrite(2, 0b0000000000000000); // setze alle pins auf dem Chip 2(Shield #1) auf LOW
CS.portWrite(3, 0b0000000000000000); // setze alle pins auf dem Chip 3(Shield #1) auf LOW
}

void loop()
{
  for (int i = 0; i < 63; i++)
  {
    int inpin = CS.digitalRead(i);
    Serial.print(i);
    Serial.print("  -  ");
    Serial.println(inpin);
    delay(TIME);
  }
}





Vieleicht bin ich komplett auf dem alten Stand (oder auf dem Holzweg  :smiley-confuse: ), aber ich habe auch nichts Neues hier gelesen.
Es wäre schön wenn dieses Thema noch mal aufgegriffen wird.

Go Up