Mit 74hc165 Sharp Sensor auslesen

Hi,
ich versuche gerade mein Sensor, den ich im letzten Post gebaut habe zu erweitern
(http://arduino.cc/forum/index.php/topic,110628.0.html),
damit ich später einmal mehrere Sensoren gleichzeitig laufen lassen kann.
Den 74hc165 habe ich bei Conrad bestellt. Leider sind im Datenblatt widersprüchliche Informationen zu entnehmen:

http://www.produktinfo.conrad.com/datenblaetter/150000-174999/164453-da-01-en-74HC165.pdf

Schaubild PIN CONNECTIONS (Seite 1):
Clock Pin 2
Complementary Output PIN 7
Serial Output PIN9

Schaubild PIN DESCRIPTION (Seite 3):
Clock Pin 9
Complementary Output PIN 2
Serial Output PIN 7

Ich vermute mal Pin Description ist die richtige Belegung?!

Um die Sensoren auszulesen habe ich mir folgendes überlegt:
Ich nehme über den 8 Bit Schieberegister die Signale auf. Das Signal kann nur High oder Low sein demzufolge würde ich mit 8 Sensoren an einem 74hc165 256 Kombinationen auslesen können.
Werden nun zum Beispiel Signale am Eingang 1 und 4 wahrgenommen sollte der Wert 00001001 eingehen (über den ShiftIn Befehl?). Mit diesem Wert würde ich dann ein genauen Befehl an Leds zuweisen die bei bestimmten Werten anspringen sollen, . Hab ich das Prinzip richtig verstanden? Ich bin mir nicht so sicher.. Um die Schaltung zu testen habe ich eine Led am Pin 3 angebracht die aufleuchten soll, wenn der Sensor ein Signal registriert.

Mein Code => Zuerst die Deklaration des Schieberegister und der Led:

const int dataPin = 11;
const int clockPin = 12;
const int latchPin = 13;
const int ledPin =  3;

byte switchVar1 = 72; //01001000 habe gelesen man sollte es möglich zuerst nicht auf null lassen, da es zu Problemen kommen kann


void setup() {
Serial.begin(9600);

pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
pinMode(ledPin, OUTPUT);  

}

Soweit ok denke ich. Jetzt die Loop-und ShiftIn Funktion (soll ich diese Überhaupt benutzen? Wie genau programmiere ich sie damit sie genauso agiert wie oben beschrieben?). Ich finde wenige Gute Anleitungen, die meisten sind für den 74hc595. Ich habe jetzt alles irgendwie versucht aber so richtig klappen will es nicht. Der Sensor funktioniert, zumindest ging die Led kurz aus, wenn ich in die nähe der IR LED komme aber sonst Blinkt sie nur wild herum:

void loop() {

digitalWrite(latchPin,0);
delayMicroseconds(20);
digitalWrite(latchPin,1);


switchVar1 = shiftIn(dataPin, clockPin);
delay (1);
if (switchVar1>250) {
digitalWrite(ledPin, LOW);
}
else {
digitalWrite(ledPin, HIGH);
}
}


byte shiftIn(int myDataPin, int myClockPin) { 

  int i;
  int temp = 0;
  int pinState;
  byte myDataIn = 0;

  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, INPUT);

  for (i=7; i>=0; i--)
  {
    digitalWrite(myClockPin, 0); 
    delayMicroseconds(0.2);
    temp = digitalRead(myDataPin);
    if (temp) {
      pinState = 1;
      myDataIn = myDataIn | (1 << i);
    }
    else {
      pinState = 0;
    }
    digitalWrite(myClockPin, 1);

  }
  return myDataIn;
}

Ja, das Datenblatt ist zwiespältig. Versuchs mit diesem: http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf

http://arduino.cc/playground/Code/ShiftRegSN74HC165N

Grüße Uwe

Ich weiß nicht warum aber der Monitor spuckt mir seltsame Sachen aus. Obwohl nur der PIN 1 des Schieberegister belegt ist zeigt der Monitor Alle Werte auf High.

Ich habe gelesen es das ein Pull Down oder ein Kondensator von nöten ist, kann ich damit dieses Problem lösen?
Gruß

Die Eingänge des 74hc165 dürfen nicht unbeschalet bleiben. Die Eingänge die Du nicht benutzt mußt Du mit einem Pullup oder einem Pulldown Widerstand auf einen definierten Pegel legen.
Grüße Uwe

Müssen die Eingänge an denen der IS471 angeschlossen sind auch mit so einem Widerstand verbunden werden? Was meinst du mit definiert? Einen Widerstand der pro Pin nicht mehr als 20ma abgibt (250 Ohm Widerstand) oder einen relativ hohen Widerstandswert 10kOhm?
Gruß

Ich habe an jedem Ausgang, der nicht belegt ist einen 10kOHm Pulldown Widerstand angebracht der zu Ground führt. Der Eingang des Sensor hat kein Pulldown Widerstand. Sofern ich jetzt nun die Sensoren an den restlichen Eingängen anbringe kann ich die Pulldown Widerstände entfernen sehe ich das richtig?

Gibsonuser:
Müssen die Eingänge an denen der IS471 angeschlossen sind auch mit so einem Widerstand verbunden werden? Was meinst du mit definiert? Einen Widerstand der pro Pin nicht mehr als 20ma abgibt (250 Ohm Widerstand) oder einen relativ hohen Widerstandswert 10kOhm?
Gruß

10 kOhm reichen.
Der Sensor braucht keinen Pulldown oder Pullup Widerstand da er einen internen hat.
Grüße Uwe

Ist es möglich den Erfassungsbereich der Sensoren zu erhöhen momentan liegt der bei <2cm 5-8 cm sind mein Ziel. Liegt es daran das die IR Led zu wenig Strom bekommt? Hilft vielleicht ein ULN2803?

2cm sind wenig
Benutzt Du den Sensor als Reflexionslichtschranke?

Grüße Uwe

Ja benutze ich , deswegen habe ich mich gewundert.. Ansonsten läuft auch alles soweit sehr zuverlässig nur 2 cm sind sehr wenig. Gibt es eine einfachere Lösung als ein Transistor zusätzlich einzubauen? Der Uln2803 geht nicht?

16 Transitoren in einem Gehäuße sind Dir einfacher als 1 Transistor?

Nein der ULM2803 geht nicht. Bei der Schaltung von kreatives-chaos.com » Abstandssensor mit IS471 brauchst Du einen PNP Transitor und keinen NPN Darlington.

Grüße Uwe

Werden ja später mehr als 16 sensoren dementsprechend weniger Lötarbeit.
Dumme Frage auf der Seite benutzen die einen 2N3906 Transistor, funktioniert der denn auch mit dem Arduino aufgrund der negativen Spannung von -5V ? Oder habe ich etwas bei dem Aufbau zu beachten?
Schonmal ein großes Dank von mir!

wo sind die -5V?

steht auf der von dir geposten Seite bei den Kommentaren (Post 3 und 4)

Du mißt -5V wenn Du den Pluspol des Multimeters an Masse anschließt und den Minuspol an +5V.

Das Vorzeichen ist bedingt durch die Definition des Bezugsystems. Du brauchst keine negative Spannung.
Grüße Uwe