Hallo allerseits, ich versuche mich gerade an diesem Tutorial: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister. Dafür habe ich eine woanders ausgebaute Mehrfachsegmentanzeige mit insgesamt 33 Einzel-LEDs verwendet. Von daher habe ich, statt wie im Tutorial 2, 4 Schieberegister kaskadiert. Die 33. LED steuer ich direkt über den µC (ATMega8) an. Mein Problem ist nun, dass egal, welches Codebeispiel aus dem Tutorial ich verwende, immer alle LEDs aufleuchten. Ich habe auch schon versucht, das ganze für 4 Schieberegister anzupassen, oder den Code auf jede andere nur erdenkliche sinnvolle Art abzuändern, jedoch ohne Erfolg. Das einzige was einmal zu beobachten war, ist dass bei jedem erneuten Schließen des Stromkreis scheinbar zufällig irgendwelche LEDs aufleuchteten. Allerdings kann ich nicht sagen, wie der Code da ausgesehen hat. Einen Hardwarefehler schließe ich aus. (Ich habe allerdings zur Sicherheit trotzdem mal noch den Schaltplan angehängt, falls ich irgendwas komplett falsch verstanden haben sollte. Der Max232, der noch zu sehen ist, kann ignoriert werden. Der soll später noch Daten zwischen PC und µC austauschen, spielt aber zur Zeit noch keine Rolle.) Was mache ich falsch, bzw. wie komme ich meinem Fehler auf die Schliche? Mit freundlichen Grüßen Felix
Mal davon abgesehen, dass du offensichtlich die Hardware-SPI Schnittstelle nicht verwendest, sehe ich in der Verschaltung µC-74HC595 keine Fehler. Also kann das PRoblem wohl nur an der (nicht bekannten) Software liegen... PS: Der SCL Eingang ist mM nach ziemlich sinnlos und kann direkt auf GND gelegt werden.
hey probiers nicht mit einem Code-Schnipsel, welchen du gefunden hast..... mit Hilfe des Datenblattes für den 595 hast du das Programm ziemlich schnell selber geschrieben. (und du hast die Funktion verstanden) Schau auf das Timing Diagramm im Datenblatt... du must nur alles genau wie dort beschrieben schalten und dann funktioniers..
Welche Daten gibts Du denn aus? Und wie wird das jeweilige Anzeigen-Led angesteuert? Wenn mal alles funktioniert und Du schlau bist, so ändere den Code, daß Du 33 bit ausgibst und häng die 33. Led an den Ausgang QH* des letzten Schieberegisters.
>Wenn mal alles funktioniert und Du schlau bist, so ändere den Code, daß >Du 33 bit ausgibst und häng die 33. Led an den Ausgang QH* des letzten >Schieberegisters. "Wenn ... Du schlau bist, so..." liest du dir mal das Datenblatt des 595 durch.
Danke erstmal für eure Hilfe. kurz schrieb: > Welche Daten gibts Du denn aus? > Und wie wird das jeweilige Anzeigen-Led angesteuert? Die LEDs sind einfach an den einzelnen Ausgängen der Schieberegister angeschlossen und haben einen gemeinsamen Plus-Pol. Ich hab mir jetzt das Datenblatt des 595 mal genau durchgelesen und ein einfaches Testprogramm geschrieben:
1 | .include "m8def.inc" |
2 | |
3 | .equ RCK = 3 |
4 | .equ SCL = 2 |
5 | .equ SCK = 1 |
6 | .equ SIN = 0 |
7 | |
8 | |
9 | ldi r16, LOW(RAMEND) ; Stackpointer initialisieren |
10 | out SPL, r16 |
11 | ldi r16, HIGH(RAMEND) |
12 | out SPH, r16 |
13 | |
14 | ldi r16, 0xFF ; Port Pins auf Ausgang konfigurieren |
15 | out DDRB, r16 |
16 | |
17 | cbi PORTB, 4 ; 33. LED ein |
18 | |
19 | cbi PORTB, SIN ; zunächst alle Ausgänge auf 0 |
20 | cbi PORTB, SCK |
21 | cbi PORTB, SCL |
22 | cbi PORTB, RCK |
23 | |
24 | sbi PORTB, SCL ; Clear Leitung auf 1 |
25 | |
26 | sbi PORTB, SIN ; Erste Stelle des Schieberegisters mit 1 belegen (LED leuchtet nicht) |
27 | sbi PORTB, SCK |
28 | sbi PORTB, RCK |
29 | |
30 | cbi PORTB, SCK ; übernehmen |
31 | cbi PORTB, RCK |
32 | cbi PORTB, SIN |
33 | |
34 | loop: |
35 | |
36 | rjmp loop |
Nach diesem Programm sollte ja eigentlich die erste LED nicht leuchten und alle weiteren LEDs sollten leuchten. Allerdings leuchten interessanterweise die ersten 8 LEDs, die anderen sind aus. (Die 33. LED leuchtet natürlich immer, die lasse ich jetzt einfach mal außen vor) Dann nach einem Reset sind die ersten 8 LEDs aus, und der Rest leuchtet. Erneuter Reset und alle LEDs leuchten und dann nach dem nächsten Reset wieder nur die ersten 8. Und immer so weiter. Ich weiß solangsam echt nicht mehr, woran es noch liegen könnte!
Hallo, so wie ich das sehe, musst Du 32 Bit durchschieben, dann erst enablen. Du schiebst ja nur ein bit. Wenn ich falsch liege, bitte um Verständniss, das ich kaum Assembler kann. ;-) Gruß Toby
Tobias Tetzlaff schrieb: > Hallo, > > so wie ich das sehe, musst Du 32 Bit durchschieben, dann erst enablen. > Du schiebst ja nur ein bit. Also laut Datenblatt sollte es auch schon bei einem gehen! Habs aber mal ausprobiert und es leuchten trotzdem noch alle! (Also nicht mehr wie vorher so abwechselnd, das war glaube ich nur zwischenzeitlicher Effekt ! ??). Wenn keiner mehr weis, woran es noch liegen könnte, werde ich mal einfach statt des µC vier Schalter an die Schieberegister klemmen und versuchen manuell Daten an das Schieberegister zu senden. Dann kann ich wenigstens dort die Fehlerquelle ausschließen (bzw. festmachen)!
Ich würde dir mal raten, das du dich erst mal mit den Grundlagen beschäftigst. Wenn du nur einen Schiebetakt durchführst,darfst du auch nur 1 LED betrachten. Die anderen LEDs leuchte rein zufällig oder sind zufällig aus. Und schalter an den Eingängen, an Stelle des AVRs bringen gar nichts, da sie auf grund des Kontaktprellens mehre Impulse pro betätigung geben. MfG Turbotoni
Ich betrachte ja auch nur eine LED, nämlich die erste! Entschuldigung, wenn man mich falsch verstanden hat, weil ich mich immer auf alle bezogen hab. (Das lag daran, dass ich auch versucht habe alle anzusteuern. Das Testprogramm ist nur um zu prüfen, ob ein Schiebevorgang überhaupt etwas bringt). Die erste LED ist aber eben bei obigem Programm immer an, egal ob ich eine 1 oder eine 0 an das Schieberegister sende, und dass ist es, was ich nicht verstehe. Das Kontaktprellen hatte ich ganz vergessen. Natürlich würde es dann nicht funktionieren. Ich würde halt nur gerne prüfen, ob die kaskadierten Schieberegister auch richtig funktionieren, oder ob eventuell eines defekt ist. Kann ja mal passieren! Ist halt mein erstes Projekt mit Schieberegistern und da ich später noch was größeres geplant habe, wofür ich auch Schieberegister benötige, soll dieses Projekt zeigen, ob ich alles richtig verstanden hab.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.