
Страницы: (2) [1] 2 ( К непрочитанному ) | ![]() ![]() ![]() |
termostat |
Отправлено:
10.03.2004 20:07:18
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
ПРОШУ не делать сюда ПОСТИНГИ!
Вопосы и ответы: http://forums.airbase.ru/index.php?showtopic=25649&st=0#entry362660 "Пишем прогу для МК AVR в он-лайн" \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ // программа наконец-то 007 /////////////////////// - это отбивка! /* 007 micro Дата логер - это заголовок программы сдесь размещают краткое описание устройства, алгоритма его работы и ключевых моментов для понимания программы спустя некоторое время после ее написания. */ /////////////////////// // инклуды #include - подробнее о них /* Это директивы - указания препроцессору вставить (перед компиляцией только) в текст написаной вами программы тексты любых других ТЕКСТОВЫХ файлов. Например вам нужно использовать вычисление sin cos - тогда вам понадобится библиотека математических вычислений, и нужно написать: #include <math.h> // вместо этой строки компилятор вствит текст файла math.h // из директории INC компилятора #include "math.h" // вместо этой строки компилятор вствит текст файла math.h // из директории вашего проекта! а если его там нет то из INC #include "delay.h" // если мы собираемя использовать готовые временные задержки // например: delay_ms(25); delay_us(186); Внимание - различные компиляторы могут иметь различные правила вызова функций не входящих в стандартный набор реализации языка Си. Всегда читайте мануал и просматривайте примеры к компилятору который вы используете! */ /////////////////////// // дефайны #define /////////////////////// // константы и переменные /////////////////////// // прототипы функций /////////////////////// // главная функция main - обязательна в Си void main(void) { } /////////////////////// // описания функций /////////////////////// ВСЕ - конец программы! /* Уфф! написали. Удивительно но это уже программа для МК, выполнение программы начинается со строчки void main(void) Программа как бы ни чего не делает, но если ее откомпилировать то уже займет некоторый объем флэш памяти МК ![]() Итак минимально возможная програама на Си выглядит так: void main(void) { } и все. */ --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:14:55
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
// дефайны #define
/* Это очень мощная и полезная директива препроцессора - она позволяет делать программу более легко читаемой и адаптируемой. Например мы задаем частоту измерений с датчиков 100 раз в сек: #define sample_times 100 И мы использовали это знчение (число 100) в нескольких местах программы. Но нам потребовалось изменить частоту измерений на 50. Значит нам потребуется найти все места где написано 100 и поменять на 50, причем мы можем заменить и числа "100" не относящиеся к делу! А если мы применили Дефайн как выше, то нам нужно просто заменить в этой одной строке 100 на 50: #define sample_times 50 Все - теперь везде в программе sample_times препроцессор заменит на 50 перед компиляцией. Смысл директивы понятен: текст после #define заменяется на то что стоит правее, после пробела. В директиве могут производится и вычисления! и использоваться переменные х у ... Подробней в мануале к компилятору. --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:16:16
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Как прочитываете - подгоняйте меня!
--------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:18:14
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Итак СЕКЛЕТ программы на Си для МК:
/* 007 micro Дата логер - это заголовок программы краткое описание устройства, алгоритма его работы */ /////////////////////// // инклуды #include /////////////////////// // дефайны #define /////////////////////// // константы и переменные /////////////////////// // прототипы функций /////////////////////// // главная функция main void main(void) { } /////////////////////// // описания функций ////// конец программы Будем наращивать мясо! --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:21:41
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
///////////////////////
// главная функция main Что в ней будет? void main(void) { первое это инициализация МК, его устройств в нужном нам режиме: init_device(); // Название может быть любым, желательно понятное // Мы просто вызвали функцию которю напишем позже // Вспомним алгоритм работы устройства - после включения МК должен // выбрать режим работы - для выбора в Си есть инструкция if ... else if (recording_data) { } else { } } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:29:03
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
///////////////////////
// главная функция main Что в ней будет? void main(void) { первое это инициализация МК, его устройств в нужном нам режиме: init_device(); // Мы просто вызвали функцию инициализации // которю напишем позже // Название Функций может быть любым, желательно // напоминающее что она делает! // Вспомним алгоритм работы устройства - после включения МК должен // выбрать режим работы - для выбора в Си есть инструкция if ... else // Что мы написали ниже? Если значение "recording_data" не равно нулю if (recording_data) // recording_data - понятно связан с // положением переключателя перед // включением питания { Если значение "recording_data" не равно нулю, то выполняется программа расположеная сдесь. } else { В противном случае, ваполнять программу сдесь. } } // скобка закрывающая для функции Мэйн! --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:35:13
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
///////////////////////
// главная функция main Что в ней будет? void main(void) { первое это инициализация МК, его устройств в нужном нам режиме: init_device(); // Мы просто вызвали функцию инициализации // которю напишем позже // Название Функций может быть любым, желательно // напоминающее что она делает! // Вспомним алгоритм работы устройства - после включения МК должен // выбрать режим работы - для выбора в Си есть инструкция if ... else // Что мы написали ниже? Если значение "recording_data" не равно нулю if (recording_data) // recording_data - понятно связан с _000200: { // положением переключателя перед // включением питания //Если значение "recording_data" не равно нулю, то выполняется // программа расположеная сдесь. от _000200: до _000500: У нас есть два режима записи - в кольцевой буфер и до конца памяти! while(!start) { Пока мы не зафиксировали старт - т.е. значение "start" = 0 или ложно, и соответственно (!start) - истинно делаем прогу здесь! } Через скобку мы перешагнем, когда акселерометр обнаружит старт _000500: // просто нумерация } else { В противном случае, ваполнять программу сдесь. } } // скобка закрывающая для функции Мэйн! --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:45:55
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Кусок программы - в режиме записи:
if (recording_data) // recording_data - понятно связан с _000200: { // положением переключателя перед // включением питания //Если значение "recording_data" не равно нулю, то выполняется // программа расположеная сдесь. от _000200: до _000500: У нас есть два режима записи - в кольцевой буфер и до конца памяти! while(!start) { // Пока мы не зафиксировали старт - т.е. значение "start" = 0 или ложно, // и соответственно (!start) - истинно делаем прогу здесь! // Нам нужно делать измерения через равные промежутки времени, для их отсчета используем таймер МК. подождем пока таймер насчитает очередное время измерения: while(!go_get_data); // в этой строке просидим пока "go_get_data" не станет "1" - а "go_get_data" мы в начале программы определим флаг прерывания таймера МК. Знчит при отсчете интервала времени будет возникать прерывание таймера МК и мы сможем проскочить этот WHILE !!! } Через скобку мы перешагнем, когда акселерометр обнаружит старт _000500: // просто нумерация } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:51:22
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Кусок программы - в режиме записи (до
старта!):
if (recording_data) // recording_data - понятно связан с _000200: { // положением переключателя перед // включением питания //Если значение "recording_data" не равно нулю, то выполняется // программа расположеная сдесь. от _000200: до _000500: У нас есть два режима записи - в кольцевой буфер и до конца памяти! while(!start) { // Пока мы не зафиксировали старт - т.е. значение "start" = 0 или ложно, // и соответственно (!start) - истинно делаем прогу здесь! // Нам нужно делать измерения через равные промежутки времени, для их отсчета используем таймер МК. подождем пока таймер насчитает очередное время измерения: while(!go_get_data); // здесь мы окажемся когда "go_get_data" станет "1" - значит пора мерить get_pressure(); // вызываем функцию измерения давления get_axeleration(); // вызываем функцию измерения ускорения save_data_kolzo(); // сохранить данные в кольцевой буфер send_data_rs232(); // отправить данные на ПК } Через скобку мы перешагнем, когда акселерометр обнаружит старт _000500: // просто нумерация } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 20:57:51
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Кусок программы - в режиме записи -
После старта
} Через скобку мы перешагнем, когда акселерометр обнаружит старт в функции get_axeleration() происходит сравнение ускорения с пороговым значением и как только оно будет превышено, мы преодолеваем скобку и выполняем запись с сохранением уже до конца памяти. ЗАБЫЛ !!! здесь нужно воткнуть проверку что память не закончилась! while (!memory_full) { // скобка 4567 - пока память не заполнена находимся // между скобками 4567 опять ждем команды пора мерить! while(!go_get_data); // здесь мы окажемся когда "go_get_data" станет "1" - значит пора мерить } // скобка 4567 _000500: // просто нумерация } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:07:35
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Кусок программы - в режиме записи -
После старта
} Через скобку мы перешагнем, когда акселерометр обнаружит старт в функции get_axeleration() происходит сравнение ускорения с пороговым значением и как только оно будет превышено, мы преодолеваем скобку и выполняем запись с сохранением уже до конца памяти. ЗАБЫЛ !!! здесь нужно воткнуть проверку что память не закончилась! while (!memory_full) { // скобка 4567 - пока память не заполнена находимся // между скобками 4567 опять ждем команды пора мерить! while(!go_get_data); // здесь мы окажемся когда "go_get_data" станет "1" - значит пора мерить // все функции как и до старта только сохранение обычное: get_pressure(); // вызываем функцию измерения давления get_axeleration(); // вызываем функцию измерения ускорения save_data(); // сохранить данные НЕ в кольцевой буфер send_data_rs232(); // отправить данные на ПК } // скобка 4567 _000500: // просто нумерация } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:09:17
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Когда память закончится и "memory_full"
станет "1" мы окажемяся за этой
скобкой:
} // скобка 4567 // Пусть устройство мигает и пищит противно, стоб его найти можно было. While(1) // бесконечный цикл !!! БЕЗ ; { blink_led(fast); beep_protivno(); } _000500: // просто нумерация } // скобка закрывающая для куска проги с записью данных --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:17:39
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Теперь напишем кусок
воспроизведения данных, он гораздо
проще и будет расположен между
скобок 5732 (ранее я не обозначил к
сожалению)
было: else { // щас обознчаю - скобка 5732 // здесь мы находимся при воспроизведении данных } // скобка 5732 --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:20:57
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
программа воспроизведения данных
расположена между скобок 5732
было: else { // скобка 5732 while(memory_end) // делаем пока не дойдем до конца памятти { restore_data_byte(); send_byte_rs232(); } // все память прочитана - просигналим об этом blink_led(slow); // вызвали функцию мигания светодиодом и // "сказали" мигать медленно! } // скобка 5732 --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:25:28
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Теперь можно пробежаться по
программе и собрать все функции
которые мы написали, перечислить их в
списке прототипов.
--------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
Страницы: (2) 1 [2] ( К непрочитанному ) | ![]() ![]() ![]() |
termostat |
Отправлено:
10.03.2004 21:29:12
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
///////////////////////
// прототипы функций init_device(); restore_data_byte(); send_byte_rs232(); blink_led(char); beep_protivno(); get_pressure(); get_axeleration(); save_data_kolzo(); send_data_rs232(); perekluchit_led(); turn_off_led(); // вроде все собрал --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:32:49
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Давайте поправим ошибку в алгоритме,
после условия if на запуск записи
нужно добавит задержку в 10 секунд и
мигание орание для предохранения от
случайного стирания
--------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:34:53
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Вот кусок программы - режим записи:
if (recording_data) // recording_data - понятно связан с _000200: { // положением переключателя перед // включением питания Дадим 10 секунд одуматься: char ctr=0; // объявили переменную для счета while(ctr<50) // сделаем 50 раз { perekluchit_led(); // изменить состояние светодиода delay_ms(200); ctr++; // увеличим по просьбе Сергея счетчик } turn_off_led(); // выключить наверняка - такую функцию конечно заменим операциейнад соотв битом, когд будем знать куда подключен светодиод. //Если значение "recording_data" не равно нулю, то выполняется // программа расположеная сдесь. от _000200: до _000500: У нас есть два режима записи - в кольцевой буфер и до конца памяти! while(!start) { Пока мы не зафиксировали старт - т.е. значение "start" = 0 или ложно, и соответственно (!start) - истинно делаем прогу здесь! } Через скобку мы перешагнем, когда акселерометр обнаружит старт _000500: // просто нумерация } --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |
termostat |
Отправлено:
10.03.2004 21:51:17
|
![]() Старожил ![]() ![]() ![]() Группа: Пользователи Сообщений: 979 Пользователь №: 833 Регистрация: 30.11.2002 Репутация: 0 ![]() |
Будем заканчивать.
Программа структурно набросана. Теперь нужно расписать "тело" каждой функции, объявить все переменные использованые в программе, вобщем осталось начать и закончить. Нужна схема устройства. Сегодняшнее занятие это первый блин - не знаю кому он как. Выскажитесь если будет настроение, только не здесь! Я буду рботать над программой. Постарайтесь тоже делать что-то, спрашивайте. --------------------
...А коль тоска тебя заест, сожги
кусочек карамели! той, что с нитратом
калия, мой друг. Её шипящее пламенье
вмиг, как рукой, с тебя сорвет унынье
праздности и суеты.
Иль перечти не торопливо ресурс нехилый по МК! на avr123.by.ru он расположен кстати... |