Пост N: 1146
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
3
Отправлено: 27.04.09 18:53. Заголовок: Генератор задержек для ПИК
Примерно полтора года назад, здесь была просьба сделать программу, аналогичную программе "Pause" Николая Марова, но которая должна формировать задержку исходя из данных о частоте генератора контроллера и длительности задержки. Тогда это не получилось сделать и пришлось ограничится калькулятором, который высчитывал число машинных циклов исходя из данных о чатоте генератора и длительности задержки.
Буквально пару дней назад Игорь Батов подкинул мне идею как это можно сделать. После нескольких экспериментов стало понятно что направление правильное и надо "копать" именно в эту сторону. В результате, через пару часов всё получилось (кажется), по крайней мере я не смог найти ошибок в преобразовании. Но непомешает дополнительная проверка. Выкладываю заготовку программы, её надо протестировать http://www.filehoster.ru/files/cq1114 Сейчас она работает только с машинными циклами - так проще её отлаживать. Кагда станет ясно что программа работает стабильно и ошибок в преобразовании нет, тогда соединю её с калькулятором.
Пост N: 1082
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг:
4
Отправлено: 27.04.09 19:59. Заголовок: Пётр, спасибо, что н..
Пётр, спасибо, что не забыли. Обе программы архинужные. Без них, как без рук. Если получится сделать их как "две в одном флаконе", будет программа не то, что на каждый день, а на каждый час!
Пост N: 1281
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 27.04.09 23:44. Заголовок: Пока проект не закон..
Пока проект не закончен, одно небольшое замечание: т.е. должно быть 65 млн, а не 655. И еще, мне кажется, было бы неплохо, если бы было какое-то разделение (пробелом, точкой) групп цифр, т.е. 65.536 или 562.425.123, или так 65 536 или 562 425 123. При вводе большого числа так бы было удобнее, ИМХО.
Пост N: 1149
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
3
Отправлено: 28.04.09 16:56. Заголовок: Alberto пишет: дол..
Alberto пишет:
цитата:
должно быть 65 млн, а не 655
Точно. Я в основном смотрел чтобы небыло ошибок в преобразовании, а это прозевал. Кстати, в алгоритме есть ошибка. Попробуйте в вести 197124 а потом 197125 и сравните с результатом программы "Pause". Эта ошибка устанена.
Пост N: 1159
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 14.05.09 10:10. Заголовок: Бяк оказалось больше..
Бяк оказалось больше чем я думал. В принципе есть вводить числа наугад, то в подавляющем числе сучаев результат верный. Но на границе перехода с одного регистра на другой (например, если ввести число 773) появляется бяка! Похоже что нужно вносить корректировку при переходах между регистрами...
Пост N: 1172
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 26.05.09 18:43. Заголовок: Разобрался с коррект..
Разобрался с корректировкой регистров. Эта корректировка нужна в том случае если имеющегося числа регистров недостаточно для создания задержки, а если добавить регистр, то станет много. Правда это случается очень редко. В этом случае внутрь последнего "кольца" задержки нужно вставлять дополнительный Nop и уменьшать величину задержки на количество циклов, затраченых на выполнение этого Nop'а. Иными словами, нужно отнять 255 от величины задержки.
Вот доработаный вариант программы http://purik.nextmail.ru/pic/Delay_1_1.rar Его проверял в течение нескольких часов подставляя разные виличины задержки и не обнаружил ошибок в преобразовании. Но т. к. длительность задержки может находиться в пределах 4...216737899999999999, то просто нереально проверить работу со всеми возможными вариантами...
Отправлено: 26.05.09 20:01. Заголовок: Пётр пишет: Разобра..
Пётр пишет:
цитата:
Разобрался с корректировкой регистров. Эта корректировка нужна в том случае если имеющегося числа регистров недостаточно для создания задержки, а если добавить регистр, то станет много. Правда это случается очень редко. В этом случае внутрь последнего "кольца" задержки нужно вставлять дополнительный Nop и уменьшать величину задержки на количество циклов, затраченых на выполнение этого Nop'а. Иными словами, нужно отнять 255 от величины задержки.
Вот доработаный вариант программы http://purik.nextmail.ru/pic/Delay_1_1.rar Его проверял в течение нескольких часов подставляя разные виличины задержки и не обнаружил ошибок в преобразовании. Но т. к. длительность задержки может находиться в пределах 4...216737899999999999, то просто нереально проверить работу со всеми возможными вариантами...
Alberto, проверь пожалуйста, как отображаются буквы в испанской операционной системе. По идее, руссикие (кириллические) буквы должны нормально отображатся, ведь эта версия программы скомпилирована с поддержкой юникода, но на практике, кто его знает...
Пост N: 1365
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 28.05.09 19:58. Заголовок: Пётр пишет: Добавил..
Пётр пишет:
цитата:
Добавил поддержку сторожевого таймера
Можете не поверить но я специально зашел чтобы про WDT напомнить . Бывает же.
цитата:
проверь пожалуйста, как отображаются буквы в испанской операционной системе.
сейчас скачаю и проверю. Проверил, всё нормально. Было бы неплохо добавить работу не с машинными циклами, а с сек (мсек, мксек и т.д.) и с частотой использованного кварца.
Пост N: 1174
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 28.05.09 22:23. Заголовок: Alberto пишет: Пров..
Alberto пишет:
цитата:
Проверил, всё нормально.
Значит русские буквы нормально отображаются в винде, которая напрямую не поддерживает кириллицу. Замечательно! А в предыдущей версии программы текст тоже нормально отображается в испанской винде?
Alberto пишет:
цитата:
Было бы неплохо добавить работу не с машинными циклами, а с сек (мсек, мксек и т.д.) и с частотой использованного кварца.
Ну так ради этого я начал писать эту прогу. Это тестовый вариант и так проще отлаживать. Когда закончу отладку, то полностью переделаю окно программы и будет возможность вводить задержку не только в машинных циклах, но и в сек. (мсек, мксек и т.д.)
PS. Кто нибудь из нас использует операционную систему Linux? Если что, могу скомпилировать прогу и под эту ОС
Пост N: 1367
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 29.05.09 13:08. Заголовок: Так кроме MPLAB'..
Оффтоп: Так кроме MPLAB'есть еще два-три десятка часто используемых программ, версии которых существуют или нет под Linux это еще вопрос. Хотя это дела вкуса и к теме не относится.
Пост N: 1175
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 30.05.09 13:10. Заголовок: Верися 1.2 имеет одн..
Верися 1.2 имеет одну серьёзную ошибку, связанную с тем, что программа скомпилирована в формате юникода. Ошибка проявлявлятся в том, что числа отображаются в диапазоне 0...65536, а не в 0...255
Полностью переделал окно - добавил калькулятор. http://purik.nextmail.ru/pic/PIC_Delay_1_3.rar Есть пока небольшёй глюк при задействованом сторожевом таймере, связанный с корректировкой регистов. В ближайшее время постараюсь исправить.
Пост N: 1176
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 30.05.09 17:07. Заголовок: Alberto пишет: а не..
Alberto пишет:
цитата:
а не проще сделать выбор языка из списка?
Ну во первых надо знать эти языки, а во вторых, не факт что без поддержки юникода это получится сделать! Я как-то пробовал русифицировать одну из прог, так вот, в место русских букв были крякозябры. Да и делеко ходить не надо, достаточно вспомнить программу WinPic800.
А если программа поддерживает юникод, то теоритически в окне проги можно одновременно отображать текст любого из языков, даже китайскике иероглифы. Это благодаря тому, что для кодирования символа используется 2 байта, что позволяет отобразить любой из 65536 различных символов. Если программа использует Ascii формат, то на кодировку символа используется только один байт и поэтому можно закодировать всего 256 символов.
Пост N: 1372
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 30.05.09 20:06. Заголовок: Alberto пишет: на д..
Alberto пишет:
цитата:
на днях обязательно погоняю
погонял. Нашёл вот что: понимаю что при задержке в пару сотен тысяч лет одна мксек ничто, но факт есть факт. И еще, без использования калькулятора максимальная задержка может быть 216 737 899 999 999 999 машинных циклов, а если попытаться ввести тоже значение в микросекундах (при частоте кварца 4 МГц), то пишет что "Задана слишком большая задержка". Может стоит убрать разрядность вычислений в одном случае или добавить в другом, чтобы они в обоих случаях были одинаковыми?
Пост N: 1178
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 30.05.09 21:15. Заголовок: Это из-за того, что ..
Это из-за того, что для хранения данных использована переменная, расчитаная для дробных чисел. Вот откуда погрешность, точнее округление числа! Как вариант, можно использовать переменные для целых чисел, но тогда нельзя будет вводить дробные числа. Надо выбирать, или точность при обработке больших чисел, или отказ от дроби. Думаю что в этом случае можно ввести данные в миллисекундах или даже в секундах и этой погрешности не будет
Alberto пишет:
цитата:
максимальная задержка может быть 216 737 899 999 999 999 машинных циклов, а если попытаться ввести тоже значение в микросекундах (при частоте кварца 4 МГц), то пишет что "Задана слишком большая задержка".
Наверно просто происходит округление в большую сторону и в итоге такое сообшение. Кстати, я немного доработал прогу (выложу позже) и теперь максимальная задержка составляет 9.223.372.036.854.775.800 Это даже больше чем в программе Николая Марова Увеличивать дальше уже PureBasic не позволяет.
Пост N: 1373
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 30.05.09 21:34. Заголовок: Пётр пишет: Надо вы..
Пётр пишет:
цитата:
Надо выбирать, или точность при обработке больших чисел, или отказ от дроби.
не знал что можно вводить дробные числа. На мой взгляд лучше отказаться от дроби. Обрабатывать только целые числа. Вдруг найдется еще один дурак который захочет сделать задержку на 500 тыс. лет с точностью до микросекунды , а тут такой ляп. Хотя решать тебе, реально такая большая задержка нужна только Дункану МакЛауду, а он ПИКами, кажись, не занимается .
Пост N: 1179
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 31.05.09 12:16. Заголовок: В сожалению отказать..
В сожалению отказаться от дроби нельзя, т. к. при работе калькулятора используется несколько операций деления и при этом результат может быть дробным и если его записать в целочисленую переменную, то будет ещё большая погрешность!
Пост N: 1375
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 31.05.09 15:48. Заголовок: Погонял его еще немн..
Погонял его еще немного. Погрешность есть только на пределе. Может быть как больше заданного значения, так и меньше: +/- 1-2 мксек. В программе Николая Марова такого нет. Специально проверял. Ты не пробовал с ним связаться, может он поделится алгоритмом? Это первый вариант. Второй вариант: ограничить верхний предел в 31 557 600 000 000 мксек (около 1000 лет). Этого больше чем достаточно для любого, самого безумного программиста. Зачем гнаться за задержками в 300 млн. лет? И третий вариант: в самой программе, в окне машинного кода убрать надпись задержка столько-то машинных циклов, оставить только в мксек/мсек/сек и т.д. И последний вариант: при задержках на пределе, вместе с другими надписями выводить надпись предупреждающую о данной особенности. Я бы остановился на третьем варианте: если я ввожу задержку в сутках, то зачем мне знать ее с точностью до машинного цикла? Плюс/минус одна-две мксек роли не сыграют. Если такая точность нужна, то нужно сразу вводить в мксек. Конечно это ИМХО.
Пост N: 1180
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 31.05.09 16:22. Заголовок: Alberto пишет: Може..
Alberto пишет:
цитата:
Может быть как больше заданного значения, так и меньше: +/- 1-2 мксек. В программе Николая Марова такого нет
Так это глюк калькулятора или генератора кода? Если генератора кода, то при каком числе машинных циклов появляется ошибка? Я думаю что ошибка в несколько машинных циклов при выдержке в пару лет, всё же допустима, ведь нестабильность тактового генератора внесёт гораздо большую ошибку! Да и вряд ли такая большая задержка вообще нужна, обычно используется до миллиона машинных циклов.
Пост N: 1376
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 31.05.09 16:52. Заголовок: Пётр пишет: Так это..
Пётр пишет:
цитата:
Так это глюк калькулятора или генератора кода? Если генератора кода, то при каком числе машинных циклов появляется ошибка?
думаю что генератора кодов. Хотя не уверен, нужно проверить. И сложно вот так сразу сказать при каком конкретно числе появляется ошибка.
цитата:
ведь нестабильность тактового генератора внесёт гораздо большую ошибку! Да и вряд ли такая большая задержка вообще нужна
вот и я о том же. Ну если уж хочется иметь возможность рассчитать задержку в 300 млн. лет, то смотри вариант 3 в предыдущем посту: убрать то, что зачеркнуто. Оставшейся информации больше чем достаточно и в глаза не лезет. Разумеется это ИМХО.
Пост N: 1377
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 31.05.09 17:59. Заголовок: Тогда сразу теряется..
Тогда сразу теряется доверие и ко всему остальному. Это чисто психологически. Тогда остается два пути: исправить или ограничить максимальную задержку "разумным" пределом (например в 10 тыс. лет, а не 500 тыс. как сейчас). Опять же ИМХО.
Пост N: 1378
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 31.05.09 20:11. Заголовок: Пётр пишет: Так это..
Пётр пишет:
цитата:
Так это глюк калькулятора или генератора кода?
если это тебе поможет, то в "Длительность задержки в машинных циклах" подставляется правильное значение, а в поле "Время" - остается введенное число, которое может отличаться от рассчитанного в машинных циклах. Но это проявляется только на числах больше 3 000 000 000 000 000 мксек. Где именно искать сложно. Да и, честно говоря, кому нужна задержка в 95 тыс. лет? Или батарейки сядут, или солнечную панель песком занесет, или какая помеха пройдет. Так что это несущественно. А в остальном отлично работает. Спасибо.
Пост N: 1182
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 31.05.09 21:36. Заголовок: Alberto пишет: ..
Alberto пишет:
цитата:
"Длительность задержки в машинных циклах" подставляется правильное значение, а в поле "Время" - остается введенное число, которое может отличаться от рассчитанного в машинных циклах.
Это округление результата деления введённых данных при расчёте в калькуляторе. В генераторе кода большие числа хранятся только в челочисленых переменных и поэтому там такая ошибка не произойдёт. Да и деления при вычислениях остатка нет, только умножение.
Пост N: 1381
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 31.05.09 22:17. Заголовок: Пётр пишет: Это окр..
Пётр пишет:
цитата:
Это округление результата деления введённых данных при расчёте в калькуляторе.
думаю здесь надо проводить предварительный анализ и если есть остаток, то надо введенное значение уменьшать на 1-2 мксек, которые потом будут скомпенсированы одним-двумя nop'ами. Правда с алгоритмом данной программы не знаком, так что это только догадка. А вообще, как я уже говорил, меня задержки больше 90 тыс. лет мало интересуют, ввиду того что их сложно в MPLAB'е отследить.
В ней устанены ошибки в коде, которые в некоторых случаях приводили к неправильному преобразованию данных. Многочасовой прогон программы показал что ошибок больше не наблюдается
Добавлена простейшая база данных имён регистров и меток. Это будет полезным если в отлаживаемой программе есть несколько подпрограмм задержек, которые при наладке надо изменять, т. е. подбировать задержку. Этого мне сильно нехватало в программе Николая Марова. Кроме того, если в качестве имени метки использовать символ $, то метки как таковой не будет, а будет использоваться относительный переход (на уровне MPASMа, т. е. до компиляции) на начало цикла задержки.
Петр, прекрасно. После "сканирования" всеми желающими и в случае необнаружения "бяк" (я терпелив), эта программа может быть размещена на моем сайте (плюс "Обмен..."), но это полностью зависит от Вашего желания. Желание автора - закон. Замечание: это применимо к ПИКам среднего семейства, но не к ПИКам 18-й серии (значение $-... должно быть бОльшим). Полагаю, что это достаточно легко исправить путем введения в программу возможности выбора семейства ПИКов (ПИКи среднего семейства / ПИКи 18-й серии. По умолчанию - среднее семейство). На мой взгляд, в командах не должно быть заглавных букв (например, не Goto, а goto).
Пост N: 1199
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 25.06.09 20:14. Заголовок: В первую очередь про..
В первую очередь программа должна быть удобной и функциональной. Раз уж я взялся за неё, то нужно сделать по маскимуму.
Я только собираюсь изучать 18-тые ПИКи, так что задам парочку вопросов.
Ассемблерные инстукции остаются те же, или нужно использовать другие? В первую очередь интерисует использовать GOTO или BRA?
Я так понимаю что инстукция DECFSZ работает как и в 16-той серии (в смысле для моей программмы)? Правда она выполняется за 3 м. ц. если происходит "скачок" через двух байтную инстукцию, которой является GOTO, т. е. нужно это учесть в генераторе задержек.
Пост N: 1134
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 25.06.09 22:52. Заголовок: В части касающейся..
В части касающейся ПП фиксированных задержек, ассемблерные инструкции остаются теми же, но двухсловную команду GOTO целесообразно (и нужно) заменить на однословную команду BRA. После этого, в ПП фиксированной задержки, будут применяться только однословные команды. Чтобы "перепрыгнуть" (вверх), через одну однословную команду (например, BRA, decfsz и т.п.), нужно использовать не $-1, а $-2, так как однословная команда системы команд ПИКов 18-й серии состоит из 2-х байтов и адресация происходит не к N-битному слову (как в ПИКах среднего семейства), а к байту слова (в ПИКАх 18-й серии, одно слово это 2 байта). Чтобы "перепрыгнуть" (вверх), через одну двухсловную команду (например, GOTO), нужно использовать не $-1, а $-4 (но лучше ориентироваться на однословную команду BRA). Это легко проверить в симуляторе, при пошаговом исполнении ПП фиксированной задержки (ориентация на окно Program Memory).
decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 decfsz Reg_4 bra $-.14 nop
ACCESS можно не прописывать, так как по умолчанию, устанавливается банк быстрого доступа. Место сохранения результата можно не прописывать, так как он, по умолчанию, сохраняется в F, и при этом (работа с ПИКами 18-й серии), "предупреждалок не выдается (при работе с ПИКами среднего семейства, если ,F отсутствует, то выдается). Регистры лучше прописывать с заглавной буквы.
Петр, спасибо. Очень удобно и функционально. Это программа с прекрасным будущим. Но в интересах дела (это просьба ко всем), ее нужно "просканировать" и высказать свои замечания (если они есть). На мой взгляд, например, вместо Reg_1, F, BANKED нужно писать Reg_1,F,BANKED. То есть, без пробелов. Абревеатура BANKED работает тогда, когда подключен INC-файл или он не подключен, но в "шапке" прописано BANKED equ 1 Если INC-файл не подключен и в "шапке" нет BANKED equ 1, то в тексте ПП задержки нужно писать Reg_1,F,1 Кстати, это универсальный вариант, который "срабатывает" в любом случае. А если это универсально, то на мой взгляд, к этому и нужно "привязываться" (в окне "Редактирование профилей" можно ничего не изменять. Изменения - в тексте ПП). Впрочем, это только пожелание. Можно оставить так, как есть.
Пост N: 1137
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 14:56. Заголовок: И еще одно замеча..
И еще одно замечание: нужно указывать не "PIC16", а "ПИКи среднего семейства" или "Среднее семейство", или перечислить номера всех серий, входящих в это семейство.
Пост N: 1203
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 27.06.09 16:29. Заголовок: Хорошо учту. Тогда л..
Хорошо учту. Тогда лучше F тоже заменить на 1
Можно ещё предусмотреть поддержку нескольких языков, ведь Русский не для всех является родным. Тем более что программа компилируется в формате юникода и поэтому может отображать текст на любом языке, даже если его исконно не поддерживает операционная система. Поддержку языков сделать через файлы, что позволит без проблем вводить новые языки не модифицируя программу.
Пост N: 1139
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 17:58. Заголовок: Вы это про название ..
Вы это про название профиля или текст в выпадающем списке "Тип" на закладке "Редактирование профилей"? Я имею ввиду замену в тех "местах", где есть возможность выбора того или иного семейства. Поддержка языков - прекрасно. Это расширит популярность программы. F на 1 можно не менять, так как современные MPLABы автоматически ставят в соответствие одно другому.
К сожалению программа не запускается на Win98 если она скомпилирована в формате юникода. Если компилировать в формате ASCII, то программа запускается и работает, но поддержки других языков небудет! Впринципе перекомпилировать в формат ASCII - минутное дело...
Пост N: 1210
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 27.06.09 21:54. Заголовок: Если верить вики, то..
Если верить вики, то в среднее семейство входят только PIC12 и PIC16
цитата:
Архитектура среднего (MID-RANGE) семейства Архитектура среднего семейства (Mid-Range) нашла применение в микроконтроллерах серий PIC12 и PIC16, и имеет ширину слова памяти программ 14 бит.
Пост N: 1143
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 23:00. Заголовок: Замечание по делу...
У семейства Baseline (базовое. 12 разрядов) и Mid-Range (среднее. 14 разрядов), не смотря на различную разрядность команд, конструкция ПП задержки одинакова. То есть, лучше написать или "Базовое и среднее семейство" или PIC10/12/16, или на Ваше усмотрение. Кстати, в базовом семействе есть ПИКи и 12, и 16-й серий. Это можно выяснить в MPLAB версии 8.10 и выше (Configure - Select Device…).
Добавил поддержку языков, файлы с описанием которых, находятся в папке Language. Программа при запуске сканирует эту папку и регистрирует все файлы с расширением lng Для добавления нового языка, достаточно переименовать имеющийся файл и открыв его в "блокноте", заметить все слова после символа = на соответствующие для данного языка.
Сейчас в этой папке есть файлы поддержки русского и английского языка, но я не уверен что всё правильно перевёл на английский.
Пост N: 1212
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 29.06.09 15:48. Заголовок: Тогда нужно запретит..
Тогда нужно запретить их переименование чтобы программа смогла отличать эти профили. Хотя если будут удалены все профили, то профили по умолчанию создаются автоматичекки при запуске программы. Так что если по ошибке кто-то удалит все профили, то те, что по умолчанию восстановятся.
Пост N: 774
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 02.07.09 22:44. Заголовок: Дело в том, что я пе..
Дело в том, что я переделал подпрограмму задержки, используя команды, которые уже есть в 18 серии. Подглядел принцип у Атмелов, получилось тоже самое с выигрышем по командам. Правда небольшим, но вот используя тоже самое количество регистров задержка будет раза в полтора больше, теперь думаю как расчитать задержку. По формулам как то не очень получается. Но думаю, что формулу вывести можно однозначно. Все таки какая никакая, но математика.
Пост N: 777
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 02.07.09 23:21. Заголовок: Пётр пишет: Поэтому..
Пётр пишет:
цитата:
Поэтому выкладываю исходный текст программы на языке PureBasic
Спасибо. Глянул мельком, принцип ясен. Но мне кажется должно быть решение проще. Ведь вначале идет какое то число машинных циклов, оно постоянно и меняется только при изменении количества регистров. Допустим у нас используются два регистра, оба в цикле, значит можно подсчитать количество циклов при известном значении времЕнных регистров. Следовательно возможна и обратная задача. С одним регистром все и так понятно, достаточно умножить число в регистре на количество машинных циклов в одном цикле задержки и прибавить к нему еще время, нужное для записи этого самого регистра. С двумя будет посложнее, с тремя формула еще сложнее... Надо попробовать с двумя регистрами, а то взялся сразу за три.
Пост N: 1221
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 03.07.09 08:05. Заголовок: Алексей пишет: Допу..
Алексей пишет:
цитата:
Допустим у нас используются два регистра, оба в цикле, значит можно подсчитать количество циклов при известном значении времЕнных регистров.
Выполнить что-то наподобие симуляции работы этого цикла? Это будет знимать слишком много времени при больших длительностях задержки - годами ждать придётся!
Хотя попробовать можно. Может и получится "изобрести велисипед" совершенно другой конструкции.
Пост N: 782
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 05.07.09 00:51. Заголовок: Пётр пишет: Это буд..
Пётр пишет:
цитата:
Это будет знимать слишком много времени при больших длительностях задержки - годами ждать придётся!
Ничего подобного. С двумя регистрами все довольно просто, уже вывел формулу, но есть недостатки, необходимо дорабатывать. Никакой подобии симуляции нет, просто математическая формула, вычисляться это все будет практически мгновенно. Но еще раз повторяюсь задержку модернизировал под команды 18 пиков так:
Есть выигрышь по командам, да и получается при одних и тех же значениях регистров бОльшая задержка, т.е. в некоторых случаях получится выигрышь в регистрах, вместо трех нужно всего два, или четырех, только три...
Пост N: 1225
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 05.07.09 10:43. Заголовок: Алексей пишет: есть..
Алексей пишет:
цитата:
есть недостатки, необходимо дорабатывать
Примерно тоже было и у меня. Грубую форулу вывел примерно за час, а на вывод точной форумы потребовалось гораздо больше времени. При разработке такой программы главная проблема в том, что используется несколько взаимо зависимых формул, и иногда тестируешь программу с разными значениями задержки и вроде всё ОК, а потом выясняется что при определённом числе машинных циклов вычисления происходят неправильно и опять всё сначала!
Подкидываю мысль: а что если спросить у Николая Марова
У Алексея немного другая структура программы задержки, поэтому формула будет немного другая.
PS. Начал адаптировать программу PIC_Delay под Linux. Пока получается, правда пришлось отказатся от некоторых непринципиальных вещей. Среди нас есть кто-то использующий операционную ситему Linux?
Пост N: 788
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 05.07.09 22:21. Заголовок: Вывел все таки форму..
Вывел все таки формулу, правда для подпрограммы с одним регистром, формула одна, для 2 другая и т.д. Пока только дошел до 3 времязадающих регистров и отправил статейку в обмен. Думаю с большим количеством регистров проблем уже не возникнет, только формула будет больше.
Алексей, проверь внимательно как ведёт себя программа, когда введенно такое число машинных циклов, при котором происходит перехд с одного регистра на другой и в особености ситуации, когда, скажем 2-ух регистов мало, а 3 уже много. В этом случае нужно использовать 2 регистра, а в конец программы добавлять NOPы. Вот над этим мне пришлось немного подумать!
Да и при вводе инструции clrwdt формула немного изменится.
PS. Я тоже много раз думал что наконец-то вывел правильную форулу, но как начинал тестировать с разным числом машинных циклов...
Пост N: 790
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 06.07.09 10:08. Заголовок: Пётр , хотел попробо..
Пётр , хотел попробовать переделать программу для расчета задержек, но у меня не компилируется даже неизмененный исходник. Версия 4.2. Выдает ошибку линкера... Если вдруг сам решишь переделать программу, то скину формулы. Они кстати должны подойти и для старой подпрограммы, только константы нужно подобрать другие, принцип тот же, только команды используются из старшего семейства...
Пост N: 791
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 06.07.09 10:31. Заголовок: Пётр пишет: Алексей..
Пётр пишет:
цитата:
Алексей, проверь внимательно как ведёт себя программа,
Дело в том, что переделать программу не могу, не компилируется, а бейсик знаю только поверхностно... Пётр пишет:
цитата:
Я тоже много раз думал что наконец-то вывел правильную форулу
Сделал расчет в Экселе, но сам понимаешь, он не сможет выдавать текст задержки, но вот погонял в симуляторе на десятке другом контрольных точек в том числе и на переходах, все нормально. Оказалось что здесь переходы пересекаются. Т.е. например с помощью одного регистра можно получить задержку от 4 до 766 м.ц. . Для двух регистров этот диапазон от 12 до 261124 м.ц. Во всем диапазоне подпрограмма ведет себя в точности, как расчетная задержка. Правда с нулевыми регистрами проблема, но в программе это легко будет исправить, т.к. ноль в последнем регистре нужно заменить на число 256 и тогда расчет получается верным. Эксель этого не умеет или я не умею в нем так делать. Я вот только не знаю, получится ли алгоритм более быстрым, ведь там формула уже с двумя и более неизвестными, а чтобы решить такие уравнения нужно формул, минимум равное количеству переменных. Остается только подбирать... Хотя можно, зная вес одного регистра сразу примерно вычислить значения регистров, а затем точно ее подогнать. Со сбросом собаки пока ничего не делал... Хотя тут нужно просто уменьшить задержку и прибавить необходимую константу.
Пост N: 1232
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 06.07.09 10:42. Заголовок: Алексей пишет: Дело..
Алексей пишет:
цитата:
Дело в том, что переделать программу не могу, не компилируется
Выложи скроншот окна с сообщением об ошибке и если при это одна из строк кода окрашивается в красный или жёлтый цвет и слева строки появляется красный кружок или жёлтый восклицательный знак, то сделай скрин и этого участка кода.
Лучше скачай PB4.31 и всё будет нормально. Как я уже писал PB4.20 сильно глючит.
Пост N: 811
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 11.07.09 10:50. Заголовок: Пётр , насколько пон..
Пётр , насколько понял, у тебя в программе используется до 10 регистров, а почему в программе ты вычисляешь значения от 8 до 2? Где 9 и 10, с первым все ясно.
Пост N: 3
Зарегистрирован: 30.12.07
Откуда: Россия, Самара
Рейтинг:
0
Отправлено: 24.07.09 15:43. Заголовок: большие задержки
Всем здравствуйте. Заранее прошу прошения если не совсем в тему, но такой вопрос. По поводу длительных задержек сутки двое и более, возможно ли прямо использовать код который генерирует программа Петра или программа Николая или же желательно организовать допустим запись в ЕЕPROM неких промежуточных значений. Я сделал одно не сложное устройство для полива. В субботу после обеда запускаю его приблизительно в 15 часов и далее во вторник вечером приблизительно в 22 ч оно должно сработать и открыть кран для полива. Таким образом задержка около 79 часов. В программе я просто не особенно заботясь использовал код который генерирует программа Петра. Но как говорится терзают смутные сомнения. Один раз устройсто у меня не сработало. Поэтому хотелось бы узнать, а как правильно организовывать такие длительные задержки? Наверника кто то сталкивался с подобной задачей т.е. как надежно организовать большую задержку? посоветуйте что-нибудь. Заранее благодарен
Отправлено: 24.07.09 19:25. Заголовок: Удобно использовать ..
Удобно использовать для этих целей встроенный таймер с прерыванием. Один такой мой агрегат работает непрерывно уже два года. Идея простая. Например если использовать динамическую индикацию, то прерывание таймера можно организовать через 5мс. Это будет один временной эталон. 5х200 - 1 сек и т.к. далее. Задержка включения устройства и время работы конечно не будет привязано к реальному времени. Но при данных условиях это не сильно и нужно. Зачем такая точность? Включил, отработало полчаса, потом выбранная фиксированная задержка, те же 72 часа, (хоть 1000 часов) и опять работа. На индикаторе будет производится отсчет задержки или работы. Удобно, все видно в каком состояние устройство. И можно всегда изменить выбранные режимы. Я думаю проще, надежно.
Пост N: 1436
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 24.07.09 21:07. Заголовок: MAZ пишет: Удобно и..
MAZ пишет:
цитата:
Удобно использовать для этих целей встроенный таймер с прерыванием.
а если за час до включения полива питание на пятнадцать минут отключится? Весь отсчет с нуля пойдет. А с часами реального времени такого не будет. Можно делать бит в EEPROM по которому будет видно был полив или нет. Даже если наступит время полива а питания не будет, то после возобновления питания всё сработает, пусть и со сдвигом во времени. Я к часам реального времени склоняюсь.
Отправлено: 24.07.09 22:05. Заголовок: Alberto пишет: а ес..
Alberto пишет:
цитата:
а если за час до включения полива питание на пятнадцать минут отключится?
Если отключится питание, кто и чем будет поливать? В таких случаях применяется резервное питание, оно есть и у микросхемы реального времени. Счет будет продолжен. Останавливать счет не нужно. И анализировать флаг полива в энергонезависимой памяти, тоже не есть хорошо. При аварии питания может не быть и 6 часов. И включится полив при восходе солнца, а к обеду оно же спалит политые растения. Дело не в МРВ, а нужно для четкого работы данной системы резервное питание, при любом отсчете. А с МРВ все просто сложней. Кажется человек просил надежные и длительные временные отсчеты, что попроще. Если ему нужна привязка к реальному времени, а еще можно и к времени года , то тогда спора нет. Но задача очень проста.
Пост N: 1437
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 25.07.09 05:25. Заголовок: Ты не понял принцип...
Ты не понял принцип. Не надо никакого резервного питания. Пропало питание на пол-часа при этом по времени уже десять минут как поливать должно было, всего-то и делов, полив прошёл на десять минут позже, так как время полива уже наступило, но действие (полив) сделано небыло. Как команда на насос пошла так бит в EEPROM и изменился, т.е. это флаг свершившегося факта. Если в сутки питание пропадает на 22 часа, то спору нет, такая система работать не будет. Вместе с тем можно сделать гибкую логику работы, если питание пропало и опять появилось по прошествии десяти (к примеру) часов после ожидаемого начала полива, то полив не производится и т.д. Деталей на три рубля а выгод - куча. MAZ пишет:
цитата:
И анализировать флаг полива в энергонезависимой памяти, тоже не есть хорошо.
это почему "не есть хорошо"?
цитата:
Дело не в МРВ, а нужно для четкого работы данной системы резервное питание, при любом отсчете. А с МРВ все просто сложней.
если у человека площадь для полива большая, то пальчиковым аккумулятором не отделаешься. И извини меня, что сложного в подключении DS1307? По любому проще дизель-генератора
Отправлено: 25.07.09 12:24. Заголовок: Альберто. Ты меня то..
Альберто. Ты меня тоже не понял. Но согласись много, "если". Если отключится свет на 10 минут на 3 часа или больше. Если отключат воду, тогда и дизель сойдет. Но это уже катаклизм, тогда будет не до полива. Открыть электромагнитом заслонку, аккумулятор 12В 3 А/ч два часа будет поливать без напряга и питать контроллер, и вода очень хорошо подасться в брызгалки и т.п. Я рассуждаю из практики. А сложней по тому, что, 84 один со всем этим справится. а тут еще одну микросхему лепить, причем использовать её возможности в лучшем случае на 50%.
Пост N: 1438
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
4
Награды:
Отправлено: 25.07.09 17:59. Заголовок: MAZ пишет: Ты меня ..
MAZ пишет:
цитата:
Ты меня тоже не понял
скорее всего да, я то исходил из того что для полива нужен насос, именно такие системы используют здесь на полях. Скважина и уже из нее мотор (или ветронасос) качает воду на полив. А для насоса аккумулятор на 12 В и пару ампер-часов не пойдет, да и зарядное устройство к нему... Но... согласись что система с часами RTC гибче и надежнее. Как я уже говорил деталей на трешку, а возможностей вагон. Но по любому решать автору вопроса.
Отправлено: 25.07.09 22:17. Заголовок: Alberto пишет: Но....
Alberto пишет:
цитата:
Но... согласись что система с часами RTC гибче и надежнее.
Соглашаюсь, насчет гибче. Надежность практически равны. Alberto пишет:
цитата:
Как я уже говорил деталей на трешку, а возможностей вагон.
Где живет человек? В России и раз огород поливает, то не в столице. Достать часовую микросхему, очень возможно, проблематично. Срава богу пик нашел, и то счастье. Вспомнилаь поговорка "а зачем козе баян?" Работает и надежно поливает. Ну наверно отвлеклись от основной темы.
Пост N: 1254
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 27.07.09 18:55. Заголовок: В алгоритме программ..
В алгоритме программы PIC_Delay найдена ошибка. Попробуйте введите число 394255 в неё и в программу Николая и всё поймёте. Ошибка происходит при переходе с одного регистра на другой... В ближайшее время постараюсь исправить.
Пост N: 78
Зарегистрирован: 27.08.07
Откуда: Россия, Москва
Рейтинг:
0
Отправлено: 19.03.10 13:09. Заголовок: Поздно прочитал, но ..
Поздно прочитал, но 2 слова скажу. никто об этом кажется не сказал. Как правило задержку оформляю подпрограммой, потому что использовать прниходиться не в одном месте, да и удобно не засорять тело программы, а поэтому всегада задержку рассчитываю относительно рабочей точки основной программы с учетом обращения и возврата , т.е. + 4 машинных цикла. На мой взгляд это удобнее. Если такая задержка будет отрабатываться в основной программе добавить 4-е nop проще, чем корректировать предложенную программу.
Все даты в формате GMT
3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет