| ПРЕРЫВАНИЯ PIC18F452 | 
|  | 
| 
 
 
 
 | ivan_fd | Дата: Чт, 25.09.2014, 16:26  |                                                                                                                Сообщение # 16 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | Посмотрите в свой код, а именно в прерывание. 
 Что это такое (TMR1L = 255: TMR1H = 255)????
 Зачем Вы ставите таймеру значение 65535? Что бы он постоянно сидел в прерывании???
 
 А так, то предделитель работает нормально. У Вас частота внешнего генератора 11 Гц.
 То есть таймер 1 будет увеличиваться каждых ~90,90 мс. Теперь посчитайте сколько ему нужно времени, что бы он переполнился???
 |  
 |  |  |  | 
| 
 
 
 
 | dimitriy-bc | Дата: Чт, 25.09.2014, 17:24  |                                                                                                                Сообщение # 17 |  
 | ![dimitriy-bc]()  
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Могу и подсказать
 
  
 Сообщений: 
 
 
 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 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | Как раз для Ваших целей и подходят порты для внешнего прерывания, а не те которые Вам больше нравятся или подходят по разводке. 
 Предделитель работает нормально, если поставить значение таймера, хотя бы, на 1 меньше.
 При 65535 - не хочет. Может и нужно пробовать в железе как себя поведет.
 |  
 |  |  |  | 
| 
 
 
 
 | DAlexV | Дата: Чт, 25.09.2014, 22:36  |                                                                                                                Сообщение # 19 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Разобрался
 
  
 Сообщений: 
 
 
 655
 
 
 Замечания: ± На сайте с 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 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 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 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Разобрался
 
  
 Сообщений: 
 
 
 545
 
 
 Замечания: ± На сайте с 02.10.2010
 
 
 Статус: 
 Offline
 
 | Цитата DAlexV (  ) Когда же наши уважаемые коллеги научаться пользоваться Шпротеусом нормально ??? " Беда или эпидемия просто  
 У меня были теже проблемы, пока сам не разобрался с протеусом. Собирал инфу по крупицам. Думаю нужно сделать статью, в которой будет описан и проиллюстрирован весь цикл отладки. Какой файл, где его объявить, как сгенерировать, и самое интересное ,как вывести окно отладки кода, программной памяти, eeprom, стем и т.д
 Я пока не нашел подобного. Сам я в протеусе слаб, научился только азам, поэтому тоже был бы рад почитать статью на нашем форуме. И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение?
 
 Возможно уже есть такая статья, тогда прощу ссылку, сам хочу почитать.
 Спасибо!
 |  
 |  |  |  | 
| 
 
 
 
 | ivan_fd | Дата: Пт, 26.09.2014, 10:36  |                                                                                                                Сообщение # 22 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | В принципе есть очень исчерпывающая инфа по Протеусу. FAQ (ЧаВО) по PROTEUS для начинающих и не только.
 |  
 |  |  |  | 
| 
 
 
 
 | MiXaS | Дата: Пт, 26.09.2014, 14:31  |                                                                                                                Сообщение # 23 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Разобрался
 
  
 Сообщений: 
 
 
 545
 
 
 Замечания: ± На сайте с 02.10.2010
 
 
 Статус: 
 Offline
 
 | Ну, тогда надо слать всех неумелых на ... казус |  
 |  |  |  | 
| 
 
 
 
 | DAlexV | Дата: Сб, 27.09.2014, 13:11  |                                                                                                                Сообщение # 24 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Разобрался
 
  
 Сообщений: 
 
 
 655
 
 
 Замечания: ± На сайте с 13.05.2008
 
 
 Статус: 
 Offline
 
 | Ну послать то можноЦитата MiXaS (  ) Ну, тогда надо слать всех неумелых на ... казус , только на Казусе боюсь узнав про Барсик или отправят на PicBasic.ru или еще куда подальше. Не особо там радуют нас Басиководов. Что касаемо FAQ по Шпроту то тут я полностью согласен с ivan_fd. Прочтение позволяет решить кучу непоняток и граблей. Не заставляю читать полностью всю ветку (у меня терпение кончилось где-то странице на 86 форума) а вот оффлайн версию советую прочитать всю и всем. 
 
 Можно попробовать. Но но 100% быстро не обещаю. Сейчас у меня не самые лучшие времена для творчества.Цитата MiXaS (  ) И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение?
 Удачи
   
 Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
 |  
 |  |  |  | 
| 
 
 
 
 | MiXaS | Дата: Пн, 29.09.2014, 09:25  |                                                                                                                Сообщение # 25 |  
 |   
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Разобрался
 
  
 Сообщений: 
 
 
 545
 
 
 Замечания: ± На сайте с 02.10.2010
 
 
 Статус: 
 Offline
 
 | Цитата DAlexV (  )  Сейчас у меня не самые лучшие времена для творчества.
 Как я Вас понимаю..
 |  
 |  |  |  | 
| 
 
 
 
 | dimitriy-bc | Дата: Сб, 20.12.2014, 16:15  |                                                                                                                Сообщение # 26 |  
 | ![dimitriy-bc]()  
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Могу и подсказать
 
  
 Сообщений: 
 
 
 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 |  
 | ![dimitriy-bc]()  
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Могу и подсказать
 
  
 Сообщений: 
 
 
 150
 
 
 Замечания: ± На сайте с 19.03.2012
 
 
 Статус: 
 Offline
 
 | И еще раз здравствуйте. Взял за основу вариант предложенный DAlexV, Вместо генератора подключил кнопку. Если я правильно понимаю алгоритм работы таймера 1 через вход С0, то прерывание должно срабатывать при первом положительном перепаде. При включении протеуса когда кнопка разомкнута так и происходит. Но если кнопка была замкнута, то прерывание срабатывает только по второму фронту. Где и что я не понимаю?
 |  
 |  |  |  | 
| 
 
 
 
 | ivan_fd | Дата: Пн, 22.12.2014, 20:52  |                                                                                                                Сообщение # 28 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | Ну так в даташите написано, что приращение происходит по каждому переднему фронту внешнего тактового сигнала. |  
 |  |  |  | 
| 
 
 
 
 | dimitriy-bc | Дата: Вт, 23.12.2014, 10:50  |                                                                                                                Сообщение # 29 |  
 | ![dimitriy-bc]()  
 
 
 
 
  Группа:
  Проверенные
 
  Ранг: 
 
 Могу и подсказать
 
  
 Сообщений: 
 
 
 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 |  
 |   
 
 
 
 
  Группа:
  Модераторы
 
  Ранг: 
 
 Специалист
 
  
 Сообщений: 
 
 
 891
 
 
 Замечания: ± На сайте с 12.01.2009
 
 
 Статус: 
 Offline
 
 | dimitriy-bc - это конечно Ваше право выбирать как работать с контроллером. Но, как я уже Вам говорил, для внешнего прерывания есть другой вход.
 
 Теперь по таймеру:
 В даташите есть диаграмма:
 
   
 и если сравнить диаграмму с тем, что показывает Протеус, то видно, что все сходится.
 
 
   
 Теперь еще одно замечание.  Зачем Вы синхронизируете внешний тактовый сигнал? (T1SYNC)
 
 
 Цитата dimitriy-bc (  ) С коффами и асмами вроде разобрался.Зачем Вам в Протеусе АСМ файл??? Не могу понять.
 |  
 |  |  |  |