|
|
  |
Изменение текста программы при смене компилятора и чипа |
|
|
|
Feb 9 2011, 21:34
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата А Вы его запретили в начале программы , он по умолчанию включен всегда после сброса включен сам компаратор, но не прерывание. и у нас в железе всё работает, а в протеусе проскакивает ) вот новая, надеюсь окончательно рабочая версия если в железе при включении таки будут проскакивать неправдоподобно малые значения - увеличить SENSOR_FILTER_TIME_CONSTANT в файле hwconf.h накидывайте по 10ms не ошибетесь....
--------------------
The truth is out there...
|
|
|
|
|
Feb 11 2011, 13:09
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Да, индикация исправилась, идёт плавно. Напрягает только одно. Если пределы тиков выставлены не точно, то индикация не задействует все 48 светодиодов. Да, ещё проскакивают иногда крупные отрицательные значения тиков и это приводит к срабатыванию концевиков. Тут меня мысль посетила. Есть свободный пин, на него посадить кнопку setup при нажатии которой в течении 3-5с кнопки управления переходят в режим записи конечного правого и левого положения соответственно.(т.е. нажимаем кнопку вращения вправо доводим датчик до нужного момента и кратковременно нажимаем setup, вкл поворот влево и вращаем датчик до крайнего левого положения и опять setup) Данные записывать в eeprom и при запуске кода они извлекаются и заносятся на свои места в коде. Ну как идея? Да, забыл файлик.
CAPTURE1.TXT ( 54.07 килобайт )
Кол-во скачиваний: 117
Сообщение отредактировал RW6MKA - Feb 11 2011, 13:34
|
|
|
|
|
Feb 11 2011, 13:36
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Минусы? Опять минусы?  Не было же уже их в WALKING_LED_TEST! Откуда они там берутся то. Я в шоке ))) Эхх, железо бы сюда! Как же неудобно отлаживать вот так удалённо )) Код Если пределы тиков выставлены не точно, то индикация не задействует все 48 Ну естественно ))) а как же оно может быть иначе то. Обязательно надо откалибровать датчик и поставить туда правдоподобные значения. А к чему вся эта возня с пином setup и eeprom, если изделие не серийное - я не понимаю. Прогнал программу с выводом на UART, записал значения на бумажку, вписал в файл, скомпилил и дело в шляпе, как говорится )) А если вот так прямо сейчас WALKING_LED_TEST сделать - минусов есть? Блин, вот тут у меня уже и идеи даже кончились насчёт этих минусов то.. . и в протеусе я их уже не наблюдаю..... да и так им там взяться не откуда вроде..... Щас ещё подумаю... что-то ведь упустил значит, раз они таки есть... но было бы не так странно, если бы они и на WALKING_LED_TEST были... added:вот сейчас файлик увидел. всё не так уж плохо на самом деле )))) уже почти рабочий девайс. но где-то глюк сидит - это факт... added2:отлично! поймал минус в протеусе. разберемся.
--------------------
The truth is out there...
|
|
|
|
|
Feb 11 2011, 21:14
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Отказался я от извращенного метода программного увеличения разрешения 8ми битного таймера и переделал всё по уму ) В общем, сейчас доступно время с ~миллисекундной точностью(на таймере 0) для всяких таймаутов и прочих нужд, а 16ти битный таймер 1 полностью задействован под сенсор и работает вроде очень даже хорошо и стабильно... но опять таки, это в протеусе )) а как будет в реале - не понятно. Ещё добавил таймаут на вращение в одну сторону. Это поможет в случае сбоя сенсора или иных проблем, препятствующих определению позиции антенны... В hwconf.h есть ROTATION_TIMEOUT, я поставил туда 3 секунды... подгоните под реальное значение. Всё-таки не хочется, чтобы кабель намотало на мачту Уже даже не буду говорить, что это последний вариант кода )
--------------------
The truth is out there...
|
|
|
|
|
Feb 12 2011, 07:45
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата Уже даже не буду говорить, что это последний вариант кода ) А зря, это видимо он и есть)) Погонял минут 10 - ни одного сбоя. Вот файлик
CAPTURE1.TXT ( 45.34 килобайт )
Кол-во скачиваний: 132Цитата В hwconf.h есть ROTATION_TIMEOUT, я поставил туда 3 секунды... подгоните под реальное значение. А возможна ли реализация 3-4минут?(именно за это время делается 1 оборот) Цитата А к чему вся эта возня с пином setup и eeprom, если изделие не серийное - я не понимаю. Так, а вообще зачем тогда вся эта возня с усовершенствованием кода?)) Мой то вариант рабочий и "полегче" будет(всего 64% памяти)? Да потому что так правильнее, лучше и удобнее. Без этого конструкция какая то незавершенная получается. Цитата Прогнал программу с выводом на UART, записал значения на бумажку, вписал в файл, скомпилил и дело в шляпе, как говорится )) Пройдёт год-другой и датчик полюбому менять придётся(на высоте 15м)) ) но через это время проблемы насущные практически напрочь сотрут инфо в башке о всей этой возне с терминалами, и придётся мучительно морщить лоб, лихорадочно вспоминая чё да как)) И ещё вопросик. Из кода я понял как реализовать вывод инфо через UART, а вот как вводить данные через него? Где бы почитать об этом?
|
|
|
|
|
Feb 12 2011, 12:33
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата А возможна ли реализация 3-4минут?(именно за это время делается 1 оборот) Да легко! Сейчас переменную 32бита сделаю и будет 2^32 = 4294967296ms == 49.7 суток )))) Цитата Так, а вообще зачем тогда вся эта возня с усовершенствованием кода?)) Мой то вариант рабочий и "полегче" будет(всего 64% памяти)? Да потому что так правильнее, лучше и удобнее. Без этого конструкция какая то незавершенная получается. Я сам давно никаких поделок не делал...соскучился немного за контроллерами и вам хотел показать чем программа на Си отличается от быдлокода на нём-же. А то вот так люди то быдлокодят и не знают даже к чему и стремиться то )) Места там ещё навалом. Мало того, что сам драйвер UART места отхавал, так ещё и все эти букавки место занимают... А вообще, я думаю, там даже и вместе с UARTом полезет работа с EEPROM... Плюс ещё надо с опциями сборки проекта поиграться... ещё процентиков выгадать можно по любому... Цитата И ещё вопросик. Из кода я понял как реализовать вывод инфо через UART, а вот как вводить данные через него? Где бы почитать об этом? В файле uart.c или uart.h да, скорее в .h будет больше каментов  я не шучу. Добавил таймаут 3:30, но можно и 49 суток туда загнать - не вопрос ) Вот ещё раз хочу обратить Ваше внимание на то, как легко вносятся изменения в более-менее правильную программу. Всегда стремитесь к этому. Если понимаете, что внести изменения в код будет сложно - сразу переделывайте )
--------------------
The truth is out there...
|
|
|
|
|
Feb 13 2011, 16:45
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Тут вот ещё вопросики возникли Цитата Мало того, что сам драйвер UART места отхавал, так ещё и все эти букавки место занимают... Почему при включении USE_UART_DEBUG так резко увеличивается занимаемое место в памяти?или файл uart.h полностью принимает участие в компиляции? Что то я этот момент с инклудами до конца не понимаю. Код //this will save 16 bytes of Program memory void main(void) __attribute__((OS_task, noreturn)); это откуда? и как работает?
|
|
|
|
|
Feb 13 2011, 18:47
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Почему при включении USE_UART_DEBUG так резко увеличивается занимаемое место в памяти?или файл uart.h полностью принимает участие в компиляции? Ну вообще-то не uart.h, а uart.c содержит исполняемый код, который занимает место ) Кроме того, как я уже говорил, занимают место строки. Строки sensor position: UART OK, STOP LEFT и т.д. каждая буква - один байт. Вот и считайте... Плюс, конечно же сам драйвер, как я и говорил... Но если строки выкинуть - экономия будет неплохая. Немного переписать надо, чтобы UART_DEBUG включал именно отладку, а допустим USE_UART просто включал драйвер уарта.. тогда можно будет легко понять кто сколько занимает. Но ещё такой момент: нужно вызвать нужные функции хоть один раз. Иначе компилятор поймет, что мы инклудим файл, а функции не используем и он выбросит весь неиспользуемый код при оптимизации. Цитата это откуда? и как работает? Это атрибуты gcc. смысл в том, что мы таким образом сообщаем компилятору, что из функции выходить никто не собирается. и ещё OS_task там тоже какую-то инициализацию в начале функции убирает(опять таки из расчёта, что из функции выходить никто не будет и входить в неё тоже будут только один раз)... Можно нагуглить очень легко всё это. И проверить можно - действительно экономит 16 байт )
--------------------
The truth is out there...
|
|
|
|
|
Feb 13 2011, 19:07
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата Кроме того, как я уже говорил, занимают место строки. Строки sensor position: UART OK, STOP LEFT и т.д. каждая буква - один байт. Вот и считайте... Плюс, конечно же сам драйвер, как я и говорил... Но если строки выкинуть - экономия будет неплохая. Т.е. при передачи чисел в компьютер потратится 4-5 байтов?ну конечно в зависимости от нужных чисел. Да, вот ещё может подскажите, в какой среде лучше создать окно интерфейса под винду? А то я только в дельфи немного практиковался, а там паскаль((
Сообщение отредактировал RW6MKA - Feb 13 2011, 19:13
|
|
|
|
|
Feb 13 2011, 20:32
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Ну если знакомы с Delphi - проще всего будет C++ Builder версию 6 наверное лучше всего найти... не надо этих 2005 и прочих наворотов... Цитата Т.е. при передачи чисел в компьютер потратится 4-5 байтов? Не понял вопроса. Если я вывожу строку UART is OK\r\n я занимаю во флешке 12байт для хранения этой самой строки. А вообще даже не 12, а 13 ибо ещё ноль в конце строки сохраняется. Что значит передача чисел в компьютер мне пока не понятно.... Если число в оперативной памяти(переменная) и мы хотим передать её по UART - то для начала значение переменной(скажем 175) из одного байта(допустим переменная была байтовая) превращается в строку. Для этого используется буфер в оперативной памяти и он должен быть не менее 4 байт, чтобы вместить символы 1 7 и 5 + нуль в конце строки. Таким образом это работает. Если же я просто хочу вывести UART is OK, то глупо для этого использовать оперативку, мы ложим эти строки во флеш.
--------------------
The truth is out there...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|