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

Статус: Offline

Уважаемые форумчани. Как вы щитаете возможно сделать впрыск топлива на микроконтроллере?????

Добавлено (18.08.2009, 09.13.51)
---------------------------------------------
Если возможно я готов пойти до конца и все сделать и даже есть на чем испытать!

ЯНДЕКС Дата: 18.08.2009
Холод1 Дата: Вт, 18.08.2009, 14:04  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 19.10.2008

Статус: Offline

Эту тему как раз я и пытаюсь развернуть только в другой теме, про зажигание.
xxxmonejall Дата: Вт, 18.08.2009, 20:38  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

У меня есть как раз по э тому поводу несколько вопросов. Завтра конечно продемонстрирую заготовки некоторых идей. Ну а сейчас вопрос по команде PULSOUT: так вот импульс выходящий из микроконтроллера может быть длиной только в целое число, ну например там 5 мс, или может также быть и 5,5 мс и тд. и тп.
MasterPic Дата: Вт, 18.08.2009, 20:50  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

А что вы на pulsout остановились? здесь http://www.picbasic.ru/load/3-1-0-112 - есть программка, рассчитывающая задержки. Делайте вставки на асме, вызывайте процедуру, которую генерит программка. Или используйте прерывания каждые "сколько вам надо" biggrin
Но если уж сильно надо, то командой 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
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Уважаемый xxxmonejall, будьте добры оформить программу хотя бы минимальным набором комментов. Что вы ожидаете от данного творения? Не каждую строчку конечно, но хотя бы основное. Глядишь, чего и подскажем.
Сообщение отредактировал MasterPic - Вт, 18.08.2009, 21:08
Холод1 Дата: Ср, 19.08.2009, 14:32  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Это устройство готовится для 2-х тактного одноцилиндрового двигателя. Впрыск нужно давать в определений момент и за этот момент будет отвечать оптом-датчик, вот и от него буду плясать. А насчет коментов все будет, но чуточку позже!
xxxmonejall Дата: Вс, 23.08.2009, 14:48  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 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

но больно он уж много места занимает.
Да и как бы это все в епром забить чтоб оно рабочим осталось???
Прикрепления: 8251793.jpg(70Kb) · 5993046.jpg(31Kb)

Сообщение отредактировал xxxmonejall - Чт, 20.08.2009, 19:55
Dmitry Дата: Пн, 24.08.2009, 02:30  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (xxxmonejall)
Мне нужно чтобы этот результат был равный от 0=0 до 255=1400.
Есть такой вариант:
if B1 = 1 then B5 = 3
if B1 = 2 then B5 = 8...

Гм... smile
Не, такой вариант тоже имеет право на существование, но уж больно он громоздкий.
Гораздо проще умножить результат с АЦП на 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
Форум Picbasic.ru » Программирование МК » PicBasicPro » Впрыск на PIC16F877A (Впрыск топлива на мк)
Страница 1 из 11
Поиск: