Abend,
hab gerade versucht mein Programm für I²C-Bus zu rüsten und musste Feststellen, dass der komplette Sketch hängt wenn am digitalen PIN 2 oder PIN 3 von meinem Leonardo eine LED mit Vorwiderstand(300ohm) auf Masse angeschlossen ist.
PIN 3 (2) --->R--->LED--->GND
Ein LCD ist auf den separat herausgeführten Buchsen "SDA" & "SDL" angschlossen und wird vom "i2c_scanner" erkannt.
Ist die LED von beginn an angesteckt (egal ob PIN 2 oder 3), passiert garnichts.. Sketch hängt.
Steckt man die LED im Laufenden Sketch an:
Ist die LED an PIN 2, stoppt der Sketch an der seriellen Ausgabe "Scanning..."
Ziehe ich innerhalb von 2sec die LED ab, kommt
"Unknow error at address 0x"
gefolgt von
"I2C device found at address 0x27 !
done"
und er Scannt weiter.
Ist die LED an PIN 3, stoppt der Sketch auch an der selben Stelle.
Allerding kommt nach dem abziehen von der LED nur, dass er das Display gefunden hat
"Scanning...
I2C device found at address 0x27 !
done"
bzw hängt sich komplett auf, sollte man sich zu lange zeit mit dem trennen der LED gelassen haben.
Gibts dafür eine Erklärung?
Wer den Sketch nicht kennt:
// --------------------------------------
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
PS: Bin alle D-PINs durchgegangen. Ist wirklich nur an PIN 2 und 3.. Ebenso nur mit der LED. Eine Datenleitung eines DS18b20, die über einen Pullup auf 5V liegt stört nicht.