ПРЕРЫВАНИЯ PIC18F452
|
|
ivan_fd |
Дата: Чт, 25.09.2014, 16:26 | Сообщение # 16 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Посмотрите в свой код, а именно в прерывание.
Что это такое (TMR1L = 255: TMR1H = 255)???? Зачем Вы ставите таймеру значение 65535? Что бы он постоянно сидел в прерывании???
А так, то предделитель работает нормально. У Вас частота внешнего генератора 11 Гц. То есть таймер 1 будет увеличиваться каждых ~90,90 мс. Теперь посчитайте сколько ему нужно времени, что бы он переполнился???
|
|
|
|
dimitriy-bc |
Дата: Чт, 25.09.2014, 17:24 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
ivan_fd, я выше уже писал, что мне как раз и надо чтоб программа замечала первый фронт от датчика нулевого положения каретки (в работе станка эта авария). При разведении печатной платы заводить сигнал на RB0, RB1 и RB2 было не удобно, а на RC0 само просилось. Поскольку мне нужно вылавливать первый фронт, я записываю в ТАЙМЕР1 максимальное значение. В варианте hhh8 я настроил T1CON = %00110111. т.е. предделитель настроен на 1:8. Участок программы: If PORTD.0 = 1 And BITS.0 = 1 Then Inc BITS_REVERS BITS.0 = 0 ElseIf PORTD.0 = 0 And BITS.0 = 0 Then BITS.0 = 1 End If считает каждый фронт. Значит значения BITS_REVERS и REAL_WAY_X должны отличаться в восемь раз. У меня в протеусе этого не происходит.
Сообщение отредактировал
dimitriy-bc - Чт, 25.09.2014, 17:26
|
|
|
|
ivan_fd |
Дата: Чт, 25.09.2014, 22:36 | Сообщение # 18 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Как раз для Ваших целей и подходят порты для внешнего прерывания, а не те которые Вам больше нравятся или подходят по разводке.
Предделитель работает нормально, если поставить значение таймера, хотя бы, на 1 меньше. При 65535 - не хочет. Может и нужно пробовать в железе как себя поведет.
|
|
|
|
DAlexV |
Дата: Чт, 25.09.2014, 22:36 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Физкульт привет всем !!! Давненько не заходил, все в работе да в работе. Теперь по делу. Занимаюсь примерно тем же заданием что и dimitriy-bc (пишу драйвер для сервопривода с обраткой) . Думаю нужно помочь. Такой вариант использования таймера не делал и решил попробовать проверить. Первое что хочу еще в который раз хочу повторить: " Когда же наши уважаемые коллеги научаться пользоваться Шпротеусом нормально ??? " Беда или эпидемия просто . Шпротеус прекрасно понимает файлы .BAS (Протон) и .COF (Рыба) .При этом можно расставлять точки останова, смотреть значения регистров, делать замеры временных интервалов и кучу остальных полезностей . Зачем народ вы его кормите HEX-ом а потом удивляетесь почему не работает ????
Проблема с которой мучается dimitriy-bc нашел за 5 минут(изменив значение таймера). Суть в следующем: При Ините таймера сначала устанавливаются значения таймера, а аполя он уже запускается (включается). Поэтому первые 8 импульсов отсчитываются нормально. Дальше интереснее. В прерывании почти все верно. Если устраивает деление предделителем нужно изменить порядок записи нового значения в таймер.
T1CON = %00110011 ' T1IF=0 T1ON=0 ' Timer stop TMR1H=255 TMR1L=255 T1ON=1 ' Timer start
или T1CON = %00000011 ' PIR1.0 = 0 TMR1H = 255 TMR1L = 248 '(256-8) те же 8 импульсов
Второй вариант более универсален так как можно сделать деление на любое кол-во импульсов TMR1(word)=65536-N импульсов Надеюсь все ясно изложил. Исправленный проект прилепил архивом.
Удачи
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
ivan_fd |
Дата: Чт, 25.09.2014, 23:18 | Сообщение # 20 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Только собирался написать, что можно так:
Код T1CON.0 = 0 PIR1.0 = 0: TMR1L = 255: TMR1H = 255 T1CON.0 = 1 А тут опередили.
Сообщение отредактировал
ivan_fd - Чт, 25.09.2014, 23:19
|
|
|
|
MiXaS |
Дата: Пт, 26.09.2014, 10:08 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата DAlexV ( ) Когда же наши уважаемые коллеги научаться пользоваться Шпротеусом нормально ??? " Беда или эпидемия просто
У меня были теже проблемы, пока сам не разобрался с протеусом. Собирал инфу по крупицам. Думаю нужно сделать статью, в которой будет описан и проиллюстрирован весь цикл отладки. Какой файл, где его объявить, как сгенерировать, и самое интересное ,как вывести окно отладки кода, программной памяти, eeprom, стем и т.д Я пока не нашел подобного. Сам я в протеусе слаб, научился только азам, поэтому тоже был бы рад почитать статью на нашем форуме. И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение?
Возможно уже есть такая статья, тогда прощу ссылку, сам хочу почитать. Спасибо!
|
|
|
|
ivan_fd |
Дата: Пт, 26.09.2014, 10:36 | Сообщение # 22 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
В принципе есть очень исчерпывающая инфа по Протеусу. FAQ (ЧаВО) по PROTEUS для начинающих и не только.
|
|
|
|
MiXaS |
Дата: Пт, 26.09.2014, 14:31 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Ну, тогда надо слать всех неумелых на ... казус
|
|
|
|
DAlexV |
Дата: Сб, 27.09.2014, 13:11 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Цитата MiXaS ( ) Ну, тогда надо слать всех неумелых на ... казус Ну послать то можно , только на Казусе боюсь узнав про Барсик или отправят на PicBasic.ru или еще куда подальше. Не особо там радуют нас Басиководов. Что касаемо FAQ по Шпроту то тут я полностью согласен с ivan_fd. Прочтение позволяет решить кучу непоняток и граблей. Не заставляю читать полностью всю ветку (у меня терпение кончилось где-то странице на 86 форума) а вот оффлайн версию советую прочитать всю и всем.
Цитата MiXaS ( ) И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение? Можно попробовать. Но но 100% быстро не обещаю. Сейчас у меня не самые лучшие времена для творчества.
Удачи
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
MiXaS |
Дата: Пн, 29.09.2014, 09:25 | Сообщение # 25 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата DAlexV ( ) Сейчас у меня не самые лучшие времена для творчества.
Как я Вас понимаю..
|
|
|
|
dimitriy-bc |
Дата: Сб, 20.12.2014, 16:15 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
ivan_fd, DAlexV, спасибо за разъяснения. В hhh8 сработала моя невнимательность. Ведь знал, что для пик16ф87х рекомендуется перед записью в таймер1 остановить его на 1 мкСек. Логично, что и для других пиков это актуально. В рабочем проекте этот нюанс не играет роли т.к. запись в таймер1 происходит за долго до его запуска. Пока решил проблему программно, а с этой бедой буду разбираться попозже. По поводу протеуса, по некоторым вопросам мне помогали ссылка http://roboforum.ru/forum19/topic4809.html и исходящая из нее http://proteus123.narod.ru/01.htmДобавлено (20.12.2014, 16:15) --------------------------------------------- Всем доброго времени суток. Так сложилось, что жизнь заставляет опять вернуться к прерываниям по входу С0. Обратился в хелп Протона и вроде как ура, но единственная загвоздка. Предделитель таймера1 настраиваю на 1:1, а в протеусе отрабатывает по второму фронту, Настраиваю как 1:8, срабатывает по девятому фронту, Даташит пишет bit 5-4 T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits 11 = 1:8 Prescale value 10 = 1:4 Prescale value 01 = 1:2 Prescale value 00 = 1:1 Prescale value
В хелпе протона ' ' Setup Timer1 ' T1CONbits_RD16 = 1 ' Enable Timer1 in 16-bit operation T1CONbits_T1CKPS1 = 0 ' \ Timer1 Prescaler to 1:2 T1CONbits_T1CKPS0 = 0 ' / T1CONbits_T1OSCEN = 0 ' Disable External Oscillator T1CONbits_TMR1CS = 0 ' Increment on the internal Clk wTimer1 = 0 ' Clear Timer1 T1CONbits_TMR1ON = 1 ' Enable Timer1 Встает извечный вопрос, ЧТО ДЕЛАТЬ?
Сообщение отредактировал
dimitriy-bc - Пн, 29.09.2014, 17:17
|
|
|
|
dimitriy-bc |
Дата: Вс, 21.12.2014, 18:03 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
И еще раз здравствуйте. Взял за основу вариант предложенный DAlexV, Вместо генератора подключил кнопку. Если я правильно понимаю алгоритм работы таймера 1 через вход С0, то прерывание должно срабатывать при первом положительном перепаде. При включении протеуса когда кнопка разомкнута так и происходит. Но если кнопка была замкнута, то прерывание срабатывает только по второму фронту. Где и что я не понимаю?
|
|
|
|
ivan_fd |
Дата: Пн, 22.12.2014, 20:52 | Сообщение # 28 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ну так в даташите написано, что приращение происходит по каждому переднему фронту внешнего тактового сигнала.
|
|
|
|
dimitriy-bc |
Дата: Вт, 23.12.2014, 10:50 | Сообщение # 29 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата ivan_fd ( ) Ну так в даташите написано, что приращение происходит по каждому переднему фронту внешнего тактового сигнала. В том-то и непонятка. В прикреплении видно, что если установить кнопку счета в замкнутое состояние, сбросить счетчики и контролер (на счетных входах низкий уровень), то счет по прерываниям отстает на единицу. Если установить кнопку счета в разомкнутое состояние, сбросить счетчики и контролер, то счет по прерываниям не отстает. И в первом и во втором случае количество фронтов одинаковое. В железе прерывание ведет себя идентично. Сейчас пытаюсь запустить станок по сборке в бухты резиновых рукавов. Такой же станок сделал больше года назад. Работает нормально. В этом решил вкинуть пару доработок и... выражения и слова закончились, издаю только звуки. Толи протон не клеится с компьютером толи... Последнее время работал на своем ноутбуке с протоном 3.5.2.6. такой же установил на работе. В протеусе все нормально, в железе такие перлы выдает, что на голову не налазят. Поставил версию 3.5.6.5. часть программы заработала нормально, а часть тот же ужас. Завтра на работу возьму свой ноутбук. Следующим наверно молоток. ivan_fd, и еще вопрос. Можно ли в протеусе посмотреть раскладку программы в асме? А так же, что такое cof и с чем его едят?
Добавлено (23.12.2014, 10:50) --------------------------------------------- Цитата dimitriy-bc ( ) ivan_fd, и еще вопрос. Можно ли в протеусе посмотреть раскладку программы в асме? А так же, что такое cof и с чем его едят? С коффами и асмами вроде разобрался. Даю протону сгенерировать кофф, после этого компилирую асмовский код в мплабе и после этого появляется в протеусе асмовская раскладка. Я правильно делаю или как? MPLAB 8.50. И нужно ли после компиляции в протоне компилировать в мплабе?
Сообщение отредактировал
dimitriy-bc - Вт, 23.12.2014, 11:30
|
|
|
|
ivan_fd |
Дата: Вт, 23.12.2014, 16:24 | Сообщение # 30 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
dimitriy-bc - это конечно Ваше право выбирать как работать с контроллером. Но, как я уже Вам говорил, для внешнего прерывания есть другой вход.
Теперь по таймеру: В даташите есть диаграмма:
и если сравнить диаграмму с тем, что показывает Протеус, то видно, что все сходится.
Теперь еще одно замечание. Зачем Вы синхронизируете внешний тактовый сигнал? (T1SYNC)
Цитата dimitriy-bc ( ) С коффами и асмами вроде разобрался. Зачем Вам в Протеусе АСМ файл??? Не могу понять.
|
|
|
|