Witam,
chcę tylko zwrócić uwagę na bardzo ważną rzecz.
Linia o której tu mówicie, czyli
Kod:
#if(F_CPU != 16000000)
w żadnym wypadku nie służy do wybierania taktowania.
Jest to linia dla preprocesora, która powoduje jego określone zachowanie w przypadku spełnienia warunku.
Rzeczywistą wartość taktowania ustawia się w/g założenia autora kodu w niższej linii. Ale i to rozwiązanie jest nie do końca poprawne, przynajmniej w takiej postaci,
w jakiej jest tu użyte.
Jeżeli natomiast zdecydujemy się na taktowanie zegarem 16MHz, to nalezy koniecznie pamiętać o odkomentowaniu linii 40, dla 20MHz linia ma być zakomentowana.
Kod:
#define F_MCU_16MHZ 1 // 16MHz ATMEGA328P crystal (enable for unmodified Arduino Uno/Nano boards with 16MHz crystal)
oraz zmianie wartości rzeczywistej taktowania w linii 87
Kod:
#define F_CPU 20007000 // Actual crystal frequency of 20MHz XTAL1, note that this declaration
Aby nie trzeba było pamiętać o tym co zakomentować / odkomentować, proponuję, dla chętnych oczywiście, zmienić zawartość linii 83 do 87 na taką:
Kod:
#if(F_CPU == 16000000)
#define F_MCU_16MHZ 1 // 16MHz ATMEGA crystal ( for unmodified Arduino Uno/Nano boards with 16MHz crystal)
#undef F_CPU
#define F_CPU 16007000 // Skorygować - rzeczywista czętotliwość kwarcu dla taktowania 16 MHz
#pragma message "TAKTOWANIE 16 MHZ"
#else
#undef F_CPU
#define F_CPU 20007000 // Skorygować - rzeczywista czętotliwość kwarcu dla taktowania 20 MHz
#pragma message "TAKTOWANIE 20 MHz"
#endif
Linie z zawartością
#pragma message można całkowicie usunąć. One tylko wyświetlają informacje w terminalu podczas kompilacji.
Teraz odpowiednie ustawienia będą wybierane w zależności jaką platformę do budowania wybierzemy - 16MHz czy 20 MHz.