![]() |
![]() |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
![]() ![]() |
![]() |
![]()
Сообщение
#101
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
Здравствуйте! Прочитав вашу статью про МК, появилось оч большое желание по работать с ними. Уже успел научиться подключать термометр, дисплей, кнопки, динамик, но на данный момент хочу сделать тахометр, не подскажете какая команда в микро бейсике считает импульсы пришедшие на определенный порт? И как её использовать. И где можно достать список команд для микро бейсика на русском, инфы и примеров о нем в нете оч не хватает, а английский я не знаю, что бы в стандартном хелпе разбираться. Заранее спасибо.
|
![]() |
|
![]()
Сообщение
#102
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
BoomeR, велкам на форум, заполняй профиль плз (IMG:style_emoticons/default/wink.gif) (IMG:style_emoticons/default/drinks.gif)
|
![]() |
|
![]()
Сообщение
#103
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
В компилляторах микро... нет команд подсчитывающих импульсы или измеряющих их или частоту. Можно организовать измерение периода измерив отдельно высокий и низкий уровень входного сигнала, ну и из периода уже подсчитываем частоту. Но... получается так называемый breaking call, т.е. если импульсы на счетном входе отсутствуют программа останавливается и ждет пока не проскочит импульс. Для этого дела очень хорошо подходит PicBasic, там есть отдельная команда - PULSEIN.
Русских мануалов я не встречал, но в этих компилляторах и справка очень хорошо организована и при инсталляции устанавливается куча примеров - чуть ли не на все случаи жизни. Да и форум у них хороший. Плюс - на сайте есть множество примеров, присланных пользователями. Плюс - эта-же компания выпускает различные периферийные устройства (часы, термометры, акселерометры, короче все что угодно) и к каждому устройству приложены примеры, которые можно скачать с того-же сайта. Если что - поможем (IMG:style_emoticons/default/smile.gif) |
![]() |
|
![]()
Сообщение
#104
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
Я по задумке хотел бы сделать типо бортового компьютера для машины, что бы там был вольтметр, термометр, часы, тахометр. То есть у меня не получится написать такой код на микро бейсике, так как если остановится двигатель и импульсы перестанут идти на МК, пик грубо говоря зависнет?
|
![]() |
|
![]()
Сообщение
#105
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Нет, пик не зависнет по большому счету, просто выполнение программы притормозится до тех пор пока не пойдут импульсы. На практике - пока двигатель не заведется борткомпьютер или ничего не будет показывать или какие-то "старые" значения. Например, завели двигатель, БК начал показывать все параметры в реальном времени, заглушили - все показания остались такими, какими были в момент выключения зажигания. Или, в зависимости от структуры программы, скажем сначала идут процедуры измерения напряжения, часов и т.д. и в конце - тахометр. Выведутся все параметры а на тахометре программа затормозится до тех пор, пока на заведется движок.
Если же процедура тахометра первая в программе - то тогда вообще ничего не будет высвечиваться до пуска движка. |
![]() |
|
![]()
Сообщение
#106
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
Ну да, это я и имел в виду... а можно по подробнее как в микро бейсике счет импульсов сделать, как вы сказали breaking call. Я подумал насчет того что бы не висла, просто пущю провод от замка зажигания к ПИКу, или еще лучше от контрольной лампы давления масла, когда движок заведется и появится давление масла, на этом проводе пропадет минус, и ПИК будет выполнять счет импульсов, а пока его нет, он эту часть программы будет обходить стороной (IMG:style_emoticons/default/smile.gif) в этом случае даже при заглушенном моторе и включенном зажигании он будет отображать все что мне необходимо и без всяких остановок! (IMG:style_emoticons/default/smile.gif)
И еще вопросик, поддерживает ли микробейсик отображение на знакосинтезирующем дисплее русские буквы, как не пытался, одни закорюки вместо букв (IMG:style_emoticons/default/sad.gif) с английским все ок! дисплей точно поддерживает. |
![]() |
|
![]()
Сообщение
#107
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
PulseIn Demo
Код '(* ' * Project name: ' ' * Copyright: ' (c) mikroElektronika, 2006 ' * Revision History: ' 20050914 (MJ): ' - initial release. ' * Description: ' This code demonstrates using Pulse-In Function for counting pulses in given ' time period. This a blocking call. This demo waits for input signal ' (high level) to start counting pulses. It counts pulses for 1000 miliseconds. ' Then it prints results on LCD which is connected on PORTB. ' * Test configuration: ' MCU: P16F877A ' Dev.Board: EasyPIC3 ' Oscillator: HS, 8.000 MHz ' Ext. Modules: None ' SW: mikroBasic v5.0 or higher ' * NOTES: ' Prototype: ' function Pulse_In(dim byref port as byte, dim pin, state as byte, dim duration as word)as word ' ' PORT - assigns port for pulse-in function ' PIN - assigns pin for pulse-in function ' STATE - defines logical state for counting pulses (LOW = 0 or HIGH = 1) ' DURATION - Time in ms during which the pulses are being count ' ' This function returns number of pulses in given time (DURATION), on given ' PORT and PIN. ' Tested on EasyPIC3 with P16F877A. With few modification it can be used ' with almost every PIC MCU. ' *) program pulsein_demo dim counter, msec, num_impulse as word txt as char[10] sub procedure interrupt inc(counter) ' Increment value of counter on every interrupt if counter = 1 then ' Has 1ms elapsed? counter = 0 ' Clear the counter inc(msec) ' Increment msec on every 1 ms end if TMR0 = 5 ClearBit(INTCON, T0IF) ' Clear the TMR0IF flag SetBit(INTCON, T0IE) ' Enable TMR0 interrupt end sub sub function Pulse_In(dim byref port as byte, dim pin, state as byte, dim duration as word)as word dim tmp as word ' Temporary variable old as byte ' Previous pin state value while TestBit(port, pin) = state ' Wait for pulses wend ' Note that the program will stop here ' if there are no pulses while TestBit(port, pin) <> state ' Wait for rising (falling) edge wend ' Note that the program will stop here ' if there are no pulses tmp = 0 ' Clear temporary variable msec = 0 ' Clear number of ms old = TestBit(port, pin) ' Get current pin state while duration > msec ' Check if duration is reached if (TestBit(port, pin)) <> old then ' Check if pin state has changed inc(tmp) ' Increment number of pulses old = TestBit(port, pin) ' Get current pin state end if wend result = (tmp >> 1) + 1 ' Assign result value end sub main: OPTION_REG = 2 ' Assign prescaler to TMR0 (1:8) TRISB = $00 ' Designate PORTB as output PORTB = $FF ' Initialize PORTB TRISD = $FF ' Designate PORTD as input (for signal) counter= $00 ' Initialize the counter TMR0 = 5 INTCON = $A0 ' Enable TMRO interrupt msec = 0 ' Clear msec num_impulse = 0 ' Clear num_impulse ADCON1 = $FF ' PORTB all digital CMCON = $06 ' Comparators off Lcd_Init(PORTB) ' Initialize LCD connected to PORTB Lcd_Cmd(LCD_CLEAR) ' Send command to LCD "clear display" Lcd_Cmd(LCD_CURSOR_OFF) ' Send command "cursor off" Lcd_Out(1, 1, "Waiting... ") ' Print txt to LCD num_impulse = Pulse_In(PORTD, 0, 1, 1000) ' Count HI pulses on PORTD.0, for 1000ms WordToStr(num_impulse, txt) ' Convert results to string for LCD output Lcd_Out(1, 1, "Number of pulses") ' Print txt to LCD Lcd_Out(2, 1, txt) ' Print number of pulses to LCD while 1 = 1 wend ' Wait forever (stop) end. Насчет кириллицы - все зависит от примененного ЖК индикатора, есть русифицированные а есть - нет. Если нет - ничего не попишешь, в них вообще-то можно прописать символы, определенные пользователем, но всего 8 шт. Обычно эту возможность применяют для отображения нестанартных (отсутствующих в станартной таблице) символов. |
![]() |
|
![]()
Сообщение
#108
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
SSh спасибо большое. Жаль что с английским не дружу (IMG:style_emoticons/default/dry.gif) буду по тихоньку разбираться. Как я понял он будет делать счет импульсов за секунду и при этом задержка выполнения программы будет на секунду, а как сделать что бы он отображал количество импульсов в минуту и при этом не ждал и не считал импульсы целую минуту, что бы самая минимальная задержка была, и мог считывать от 2000 импульсов в минуту? (IMG:style_emoticons/default/wacko.gif) Это понятно что полученное значение придется умножать на что то что бы получить в минутах и минуту не ждать, а потом выводить на дисплей, какой самый короткий период времени что бы он успевал считать, при кварце 20 000? (IMG:style_emoticons/default/wacko.gif)
|
![]() |
|
![]()
Сообщение
#109
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
Если конечно что то не реальное говорю, вы меня поправьте, я в этом деле новичок, еще только разбираюсь (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#110
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Нет, не так. МК будет ждать импульсы до победного конца (IMG:style_emoticons/default/smile.gif) Т.е. до тех пор пока они не поступят на вход
Вот в этих строках описывается, в вольном переводе - ждать пока не будет фронт, а потом снова ждать спада импульса. И в комментарии - программа останавливается здесь если нет импульсов while TestBit(port, pin) = state ' Wait for pulses wend ' Note that the program will stop here ' if there are no pulses while TestBit(port, pin) <> state ' Wait for rising (falling) edge wend |
![]() |
|
![]()
Сообщение
#111
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
Что то я совсем ни чего не понял (IMG:style_emoticons/default/wacko.gif) все таки мне наверно без тахометра придется обойтись (IMG:style_emoticons/default/sad.gif)
|
![]() |
|
![]()
Сообщение
#112
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Там все просто
while - ждать выполнения какого-либо условия. wend - окончание цикла ожидания если условие выполняется, в противном случае снова переход на while. Например, для постоянного выполнения программы можно записать что-то подобное start: ..... ..... программа ..... ..... goto start А можно и так while 0=1 ..... ..... программа ..... ..... wend Т.к 0 никогда не станет равным единице, программа будет крутится бесконечно. Понятно? (IMG:style_emoticons/default/wink.gif) Или посмотри в сторону PicBasic. А еще лучше - здесь http://forum.amadeus-project.com/index.php?showtopic=600 Индикатор расхода топлива, если вместо расхода измерять обороты то даже проще получится, там самая сложная часть - прогрессбар. Плюс измерение температуры и индикация времени (часы) Есть и схема и исходники (прокомментированные) |
![]() |
|
![]()
Сообщение
#113
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
SSh насчет программы немного начинаю понимать, буду разбираться. А на пик бейсике пробовал писать, что то вообще ни как, как то к микро привык. И хочется не что то готовое, а хочется что то самому сделать (IMG:style_emoticons/default/smile.gif) разобраться как это работает и под себя подстроить. Как у меня вечная проблема с сабвуфером, послушаешь чуть чуть, потом машину не заведешь, и мне хочется в этот БК вольтметр, что бы настроить на самое низкое напряжение при котором стартер крутится, как напряжение чуть ниже опустилось и БК начал попискивать, что пора заводить машину (IMG:style_emoticons/default/smile.gif) так же и с температурой двигателя (IMG:style_emoticons/default/smile.gif) дисплей я собираюс 4-х строчный ставить (wh2004), что бы все нормально видно было, а не в куче (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#114
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Так я же не говорю "бери и используй". Как раз хорошая стартовая информация для того чтобы понять как это работает и подстроить под себя.
В первоначальном варианте кстати и вольтметр был, потом я эту подпрограмму изъял за ненадобностью (мне) (IMG:style_emoticons/default/wink.gif) Но ввести легко - просто использовать один из входов как АЦП. С температурой двигателя могу посоветовать подключиться непосредственно к датчику температуры ОЖ, т.е. и для температуры тоже использовать один из портов как АЦП. Т.к. входное сопротивление МК очень велико, то он не будет оказывать никакого влияния на показания приборки. А с прерыванием программы ты же не сможешь контроллировать ничего с заглушенным движком... В любом случае я просто советую - решать тебе (IMG:style_emoticons/default/wink.gif) Под конец вопрос - а куда думаешь четырехстрочник ставить? |
![]() |
|
![]()
Сообщение
#115
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
SSh, куда ставить я еще не придумал (IMG:style_emoticons/default/blush.gif) а насчет того что бы при заглушеном двигателе программа не останавливалась нельзя ли что то типо того:
main: if (Button(PORTx,x,1,1)) then ' Это провод с контрольного датчика давления масла, когда движок стоит, на нем"-", как только заведется и появится давление масла на этом проводе будет "+" cюда вставить часть программы счатающюю импульсы end if И получится если двигатель заглушен, на ноге ПИКа будет минус, и он не будет тогда ждать импульсов. Если что то не так поправте (IMG:style_emoticons/default/smile.gif) |
![]() |
|
![]()
Сообщение
#116
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Можно... Но в PicBasic-е все проще намного (IMG:style_emoticons/default/wink.gif)
|
![]() |
|
![]()
Сообщение
#117
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 36 Регистрация: 11.2.2011 Из: Шуя Вне форума Репутация: ![]() ![]() ![]() |
SSh спасибо! Теперь у меня есть надежды, что хоть что то, но должно получиться (IMG:style_emoticons/default/smile.gif) а с ПИКБейсиком согласен что там все проще. Но мне чем заново осваивать Пик бейсик, проще будет разобраться со счетом импульсов в Микро.
|
![]() |
|
![]()
Сообщение
#118
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Как тебе удобнее, конечно, так и делай (IMG:style_emoticons/default/smile.gif) В любом случае, если будут вопросы - постараюсь помочь чем смогу.
|
![]() |
|
![]()
Сообщение
#119
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Странная проблемка вылезла (IMG:style_emoticons/default/blink.gif) PIC12F675. Подключения: +5В питание, минус, MCLR на +5В через 10кОм и цифровой вход GP1 на который приходит или не приходит 4.4В. Так вот если отключить питание +5В, то МК продолжает работать на питании от GP1, где в этот момент уже почему-то не 4.4В, а 3.6В, а на Vcc при этом 2.8В откуда-то беруться... Что это? Как сделать, чтобы МК не питался от цифровых входов?
|
![]() |
|
![]()
Сообщение
#120
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
(IMG:style_emoticons/default/smile.gif) Похожий случай был у Димы с AVR-ом.
МК потребляют так мало тока что логического уровня на входе им хватает для работы... |
![]() |
|
![]() ![]() ![]() |
![]() |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Текстовая версия | © 2006-2025 Форум Технических Маньяков. |
|