Hallo!
Ich versucher gerade mein erstes gcc programm zu schreiben und hab
anscheinend irgendwo einen fehler drin.
in meiner schaltung habe ich einen ATMega16 und eine Schieberegister.
http://img844.imageshack.us/i/schaltung12.png/
Das ist meine schaltung (den rest einfach mal wegdenken...)
und jetzt wollt ich mal ein programm schreiben, das einfach nur jedes 2.
LED im schieberegister leuchten lasst. (nur mal zu testzwecken)
Was für Schieberegister verwendest du? Die z.B. HC595? Bedenke, dass die
noch Latches vor ihren Ausgängen haben und du noch nen Freigabetakt hast
neben dem Schiebetakt.
Über RCK schiebst du? Mache mal nen kleinen Delay von vllt. µs 50
dazwischen.
Wieso das "SPDR;" vor dem RCK-Strobe?
Den code hab ich von dort abgeschaut:
http://www.rn-wissen.de/index.php/Portexpander_am_AVR
ich verwende ein HCT595.
while (!(SPSR & (1 << SPIF)));
wartet wenn ichs richtig verstanden hab darauf, dass die bits gesendet
wurden. ( was den delay eigentlich auch unnötig macht? )
Se Sk. schrieb:> Wieso das "SPDR;" vor dem RCK-Strobe?
jo, mach das mal raus! die sollte eigentlich nichts tun, vielleicht
wurde sie sogar wegoptimiert.
außerdem glaube ich, das RCK muss eine positive Flanke zum speichern
bekommen. Also die beiden Zeilen vom Strobe bei Gelegenheit vertauschen.
Dürfte aber bei dem kleinen Programm nichts machen
wie CPOL eingestellt ist, ist bei mir egal, kannst also auch auf default
lassen für die reine Ausgabe.
Das delay ist nicht nötig.
Was mich wundert, ist dass du sagst, dass ALLE LEDs immer leuchten.
Könnte es nicht sein, dass das Programm einfach funktioniert und du die
LEDs zufälligerweise genau so falsch angeschlossen hast, dass alle immer
an sind? Versuch doch mal andere Kombinationen für data...?
wie sollte ich die leds falsch anschließen? ich hab + auf +12V
(-) über einen widerstand auf den register-ausgängen.
Beim schieberegister hab ich SCL mim reset vom µC zusammengehängt (und
der is die ganze zeit auf high), und den rest halt so wie auf dem plan
(1. post)
jakob m. schrieb:> wie sollte ich die leds falsch anschließen? ich hab + auf +12V> (-) über einen widerstand auf den register-ausgängen.
Jap, genau dann leuchten sie immer. Mit den Ausgängen kannst du dann
höchsten die Helligkeit leicht variieren.
so. habs jetzt an 5V angeschlossen mit einem 100ohm widerstand. jetzt
blinkts nurnoch am anfang einmal kurz auf, wenn ich einsteck. aber
irgendwas dürft mit dem programm wieder nicht passen :-/ hab probiert
das write_sternschnuppe nur vor der main-loop aufzurufen und auch in der
main-loop (kein unterschied).
Armin schrieb:> Se Sk. schrieb:>> Wieso das "SPDR;" vor dem RCK-Strobe?>> jo, mach das mal raus! die sollte eigentlich nichts tun, vielleicht> wurde sie sogar wegoptimiert.
SPDR sollte als Register eine volatile Variable sein und kann daher
nicht wegoptimiert werden. Durch diese Zeile wird SPDR lesen und der
gelesene Wert ignoriert.
warum funktioniert das eigentlich mit den 12V nicht? sollte doch auch
funktionieren, wenn ich einen passenden widerstand einbau?
Edit: kann es sein, dass es zu problemen kommt, wenn die kabel (vom µC
zum schieberegister) etwas länger sind? (ca. 1,5m)
jakob m. schrieb:> warum funktioniert das eigentlich mit den 12V nicht? sollte doch auch> funktionieren, wenn ich einen passenden widerstand einbau?
Eigentlich ganz logisch:
- SR-Ausgang ist LOW => 12V-0V = 12V über LED+Vorwiderstand => leuchtet
- SR-Ausgang ist HIGH => 12V-5V = 7V über LED+Vorwiderstand => leuchtet
auch
Dadurch leuchtet die LED in beiden Zuständen, die Unterschiede in der
Helligkeit dürften so gering sein, dass du sie nicht bemerkst. Wurde
auch weiter oben schon geschrieben...
Wenn du die LEDs an 5V anschließt, hast du:
- SR-Ausgang LOW => 5V-0V = 5V über LED+Vorwiderstand => LED leuchtet
- SR-Ausgang HIGH => 5V-5V = 0V über LED+Vorwiderstand => LED leuchtet
nicht
Tada... ;)
MfG Stefan
Stefan Ernst schrieb:> Karl Heinz Buchegger schrieb:>> Du musst auch noch SS als Ausgang konfigurieren.>> Ist es. Trägt in seinem Programm den Namen "RCK".
Ah ja.
Im Original ganz oben sieht man es.
Mein Fehler
jakob m. schrieb:> warum funktioniert das eigentlich mit den 12V nicht? sollte doch auch> funktionieren, wenn ich einen passenden widerstand einbau?>> Edit: kann es sein, dass es zu problemen kommt, wenn die kabel (vom µC> zum schieberegister) etwas länger sind? (ca. 1,5m)
Möglich, aber nicht sehr wahrscheinlich.
Zeig doch mal dein komplettes jetziges Programm.
Du gestattest, dass ich deinen Schaltplan hier ins Forum poste?
Aber die hüpfenden Bälle da bei Imageshack machen mich wahnsinng.
Und ausserdem seh ich nicht ein, warum der Schaltplan vom Programm
getrennt werden soll. Programm hier - Schaltplan hier.
hab schon alle kombinationen probiert (nur am anfang write, nur in der
schleife write, beides, mit spdr; ohne spdr;)
jetzt hab ich gerade die richtigen leds zum leuchten gebracht, wie ich
den ISP stecker im laufenden betrieb angesteckt hab. wie ich dann den
strom wieder aus/eingesteckt hab wars wieder weg...
Ok. mir is gerade das massekabel von buchsenstecker abgerissen. vll hats
ja deshalb probleme gegeben ...
Bitte auch mal die echte aktuelle Schaltung zeigen. Die im ersten Post
kann ja schon mal nicht gestimmt haben. Dort sind 4 LED gegen Masse
angeschlossen. Und die haben mich zuerst vom Antworten abgehalten, denn
dass die oberen immer leuchten würden, habe ich gleich gesehen, konnte
mir aber nicht erklären, warum auch die unteren 4 leuchten sollten. Wer
weiß, was da noch so alles anders ist.
Hab leider keinen aktuelleren schaltplan. aber die LEDs sind jetzt mit
(+) am 7805 angehängt und mit (-) über einen 100ohm widerstand an den
ausgängen vom schieberegister.
ich glaub ich hab jetzt nurnoch irgendwo eine schlechte verbindung
(schlecht gelötet) weil wenn ich die kleine platine nimm (auf der das
schieberegister und die leds draufgelötet sind und biss hin und her
beweg leuchten manchmal die 4 LEDs auf
Edit: ok vll isses doch was anderes. Wenn ich direkt von oben auf die
leds schau seh ich, dass sie leicht flackern ( nur die 4, die ich auf 1
hab)
Wenn ich jetzt den ISP stecker einsteck (zum eval board) dann leuchten
die 4 LEDs solange, bis die betriebs-LED vom evalboard leuchtet. dann
isses wieder vorbei. allerdings solange sie leuchten leuchten sie
richtig stark.
Schreib dir jeweils eine Funktion die ein 0-Bit ausgibt bzw ein 1 Bit
ausgibt, mach ein _delay_ms( 1000 ) zwischen die einzelnen Schritte (so
dass der Transfer extrem langsam abläuft) und dann geh mit einem
Messgerät (oder zuätzlichen LED) auf die Steuerbeinchen des 595 und sieh
nach, was dort ankommt.
seltsame sache. wenn ich mit den fingern in die nähe vom board komm
fangts zum blinken an (die 4 leds, die blinken sollen). wenn ich wieder
weggeh isses wieder aus..
Bring erst mal deine Hardware in Ordnung.
Das hat doch keinen Sinn, wenn man sich nicht darauf verlassen kann,
dass alle Verbdinungen auch tatsächlich in Ordnung sind.
Ausserdem darf bei DEM Programm keine der Ausgangsled blinken.
das lasst jetzt alle LEDs leuchten
allerdings hab ich da angst, dass ich meinen 7805 kill... der wird schon
ziemlich heiß, wenn die auch nur kurz alle leuchten.. (was hoffentlich
nicht das problem sein sollt, weil sowieso immer nur 1-2 davon leuchten
sollen (wird ein lauflicht)
jakob m. schrieb:> allerdings hab ich da angst, dass ich meinen 7805 kill... der wird schon> ziemlich heiß,
wenn du den mit 12V fütterst, wundert mich das nicht besonders.
kaum funktioniert mal was kommt auch schonwieder das nächste problem.
nach dem letzten überspielen hat ponyprog den µC nicht mehr erkannt...
d.h. wenn ich auf lesen gehe sagt er, dass nix an com3 angeschlossen ist
(ist es aber) und die LEDs fangen auch zum blinken an (was sie vorher
auch schon gemacht haben) eigentlich dürfte ich an den fuses nichts
geändert haben, weil ich immer vor dem überschreiben ein load gemacht
hab.
das is ein programm zum testen. allerdings leuchten da auch alle 8 LEDs
und nicht nur die 4, die ich will..
hab auch schon durchgetestet. die anschlüsse stimmen alle und er setzt
sie auch auf high, wenn ichs ihm sag..