PWM mit daisy chained 74hc595

OP #3439085
Lesenswert?

Hallo zusammen,

ich habe einen atmega8 an dem 4 74hc595 Schieberegister hängen. An jedem 
der ausgänge hängt ein LED.

Ich möchte jetzt jeden Port der Schieberegister zum pwm port werden 
lassen. Ich habe davon shon ein arduino sketch gefunden der soetwas 
macht, jedoch versteh ich die logik noch nicht ganz. In normalem C habe 
ich leider nix gefunden.

Kann mir jemand erklären (nich unbedingt code eher logik) wie ich die 
pwm zum laufen bekomme.

Würde mich außerordentlich über eine Antwort freuen !

Grüße

Basti Himmi
#3439297
Lesenswert?

Ui.
Ich hab jetzt nicht den Beitrag komplett durchgelesen, sondern mir nur 
die ersten beiden Codestücke angesehen, aber die sind in der Praxis 
unbrauchbar.

D.h. ganz unbrauchbar sind sie nicht. Immerhin zeigen sie in einfachem 
Code, wie ein 595 grundsätzlich angesteuert wird. Auf elektrischer 
Ebene.
Aber speziell wenn es dann in den Bereich Helligkeitssteuerung geht, ist 
das viel zu langsam, die Ansteuerung mittels digitalWrite zu machen.

OK. Plan.
Wie siehts aus. Kannst du grundsätzlich die Schieberegister ansteuern? 
Also erst mal ohne Helligkeitssteuerung? Einfach nur gezielt Output-Pins 
an den Schieberegistern auf 0 bzw. auf 1 zu setzen?
Das ist erst mal Grundvoraussetzung. Fürs erste, um die Technik dahinter 
zu verstehen, mittels digitalWrite und danach mittels SPI Modul.

Der Teil darf erst mal keine Probleme aufwerfen. Ansonsten brauchen wir 
uns über PWM gar nicht unterhalten.
OP #3439371
Lesenswert?

Ich mach das nicht mit dem arduino playground foo sondern mit normalem 
C.

Die Ansteuerung einzelner leds funktioniert schon perfekt.

Ich mache das im moment mit einem uint32_t in dem ich die on/off states 
der 32 Leds speichere, und shifte das dann komplett.

Mir fehlt nur die Logik wie das Software pwm funktionieren sollte.
OP #3439715
Lesenswert?

Ah okay cooles Paper werd ich mir mal in Ruhe durchlesen. Hab grad bei 
stöbern noch gesehen dass man auch nach Interrupt-request-bits suchen 
kann um zu sehen ob seine ISR zu lang ist.

Leider habe ich noch nicht herausgefunden wie ich an diese requestbits 
komme. Dann weiß ich zwar nicht wie lang sie ist, aber auf jeden fall 
DASS sie zu lang ist :)
#3439727
Lesenswert?

Wenn dich nur das 'zu lang' interessiert, gibt es noch eine einfachere 
Möglichkeit.

Nach dem Eintritt in die ISR einen Portpin auf 1 setzen. Vor dem Return 
aus der ISR den Portpin wieder auf 0.

Dann mit dem Oszi den Pin beobachten: Das Puls-Pausenverhältnis dessen, 
was du am Oszi sieht, zeigt dir unmittelbar, wieviel Zeit deine ISR im 
Verhältnis zur Zeit zwischen 2 Aufrufen braucht. Siehst du praktisch nur 
noch eine 'Linie' bei 5V, dann ist sie zu lang :-)

Müsste ich mal probieren: Anstatt eines Oszi eine LED anklemmen. Die 
Helligkeit der LED erzählt dir dann, wie es um den Zeitbedarf der ISR 
steht. Glimmt die nur so vor sich hin, dann ist alles in Butter. Ist sie 
aber hell, dann sollte man sich mal Gedanken machen :-) Du hast dann 
praktisch eine PWM, die dir den Resourcen-Verbrauch der PWM anzeigt. Pun 
intended.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren