74HC595 geht nicht

OP #2953825
Lesenswert?

Nabend,
ich steh auf dem Schlauch und verstehe es nicht. Habe den Code von hier 
zum Porterweitern genommen
http://www.mikrocontroller.net/articles/Porterweiterungen#Porterweiterung_.C3.BCber_74HC595_.28Ausgang.29
(Porterweiterung über 74HC595 Ausgang)

Mittlerweile bin ich soweit, dass die Variablen alle noch wie im 
Original stehen, also so: (Verkabelt ist auf Steckbrett direkt mit dem 
entsprechenden Pin des Controllers. Habe mich beim 74HC595 an die 
Pin-Nr. gehalten)
1
// PORTS
2
#define PORT_com74hc595 PORTC
3
#define PORT_SER     PC0    //74HC595 PIN 14
4
#define PORT_SCK     PC1    //74HC595 PIN 12
5
#define PORT_RCK     PC2    //74HC595 PIN 11
6
#define PORT_OE     PB3    //74HC595 PIN 13

VCC und GND natürlich angeschlossen und den übrigen Pin 10 (MR) hab ich 
dauerhaft direkt an GND geschlossen.

Ich bekomm das ding nicht zum laufen...

Beim ersten mal einschalten sind die ersten 4 Ausgänge High, dann 
nochmal kurz spannungsfrei machen (kompletter Atmega8) und dann sind es 
plötzlich nurnoch die ersten 2. Nochmal, dann leuchten die ersten beiden 
nur kurz auf und alle weiteren male bleibt alles dunkel...
Wo ist denn da der Wurm drin? Ist ja schon komisch, dass es immer das 
gleiche macht, wenns mal stromlos war

Meine main:
1
int main(void)
2
{
3
    com74hc595_init();
4
  com74hc595[0]=0b00011000;
5
  com74hc595_out();
6
 
7
    while(1)
8
    {
9
            _delay_ms( 2000 );
10

11
    }
12
}
Gast #2954017
Lesenswert?

Versuch doch mal mehrfach das gleiche zu senden.

So etwa:
1
int main(void)
2
{
3
    com74hc595_init();
4
  com74hc595[0]=0b00011000;
5
  com74hc595_out();
6
 
7
    while(1)
8
    {
9
       _delay_ms( 1000 );
10
       com74hc595[0]=0b00011000;
11
       com74hc595_out();
12
    }
13
}
OP #2954039
Lesenswert?

Also so compiliert es wesentlich schneller (scheint sonst etwas nicht 
optimieren zu können), hilft aber auch nichts.

Habe es jetzt so probiert:
1
int main(void)
2
{
3
    com74hc595_init();
4
    while(1)
5
    {
6
      _delay_ms( 2000 );
7
      com74hc595[0]=0b00011000;
8
      com74hc595_out();
9
            
10

11
    }
12
}
Alle LEDn bleiben aus (hängen an den Ausgängen aktuell zum testen)
#2954310
Lesenswert?

> (Verkabelt ist auf Steckbrett direkt mit dem entsprechenden Pin
> des Controllers. Habe mich beim 74HC595 an die Pin-Nr. gehalten)

Sehen wollen!
(Bild machen)

Die Sache ist die
Du hast (angeblich) deine Hardware genau so aufgebaut wie gefordert. Du 
benutzt Funktionen, die funktionieren.
Eigentlich müsste alles gehen.
Da es aber nicht funktioniert, hast du irgendwas anders gemacht.
Das kriegen wir aber nicht raus, wenn du auf eine WEb-Seite verweist, 
auf der beschrieben ist, wie es sein SOLLTE.
Dein realer Aufbau muss untersucht werden. Dein Programm muss untersucht 
werden.

(Und ganz ehrlich: um ein 595 das erste mal anzusprechen braucht man 
keine 4 Seiten Code. Dazu genügen 5 Zeilen Code. Ein 595 ist genügsam - 
d.h. man darf an allen Stellen im Code Delays nach Belieben einbauen um 
mit ein paar LED die Ausgänge zu überwachen, bzw. direkt an den 595-Pins 
zu messen, ob auch alle Signale korrekt ankommen. Sind ja nur 3, bzw. 4 
mit OE)
#2954892
Lesenswert?

#define PORT_SCK     PC1    //74HC595 PIN 12
#define PORT_RCK     PC2    //74HC595 PIN 11


Beitrag "Re: 74HC595 geht nicht"

komisch, in diesem Datenblatt ist RCLK Pin 12 und SRCLK Pin 11.

Wie gesagt ich kenne den Code nun nicht. Pin 11 ist der Clock der zu den 
Daten gehört, pin 12 der der den Wert parallel übernimmt. Also die 
Bezeichnung ist eigentlich falsch herum. Da es sich aber um Code handelt 
der ja getestet ist, sollte das wohl stimmten. Du kannst es ja auch 
leicht testen indem du 11 und 12 mal tauscht...

RCK = RCLK = ST_CP ->Strobe Clock 12
SCK = SRCLK = SH_CP ->Shift Clock 11


DS
#2954956
Lesenswert?

> #define PORT_OE     PB3    //74HC595 PIN 13
>
>
> eigentlich müsste es doch auch noch ein Portdefine zu PortB geben. Check
> auch mal nach ob dein OE wirklich PB3 ist...

Das geht aber nicht.
Der Code geht davon aus, dass ALLE Leitungen zum 595 am selben Port 
hängen.
Einen Teil am PORTC und ein Teil am PORTB, das macht der Code so wie er 
ist, nicht mit. Entweder alles am B oder alles am C. Aber mischen is 
nicht. Kann man natürlich im Code einbauen, aber wie gesagt: so wie der 
Code auf der Siete ist, spielts das nicht.


Den Rest, das 11 und 12 verkehrt rum angeschlossen ist, ... das sehe ich 
auch so.
OP #2955197
Lesenswert?

Programmiere normal nur alleine an größeren Java/PHP-Projekten da 
verlasse ich mich auf die eigenen Kommentare. Aber in diesem Fall konnte 
man dem ganzen wirklich nicht trauen:

11 und 12 getauscht. Pins des gleichen Ports genommen (kam mir sowieso 
schon spanisch vor, warum der das in einem beispiel macht) und schon hat 
es funktioniert :)

Großes Danke und schöne Weihnachtszeit an alle Helfer

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