Forum: Mikrocontroller und Digitale Elektronik Atmega88 + IC4094 +LEDs


von Nein (Gast)


Angehängte Dateien:

Lesenswert?

Ich benutze einen Atmega88 mit einem IC4094 um 8LEDs anzusteuern.

Kurz zum Aufbau:
-3Pins vom mega88 [PD0-PD2] führen zum IC4094 [Stroke,Data,Clock]
-Am 4094 sind ,Pin15 und Pin16 mit Vcc des mega88 verbunden, Pin8 mit 
Masse
-Q1 bis Q8 des 4094 sind mit LED und Vorwiderstand zu Vcc des mega88 
verbunden

Mein Problem:
Die Leds leuchten der Reihe nach sehr schnell <1s und dannach sind sie 
Aus. Gewollt ist aber das sie dannach An bleiben und die Geschwindigkeit 
langsamer ist.

Ist mein erster Versuch mit einem IC4094 davor habe ich nur LEDs An und 
Ausgeschaltet.Bitte um Nachsicht.

Quellcode liegt im Anhang bei.

Danke für eure Hilfe

von Hc Z. (mizch)


Lesenswert?

1
#define F_CPU 18432000UL  //Quarzfrequenz in Hz
2
3
#define delay_ms(ms) _delay_loop_2(ms * (F_CPU/4000))

Macht pro ms ein Argument von 4608.  Das Argument von _delay_loop_2 ist
lt. Dokumentation zur avr-libc 16 Bit groß, also maximal 65535.
1
delay_ms(500);

Nun rechne mal, wie groß das Argument für _delay_loop_2 hier wird (und 
was bei Beschneidung auf 16 Bit davon übrig bleibt).

von Nein (Gast)


Lesenswert?

besten Dank, damit ist die Sache mit der Geschwindigkeit erledigt :).

Noch das Verständisproblem mit dem 4094er. Muss ich nach einem Stroke 
wieder die kompletten 8bits schieben? Jedoch glaub ich beim Starten 
gesehen zu haben das alle mal in der Zeit mindestens einmal An waren 
obwohl ich nach einem Clockbefehl sofort wieder Stroke toggle.

Ein weiteres Problem liegt vllt im Aufbau vor.

von Hc Z. (mizch)


Lesenswert?

Vielleicht nennen wir den "Stroke" einfach korrekt "Strobe".

Mit dem Strobe wird der momentane Zustand in die Ausgangs-Latches 
geschrieben.  Gibst Du also einen Strobe nach jedem Takt, siehst Du 
schön, wie die Daten durchmarschieren.  Wenn der Strobe alle 8 Takte 
kommt, kannst Du ein komplettes LED-"Bild" übertragen und erst, wenn die 
Übertragung fertig ist, erscheint es am Ausgang.

von Nein (Gast)


Lesenswert?

Danke, verstanden.So dachte ich mir das auch. Also sollten doch die LEDs 
alle AN sein nach Ablauf.

von Hc Z. (mizch)


Lesenswert?

Ja.  Warum sie wieder ausgehen, kann ich Dir nicht sagen.  Was aber 
auffällt, ist, dass Dein Hauptprogramm endet - ein Zustand, den eine CPU 
nicht kennt.  Sie läuft weiter.  Mach' mal einen for(;;); ans Ende (oder 
while(1);).

von Jo S. (tigermatze)



Lesenswert?

Ich habe vor kurzem ein 4094 Schieberegister für das Projekt BlinkenLEDs 
simuliert. Ich habe das Projekt mal wieder zum Leben erweckt und einen 
MC zur Steuerung angeschlossen.
Im Anhang ist die Funktionsweise in einem Ablaufdiagramm dargestellt.

von Nein (Gast)


Lesenswert?

Danke für das Diagramm. Sieht so aus als könnte ich Strobe auch direkt 
auf High legen ohne es nach jedem clock ein/aus zu schalten. Versuche 
ich morgen mal zusammen mit der endlos Schleife am ende.

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
Noch kein Account? Hier anmelden.