Впрыск на PIC16F877A
|
|
xxxmonejall |
Дата: Вт, 18.08.2009, 09:13 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Уважаемые форумчани. Как вы щитаете возможно сделать впрыск топлива на микроконтроллере????? Добавлено (18.08.2009, 09.13.51) --------------------------------------------- Если возможно я готов пойти до конца и все сделать и даже есть на чем испытать!
|
|
|
|
Холод1 |
Дата: Вт, 18.08.2009, 14:04 | Сообщение # 2 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
35
Замечания:
±
На сайте с 19.10.2008
Статус:
Offline
|
Эту тему как раз я и пытаюсь развернуть только в другой теме, про зажигание.
|
|
|
|
xxxmonejall |
Дата: Вт, 18.08.2009, 20:38 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
У меня есть как раз по э тому поводу несколько вопросов. Завтра конечно продемонстрирую заготовки некоторых идей. Ну а сейчас вопрос по команде PULSOUT: так вот импульс выходящий из микроконтроллера может быть длиной только в целое число, ну например там 5 мс, или может также быть и 5,5 мс и тд. и тп.
|
|
|
|
MasterPic |
Дата: Вт, 18.08.2009, 20:50 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
А что вы на pulsout остановились? здесь http://www.picbasic.ru/load/3-1-0-112 - есть программка, рассчитывающая задержки. Делайте вставки на асме, вызывайте процедуру, которую генерит программка. Или используйте прерывания каждые "сколько вам надо" Но если уж сильно надо, то командой pulsout можно генерировать импульс, любой длительности, не менее и с точностью 10 мкС при кварце 4 МГц и 2 мкС при кварце 20 МГц Пример - цитата из хэлпа: Code ' Send a pulse 1mSec long (at 4MHz) to Pin5 PULSOUT PORTB.5,100
|
|
|
|
xxxmonejall |
Дата: Вт, 18.08.2009, 20:50 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Вот если все правильно, хочу собрать устройство под єту программу. Буду оперятся только на дроссельную заслонку. Хочу для начала посмотреть как єто все будет работать в живую. А дальше у же можно будет что-то думать. Вот код программы: @ device pic16F877A, xt_osc, wdt_off, protect_off, pwrt_on include "MODEDEFS.BAS" DEFINE OSC 4 Define ADC_BITS 8 Define ADC_CLOCK 3 Define ADC_SAMPLEUS 25 OPTION_REG = $7f On Interrupt Goto myint INTCON = $90 InTime var byte B1 var byte b2 con 400 TrisB = %00000001 TrisA = %11111111 ADCON1 = %00000010 main: portb.0 = 0 ADCIN portA.0, b1 InTime = B1*100 goto main myint: Disable IF INTCON.1 = 1 THEN pulsout portb.5,b2 + InTime INTCON.1 = 0 ENDIF Resume Enable
|
|
|
|
MasterPic |
Дата: Вт, 18.08.2009, 21:08 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Уважаемый xxxmonejall, будьте добры оформить программу хотя бы минимальным набором комментов. Что вы ожидаете от данного творения? Не каждую строчку конечно, но хотя бы основное. Глядишь, чего и подскажем.
Сообщение отредактировал
MasterPic - Вт, 18.08.2009, 21:08
|
|
|
|
Холод1 |
Дата: Ср, 19.08.2009, 14:32 | Сообщение # 7 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
35
Замечания:
±
На сайте с 19.10.2008
Статус:
Offline
|
xxxmonejall, а упровлять чем будеш? Добавлено (19.08.2009, 14.20.02) --------------------------------------------- если инжектором, то его хотябы надо с оборотами синхронизировать Добавлено (19.08.2009, 14.32.03) --------------------------------------------- в принципе живая программа, я смотрю ты прерываниями пользуешся это и есть трамлёр? и откуда взелась переменная B2, почему иммено b2 con 400
|
|
|
|
xxxmonejall |
Дата: Ср, 19.08.2009, 18:58 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Это устройство готовится для 2-х тактного одноцилиндрового двигателя. Впрыск нужно давать в определений момент и за этот момент будет отвечать оптом-датчик, вот и от него буду плясать. А насчет коментов все будет, но чуточку позже!
|
|
|
|
xxxmonejall |
Дата: Вс, 23.08.2009, 14:48 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
139
Замечания:
±
На сайте с 17.05.2008
Статус:
Offline
|
Сори за то что картинка. Шрифт не отображается! На цифры не обращайте внимание, это я так просто пробовал. Добавлено (20.08.2009, 19.54.28) --------------------------------------------- Это устройство выступает в роле МАР сенсора (на первое время) если все будет работать, заменим на нормальное. 5993046.jpg Добавлено (23.08.2009, 14.03.23) --------------------------------------------- Нужен совет. После преобразования АЦП мы получаем результат равный от 0 (0 вольт) до 255 (5 вольт). Мне нужно чтобы этот результат был равный от 0=0 до 255=1400. Тоисть мне нужно просто чтобы значение изменялось от 0 до 1400 относительно АЦП. Добавлено (23.08.2009, 14.48.48) --------------------------------------------- Есть такой вариант: Code if B1 = 1 then B5 = 3 if B1 = 2 then B5 = 8 if B1 = 3 then B5 = 14 if B1 = 4 then B5 = 19 if B1 = 5 then B5 = 25 if B1 = 6 then B5 = 30 if B1 = 7 then B5 = 36 if B1 = 8 then B5 = 41 if B1 = 9 then B5 = 47 if B1 = 10 then B5 = 52 if B1 = 11 then B5 = 58 if B1 = 12 then B5 = 63 if B1 = 13 then B5 = 69 if B1 = 14 then B5 = 74 if B1 = 15 then B5 = 80 if B1 = 16 then B5 = 85 if B1 = 17 then B5 = 91 if B1 = 18 then B5 = 96 if B1 = 19 then B5 = 102 if B1 = 20 then B5 = 107 if B1 = 21 then B5 = 113 if B1 = 22 then B5 = 118 if B1 = 23 then B5 = 124 if B1 = 24 then B5 = 129 if B1 = 25 then B5 = 135 if B1 = 26 then B5 = 140 if B1 = 27 then B5 = 146 if B1 = 28 then B5 = 151 if B1 = 29 then B5 = 157 if B1 = 30 then B5 = 162 if B1 = 31 then B5 = 168 if B1 = 32 then B5 = 173 if B1 = 33 then B5 = 179 if B1 = 34 then B5 = 184 if B1 = 35 then B5 = 190 if B1 = 36 then B5 = 195 if B1 = 37 then B5 = 201 if B1 = 38 then B5 = 206 if B1 = 39 then B5 = 212 if B1 = 40 then B5 = 217 if B1 = 41 then B5 = 223 if B1 = 42 then B5 = 228 if B1 = 43 then B5 = 234 if B1 = 44 then B5 = 239 if B1 = 45 then B5 = 245 if B1 = 46 then B5 = 250 if B1 = 47 then B5 = 256 if B1 = 48 then B5 = 261 if B1 = 49 then B5 = 267 if B1 = 50 then B5 = 272 if B1 = 51 then B5 = 278 if B1 = 52 then B5 = 283 if B1 = 53 then B5 = 289 if B1 = 54 then B5 = 294 if B1 = 55 then B5 = 300 if B1 = 56 then B5 = 305 if B1 = 57 then B5 = 311 if B1 = 58 then B5 = 316 if B1 = 59 then B5 = 322 if B1 = 60 then B5 = 327 if B1 = 61 then B5 = 333 if B1 = 62 then B5 = 338 if B1 = 63 then B5 = 344 if B1 = 64 then B5 = 349 if B1 = 65 then B5 = 355 if B1 = 66 then B5 = 360 if B1 = 67 then B5 = 366 if B1 = 68 then B5 = 371 if B1 = 69 then B5 = 377 if B1 = 70 then B5 = 382 if B1 = 71 then B5 = 388 if B1 = 72 then B5 = 393 if B1 = 73 then B5 = 399 if B1 = 74 then B5 = 404 if B1 = 75 then B5 = 410 if B1 = 76 then B5 = 415 if B1 = 77 then B5 = 421 if B1 = 78 then B5 = 426 if B1 = 79 then B5 = 432 if B1 = 80 then B5 = 437 if B1 = 81 then B5 = 443 if B1 = 82 then B5 = 448 if B1 = 83 then B5 = 454 if B1 = 84 then B5 = 459 if B1 = 85 then B5 = 465 if B1 = 86 then B5 = 470 if B1 = 87 then B5 = 476 if B1 = 88 then B5 = 481 if B1 = 89 then B5 = 487 if B1 = 90 then B5 = 492 if B1 = 91 then B5 = 498 if B1 = 92 then B5 = 503 if B1 = 93 then B5 = 509 if B1 = 94 then B5 = 514 if B1 = 95 then B5 = 520 if B1 = 96 then B5 = 525 if B1 = 97 then B5 = 531 if B1 = 98 then B5 = 536 if B1 = 99 then B5 = 542 if B1 = 100 then B5 = 547 if B1 = 101 then B5 = 553 if B1 = 102 then B5 = 558 if B1 = 103 then B5 = 564 if B1 = 104 then B5 = 569 if B1 = 105 then B5 = 575 if B1 = 106 then B5 = 580 if B1 = 107 then B5 = 586 if B1 = 108 then B5 = 591 if B1 = 109 then B5 = 597 if B1 = 110 then B5 = 602 if B1 = 111 then B5 = 608 if B1 = 112 then B5 = 613 if B1 = 113 then B5 = 619 if B1 = 114 then B5 = 624 if B1 = 115 then B5 = 630 if B1 = 116 then B5 = 635 if B1 = 117 then B5 = 641 if B1 = 118 then B5 = 646 if B1 = 119 then B5 = 652 if B1 = 120 then B5 = 657 if B1 = 121 then B5 = 663 if B1 = 122 then B5 = 668 if B1 = 123 then B5 = 674 if B1 = 124 then B5 = 679 if B1 = 125 then B5 = 685 if B1 = 126 then B5 = 690 if B1 = 127 then B5 = 696 if B1 = 128 then B5 = 701 if B1 = 129 then B5 = 707 if B1 = 130 then B5 = 712 if B1 = 131 then B5 = 718 if B1 = 132 then B5 = 723 if B1 = 133 then B5 = 729 if B1 = 134 then B5 = 734 if B1 = 135 then B5 = 740 if B1 = 136 then B5 = 745 if B1 = 137 then B5 = 751 if B1 = 138 then B5 = 756 if B1 = 139 then B5 = 762 if B1 = 140 then B5 = 767 if B1 = 141 then B5 = 773 if B1 = 142 then B5 = 778 if B1 = 143 then B5 = 784 if B1 = 144 then B5 = 789 if B1 = 145 then B5 = 795 if B1 = 146 then B5 = 800 if B1 = 147 then B5 = 806 if B1 = 148 then B5 = 811 if B1 = 149 then B5 = 817 if B1 = 150 then B5 = 822 if B1 = 151 then B5 = 828 if B1 = 152 then B5 = 833 if B1 = 153 then B5 = 839 if B1 = 154 then B5 = 844 if B1 = 155 then B5 = 850 if B1 = 156 then B5 = 855 if B1 = 157 then B5 = 861 if B1 = 158 then B5 = 866 if B1 = 159 then B5 = 872 if B1 = 160 then B5 = 877 if B1 = 161 then B5 = 883 if B1 = 162 then B5 = 888 if B1 = 163 then B5 = 894 if B1 = 164 then B5 = 899 if B1 = 165 then B5 = 905 if B1 = 166 then B5 = 910 if B1 = 167 then B5 = 916 if B1 = 168 then B5 = 921 if B1 = 169 then B5 = 927 if B1 = 170 then B5 = 932 if B1 = 171 then B5 = 938 if B1 = 172 then B5 = 943 if B1 = 173 then B5 = 949 if B1 = 174 then B5 = 954 if B1 = 175 then B5 = 960 if B1 = 176 then B5 = 965 if B1 = 177 then B5 = 971 if B1 = 178 then B5 = 976 if B1 = 179 then B5 = 982 if B1 = 180 then B5 = 987 if B1 = 181 then B5 = 993 if B1 = 182 then B5 = 998 if B1 = 183 then B5 = 1004 if B1 = 184 then B5 = 1009 if B1 = 185 then B5 = 1015 if B1 = 186 then B5 = 1020 if B1 = 187 then B5 = 1026 if B1 = 188 then B5 = 1031 if B1 = 189 then B5 = 1037 if B1 = 190 then B5 = 1042 if B1 = 191 then B5 = 1048 if B1 = 192 then B5 = 1053 if B1 = 193 then B5 = 1059 if B1 = 194 then B5 = 1064 if B1 = 195 then B5 = 1070 if B1 = 196 then B5 = 1075 if B1 = 197 then B5 = 1081 if B1 = 198 then B5 = 1086 if B1 = 199 then B5 = 1092 if B1 = 200 then B5 = 1097 if B1 = 201 then B5 = 1103 if B1 = 202 then B5 = 1108 if B1 = 203 then B5 = 1114 if B1 = 204 then B5 = 1119 if B1 = 205 then B5 = 1125 if B1 = 206 then B5 = 1130 if B1 = 207 then B5 = 1136 if B1 = 208 then B5 = 1141 if B1 = 209 then B5 = 1147 if B1 = 210 then B5 = 1152 if B1 = 211 then B5 = 1158 if B1 = 212 then B5 = 1163 if B1 = 213 then B5 = 1169 if B1 = 214 then B5 = 1174 if B1 = 215 then B5 = 1180 if B1 = 216 then B5 = 1185 if B1 = 217 then B5 = 1191 if B1 = 218 then B5 = 1196 if B1 = 219 then B5 = 1202 if B1 = 220 then B5 = 1207 if B1 = 221 then B5 = 1213 if B1 = 222 then B5 = 1218 if B1 = 223 then B5 = 1224 if B1 = 224 then B5 = 1229 if B1 = 225 then B5 = 1235 if B1 = 226 then B5 = 1240 if B1 = 227 then B5 = 1246 if B1 = 228 then B5 = 1251 if B1 = 229 then B5 = 1257 if B1 = 230 then B5 = 1262 if B1 = 231 then B5 = 1268 if B1 = 232 then B5 = 1273 if B1 = 233 then B5 = 1279 if B1 = 234 then B5 = 1284 if B1 = 235 then B5 = 1290 if B1 = 236 then B5 = 1295 if B1 = 237 then B5 = 1301 if B1 = 238 then B5 = 1306 if B1 = 239 then B5 = 1312 if B1 = 240 then B5 = 1317 if B1 = 241 then B5 = 1323 if B1 = 242 then B5 = 1328 if B1 = 243 then B5 = 1334 if B1 = 244 then B5 = 1339 if B1 = 245 then B5 = 1345 if B1 = 246 then B5 = 1350 if B1 = 247 then B5 = 1356 if B1 = 248 then B5 = 1361 if B1 = 249 then B5 = 1367 if B1 = 250 then B5 = 1372 if B1 = 251 then B5 = 1378 if B1 = 252 then B5 = 1383 if B1 = 253 then B5 = 1389 if B1 = 254 then B5 = 1394 if B1 = 255 then B5 = 1400 но больно он уж много места занимает. Да и как бы это все в епром забить чтоб оно рабочим осталось???
Сообщение отредактировал
xxxmonejall - Чт, 20.08.2009, 19:55
|
|
|
|
Dmitry |
Дата: Пн, 24.08.2009, 02:30 | Сообщение # 10 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Quote (xxxmonejall) Мне нужно чтобы этот результат был равный от 0=0 до 255=1400. Есть такой вариант: if B1 = 1 then B5 = 3 if B1 = 2 then B5 = 8... Гм... Не, такой вариант тоже имеет право на существование, но уж больно он громоздкий. Гораздо проще умножить результат с АЦП на 5,49 и получить диапазон 0-1400. Отсутствие в пикбейсике дробных чисел - не проблема, умножаем результат на 549, а затем делим на 100. Единственная тонкость в данном случае, что 255*549 не укладывается в 16-битную переменную word, посему надо использовать штатную функцию DIV32, которя позволяет поделить 32-битный результат умножения на 16-битный делитель (точнее, 31-битный на 15-битный - см. мануал). Вот код, который заменяет всю вышеприведенную портянку if ... then: B1 var byte B5 var word B5 = B1 * 549 B5 = DIV32 100 Усе! Проверяйте! P.S. В данном коде округление до целого числа происходит не совсем корректно, просто отбрасывается дробная часть. В вашем случае, как мне кажется, приемлемо. Если же позарез нужно округление по правилам математики (напр. 100,8 => 101), код надо усложнить на пару строчек.
Сообщение отредактировал
Dmitry - Пн, 24.08.2009, 02:33
|
|
|
|