Pages: [1]   Go Down
Author Topic: Externe interrupt en loops  (Read 809 times)
0 Members and 1 Guest are viewing this topic.
Netherlands
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
Ik ben een heel eind gekomen maar loop nu vast op een interrupt probleem. Als volgt:

Ik heb een klok gemaakt met een string van 60 WS2801 led's en een externe rtc. De overige hardware bestaat uit 2 drukknoppen om de uren/minuten in te stellen, een ldr (brightness) om de klok integraal te dimmen en drie (worden er vijf) potmeters die de hue van de drie "wijzers" instellen. De vierde en vijfde potmeter gebruik ik tzt om de overige 57 led's te veranderen van hue en saturation. De saturation van de wijzers staat op max. De loop wordt getriggerd door de 1Hz van de RTC op een hardware interrupt. Dit werkt allemaal prima, maar...

...er zit toch iets niet goed in de code. Als ik langzaam aan de potmeters draai, wordt de kleur niet continue bijgesteld maar eens per seconde. Dat komt wellicht omdat die hele routine in de refresh-loop zit, (welke wordt getriggerd door de 1Hz). Hetzelfde geldt voor de overall brightness van de klok. De ldr wordt eenmaal per seconde uitgelezen , gemiddeld met 15 readings, en als brightness level gebruikt voor de led's.

Als ik een ander stukje code schrijf om de led's op/aflopend te dimmen, dan werkt dat prima. Mijn gevoel zegt me dat het probleem door de interrupt komt. Ik zie het echter niet meer helder...

Wil iemand met mij meekijken en me de goeie kant op interrupten?

(ps uit een raar soort gewoonte heb ik de code her en der van engels commentaar voorzien. ik stuur ook 5 strings led's aan, maar dat zijn eigenlijk 5 aparte klokken op eigen uitgangen. de code oogt wat rommelig daardoor).

edit: waarschijnlijk snap ik niet feilloos hoe een loop zich gedraagt als daar een externe interrupt aan gekoppeld wordt. iets met flags misschien?

* RGB_ledclock_final_multiout_DS1307.ino (8.76 KB - downloaded 10 times.)
« Last Edit: May 26, 2014, 03:44:55 pm by RogerMoerdijk » Logged

Heemskerk, Netherlands
Offline Offline
Sr. Member
****
Karma: 10
Posts: 368
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Het is mij ook niet helemaal duidelijk waarom je de potmeters in de refresh stopt. Je kan gewoon in de loop die immers gewoon eindelooos door draait de potmeters lezen. Verder zou ik nooit een Serial in een interrupt routine gebruiken. die willen nog wel eens bijten.
Verder zou je jezelf kunnen afvragen waarom je niet gewoon klakkeloos de refresh() continu aanroept in de loop ipv alleen maar als hij is veranderd.
Logged

Pages: [1]   Go Up
Jump to: