@Krille: Då är vi på samma våglängd .
Men jag blev lite nyfiken på vad egentligen IRremote pysslar med. Avbrott var 50:e us är ganska saftig belastning. Så jag kollade hur mycket tid den lade på avbrottsrutinen (oscilloscop + cykel-räkning). Arduino duemillanove @16MHz.
Utan att någon IR-signal kommer in så ägnar den c:a 17 us i avbrottsutinen eller på väg in eller ut från den. Eftersom detta sker med 50 us mellanrum så spenderar alltså MCU'n c:a 33% av tiden i avbrottsutinen (även när INGEN IR-signal sänds). Det är MYCKET. Dessutom tillkommer ju tiden för andra avbott, t.ex för TIMER0 som används för millis(), och annat, beroende på vad man använder för resurser.
Men de som skrivit IRremote har en vettig kommentar:
Kod: Markera allt
// digitalRead() is very slow. Optimisation is possible, but makes the code unportable
Så om man byter digitalRead() mot t.ex (PINB & (1<<3)) != 0 (beroende på vilken pinne man har IR-signalen på) och skippar digitalWrite så kommer man ner i c:a 7.2 us vilket motsvarar 14% CPU-belastning (@16MHz). Klar förbättring, men även detta är MYCKET.
Så skulle man vilja ha det ännu effektivare så skulle man t.ex kunna använda externt interrupt, pin change interrupt eller helst ICP (input capture). Då anropas avbrottsrutinen ENDAST då något händer med IR-signalen. Då är man nere på bråkdelar av promille av CPU-belastning (i medeltal över tid), även om man så trycker på fjärrkontrollen 100-tals gånger om dagen. Men det kräver att man använder en specifik pinne till IR-signalen, eller en av få i fallet Arduino Mega (där de dessutom inte har kopplat 3 av 5 ICP-pinnar till hylslisterna (!!!)).
Så. Vissa saker går att göra (MYCKET) bättre, men väldigt svårt att göra i Arduino-biblioteksform som funkar på alla Arduino-plattformar.
Men missförstå mig rätt, jag tycker Arduino är ett otroligt enkelt och bra sätt att komma in i mikro-kontroller-världen och med enkla medel få någonting gjort. Det faktum att många delar av Arduino-rutinerna är ganska ineffektiva spelar för det mesta ingen roll, även om det finns undantag, som i detta fall t.ex.