SIG_PCINT3 bliver aldrig kaldt. Se side 47 i databladet, der vil du se at der er kun PCINT0 og PCINT1 (dvs. SIG_PCINT0 og SIG_PCINT1). Hvilken én skal bruges ? 
Det er SIG_PCINT0. Den er til alle PA ben mens PCINT1 er til PB benene
Korrekt.

Så nu ved du, at man kan bruge ét Pin-Change interrupt til at holde styr på 8 indgange. Ulempen er at man er nødt til selv at læse indgangene og undersøge hvad der er 1 og hvad der er 0, men alt i alt er det et fint system, at man kan have interrupt på hvert i/o-ben.

Derudover... Hvor er SIG_INTERRUPT0 ?
Her forstår jeg ikke hvad du mener ?
Jeg troede at
SIGNAL (SIG_PCINT0)
{
gSettings = calculateSettingsDip(getADC1Value()); /* update our settings */
}
Var nok til at registrerere om der er et interrupt
Jep, det er korrekt. Men du sætter INT0 op, som er ben 5, PA2. INT0 er ikke et PCINT, men et selvstændigt interrupt (som har prioritet over PCINTs). Derudover kan du bestemme hvordan INT0 skal trigges.

Jeg går ud fra at du ikke er interesseret i at trigge et interrupt på ben 5; dette vil sige at du ikke behøver INT0.
Grundlæggende for AVR er:
1: Skriv en interrupt-rutine
2: Eventuelt clear interrupt-flag, så interruptet ikke udføres med det samme (se TIFR0, TIFR1 på side 84)
3: Hvis det fx. er et timer-interrupt, så sæt timer-delen op (TCNTx, OCRxA, OCRxB, opførsel: TCCRxA, TCCRxB)
4: Sæt Enable-bitten for det valgte interrupt (fx. GIMSK for generelle interrupts eller TIMSK for timer interrupts)
5: Hvis I-bitten ikke er sat, udfør da en SEI instruktion, som enabler interrupts (dette gør vi efter alt init, så denne del er iorden). -Så skulle det køre. Generelle interrupts er således lette at sætte op, mens timere og andet kræver lidt konfiguration.
Det kan altid betale sig at spare komponenter
Det kan være at jeg ændre det på en senere version. lige nu bruger jeg bare den knap jeg har lavet med "ekstern" pull down
OK, det er helt fint, men hvis du har pulldown på, vil den normalt ligge LOW, hvilket vil sige at du skal kigge i dit PCINT0 om den er HIGH.

ændret til GIMSK |= (1<<PCINT3);
Fint, dette er korrekt.
Læser og læser side 50-52 
Lige netop de sider er rigtig guf, for der står meget information omkring interrupts. Det er ikke så indviklet, når det kommer til stykket.
Med hensyn til PA3, kan man gøre noget der er endnu smartere, men dette er foreløbig kun teori.

Hvis du kigger på databladet's side 2, ser du at PA3 også har en anden funktion, nemlig T0. Prøv at se på side 113, her står at T0 (og T1) kan bruges som ekstern clock-source til Timer0 (T1 til Timer1).
Hvad betyder så det?
-Jo, hvis vi kan få Timer0 til automatisk at starte, hver gang T0 ændres, fx. fra LOW til HIGH, kan vi starte en timer, der venter 10 ms. Når denne timer når fx. sit maks overflow kunne vi så få den til at starte SIG_OVERFLOW0 interruptet.
Det betyder at vi kan indbygge prel-sikring på denne måde, og derfor behøver vi ikke at vente de 10 ms med _delay_ms(10), men kan få interruptet til at klare den sag.
Det 'kedelige' ved at bruge _delay_ms(10), er at microcontrolleren er optaget med at tælle en variabel ned i de 10 ms. Det gør selvfølgelig ikke noget i dette tilfælde, da vi ved at brugeren jo sidder og holder knappen inde, så det er ikke kritisk at bruge interrupt på dette sted.
...Hvorfor skriver jeg så at det foreløbig kun er teori ?
Jo, for vi bruger allerede Timer0 til at tælle sekunder, minutter og timer. Derfor vil det være meget godt at lade den være som den er.

Vi vil helst ikke bruge Timer1 til at tælle sekunder, minutter og timer, fordi Timer1 er en 16-bit timer, som kan bruges til langt bedre ting (fx. servo-PWM), men jeg synes du lige skulle have at vide at man kunne bruge T0 på denne måde.
I mit lille
spil-konsol, har jeg lavet en forbindelse fra OC1A til T0, hvilket vil sige at jeg bruger Timer1 til at lave en 31kHz frekvens, og Timer0 tæller så hver puls som Timer1 giver.