датчик Холла от восьмерки на Фольксваген Гольф

таки перешел я на Паскаль ) к черту отладку в протеусе ) вааще теперь без отладки ((( ибо в микропаскале я не нашел как можно ножки дергать, а без дергания прога вертиться в воздухе ) ...ну а в потеусетеперь только просто старт и смотрим результат ) ...

ноГлвное, почти получилось перевести мифические цифры Таймер1 двух байт, в Милисекунды ))) .. написал так ---TMR1H*256 +TMR1L = получаем число 16и разрядное, потом это число делим на 250 (при 4 мегагерц 250тмр1=1мс) получаем количество милисекунд между прерываниями, тоесть период, вичитаем из него 5 мс, и делаем задержку .... и вот так почему не заработало нефига (((((
заработало вот так --- просто берем Старший байт таймера, вычитаем из него 5 Мс, и рисуем по нему задержку ) завтра подумаю почему не сработало по правильному варианту ... с этим вариантом, все ОК, только небольшое отклонение, на малых оборотах около 7 МС, к 6000 приближаемся к 5 мс, после 6000 естесвено все по нулям ) ..и еще косяк, вазможно в реальном железе не будет, при достаточно быстром изменении оборотов, наблюдаютсья глюки с длительностью, если повышаем, то длительность уменьшаеться .. это вызвано канешно же тем что длительность считаеться для следующего такта ((((по другому думаю ваще никак не посчитать ((.... думаю может перейти на 16 Мгц, будет быстрее считать тогда наверное ... хотя, момнт искры рисует всегда четко .. только это время накопления косячит (( ...

лана до лета еще долеко )) напишу надеюсь ) .... теперь нафиг на паскале пишу .. закалеб мну асм )) там ваще ппц заморочки лезут )
хатя может на чистом асме прога была бы быстрее ))
 
Не надо было старшие байты умножать на 256
А уж складывать их и подавно...
А деление 4 байтного числа... :)

А вот в 80с535 деление командой - есть :)
 
как это не нужно? ... чтобы из двух однобайтовых чисел Старший и Младший, сделать одно 16 битное число. надо старшие *256 и прибавить младшее ... на калькуляторе все четко выходит )

я ибо перешел в паскаль у меня переменые стали 16 битные, тоесть 65536 нормальное интеджер число, и ненадо работать с ним как с половинками, старший и младший, но архитектура то не поменялась ... и поэтому из старшего и младшего нужно сделать одно число от 0 до 65536, его поделить на 250 и получим период в милисекундах... все просто ))) тока не работает почемуто (((( отладки нет ((( балин ((((
 
У тебя в таймере и так уже готовенькое число до 65535 (2**n-1)
Делить же в десятичной системе удобней человеку (привычней :) )
 
да готовое .. НО оно разбито на ДВА разряда!!! старший и младший, итого ДВЕ 8 битные переменые ...а мне нужна ОДНА 16 битная
мне в паскале все равно в чем делить или вичитать ))) символы понятные человеку - + * / ... и ненадо исхитряца со сдвигами и прочей лабудой асемблеровской ..)))

былобы сразу одно число от таймера 16битное, вопросов бы не возникало )

старший разряд это есть число показывающее сколько раз переполнился младший, тоесть достиг 256, вот и выходит чтоб перевести в 16 бит надо старший *256 +младший )))
 
А что, когда ты до 10 досчитал, ты единичку в старший разряд не переносишь? ( ежли в десятичной) ?

Таймер, аппаратно, при 8 разрядной машинке, по умолчанию имеет 16 разрядов...
Поэтому числу 65536 соответствует 0000h в таймере и флаг прерывания по переполнению...

Нравится тебе десятичная система - твое дело, но транслятор с Паскаля все равно в двоичную переведет, причем с 8 разрядной сеткой...
 
да блин .. Миш .. ну при чем тут система ? я на паскале тоже в 0хХХ пишу тоесть в Хексе .... нету в в таймере числа 65536 ))) ну неееттуууу )))) есть два числа. старший байт TMR1H = 255или FF и TMR1L = 255 или FF, они не выступают в роли ОДНОГО числа, ибо микропроцесор 8 битный!!!! ... поэтому в паскале 16и битном уже и даже 32 битном, я не магу ВЗЯТЬ с таймера сразу одним числом оба разряда!!!! .. их нужно перевести в одно число!!! это Таймер 0, 8 битный, он до 255 считает и все - одно число .... вот в чем суть то .. не в системе счисления ))) а в сути устройства тамера 1 ....если бы можно было сразу 65536 с него взять, я б ничего не изобретал уже давноб сдалал )))

