Forum: Mikrocontroller und Digitale Elektronik Problem mit 2x 74HC165


von Simon B. (puma321)


Angehängte Dateien:

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

: Bearbeitet durch User
von Erich (Gast)


Lesenswert?

Statt langatmiger Texte solltest du besser einen Schaltplan (Skizze) 
deines Aufbaus einstellen.
Gruss

von Bernd N (Gast)


Lesenswert?


von Simon B. (puma321)


Lesenswert?

ich hab schnell eine Skizze gemacht ist im Anhang

und die Seite hab ich schon gesehen (ich habe schon gegoogelt hab ich ja 
schon oben erwähnt)

Danke schon mal im Vorraus

von Simon B. (puma321)


Angehängte Dateien:

Lesenswert?

hier die Skizze

von Harald (Gast)


Lesenswert?

Wenn du eine Skizze machst solltest du sie vlt auch posten?!

von Harald (Gast)


Lesenswert?

Nehms zurück ;-)

von Bernd N (Gast)


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
}

von Simon B. (puma321)


Lesenswert?

Bernd N schrieb:
>     while ( BitCount -- )
>     {
>         data <<= 1;
>         if ( SerialDataIn )
> // Pin 9 (Q7) 74HC165
>             data |= 0x01;
>         // nächstes BIT heraustakten
>         Clock = 0;
>         Clock = 1;
> // positive Taktflanke
>     };
>     return data;
> }
>
> [/c]


Was soll das if(SerialDataIn) machen?

von Bernd N (Gast)


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.

von Simon B. (puma321)


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

: Bearbeitet durch User
von Bernd N (Gast)


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 ?

von Simon B. (puma321)


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

von Simon B. (puma321)


Lesenswert?

Bernd N schrieb:
> http://www.mikrocontroller.net/articles/AVR-Tutori...

da ist genau das was ich nicht verstehe und zwar sind da die Anschlüsse 
15(CE) auf den GND gelegt und wenn ich es mache gibt es einen Kurzen!!!
kann das jemand erklären

von Bernd N (Gast)


Lesenswert?

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.

von Simon B. (puma321)


Angehängte Dateien:

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

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.