Ich habe die Schaltung soweit wie hier aufgebaut mit 2 Registern
http://ba.protostack.com/2010/05/shift_register_07_lrg.jpg
Zusätzlich habe ich den ICs noch jeweils einen Kerko 0µ1 verpasst.
Sobald ich ein Bit oder auch ein ganzes Byte setze, flackern alle nicht
gesetzen Pins etwas (alle 100ms wie in der Funktion).
Was ist die Ursache? Mit und ohne /OE Schaltung habe ich es schon
versucht. Diese kann nach meinen Kenntnissstand damit nichts zu tun
haben.
Keine Blockkondensatoren?
Das ist immer schlecht.
Jedes digital-IC, kriegt an JEDEM seiner Versorungsspanungsanschlüsse
(ja, auch an denen die scheinbar nicht benutzt werden, also auch an
AVcc) einen 100nF Kerko zwischen Vcc und GND spendiert. Und zwar so
dicht wie möglich an den jeweiligen Pins.
Und ja, das beinhaltet den Mega (der kriegt 2, an Vcc-GND und an
AVcc-GND) und auch jeden der beiden 595.
> Was ist die Ursache?
Da die SW soweit in Ordnung ist, wird dein µC wohl bei jedem
Einachaltvorgang der LED abstürzen und das Programm wieder von vorne
ausführen. Woraufhin er wieder abstürzt, usw. usw.
>Zusätzlich habe ich den ICs noch jeweils einen Kerko 0µ1 verpasst.>Sobald ich ein Bit oder auch ein ganzes Byte setze, flackern alle nicht>gesetzen Pins etwas (alle 100ms wie in der Funktion).
Ich habe zwischen VCC und GND sowohl am Attiny als auch an den 74HC595
jeweils 1 Abblockkondensator gesetzt wie oben auch geschrieben.
Die Abblockkondensatoren sitzten am 74HC595 direkt an VCC.
Absturz würde nicht passen. Ich hab schon ein paar Szenarien
durchgespielt, ua.
1
if(millis()-last_millis>=500)
2
{
3
last_millis=millis();
4
5
com74hc595_unsetall();
6
if(i<16)com74hc595_setBit(i);
7
elsei=0;
8
com74hc595_out();
9
i++;
10
}
Mit einem Abblockkondensator von GND nach den einzelnen Pins halte ich
die Probleme unter Kontrolle, aber ich kann ja schlecht bei 16 Pins
zusätzliche 16 Kerkos einbauen.
Die Leds werden mit 1K8 an 3V3 mit etwa 1mA betrieben.
Nein ;)
Ich habe nun testweise beim Stecken die GND Verbindung zur Sammelschiene
entfernt. Die Leds leuchten dann minimal schwächer, aber die Register
arbeiten noch.
Erst wenn ich die Zuleitung vom MCU (DS) entferne, gehen die Register
aus. ST_CP und SH_CP sind zu dem Zeitpunkt schon abgehangen.
Falls hilfreich,
das ist der einzige Teil, der aus der Lib angepasst wurde.
Stefan S. schrieb:> Die Leds werden mit 1K8 an 3V3 mit etwa 1mA betrieben.
Wenn du mit 3V3 und 8MHz arbeitest, würde ich dir raten, NOP zwischen
CLK_LOW und CLK_HIGH zu setzen.
Ob 5V oder 3V3 macht kein Unterschied. Ob es an den 8MHz liegt, kann ich
nicht sagen. Werde gleich mal andere Pins wählen, damit ich an PB0 und
PB1 einen externen 16MHz Quarz mit Lastkondensatoren anschließen kann.
Stefan S. schrieb:> Ob 5V oder 3V3 macht kein Unterschied. Ob es an den 8MHz liegt, kann ich
Es macht sehr wohl einen Unterschied, nämlich in den Mindestzeiten für
Low an Clockleitungen. Mit 8MHz bist du so ziemlich an der Grenze und
mit 16MHz sogar darunter. Und wenn es ein Tinyx41 ist, wird es mit
16MHz und 3V3 sowieso nichts.
Ob das aber die Ursache ist, kann ich nicht sagen.
Stefan S. schrieb:> Mit einem Abblockkondensator von GND nach den einzelnen Pins halte ich> die Probleme unter Kontrolle, aber ich kann ja schlecht bei 16 Pins> zusätzliche 16 Kerkos einbauen.
Das heißt nur, dass der Kondensator deine Umschaltpausen überbrückt,
da würde ich an deiner Stelle mal ansetzen.
> Es macht sehr wohl einen Unterschied, nämlich in den Mindestzeiten für> Low an Clockleitungen. Mit 8MHz bist du so ziemlich an der Grenze und> mit 16MHz sogar darunter. Und wenn es ein Tinyx41 ist, wird es mit> 16MHz und 3V3 sowieso nichts.> Ob das aber die Ursache ist, kann ich nicht sagen.
Ich kenne es vom Mega328, dass dieser laut Datenblatt keine 16MHz mit
3V3 schafft. Habe vorhin die Fuse falsch geflasht.
EXTLCK anstatt EXTXOSC. Kommte aber gerade nicht mehr an dern
Controller. Da muss ich morgen mal nachschauen, ob ich den ohne
HV-Progger wieder hinbekomme. Wenn nicht, es warten noch 98 weitere
Attiny841 darauf, verlötet zu werden.
Dass 8MHz bei 3V3 nicht funktioniert, kann ich mir ehrlich gesagt nicht
vorstellenen. Ansich sollte es beim HC595 (ohne T) keine Probleme bei
3V3 geben. Zumal er ja die Register immer passend setzt, nur ist halt
ein kleine "Pieks" auf der Leitung, der alle anderen Leds zum
Schaltpunkt einmal ganz schwach aufblinken lässt.
Off Topic:
Stefan S. schrieb:> Da muss ich morgen mal nachschauen, ob ich den ohne> HV-Progger wieder hinbekomme. Wenn nicht, es warten noch 98 weitere> Attiny841 darauf, verlötet zu werden.
Nimm einen von den 98 weiteren µCs, programmiere ihn so, dass ein Pin
toggelt und verwende ihn als clock für den verfusten. Dann die Fuses
richtig setzen und schon hast du wieder 99 zur Verfügung.
Funktioniert ganz gut, wenn man keinen eigenständigen Oszillator als
Retter zur Verfügung hat, ist aber halt etwas Aufwand.
Im Atmel Studio wird über "Mouse-Over" nicht angeben, wie die Taktrate
der Ext Clock ist. Kann mir die wer veraten? Den Rest bekomme ich mit
einem anderen Gerät schon hin. ;)
Stefan S. schrieb:> Dass 8MHz bei 3V3 nicht funktioniert, kann ich mir ehrlich gesagt nicht> vorstellenen.
Das habe ich auch nicht gesagt, nur dass es bei 16MHz nicht geht.
Stefan S. schrieb:> Ansich sollte es beim HC595 (ohne T) keine Probleme bei> 3V3 geben. Zumal er ja die Register immer passend setzt, nur ist halt> ein kleine "Pieks" auf der Leitung, der alle anderen Leds zum> Schaltpunkt einmal ganz schwach aufblinken lässt.
Und mit Kondensator nicht, ist das richtig ?
Wenn ja, heisst das für mich dass der HC595 eine (ziemliche) Pause
beim Umschalten hat. Und zwar gehen deine LEDs von AUS auf HIGH-Z. Da
es sich um LC LEDs handelt, reicht das, um die LEDs schwach aufleuchten
zu lassen. Mit Kondensator nicht, weil der das schluckt.
Stefan S. schrieb:> #define PORT_SCK PINB1 //74HC595 PIN 12> #define PORT_RCK PINB2 //74HC595 PIN 11
Falls die Kommentare stimmen, scheinen Pin11 und 12 vertauscht zu sein.
Lt. Programmcode wird PORT_SCK für den Shift-Takt und PORT_RCK für den
Datenübernahme-Takt verwendet. Prüfe die mal mit dem Oszi.
Marc Vesely schrieb:> Und mit Kondensator nicht, ist das richtig ?> Wenn ja, heisst das für mich dass der HC595 eine (ziemliche) Pause> beim Umschalten hat. Und zwar gehen deine LEDs von AUS auf HIGH-Z. Da> es sich um LC LEDs handelt, reicht das, um die LEDs schwach aufleuchten> zu lassen. Mit Kondensator nicht, weil der das schluckt.
Problem leider nicht gelöst, werde nun erstmal feste Lötverbindungen
versuchen.
Habe es nun mit
Attiny841 int. OSC (3V3, 8MHz)
Attiny841 int. OSC (5V, 8MHz)
Attiny841 ext. Quarz (5V, 16MHz)
Atmega328P ext. Quarz (5V, 16MHz)
probiert. Somit wird es wohl an der Verbindungen zu den 595 liegen, ich
werde weitere Testen und mal einen Logic Analyser anstecken.
Hallo,
Also ich hab mal so Module gebastelt wo vorne eine einzelne 7-Segment
LED Ziffer dran war und hinten ein SMD 74HC-weissichnimma shift
register. Damit die LEDs beim durchschieben nicht flackern muss man OE
während dem durchschieben deaktivieren. So wie ich das sehe ist !OE. Das
heißt du musst während dem durchschieben OE auf Vdd legen.
Da mein 74HC-weissichnimma damals kein OE hatte hab ich stattdessen den
common pol der LEDs (auf der einen seite hängen die ja alles am shift
register und auf der anderen Seite gemeinsam "common" auf VDD bzw. VSS)
über einen transistor vorübergehend deaktiviert.
Ursache: Unser Auge kann nichts wahrnehmen, dass kürzer als ca. 1/25
Sekunde ist. Ich bin mir nicht ganz sicher (Biologen gefragt) aber ich
glaube das betrifft nur "Aussetzer". Also wenn eine LED 1/25 einer
Sekunde abgeschalten ist wird dir das nicht auffallen. Ein kurzer
Lichtblitzer einer eigentlich abgeschalteten LED jedoch fällt einem
durchaus auf. Wie gesagt: bin mir bezüglich der Ursache nicht ganz so
sicher - nachleuchten tun so LEDs sicher nicht, sonst wäre ja eine IR
Fernbedienung oder SPDIF undenkbar. Aber ich glaube das Auge erkennt den
kurzen Lichtblitz selbst wenn er nur 1/1000 Sekunde lang ist.
Ist aber nicht die Ursache, habe auch bereits die Timer-funktion
komplett aus dem Programm genommen und meine Dauerschleife mit
_delay_ms(100); ersetzt. Gleiches Problem.