Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino
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.
73 Paweł
Odpowiedz


Wiadomości w tym wątku
Arduino - przez SQ9MDD - 30-06-2013, 13:28

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości