Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Генератор импульсов для газовой форсунки. (Упрощение кода программы.)
Генератор импульсов для газовой форсунки.
xxxmonejall Дата: Вт, 07.01.2014, 00:32  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Доброго времени суток уважаемые форумчани... Столкнулся с проблемой недостатком памяти контролера, не вмещается моя программа в кристалл...
PIC16F628А. Может возможно как-то ее упростить? Прилагаю саму программу... На данном этапе она помещается. А во если еще что-то добавить, тогда уже нет. Что делать не знаю... А так оставлять не очень хочется:(
Я думаю что вот с этим кусочком  можно что-то сделать

В программе еще таких 15 кусочков:)
Прикрепления: Archive.zip(43Kb)

Сообщение отредактировал xxxmonejall - Вт, 07.01.2014, 00:32
ЯНДЕКС Дата: 07.01.2014
demanik Дата: Вт, 07.01.2014, 01:05  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

"Print" сделать подпрограммой и вызывть через GOSUB чуть высвободит места.
и  "imp = imp + 100: DelayMS 200" тоже как подпрограмму


Попробуй всё и вся... может быть пол...

demanik Дата: Вт, 07.01.2014, 01:51  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

По быстрому переделал.
Занято 64,31%
Прикрепления: Qwerty.rar(31Kb)


Попробуй всё и вся... может быть пол...

xxxmonejall Дата: Вт, 07.01.2014, 19:23  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Спасибо:)) 
Наверное придется внимательней изучать команды протона:)
DAlexV Дата: Чт, 09.01.2014, 13:30  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата demanik ()
По быстрому переделал.

Переделал по среднему smile

Кто меньше ????? biggrin
Прикрепления: cleaner.jpg(48Kb) · cleaner.rar(152Kb)


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Чт, 09.01.2014, 14:32
xvovanx Дата: Пт, 10.01.2014, 00:39  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Посмотрел тело проги у автора в начале темы - вроде как и понятно, что она делает. Посмотрел тело проги у DAlexV - прерывание на прерывании и регистром погоняет surprised . Кто на ком сидит и с кем сравнивает - каша в голове, зато 26% good
dimitriy-bc Дата: Пт, 10.01.2014, 01:19  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата DAlexV ()
Переделал по среднему
Круто!!! Если не секрет, а что в Вашем понимании кардинально bash
Но, в любом случае сокращение  программы на 3/4 это круто!!!!!!!!!
xvovanx Дата: Пт, 10.01.2014, 11:36  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата dimitriy-bc ()
Если не секрет, а что в Вашем понимании кардинально


Думаю, что кардинально - это когда прога выглядит как безпорядочный набор знакомых (и не знакомых) команд, но все далает как надо. А разобраться кто что делает и за что отвечает bash . Ведь алгоритм программы можно воспроизвести разными командами, а после компиляции объем проги ой как отличается. Скажем +1 и инкримент- действие одинаковое, а объем разный. А если в обработку данных "замутить" булеву алгебру и проверки старших, младших байтов, то ... wacko мозг опухает, по крайней мере у меня smile
DAlexV Дата: Пт, 10.01.2014, 11:50  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата xvovanx ()
Посмотрел тело проги у автора в начале темы - вроде как и понятно, что она делает. Посмотрел тело проги у DAlexV - прерывание на прерывании и регистром погоняет

Тут дело в подходе. Результат в итоге один и тот же, зато есть еще что модернизировать(память еще позволяет). Там есть Шпротеуский файл где можно пощупать как она работает вживую. Используется всего один таймер. На нем и точная настройка длительность-пауза, и обслуживание клавиатуры(с програмным подавлением дребезга, которым народ частенько принебрегает) , и при желании еще и часы пристроить можно. И .... Сам пока еще не придумал :D. Да просто захотелось таким образом мозги от праздников разгрузить bash
Цитата dimitriy-bc ()
Круто!!! Если не секрет, а что в Вашем понимании кардинально

Переписать все по новой. Когда создал что то и оно работает не редко через некоторое время начинаешь осозновать что можно было бы написать это по другому, что то улудшить, что то добавить, что то исправить. Нельзя же останавливаться на Ver 1.0.0 nocomp smile

Удачи всем wink


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
xvovanx Дата: Сб, 11.01.2014, 20:31  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 262
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата DAlexV ()
обслуживание клавиатуры с програмным подавлением дребезга, которым народ частенько принебрегает


А можно в двух словах о самом принципе програмного подавления дребезга. Выжидание промежутка времени в нажатом состоянии?

Сообщение отредактировал xvovanx - Сб, 11.01.2014, 20:34
DAlexV Дата: Вс, 12.01.2014, 16:26  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата xvovanx ()
А можно в двух словах о самом принципе програмного подавления дребезга.
Можно.
Цитата xvovanx ()
Выжидание промежутка времени в нажатом состоянии?
Можно конечно и так но это не совсем правильно.
Если постоянно в цикле или с применением спец операторов это делать, то на момент опроса клавы вся программа будет этим занята, что уже само по себе не всегда хорошо.
Как вариант делать два замера через некоторый промедуток времени.
Код
' кнопки на порте В по дефу 0, при нажатии 1
' порт С леды состояния кнопок, Е.0 Лед нажатой(любой) кнопки(кнопок)

KeyPrev=portb
delayms 5  
KeyDef=portb
   
if Keydef=keyprev and Keydef<>0 then
  portc=KeyDef
  PortE.0=1
else
  PortE.0=0
end if
Вместо ледов можно использвать переменные за счет которых можно будет распозновать код нажатой кнопки.
PortE.0-> KeyPress(as bit or boolean)

Код
if KeyPress=1 then
  KeyCode=keyDef
  KeyNew=1  '  
else
  KeyCode=0
end if

'  обработка клавиатуры по флагу keyNew
if keyNew=1 then
' непосредственно сам обработчик клавиатуры

keyNew=0
end if
Ну и далее по желанию и вкусу. smile
Все выше сказанное подходит к тем программа в которых не требуется точная выдержка по времени. Если это нужно, то уже лучше пользоваться таймерами и прерываниями(как в пиложенной программе).
за счет 1 таймера реализованно:
    Точная выдержка периода импульса (в прерывании)
    Точная выдержка длятельности импульса (в прерывании)
    Обработка клавиатуры по определенным интервалам( за счет счетчика в прерывании)
    Вывод на индикацию (основной блок)
    Ну и куча места для расширения возможностей

Примерно тот же принцип используется и для матричной клавиатуры. Только добавляется сканирование столбцов. Если будет интерес к данной теме заварганим статейку по ентому поводу. Удачи wink


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
dimitriy-bc Дата: Пн, 13.01.2014, 20:54  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата DAlexV ()
Если будет интерес к данной теме заварганим статейку по ентому поводу.

Было бы очень интересно почитать. Я обычно ставлю интегральную цепочку по входу. А с программным решением было бы поинтересней.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Генератор импульсов для газовой форсунки. (Упрощение кода программы.)
Страница 1 из 11
Поиск: