This is relatively interesting:
You'll note that only mod3() is doing the modulus operation (and slowly at that!) for one of your modN routines. I guess that makes sense - the cases in mod2() are all identical, so the compiler optimizes away the test! That certainly explains the low jitter...
I suggest some things need to be "volatile", and your modulous operations be replaced with bitwise and (if they can be.):
volatile uint8_t counter_self = 0;
:
void mod3(void)
{
switch(counter_self & 3)
{
void mod1(void) //
{
digitalWrite(lamp1,HIGH);
128: 61 e0 ldi r22, 0x01 ; 1
12a: 8e e0 ldi r24, 0x0E ; 14
12c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,HIGH);
130: 61 e0 ldi r22, 0x01 ; 1
132: 8f e0 ldi r24, 0x0F ; 15
134: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,HIGH);
138: 61 e0 ldi r22, 0x01 ; 1
13a: 80 e1 ldi r24, 0x10 ; 16
13c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
delayMicroseconds(duration);
140: 84 e6 ldi r24, 0x64 ; 100
142: 90 e0 ldi r25, 0x00 ; 0
144: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp1,LOW);
148: 60 e0 ldi r22, 0x00 ; 0
14a: 8e e0 ldi r24, 0x0E ; 14
14c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,LOW);
150: 60 e0 ldi r22, 0x00 ; 0
152: 8f e0 ldi r24, 0x0F ; 15
154: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,LOW);
158: 60 e0 ldi r22, 0x00 ; 0
15a: 80 e1 ldi r24, 0x10 ; 16
15c: 0c 94 93 02 jmp 0x526 ; 0x526 <digitalWrite>
00000160 <mod2()>:
digitalWrite(lamp3,LOW);
}
break;
case 0:
{
delayMicroseconds(time_0);
160: 81 e0 ldi r24, 0x01 ; 1
162: 90 e0 ldi r25, 0x00 ; 0
164: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp1,HIGH);
168: 61 e0 ldi r22, 0x01 ; 1
16a: 8e e0 ldi r24, 0x0E ; 14
16c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,HIGH);
170: 61 e0 ldi r22, 0x01 ; 1
172: 80 e1 ldi r24, 0x10 ; 16
174: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,HIGH);
178: 61 e0 ldi r22, 0x01 ; 1
17a: 8f e0 ldi r24, 0x0F ; 15
17c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
delayMicroseconds(intervalC_L);
180: 81 e0 ldi r24, 0x01 ; 1
182: 90 e0 ldi r25, 0x00 ; 0
184: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
delayMicroseconds(duration);
188: 84 e6 ldi r24, 0x64 ; 100
18a: 90 e0 ldi r25, 0x00 ; 0
18c: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp1,LOW);
190: 60 e0 ldi r22, 0x00 ; 0
192: 8e e0 ldi r24, 0x0E ; 14
194: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,LOW);
198: 60 e0 ldi r22, 0x00 ; 0
19a: 8f e0 ldi r24, 0x0F ; 15
19c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,LOW);
1a0: 60 e0 ldi r22, 0x00 ; 0
1a2: 80 e1 ldi r24, 0x10 ; 16
1a4: 0c 94 93 02 jmp 0x526 ; 0x526 <digitalWrite>
000001a8 <mod3()>:
/////////////////////////////////////////////////
void mod3(void)
{
switch(counter_self%3)
1a8: 80 91 06 01 lds r24, 0x0106
1ac: 90 91 07 01 lds r25, 0x0107
1b0: 63 e0 ldi r22, 0x03 ; 3
1b2: 70 e0 ldi r23, 0x00 ; 0
1b4: 0e 94 d9 02 call 0x5b2 ; 0x5b2 <__udivmodhi4>
1b8: 81 30 cpi r24, 0x01 ; 1
1ba: 91 05 cpc r25, r1
1bc: 11 f0 breq .+4 ; 0x1c2 <mod3()+0x1a>
1be: 02 97 sbiw r24, 0x02 ; 2
1c0: 79 f4 brne .+30 ; 0x1e0 <mod3()+0x38>
digitalWrite(lamp3,LOW);
}
break;
case 2:
{
delayMicroseconds(time_0);
1c2: 81 e0 ldi r24, 0x01 ; 1
1c4: 90 e0 ldi r25, 0x00 ; 0
1c6: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp1,HIGH);
1ca: 61 e0 ldi r22, 0x01 ; 1
1cc: 8e e0 ldi r24, 0x0E ; 14
1ce: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,HIGH);
1d2: 61 e0 ldi r22, 0x01 ; 1
1d4: 80 e1 ldi r24, 0x10 ; 16
1d6: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,HIGH);
1da: 61 e0 ldi r22, 0x01 ; 1
1dc: 8f e0 ldi r24, 0x0F ; 15
1de: 0e c0 rjmp .+28 ; 0x1fc <mod3()+0x54>
digitalWrite(lamp3,LOW);
}
break;
case 0:
{
delayMicroseconds(time_0);
1e0: 81 e0 ldi r24, 0x01 ; 1
1e2: 90 e0 ldi r25, 0x00 ; 0
1e4: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp3,HIGH);
1e8: 61 e0 ldi r22, 0x01 ; 1
1ea: 80 e1 ldi r24, 0x10 ; 16
1ec: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,HIGH);
1f0: 61 e0 ldi r22, 0x01 ; 1
1f2: 8f e0 ldi r24, 0x0F ; 15
1f4: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp1,HIGH);
1f8: 61 e0 ldi r22, 0x01 ; 1
1fa: 8e e0 ldi r24, 0x0E ; 14
1fc: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
delayMicroseconds(intervalC_L);
200: 81 e0 ldi r24, 0x01 ; 1
202: 90 e0 ldi r25, 0x00 ; 0
204: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
delayMicroseconds(duration);
208: 84 e6 ldi r24, 0x64 ; 100
20a: 90 e0 ldi r25, 0x00 ; 0
20c: 0e 94 eb 01 call 0x3d6 ; 0x3d6 <delayMicroseconds>
digitalWrite(lamp1,LOW);
210: 60 e0 ldi r22, 0x00 ; 0
212: 8e e0 ldi r24, 0x0E ; 14
214: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp2,LOW);
218: 60 e0 ldi r22, 0x00 ; 0
21a: 8f e0 ldi r24, 0x0F ; 15
21c: 0e 94 93 02 call 0x526 ; 0x526 <digitalWrite>
digitalWrite(lamp3,LOW);
220: 60 e0 ldi r22, 0x00 ; 0
222: 80 e1 ldi r24, 0x10 ; 16
224: 0c 94 93 02 jmp 0x526 ; 0x526 <digitalWrite>
00000228 <modChoose()>:
//////////////////////////////////////////////