Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: demanik  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите раставить числа (Как создать бинарное число из DEC чисел)
Помогите раставить числа
ivan_fd Дата: Пт, 01.03.2013, 23:10  |                                                                                                                Сообщение # 31
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата (доцент2)
зачем предоставлять демонстрационный файл, если он ни чего не показывает?

Он показывает как раз много, на чем Вы думаете я отладил исходник, не имея пульта с протоколом NEC?


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Пт, 01.03.2013, 23:19
ЯНДЕКС Дата: 01.03.2013
доцент2 Дата: Пт, 01.03.2013, 23:47  |                                                                                                                Сообщение # 32
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 351
Репутация: 2   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

не знаю, что у Вас он показывает, а у меня на дисплее две строчки и в каждой $0.
ivan_fd Дата: Сб, 02.03.2013, 00:14  |                                                                                                                Сообщение # 33
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Да, что Вы прицепились к дисплею. Я же написал выше, что взял проект Алексея, и просто написал код под него.

В железе на дисплее должно быть все нормально. А в протеусе я отлаживал пошагово!!!


Меня все время преследуют умные мысли...но я быстрее!!!
Anatoliy1000 Дата: Чт, 12.04.2018, 05:07  |                                                                                                                Сообщение # 34
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 66
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Цитата ivan_fd ()
Написал декодер NEC. В железе не проверял, так как нету железа. Возможно, при настройке, нужно будет подправить тайминги, сменив числовые значения в IF-ах.