можно канешно загнаца, посматреть по каким адресам лежат Старший и младший, наверняка друг за другом, и обьявить в паскале переменую, ссылающуюся на начало адреса старшего байти и меющею длину 16 бит ) тогда они автоматом будут в нее записываться ))
 
Ибо... Изучай middle range datasheet на пис ... В части timer1... Ибо..
Мне надоело.
Ибо.
 
The PIC12F629/675 devices have a 16-bit timer.
Figure 5-1 shows the basic block diagram of the Timer1
module. Timer1 has the following features:
16-bit timer/counter (TMR1H:TMR1L)
• Readable and writable
• Internal or external clock selection
• Synchronous or asynchronous operation
• Interrupt on overflow from FFFFh to 0000h
• Wake-up upon overflow (Asynchronous mode)
• Optional external enable input (T1G)
• Optional LP oscillator


0Eh TMR1L Holding Register for the Least Significant Byte of the 16-bit TMR1 Register xxxx xxxx uuuu uuuu
0Fh TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register xxxx xxxx uuuu uuuu

все больше не говорим о пустоте ))) нету такой переменой как TMR1 )))
Миш .. ну те так в пиках все как в обычных процах ) ну савсем не так ))) .. не умет пик считать до 65536 ))), тока до 255 ))) заведены два регистра и по переполнению работают, и получаем что в итоге считаем до 65536 ) .. псевдо 16бит переменая )
 
Stranger21 написал(а):
---------------------
старший разряд это есть число показывающее сколько раз переполнился младший, тоесть достиг 256, вот и выходит чтоб перевести в 16 бит надо старший *256 +младший )))

не надо ничего умножать.
с пиками не работал, но для avr на Си сделал бы так:
Код:
unsigned int tmr16;
tmr16 = TMR1L + ((unsigned int)TMR1H << 8);
 
)) Си Си .... ну можно и так канешно извратиться .. тока в паскале две строки будет ) сперва сдвиг, потом сложение )
 
Stranger21 написал(а):
Миш .. ну те так в пиках все как в обычных процах ) ну савсем не так ))) .. не умет пик считать до 65536 ))), тока до 255 )))


9074617819ab.jpg
 
Миш .. ну хватит .. )))) ну свою же картинку читай дальше ---16бит таймер ИЗ ДВУХ 8 БИТНЫХ РЕГИСТРОВ
// Special function registers (SFRs)
var
INDF : byte; absolute 0x0000; volatile; sfr;
TMR0 : byte; absolute 0x0001; volatile; sfr;
PCL : byte; absolute 0x0002; volatile; sfr;
STATUS : byte; absolute 0x0003; volatile; sfr;
FSR : byte; absolute 0x0004; sfr;
FSRPTR :^byte; absolute 0x0004; sfr;
PCLATH : byte; absolute 0x000A; volatile; sfr;
INTCON : byte; absolute 0x000B; volatile; sfr;
PIR1 : byte; absolute 0x000C; volatile; sfr;
TMR1L : byte; absolute 0x000E; volatile; sfr;
TMR1H : byte; absolute 0x000F; volatile; sfr;
T1CON : byte; absolute 0x0010; volatile; sfr;
CMCON : byte; absolute 0x0019; volatile; sfr;
ADRESH : byte; absolute 0x001E; volatile; sfr;
ADCON0 : byte; absolute 0x001F; volatile; sfr;
OPTION_REG : byte; absolute 0x0081; volatile; sfr;
PIE1 : byte; absolute 0x008C; volatile; sfr;
PCON : byte; absolute 0x008E; volatile; sfr;
OSCCAL : byte; absolute 0x0090; volatile; sfr;
WPU : byte; absolute 0x0095; sfr;
IOC : byte; absolute 0x0096; volatile; sfr;
IOCB : byte; absolute 0x0096; volatile; sfr;
VRCON : byte; absolute 0x0099; volatile; sfr;
EEDATA : byte; absolute 0x009A; volatile; sfr;
EEDAT : byte; absolute 0x009A; volatile; sfr;
EEADR : byte; absolute 0x009B; volatile; sfr;
EECON1 : byte; absolute 0x009C; volatile; sfr;
EECON2 : byte; absolute 0x009D; volatile; sfr;
ADRESL : byte; absolute 0x009E; volatile; sfr;
ANSEL : byte; absolute 0x009F; sfr;
GPIO : byte; absolute 0x0005; volatile; sfr;
TRISIO : byte; absolute 0x0085; volatile; sfr;

