У даній статті ми розглянемо приклад програмування CAN передавача на 16 повідомлень з налаштованим кроком з повним діапазоном ID.
1. Підключаємо до программатору PICkit2 конструктор, в який хочемо прописати вміст повідомлень для передачі по CAN шині. Програматор може бути використаний будь-який для програмування PIC мікроконтролерів.
2. Запускаємо програму PICkit2.
3. Натискаємо кнопку Read для зчитування даних з пам'яті мікроконтролера конструктора. Вміст областей пам'яті відображається у відповідних вікнах. При програмуванні мікроконтролера виробником встановлений захист. Відповідно, при зчитуванні будуть прочитані нулі в вікні Program Memory (Пам'ять Програм).
4. У вікні Program Memory (Пам'ять Програм) прибираємо галочку Enabled (Включено). Увага: Program Memory (Пам'ять Програм) повинна бути при програмуванні не активна, в іншому випадку програма передавача буде стерта.
5. У вікні EEPROM Data прописуємо потрібні налаштування і вміст повідомлень відповідно до малюнком нижче.
6. Далі натискаємо кнопку Write, і сконфігуровані повідомлення запишуться в мікроконтролер.
7. У разі, якщо сконфігуровані повідомлення не влаштували з яких-небудь причин, то повторити процедуру програмування.
Тепер розглянемо процедуру поетапного програмування CAN конструктора:
1. У вікні Program Memory (Пам'ять Програм) прибираємо галочку Enabled (Включено), відповідно до малюнком вище.
2. Якщо 00, то CAN ID будуть стандартної довжини 11 біт, якщо 01, то розширені - 29 біт.
3. Значення CAN ID, присутність якого на шині запускає даний передавач. Спочатку зліва молодший байт, потім старший.
4. Рядки з індивідуальними настройками повідомлень. 10 - перше повідомлення, 20 - другий, і так далі. Всього 15 повідомлень з номерами з 10 по F0.
5. 00 - повідомлення ігнорується і не буде передаватися на шину, 01 - повідомлення передається відповідно до настройками.
6. CAN ID відповідного повідомлення. Спочатку зліва молодший байт, потім старший.
7. Кількість байт даних від 0 до 8.
8. Власне самі байти даних 8 штук, але передаватися буде тільки вказану кількість зліва на право.
9. Інтервал між повідомленнями в мілісекундах з кроком, обумовленим значенням поля «11». Від 1 * байт «11» (значення байта = 01) до 255 * байт «11» (значення байта = FF) мілісекунд.
10. Зсув за часом початку передачі повідомлення із заданою періодичністю щодо моменту запуску передавача з кроком, обумовленим значенням поля «11». Від 0 (значення байта 0) до 255 * байт «11» мс (значення байта FF).
11. Байт, який визначає часовий крок для налаштувань періоду «9» і зміщення «10». Значення від 1 до 255 мс. Значення 0 не визначене.
12. Байт настройки швидкості CAN шини. Можливі значення байта:
0 - швидкість 50 кбіт / с
1 - швидкість 100 кбіт / с
2 - швидкість 125 кбіт / с
3 - швидкість 250 кбіт / с
4 - швидкість 500 кбіт / с
Приклад передачі пакета повідомлень:
Часовий крок приймаємо 2 мс (значення байта 11 одно 2). Наприклад, є два повідомлення із заданим інтервалом передачі 40 мс (значення байта 9 дорівнює 20 (0 × 14). Для повідомлення A задано зміщення 0 мс (значення байта 10 дорівнює 0 (0 × 00)), а для повідомлення B 20 мс ( значення байта 10 дорівнює 10 (0 × 0A)). Тоді після виявлення на шині передавачем пакета з ID заданим параметром 2, запуститься відлік інтервалів, і через 40 мс на шину буде передано повідомлення A, а ще через 20 мс - повідомлення B, потім через 20 мс знову повідомлення A і знову через 20 мс повідомлення B. Таким чином, інтервал між повідомленнями A і між повідомленнями B буде 40 мс, а ось між у A і B буде 20 мс.