Problem mit 2x 74HC165

OP #3575645
Lesenswert?

Hallo,

ich bin gerade dabei meine Eingänge mit zwei 74HC165 von meinem Arduino 
Uno zu erweitern und komme trotz stundenlangem googlen nicht weiter :(

ich verwende diesen Code:
http://www.arduino.cc/playground/Code/ShiftRegSN74HC165N

wenn ich ein Schieberegister dranhänge funktioniert alles einwandfrei
wenn ich dann ein 2.dranhänge reagiert kein Taster mehr
meine Anschlüsse sind wie in dem Code beschrieben
wenn ich dann mein 2.dranhänge ist die Belegung so:

(1)Pl       wird parallel mit dem 2.Register verbunden
(2)CP       wird parallel mit dem 2.Register verbunden
(15)CE      wird parallel mit dem 2.Register verbunden (siehe unten)


Am 1.Register hängt auf Platz 9 (Q7) das Kabel für den Arduino
auf Platz 10 (DS) vom 1.Register geht es in den ausgang vom 2.Register 
(Platz 9)Q7


1.Fehler
Die Taster die an dem ersten Register angeschlossen sind reagiert keiner 
mehr bis auf den letzten Taster. Wenn ich den drücke gibt er seriell aus 
dass alle Taster gedrückt sind

2.Fehler
Wenn ich jetzt das Kabel von Platz 15(CE) das mit dem 2. Register 
parallel verbunden ist entferne gehen alle Taster vom 1.Register 
einwandfrei
Von dem 2. Register sind alle Taster tot bis auf den letzten. Wenn ich 
den
drücke gehen alle eingänge vom 2.Register auf High

3.Fehler
Dann hab ich an anderen Schaltplänen gesehen dass man den Platz 15(CE) 
bei allen Registern auf den Ground legen kann (ist ja eigentlich auch 
von der Logig richtig) also hab ich es auch vesucht erst beim ersten 
Register dann noch einmal alles getestet und keine veränderung 
festgestellt und dann beim 2 sind beim Arduino die Lichter ausgegangen 
(ich schätz mal das war ein Kurzschluss) zum Glück hat der PC den Saft 
abgeriegelt denn sonst währe glaub ich mein Arduino nur noch Schall und 
Rauch

zur schicherheit hab ich die Register mal gewechselt nicht dass die 
einen Schaden abbekommen haben aber die Fehler sind immer noch da

Ich hoffe das ich es verständlich geschrieben habe wenn nicht dann bitte 
nachfragen!

Kann mir da bitte bitte einer helfen ich verzweifel hier gerade fast :(

Gruß
Puma321
Angehängte Dateien:
Gast #3575699
Lesenswert?

Probier mal...
1
// ---- 2x 74HC165 kaskadiert ----
2
uint32_t SerialDataRead (void)
3
{
4
    uint16_t data = 0;
5
    uint8_t BitCount = 16;
6

7
    Clock = 1;                                                             // Pin 2 74HC165
8

9
    // positive Taktflanke an der PL Leitung. 74HC165
10
    // übernimmt die Pegel an den Eingängen in das SR.
11
    ParaLoad = 0;
12
    ParaLoad = 1;                                                          // Pin 1 74HC165
13

14
    while ( BitCount -- )
15
    {
16
        data <<= 1;
17
        if ( SerialDataIn )                                                // Pin 9 (Q7) 74HC165
18
            data |= 0x01;
19
        // nächstes BIT heraustakten
20
        Clock = 0;
21
        Clock = 1;                                                         // positive Taktflanke
22
    };
23
    return data;
24
}
Gast #3575725
Lesenswert?

Das ist der Pin am MC, jaja, ich weiß, 1<<PIN aber ich verwende ein 
Makro und damit kann man direkt den Pin ansprechen.

Also in AVR manier if( PINx & ( 1 << Pxx ) )

Logik sollte klar sein. Wenn der PIN 1 ist dann wird auch ne 1 in das 
Datenwort geschrieben.
OP #3575747
Lesenswert?

ist das so richtig wie ich es für mich interpretiert habe?
1
 while ( BitCount -- )
2
    {
3
        data <<= 1;
4
        if( dataPin & ( 1 << dataPin ) )                                                // Pin 9 (Q7) 74HC165
5
            data |= 0x01;
6
        // nächstes BIT heraustakten
7
        clockPin = 0;
8
        clockPin = 1;                                                         // positive Taktflanke
9
    };

wenn das richtig ist dann funktioniert es leider nicht :( was mach ich 
nur falsch sind die Anschlüsse alle richtig angeschlossen(Skizze)?

Danke für deine Bemühungen Bernd N
Er setzt mir alle Eingänge von Register 1 und 2 auf HIGH
Gast #3575782
Lesenswert?

Hast du schon richtig verstanden aber du mußt auch deine entsprechenden 
PINs 0 und 1 setzen, also in AVR..

  PORTx &= ~(1<<Pxx);
  PORTx |= (1<<Pxx);

Du wirst kein Macro haben also verstehe es als Pseudocode und setze es 
um. Wie gut sind deine C Kenntnisse ?
OP #3575848
Lesenswert?

also ich hab es noch einmal probiert und auch den Code den ich vorher 
verwendet hatte noch einmal durchgeschaut der passt eigentlich schon ich 
glaube eher das an meiner Schaltung was nicht passt denn das erste 
Register funktioniert ja nur das 2. halt nicht
meine C Kenntnisse sind einigermasen so voll in die Materie bin ich 
jetzt noch nicht eingestiegen aber davor hab ich C# programmiert aber 
auch nur als Hobby

weis sonst noch irgendjemand rat
das haben doch schon viele ausprobiert oder nicht da wird doch einer 
dabei sein der es auch mal mit einem Arduino Uno versucht hat und dann 
auch das problem hatte
OP #3576838
Lesenswert?

Bernd N schrieb:
> Das kann man nicht mehr nachvollziehen. Der PIN gehört an GND. Du
> kannst
> den auch gerne an deinem MC lassen und den PIN nach GND ziehen. Ein
> Kurzschluss darf da nicht vorkommen.

stimmt ich hab jetzt noch einmal alles kontrolliert und festgestellt 
dass bei meinem Steckbord 2 übereinandergelegene Steckbuchsen verbunden 
sind (vom Werk aus) so was hab ich noch nie erlebt

somit waren zufälligerweise die 5Volt und der Clock enable verbunden

bei diesem Steckboard
http://www.reichelt.de/Laborkarten/STECKBOARD-4K7V/3/index.html?&ACTION=3&LA=5000&GROUP=C94&GROUPID=3374&ARTICLE=67683&START=0&SORT=-rank&OFFSET=500

kann die 2Pins bitte mal jemand an seinem Steckbord kontrollieren ob sie 
auch verbunden sind?
bzw kann ich die irgendwie selber reparieren?

Danke schon mal im Vorraus

Gruß
Puma321
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren