Atmega88 + IC4094 +LEDs

Gast #1520798
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
Angehängte Dateien:
#1520838
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).
Gast #1520846
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.
#1520851
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.
#1520889
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);).
Gast #1520965
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.