Пробуйте.
Здравствуйте!
Попробовал. Но поставил: свой ПИК 16Ф628 и без кварца (т.е. внутренний на 4 МГц)
Естественно ни чего не получилось. В суть написанной программы не могу вникнуть, это уже уровень "полубоги". Помогите разобраться, что нужно поменять под 16Ф и пойдет ли вообще без кварца?
Прикрепления: IR.rar(17.5 Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Чт, 12.04.2018, 05:09
ivan_fd Дата: Чт, 12.04.2018, 11:10  |                                                                                                                Сообщение # 35
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Anatoliy1000, конечно не получилось.
Вы поменяли генератор на внутренний, а настройки таймеров в прерывании оставили для расчета 20МГц. При кварце 20МГц и предделителе 1:2, время прерывания 102,4мкс. У Вас получается 512мкс.

Открываете описание протокола https://www.sbprojects.net/knowledge/ir/nec.php, далее меняете в прерывании значения под Ваш таймер.

Например  131 и 141 меняем на расчетное.

Код
If tik >= 131 And tik < 141 Then ; если таймер натикал ~ 13.5мс, то значит пришла стартовая последовательность


Меня все время преследуют умные мысли...но я быстрее!!!
Anatoliy1000 Дата: Чт, 12.04.2018, 13:19  |                                                                                                                Сообщение # 36
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 66
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Посмотрел протокол, там в м.секундах - все понятно, а когда речь идет о Герцах не понятно. В программе еще употребляется слово инкремент, так вообще мозг взрывает. Когда "читаешь" много не понятных слов, то не знаешь, что разбирать, в каком направлении рыть.
Опираюсь только на логику.
Если вы написали, что у меня получается при таком предделителе (что это вообще такое, смотрел мануал, думал издеваются) 512, а у вас 102, то мне либо уменьшить либо увеличить все ТИКи в 5 раз.


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
ivan_fd Дата: Чт, 12.04.2018, 13:45  |                                                                                                                Сообщение # 37
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Anatoliy1000, логика это хорошо, но она здесь не особо поможет. happy

Изучите внимательно даташит на контроллер, тем более, что есть на русском.

Цитата Anatoliy1000 ()
512, а у вас 102, то мне либо уменьшить либо увеличить все ТИКи в 5 раз.
Так, чтоб не сильно напрягаться, посмотрите сколько мсек длится подсчет и подкорректируйте тики под ваш таймер.

Например:
13,5 мс = 13500 мкс
13500 / 512(таймер) = 26,36 циклов
берем 26 циклов = 26*512 = 13,312 мс
будем смотреть попал ли импульс с паузой в заданные пределы.
От 13,312мс до 14,336мс(то есть от 26 до 28 циклов таймера)

P.S:говорю еще раз, программа написана и проверена только в симуляторе. Да и на дату посмотрите, сейчас бы может по другому писал. В железе не проверялась.
Был бы такой пульт, проверил бы. Поэтому может и не будет работать.!

P.S.S: на ардуинке вообще бы голову сломали. dry


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Чт, 12.04.2018, 13:52
Anatoliy1000 Дата: Пт, 13.04.2018, 06:52  |                                                                                                                Сообщение # 38
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 66
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Спасибо! Буду кумекать...
Просто я по образованию бухгалтер. Сейчас по воле судьбы не у дел, но продолжаю служить государю.

Добавлено (13.04.2018, 06:48)
---------------------------------------------
Вообще не понятно почему не сделано через PulsIn?
Я хотел через него сделать, но не пойму как запомнить очередную длину импульса. Хотел через строковую переменную складывать, а потом вывести на экран и разбираться, но в пиках 16 оказалось нет строковых переменных.
Допустим поймал импульс 1 длинной 5985 (число от "балды"), потом поймал импульс 0 длинной 45901 и так далее а как их сложить по окончании и посмотреть на экране не пойму.
Ваша программа наверное рабочая, но:
1. много не понятных слов, таймер с предделителем - это пока мне не понять. Нужно базовые хорошие знания или курсы какие-то самому не "догнать". Что такое банки... что такое старший бит, младший, а уж шестнацтиричные числа это как китайский для меня.
2. вы пишите что там как-то можно проверить результат. Это очень интересно как. Особенно пошаговое выполнение программы с отображением переменных мне интересно. Как-то же должна работать отладка.

Добавлено (13.04.2018, 06:52)
---------------------------------------------

Цитата ivan_fd ()
26 до 28 циклов таймера
что-то слишком маленький диапазон проверки  -можно пролететь... наверно.
Сейчас попробую.


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
ivan_fd Дата: Пт, 13.04.2018, 09:40  |                                                                                                                Сообщение # 39
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата Anatoliy1000 ()
Вообще не понятно почему не сделано через PulsIn?

Мне кажется, что через PulsIn сделать это будет проблематично. Как мы будем отлавливать начало импульса, тут нужна точность. А команду PulsIn мы запускаем сами, а если импульсы от приемника пришли раньше, чем мы запустим команду. Получается, потеряем данные.
ИМХО, поэтому это надо делать через прерывание и только.

Цитата Anatoliy1000 ()
1. много не понятных слов, таймер с предделителем - это пока мне не понять. Нужно базовые хорошие знания или курсы какие-то самому не "догнать". Что такое банки... что такое старший бит, младший, а уж шестнацтиричные числа это как китайский для меня.

Тут нету ничего особо сложного

1. Смотрим даташит. В нем читаем про настройки конкретного таймера.
Допустим, PIC16F628, в нашем случаи таймер 0.
Читаем:
TMR0 – таймер/счетчик, имеет следующие особенности:
- 8-разрядный таймер/счетчик;
- возможность чтения и записи текущего значения счетчика;
- 8-разрядный программируемый предделитель;
- внутренний или внешний источник тактового сигнала;
- выбор активного фронта внешнего тактового сигнала
- прерывания при переполнении (переход от FFh к 00h).

У нас он настроен от внутреннего тактового сигнала, бит OPTION.5 = 0. Значит таймер будет увеличиватся в каждом машинном цикле. Машинный цикл, при частоте 4МГц, длится 1 мкс. Из этого выходит, что таймер считает от 0 до 255 (таймер у Нас 8-ми битный ) 256 мкс, а так как у нас стоит предделитель 1:2, то соответственно таймер будет доходить до конца за 512 мкс. Когда таймер досчитал до конца (FF), при переходе до 0 происходит прерывание, если оно включено.

Цитата Anatoliy1000 ()
что-то слишком маленький диапазон проверки -можно пролететь... наверно.

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

Цитата Anatoliy1000 ()
Особенно пошаговое выполнение программы с отображением переменных мне интересно. Как-то же должна работать отладка.


Сейчас сниму видео, что да как.


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Пт, 13.04.2018, 09:41
ivan_fd Дата: Пт, 13.04.2018, 11:27  |                                                                                                                Сообщение # 40
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вот, снял небольшое видео об отладке.



Меня все время преследуют умные мысли...но я быстрее!!!
Anatoliy1000 Дата: Пт, 13.04.2018, 12:49  |                                                                                                                Сообщение # 41
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 66
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Блин-н-н-н-н. Уважаемый Иван! Расцеловал бы ВАС! Все заработало (до Ваших сообщений). Но сообщения тоже полезные. Отладка это весч! Пока не могу посмотреть, почему-то Ютюб некоторые видео показывает черным квадратом (м.б. оперативки не хватает). Дома посмотрю. Сейчас на работе.
Выкладываю Ваш файл переделанный под 16Ф628 без кварца
Вот коды для кнопок для пульта HX1838:
69-70-71
68-64-67
7-21-9
22-25-13
12(иногда13)-24-94
8-28-90
66-82-74
Прикрепления: IR.bas(8.4 Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
DAlexV Дата: Пт, 13.04.2018, 13:14  |                                                                                                                Сообщение # 42
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 697
Репутация: 26   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата Anatoliy1000 ()
В суть написанной программы не могу вникнуть, это уже уровень "полубоги"
Да какие там полубоги Анатолий. Все просто. Вижу что мучаетесь, решил переложить свой код с Рыбы на Протон. (Во вложении). От себя лишь добавлю.
Не надо делать много телодвижений в прерывании !!!!
Иначе может получиться что будете вечно в нем сидеть (Не будет успевать обрабатываться текущий код прерывания, а уже наступает следующее). 
Успехов  wink
Прикрепления: IR_268.rar(1.77 Mb)


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
Anatoliy1000 Дата: Сб, 14.04.2018, 10:51  |                                                                                                                Сообщение # 43
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 66
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Попробовал все то же самое на другом пике, не получается. Хотя посмотрел настройки таймера на обоих пиках одинаковые в даташите.
Если будет пару минут посмотрите пожалуйста файл на ПИК 12Ф675.

Цитата DAlexV ()
решил переложить свой код с Рыбы на Протон
А у Вас в коде видимо ПИК идет с внешним кварцем?
Всего один раз попробовал с внешним кварцем "поработать" ни чего не получилось.
Вообще не хватает инструкций по Протону + железо + Протеус. Такое ощущение что все на Ардуинке.

Появился еще вопрос:
от куда берется 512 мкс?
1МГц - это 1000 000 за 1 сек или 1000 000 мкс или 1 операция (или цикл программы или таймера...) за 1 мкс
20МГц = 20 операций за 1 мкс, а у Вас 1 цикл (операция) - 102 мкс
или (логически думаю м.б. что где-то ошибся) и тогда получится 20 операций=1мс, 1 операция=1мс/20=50мкс + предделитель возможно (не знаю что это такое) увеличивает в 2 раза 50мкс = 100мкс.

Разобрался как "отслеживать" переменные. Но не понял что за картинка с квадратиками. По логике это имитация сигнала от какого-то источника. Как подать сигнал. Нажимаю кнопку и переключатель на экране ни чего не появляется.

Еще такой вопрос (простите, но прямо что-то меня понесло... хочу разобраться). Вот на ПИК 16Ф628 в железе можно смотреть результат через ЛСД (как-то можно и через УСАРТ - пока не могу разобраться), а как посмотреть результаты на 12Ф627?
Прикрепления: 4075632.bas(6.9 Kb)


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Сб, 14.04.2018, 10:55
DAlexV Дата: Вс, 15.04.2018, 13:13  |                                                                                                                Сообщение # 44
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 697
Репутация: 26   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата Anatoliy1000 ()
А у Вас в коде видимо ПИК идет с внешним кварцем?
Анатолий. Пиков у меня нет,  давно уже не занимаюсь ими.  Код проверялся и отлаживался в протеусе . Таймер подстраивался под 4мгц.  А уж внешний или внутренний кварц решаем сами.  
Цитата Anatoliy1000 ()
от куда берется 512 мкс?
Подозреваю что это с моего "Рыбьего" кода остался.  Это время переполнения таймера.  там был кварц 20мгц . Здесь 4. Так что время переполнения будет другое.  (Можно глянуть в коде что я прекрепил . Настройка таймера ). Так же там на b.4 выведен индикатор состояния системы.  (Переходит в 1 после приёма правильной посылки  и 1 повтора ). Все так же можно посмотреть пршагово расставив точки останова.  Успехов  wink


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
ivan_fd Дата: Вс, 15.04.2018, 20:32  |                                                                                                                Сообщение # 45
Группа: Модераторы
Ранг:  Специалист
Сообщений: 941
Репутация: 71   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Anatoliy1000,

У меня код для 12F675 работает. Возможно Вы не учли, что коды отображаемые на дисплее
в шестнадцатеричном формате, а Вы сравниваете с десятичным.

Код
If CommandOut = 68 Then GPIO.0=0
Цитата Anatoliy1000 ()
Появился еще вопрос:от куда берется 512 мкс?

Писал уже выше, но напишу еще раз.
У нас частота генератора контроллера 4МГц. Один машинный цикл состоит из четырех тактов генератора.  То есть 4МГц разделяем на 4, получаем 1МГц, что в переводе на время будет 1мкс.!!!
Таймер 0 у нас 8-ми битный, то есть он может считать, до того как переполнится, от 0 до 255. Получается, что если таймер прошел полный круг то прошло 256мкс!!! А так как у нас включен предделитель 1:2, то таймер будет переполнятся за 512мкс.

Цитата Anatoliy1000 ()
Разобрался как "отслеживать" переменные. Но не понял что за картинка с квадратиками. По логике это имитация сигнала от какого-то источника. Как подать сигнал. Нажимаю кнопку и переключатель на экране ни чего не появляется.

Если Вы не смогли посмотреть видео, то можете скачать по ссылке: https://drive.google.com/open?id=1vo6e1W0HcamOaHqlHJQoVJAFOHX79MMo

Та картинка с квадратиками, это своего рода генератор сигналов. Там ничего не нужно нажимать он постоянно шлет последовательность. На него не обращайте внимания, это только для отладки использовалось.

Цитата
Еще такой вопрос (простите, но прямо что-то меня понесло... хочу разобраться). Вот на ПИК 16Ф628 в железе можно смотреть результат через ЛСД (как-то можно и через УСАРТ - пока не могу разобраться), а как посмотреть результаты на 12Ф627?

Можно и через USART, выделить для него одну ножку только для передачи с контроллера.
Смотрите команду Serout


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Пн, 16.04.2018, 08:53
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Помогите раставить числа (Как создать бинарное число из DEC чисел)
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: