Programmazione CLKPR

Hai raggione il pin toggle funziona, e io non lo sapevo perchè non ho letto quanto è scritto nel datasheet:

Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
Note that the SBI instruction can be used to toggle one single bit in a port.

Mentre per il prescaler dice che per evitare di cambiare il valore accidentalmente c'è da fare una procedura.

Imposta il bit CLKPCE a 1 e poi entro 4 cicli di clock applica il valore del prescaler voluto al registro CLKPR impostando il bit CLKPCE a 0.

Dal datasheet:

To avoid unintentional changes of clock frequency, a special write procedure must be followed
to change the CLKPS bits:

  1. Write the Clock Prescaler Change Enable (CLKPCE) bit to one and all other bits in
    CLKPR to zero.
  2. Within four cycles, write the desired value to CLKPS while writing a zero to CLKPCE.
    Interrupts must be disabled when changing prescaler setting to make sure the write procedure is
    not interrupted.

Mi dici su quale micro stai lavorando? così almeno guardiamo lo stesso datasheet.

_delay_ms e us dovrebbero funzionare, non c'è motivo che non funzionino, tra l'altro la versione 6 dovrebbe lavorare con la toolchain 4.5.1 è il delay è costruito su un funzione built-in del compilatore.

PS: nel codice che ho postato c'è un errore, al posto di PORT? ci va DDR?, ora lo correggo.

Ciao.