Das mit GetADC kann man so nicht ganz stehen lassen.

GetADC würde 28 Zyklen brauchen, wenn die Wandlung selbst nicht auch noch dauern würde. In Deinem Code steht leider nix von wegen Prozessortakt oder ADC Prescaler, aber mal angenommen 8MHz CPU Takt, bei 10Bit Genauigkeit gehen laut Datenblatt maximal 200kHz ADC Clock, macht einen möglichen ADC Prescaler von 64. Eine normale Wandlung dauert 13 ADC Takte, also 13 * 64 = 832 CPU Takte.

GetADC(Ch) macht zur Sicherheit immer 2 Wandlungen hintereinander, also ist die Ausführungsdauer 28 + 2 * (64*13) = 1692 CPU Takte, da musst Du Dir wegen 28 Takten für die If's nun wirklich keine Gedanken machen

Das eigentliche Problem aber ist, daß GetADC den Ablauf blockiert, bis die Wandlung abgeschlossen ist.

Den Vorteil, den man beim manuellen Starten des ADC gewinnen kann, ist daß man Hauptcode ausführen kann, während der ADC im Hintergrund wandelt. Das ADIF abzufragen ist unnötig und aufwändiger, da man es rücksetzen muss, nimm lieber den Einzelwandlungsmode und starte immer wieder eine Wandlung, nachdem die vorige Wandlung beendet wurde.

Das geschieht mit ADCSRA.ADSC = 1, wenn ADSC wieder 0 ist, dann wurde die Wandlung beendet.

Beim Umschalten des Mux darauf achten, die erste Wandlung zu verwerfen.