Hallo Leute,
ich habe mich heute mal an eine funktion für die 74hc595er und den
74hc165 gearbeitet.
Meine 595er Funktion funktioniert nicht wirklich, Die LED's gehen zwar
in einem sich wiederholenden Schema an und aus, aber nicht so wie
eigentlich gedacht ( es ist reiner Blödsinn was die einzeigen aber es
ist halt fast immer wieder das gleiche ) von daher denke ich das da
irgendwo nen Denkfehler oder sowas drin steckt.
Hier erstmal der Code
Als ich den Fehler nicht gefunden habe dachte ich mir ich bastel mal die
funktion für die 165er um danach einen neuen Blick auf die 595er
funktion zu bekommen (leider erfolglos) Den Code konnte ich nicht testen
da die 595er funktion ja noch nicht läuft...
Aber vielleicht kann ihn ja hier jmd bei der Gelegenheit gleich mal
durchchecken ob ich da auch Fehler drin habe.
1
#include <avr/io.h>
2
#include <util.delay.h>
3
4
5
#define IDATA_PIN PD2
6
#define IDATA_PORT PORTD
7
#define IDATA_DDR DDRD
8
#define IDATA_read() (PIND & _BV(IDATA_PIN))
9
////////////////////////////
10
#define ICLOCK_PIN PD1 // CLK LOW->HIGH FLanke, pro Flanke wird ein bit herrausgeschoben.
Ich danke euch im Vorfeld schon einmal für eure Hilfe.
PS: beide Code sind bei mir in verschiedenen Projekten, nur damit ihr
euhc nicht wundert warum die includes doppelt sind etc
Liebe Grüße
Martin
Also irgendwas stimmt da nicht...
ich hab die schaltung nochmal und nochmal und nochmal umgebaut...
immer das selbe
Ich hatte den PORTC spaßeshalber mal ausprobiert, und davor von meinem
arduino prototypen die 595er kette benutzt (10x595).
(da gings auch nicht)
Als ich wieder auf den einzelnen umgestiegen bin und den code noch nicht
geändert hatte (von 80 wiederholungen auf 8)
gingen plötzlich alle LEDs an und nacheinander aus (Q1->Q7)
WEnn ich den code wieder auf 8 ändere passiert das nicht und die leds
bleiben einfach aus...
Ich versteh es nicht grrr
hier nochmal der minimal abgeänderte Code. Vielleicht fällt jmd ja doch
was auf
ist zb. gar kein gute Idee.
MCU muss von er IDE dem Compiler mitgegeben werden. Wenn nicht, dann ist
das ein Fehler und sollte nicht vom Source Code eigenmächtig korrigiert
werden. Wenn es da einen Fehler gibt, dann ist die korrekte Reaktion des
Progammierers in den Projekt-Optionen nachzusehen, warum das nicht
korrekt gesetzt ist.
Es muss irgendwas im Umfeld des Programms sein. Der Code an sich ist in
Ordnung. Was ich allerdings von hier nicht prüfen kann, das ist ob deine
Projektoptionen richtig sind, ob du das richtige HEX File auf den
Controller brennst, ob deine Leitungen zm 595 korrekt verdrahtet sind,
ob sie am richtigen Port sind, etc. etc.
Irgendwas in deinem Umfeld passt nicht.
Dann kannst ja auch mal folgendes probieren um zu sehen, dass dein
Programm (aus welchem Grund auch immer) nicht das tut, was du
programmiert hast: Häng ein paar LED direkt am 595 an die 595 Eingänge
für Data, Clock und RClock. Dann machst du deine Delays mal etwas länger
(so ca. 1 Sekunde wird gut funktionieren). Was du an den LED sehen
müsstest, das ist wie sich die Pegel verändern. Wenn du da noch
verschiedenfarbige LED nimmst, dann ist auch die Verwechslungsgefahr der
Leitungen kaum gegeben. Zb: Grün für Data, Gelb für Clock, Rot für
RClock.
Das Muster kennst du ja, in dem die Dinge passieren müssten:
Zuerst nimmt die Datenleitung ihren gewünschten Wert an. Die grüne LED
geht als entweder an oder aus, je nachdem ob ein 0 Bit oder ein 1 Bit
eingetaktet werden soll.
Danach muss die Clock Leitung (Gelbe LED) auf High gehen und wieder auf
Low. Die gelbe LED muss also einmalig aufleuchten.
Das ganze passiert 8 mal, für alle 8 Datenbits
Sind alle 8 Bits auf die Art eingetaktet, dann kommt die RCLock Leitung
einmalig auf High und wieder zurück auf Low. Die rote LED leuchtet also
entsprechend auf und wird wieder dunkel.
Und danach sind die 8 eingetakteten Bits an den Ausgängen des 595.
Dein Programm macht genau das. Daher ist nicht der C-Code Schuld,
sondern irgendetwas anderes. Ich würde ganz ehrlich 3 verschiedenfarbige
LED direkt an die Pins vom 595 hängen und erst mal nachsehen, ob nicht
irgendwo Leiterbahnunterbrechungen, schlechte Kontake am Steckbrett,
gebrochene Kabel oder dgl. vorliegt. Ruhig auch mal das eine Beinchen
von der LED direkt an den Pin des 595 halten, nicht das ausgerechnet
dieser Pin im Steckbrett schlechten Kontakt hat, die LED am Steckbrett
noch brav mitblinkt aber die Leitung zum eigentlichen IC unterbrochen
ist.
Wenn du dir die Delays lang genug machst, du kannst die so lang machen
wie du willst, dann musst du mit den LED problemlos verfolgen können,
wie sich die 8 Bits in den 595 hineintakten und zum Schluss auf die
Ausgänge durchgeschaltet werden. Das ist alles kein Hexenwerk und gut zu
verfolgen.
Hab das ganze mal aufgebaut, und statt dem led_pattern habe ich dem
ShiftOut aufruf einfach den wert 01010101 gegeben.
folgendes Passiert
clock pin an
clock pin aus
clock pin an & data pin an
clock pin aus
datapin aus & clock pin an
clock pin an
clock pin aus
clck pin an
clock pin aus
clock pin an
clockpin aus
clock pin an
clock pin aus
clock pin und rclock pin an
clock pin aus
rclock pin aus
data pin an
data pin aus
und von vorne
haut also nicht ganz hin...
die ersten 2 zeilen stimmen,
der rest nicht und warum er am ende auch nochmal den data pin an und aus
schaltet ist mir auch nen rätsel...
... damit du auch hier die Reihenfolgen sehen kannst. Auch zwischen
Daten-Setzen und Clock Puls würde ich einen Delay einbauen.
An deinen LED kann es nie sein, dass 2 LED gleichzeitig ihren Status
wechseln. Laut Programm passiert das auch nicht, allerdings sind die
Zeitunterschiede für dich als Mensch zu kurz, als das du das mit freiem
Auge beurteilen kannst -> delays einfügen hilft dir als Mensch.
Sollte es trotzdem noch dazu kommen, dass 2 LED gleichzeitig ihren
Status ändern, dann hast du ev. irgendwo einen Kurzschluss.
PS: Bist du jetzt eigentlich immer noch am PORT C?
Wenn ja: Das JTAG hast du per Fuse abgeschaltet? Wenn nicht, dann
funktionieren einige Pins wegen des JTAG Interfaces nicht so, wie sie
sollten. Also unbedingt abschalten (Fuse: JTAGEN)
und nochmal :D
clock pin an
clock pin aus
data pin an
clock pin an
clock pin aus
data pin aus
clock pin an
clock pin aus
data pin an
clock pin an
clock pin aus
data pin aus
clock pin an
clock pin aus
data pin an
clock pin an
clock pin aus
data pin aus
clock pin an
cloc pin aus
data pin an
clock pin an
clock pin aus
data pin aus
rclock pin an
rclock pin aus
Stimmt jetzt also, ich werde mal auf die suche gehen warum der 595er das
nicht mag, hab den allerdings schon 3mal ausgetauscht und die schaltung
schon 2 mal neu positioniert... Das Steckbrett hab ich auhc gestern erst
gekauft...
Ist mir also alles ein Rätsel...
Hier nochmal der Code
Bei den Fuses ist das JTAG aus (schon die ganze zeit)
ich hab die Hz vom prozessor mal auf Default gestellt, sprich:
INTROCOsC_1MHZ_6CK_64MS_DEFAULT
Falls du mit projekteinstellungen meinst ob ich dort den richtigen
ATmega eingestellt habe, dann ja dort ist der Atmega32A eingetragen.
Kann sonst noch was falsch eingestellt sein?
Grüße
Martin
Fehler scheinbar gefunde, meine MR leitung war scheinbar gebrochen...
ärgerlich, soviel zeit wegen so nem kleinen kabel...
Danke dir trotzdem für deine unterstützung!
Guten morgen,
ich sitze grade an den 165ern,
bin wie oben vorgegangen um zu sehen das alles richtig klappt
Pulse Clock und der Parallel Pulse passen.
Allerdings leuchtet meine DATA_Pin LED dauerhaft (hab sie gegen gnd vom
pin 9 des 165 weggezogen)
Sie leuchtet jedenfalls dauerhaft was mir mehr als komisch vorkommt,
weil alle tasten sind nicht gedrückt, auch wenn ich alle tasten drücke,
leuchtet der Daten pin dauerhaft.
Hier mal mein COde,
leieb Grüße
Sorry, wenn ich den Thread hier wieder hochschiebe,
ich habe weitergearbeitet und mal versucht ob ich die 595er an die
funktion der 165 bringen kann damit ich eine optische wiedergabe habe
und schauen kann ob das ganze nun geht oder nicht,
an sämtlichen Clock bzw data ausgängen hängen leds um die signale
nachvollziehen zu können.
Ansich stimmt alles vom Timing, nur scheint er keine daten vom 165er zu
nehmen bzw zu bekommen ( am Dateneingang für den 165er von meinem ATmega
hängt ne led nach gnd, diese leuchtet dauerhaft schwach?!
hier mal der aktuelle code