Цельного регистра TMR1 НЕТУ!!!!! ))) .. ну все хватит уже пару страниц говарим ни о чем ) точнее я пытаюсь тебе обьяснить что нету регистра 16битного ))) ну просто физически не может в нем быть одним регистром 16бит ))
это таймер Псевдо 16 битный, был бы проц 16 битный, был бы просто один таймер один регистр TMR1 и все ) ...
все закрыли тему эту .... прими это как факт и все ) два числа старший и младший, для перевода в одно 16 битное, используем несколько вариантов перевода с использвоанием простейшей арифметики ))
вариант со сдвигом меня устраивает )
 
прими как факт, таймер аппаратно 16 разрядный - 4-х байтный (на самом деле - больше, только доступ чтение-запись сделали к 16-ти )...
сдвиг числа на N разрядов в двоичной арифметике - это умножение на 2**N

И сколько ты не переводи число в десятичную систему, этот процессор (да и другой по-большому счету) не умеет вычитать, умножать и делить - он умеет только складывать. И складывает он вовсе не в десятичной системе счисления. И какой ты длины ты не опишешь на языке высокого уровня переменную, она все равно будет вычисляться в этом проце именно как набор 8-разрядных регистровых пар...
 
Михаил, ну хватит уже ))) ну при чем тут система счисления и так далее )))) ....при чем тут десятичная, шестнацати ричная или еще какая система ... да разница то? .. на асме тоже все эти системы есть, как хочеш так и пишеш ....

в паскале есть готовая функция VDELAY_MS(x) где x время в Милисекундах, сока надо делать задержку, соотвтевено мне нужно из мифических ДВУХ регистров Таймера в его величике посчитавшей количество циклов машинных, перевести в Нормальные Милисекунды!!! и подставить в эту функцию задержки, в какой системе счисления - значения не имеет, гдеавно из Машинных тактов Таймера перевести в Одну переменую в милисекундах .... и все ... програма укладываеться в таком случае в 10 строк кода на паскале, на асме же это будет страница а то и две ).... и Думать я не хачу больше о том скока тактов выполняються команды, надоело ) .. поэтому пишу на паскале )там все учетено автоматом )
и мне все равно что на асме это будет работа с двумя регистрами, аналогично томуже что написал бы я сам .... НЕХАЧУ!!! ... )))) для этого и существуют языки высоко уровня чтоб писать крос платформеные во первых программы, во вторых не думать особо о том как это будет вертеться апаратно ...
 
Stranger21 написал(а):
НЕХАЧУ!!! ... )))) для этого и существуют языки высоко уровня чтоб писать крос платформеные во первых программы, во вторых не думать особо о том как это будет вертеться апаратно ...

Вот...
Наконец я от тебя услышал суть. Но рисуя не на аппаратном уровне зачем тогда вообще заморачиваться "правильными путями"? 256/250=1,024 ...
Для того и есть эти пики, разной аппаратной начинки, чтобы можно было из них слепить аппаратные контроллеры под конкретные задачи...
 
ковыряюсь тут всё со своим реперным диском, вчера чуть было не приварил об балды.

уже запутался.
это мотор ставим в ВМТ 1-го цилиндра (или +6 ??), датчик где попало по окружности, а реперный диск ставим так чтоб датчик был на 18-м зубе после двух пропущеных.
так?
 
ага ... ставиш колено в вмт, ставиш ДПКВ так как тебе удобно убдет и чтоб можно было двигать по чуть чуть ... теперь ставиш реперный диск так чтоб по ходу врашениия дпдк был над 18 зубом после выбитых .... ну дпкв чтоб можно было потом и на 17 и на 19 и 20 поставить еси че .. такое место найди )
 
Миш ... или кто там еще в теме ))) ...

таки давай уже точку ставить чтоль какуюто во времени накопления ... сижу читаю инет ... там блин чего тока не пишут ... вроде на том же Схем Нет форуме есть какойто ФУОЗ каторый вроде до 2000 рисует 12мс накопление а после максимально возможное ... тоесть тупо на два делит входной сигнал )... типо для простой ВАЗ катушки одиночной это самое то что надо ..
и везьде вижу что время зависит от параметров катушки, в тех же январях в зависиомсти от примереного модуля разное время накопления .... балин ... я думаю что всеж верно это что время накопления у разных катушек будет разным, и надо его вычислять опытным путем чтоль ....
бааалин просток акойто ((( ГДЕ истина!!!! .... надописать раскидыватель веть уже и чтоб правильно было все !!!...

сматрю сча на картинку с Автодаты про матор AHL, ну от него у меня модуль 4х ногий с усилителем, его буду применять еси живой, таки вот там картинка фиговая но на ХХ около 5-6 мс получаеться ...

кстати

b981b0d3a0b6t.jpg

прикольная штучка, надо будет собрать ) ей и можно будет точно выйснить какая надо время для каких оборотов .. ну разрядник сделать 15мм например и и сматреть ....
 
Назад
Сверху Снизу