Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ПРЕРЫВАНИЯ PIC18F452
ПРЕРЫВАНИЯ PIC18F452
ivan_fd Дата: Чт, 25.09.2014, 16:26  |                                                                                                                Сообщение # 16
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Посмотрите в свой код, а именно в прерывание.

Что это такое (TMR1L = 255: TMR1H = 255)????
Зачем Вы ставите таймеру значение 65535? Что бы он постоянно сидел в прерывании???

А так, то предделитель работает нормально. У Вас частота внешнего генератора 11 Гц.
То есть таймер 1 будет увеличиваться каждых ~90,90 мс. Теперь посчитайте сколько ему нужно времени, что бы он переполнился???
dimitriy-bc Дата: Чт, 25.09.2014, 17:24  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 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 должны отличаться в восемь раз. У меня в протеусе этого не происходит.
Прикрепления: hhh8.rar (56.6 Kb)

Сообщение отредактировал dimitriy-bc - Чт, 25.09.2014, 17:26
ivan_fd Дата: Чт, 25.09.2014, 22:36  |                                                                                                                Сообщение # 18
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Как раз для Ваших целей и подходят порты для внешнего прерывания, а не те которые Вам больше нравятся или подходят по разводке.

Предделитель работает нормально, если поставить значение таймера, хотя бы, на 1 меньше.
При 65535 - не хочет. Может и нужно пробовать в железе как себя поведет.
DAlexV Дата: Чт, 25.09.2014, 22:36  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Физкульт привет всем !!! Давненько не заходил, все в работе да в работе. sad
Теперь по делу. Занимаюсь примерно тем же заданием что и dimitriy-bc (пишу драйвер для сервопривода с обраткой)  . Думаю нужно помочь. Такой вариант использования таймера не делал и решил попробовать проверить. Первое что хочу еще в который раз хочу повторить: " Когда же наши уважаемые коллеги научаться пользоваться Шпротеусом нормально ??? " Беда или эпидемия просто  wacko .
Шпротеус прекрасно понимает файлы .BAS (Протон) и .COF (Рыба) .При этом можно расставлять точки останова, смотреть значения регистров, делать замеры временных интервалов  и кучу остальных полезностей book .  Зачем народ вы его кормите 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 импульсов
Надеюсь все ясно изложил. Исправленный проект прилепил архивом.

 Удачи  wink
Прикрепления: hhh8Work.rar (56.8 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ivan_fd Дата: Чт, 25.09.2014, 23:18  |                                                                                                                Сообщение # 20
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Только собирался написать, что можно так:

Код
T1CON.0 = 0                     
                
         PIR1.0 = 0: TMR1L = 255: TMR1H = 255                     
   T1CON.0 = 1

А тут опередили.   smile

Сообщение отредактировал ivan_fd - Чт, 25.09.2014, 23:19
MiXaS Дата: Пт, 26.09.2014, 10:08  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата DAlexV ()
Когда же наши уважаемые коллеги научаться пользоваться Шпротеусом нормально ??? " Беда или эпидемия просто 


У меня были теже проблемы, пока сам не разобрался с протеусом. Собирал инфу по крупицам. Думаю нужно сделать статью, в которой будет описан и проиллюстрирован весь цикл отладки. Какой файл, где его объявить, как сгенерировать, и самое интересное ,как вывести окно отладки кода, программной памяти, eeprom, стем и т.д
Я пока не нашел подобного. Сам я в протеусе слаб, научился только азам, поэтому тоже был бы рад почитать статью на нашем форуме. И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение?

Возможно уже есть такая статья, тогда прощу ссылку, сам хочу почитать.
Спасибо!
ЯНДЕКС Дата: 26.09.2014
ivan_fd Дата: Пт, 26.09.2014, 10:36  |                                                                                                                Сообщение # 22
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В принципе есть очень исчерпывающая инфа по Протеусу.
FAQ (ЧаВО) по PROTEUS для начинающих и не только.
MiXaS Дата: Пт, 26.09.2014, 14:31  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Ну, тогда надо слать всех неумелых на ... казус
DAlexV Дата: Сб, 27.09.2014, 13:11  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата MiXaS ()
Ну, тогда надо слать всех неумелых на ... казус
 Ну послать то можно smile , только на Казусе боюсь узнав про Барсик или отправят на PicBasic.ru или еще куда подальше. Не особо там радуют нас Басиководов. Что касаемо FAQ по Шпроту то тут я полностью согласен с ivan_fd. Прочтение позволяет решить кучу непоняток и граблей. Не заставляю читать полностью всю ветку (у меня терпение кончилось где-то странице на 86 форума) а вот оффлайн версию советую прочитать всю и всем.

Цитата MiXaS ()
И когда в очередной раз подобные форумчане будут обращаться, мы дружно будем давать ссылку, тем самым сами себе задачу облегчим, и у справишающий IQ поднимем. Как Вам такое предложение?
Можно попробовать. Но но 100% быстро не обещаю. Сейчас у меня не самые лучшие времена для творчества.

Удачи  wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
MiXaS Дата: Пн, 29.09.2014, 09:25  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата DAlexV ()
Сейчас у меня не самые лучшие времена для творчества.


Как я Вас понимаю..
dimitriy-bc Дата: Сб, 20.12.2014, 16:15  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

ivan_fdDAlexV, спасибо за разъяснения. В 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
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

И еще раз здравствуйте. Взял за основу вариант предложенный DAlexV, Вместо генератора подключил кнопку. Если я правильно понимаю алгоритм работы таймера 1 через вход С0, то прерывание должно срабатывать при первом положительном перепаде. При включении протеуса когда кнопка разомкнута так и происходит. Но если кнопка была замкнута, то прерывание срабатывает только по второму фронту.
Где и что я не понимаю?
Прикрепления: hhh8W.rar (57.1 Kb)
ivan_fd Дата: Пн, 22.12.2014, 20:52  |                                                                                                                Сообщение # 28
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну так в даташите написано, что приращение происходит по каждому переднему фронту внешнего тактового сигнала.
dimitriy-bc Дата: Вт, 23.12.2014, 10:50  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 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. И нужно ли после компиляции в протоне компилировать в мплабе?
Прикрепления: 4799914.rar (57.8 Kb)

Сообщение отредактировал dimitriy-bc - Вт, 23.12.2014, 11:30
ivan_fd Дата: Вт, 23.12.2014, 16:24  |                                                                                                                Сообщение # 30
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

dimitriy-bc - это конечно Ваше право выбирать как работать с контроллером. Но, как я уже Вам говорил,
для внешнего прерывания есть другой вход.

Теперь по таймеру:
В даташите есть диаграмма:


и если сравнить диаграмму с тем, что показывает Протеус, то видно, что все сходится.



Теперь еще одно замечание.  Зачем Вы синхронизируете внешний тактовый сигнал? (T1SYNC)

Цитата dimitriy-bc ()
С коффами и асмами вроде разобрался.

Зачем Вам в Протеусе АСМ файл??? Не могу понять.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ПРЕРЫВАНИЯ PIC18F452
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: