ПРЕРЫВАНИЯ PIC18F452
|
|
dimitriy-bc |
Дата: Вт, 23.09.2014, 11:23 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Всем доброго времени суток. Мне надо сформировать прерывания по входу RC0. В железе еще не включал, а в протеусе такая непонятка. Прерывания происходят по второму перепаду хотя вроде все настроил по первому.
T3CON = 0 T2CON = 0 T1CON = %00000110 T0CON = 0 TMR1L = 255: TMR1H = 255 T1CON.0 = 1 IPR1.0 = 1 PIE1.0 = 1 INTCON1.6 = 1 INTCON1.7 = 1 Я что-то не включил, или это глюк протеуса?
|
|
|
|
ivan_fd |
Дата: Вт, 23.09.2014, 23:05 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
По какому входу RC0? По какому перепаду? Вы включили прерывания по переполнению таймера 1. А сам вход RC0 не имеет никаких внешних прерываний.
|
|
|
|
dimitriy-bc |
Дата: Ср, 24.09.2014, 11:09 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Может я что-то не понял, но в датшит прочитал. RC0/T1OSO/T1CKI RC0 I/O ST Digital I/O. T1OSO O Timer1 oscillator output. T1CKI I ST Timer1/Timer3 external clock input.
bit 1 TMR1CS: Timer1 Clock Source Select bit 1 = External clock from pin RC0/T1OSO/T13CKI (on the rising edge) 0 = Internal clock (FOSC/4)
Если я где-то ошибаюсь, поясните где.
|
|
|
|
brown |
Дата: Ср, 24.09.2014, 12:33 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Прерывания по перепаду по порту RB0/1/2. Если Цитата ivan_fd ( ) Вы включили прерывания по переполнениютаймера 1 и тактируете таймер внешним клокомЦитата dimitriy-bc ( ) bit 1 TMR1CS: Timer1 Clock Source Select bit1 = External clock from pin RC0/T1OSO/T13CKI (on the rising edge) то возможно есть некая задержка в несколько тактов - нужно хорошо покурить даташит, тем более он есть на русском. Цитата dimitriy-bc ( ) Прерывания происходят по второму перепаду хотя вроде все настроил по первому.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
dimitriy-bc |
Дата: Ср, 24.09.2014, 14:03 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата brown ( ) то возможно есть некая задержка в несколько тактов - нужно хорошо покурить даташит, тем более он есть на русском. Задержка не в тактах, а именно в количестве фронтов. Даташит на русском читал. Текст из инглиша привел только для того чтоб указать конкретные места из оригинала. А вообще я ингишем на ВВВЫЫЫ.
Сообщение отредактировал
dimitriy-bc - Ср, 24.09.2014, 14:10
|
|
|
|
brown |
Дата: Ср, 24.09.2014, 14:59 | Сообщение # 6 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
По поводу задержек: нашел только это Цитата Время перехода на обработку прерываний от внешних источников (прерывания INT, изменение уровня сигнала на входах PORTB и др.) составляет три-четыре цикла команд. Время перехода не зависит от типа выполняемой команды (однословная или двухсловная).
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
dimitriy-bc |
Дата: Ср, 24.09.2014, 15:28 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
brown, спасибо. Но как говорится, это не спасет отца русской демократии . Сейчас этот станок собираю. Буду надеется, что в железе поведет себя по другому. В противном случае попробую решить задачу программно.
Сообщение отредактировал
dimitriy-bc - Ср, 24.09.2014, 15:34
|
|
|
|
MiXaS |
Дата: Ср, 24.09.2014, 16:33 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
dimitriy-bc, Я прошу прощения, но уточните, что именно Вы хотите?! Потому как RC0 не имеет входа для внешнего прерывания. Такие прерывания находятся на входах RB0,RB1,RB2. Или Вы настраиваете таймер на прерывание, и когда они произойдет провереяете состояние RC0??? Прошу обратить ваше внимание, на то, что камень достаточно много имеет источников прерывания, а также систему приоритета прерывания. Если Вы хотите чтобы все работало, настраивате все регисты прерываний. Если Вам что-то не нужно, то пишите, что регистр.4 = 0 (или 1). Так точно будет работать. Если вы не пропишите регистры протон будет использовать их по умолчанию, а там неизвестна конфигурация. Точнее можно узнать, но проще прописать все регистры.
Цитата dimitriy-bc ( ) RC0/T1OSO/T1CKI RC0 I/O ST Digital I/O. T1OSO O Timer1 oscillator output. T1CKI I ST Timer1/Timer3 external clock input.
Здесь видно, что нога контроллера может быть ВХОДОМ/ВЫХОДОМ цифровым, можно настроить этуногу для внешнего тактирования timer1, или наоборот снять с него источник тактов.
Что вы хотите, конкретнее. Из вашего кода понять вообше ничего нельзя.
|
|
|
|
dimitriy-bc |
Дата: Ср, 24.09.2014, 17:31 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
MiXaS, я действительно использую ногу С0 и таймер1 для прерываний. Похожие варианты делал неоднократно и все работало. Использую именно эту ногу только потому, что так удобно было при разводке платы. Это единственное прерывание в программе, поэтому все остальные прерывания запрещены. Мне нужно чтоб при основной работе станка фронт по входу С0 останавливал приводы. Можно конечно выложить всю программу, но она, как для меня, очень большая и сыровата. Комментариев ровно столько чтоб разобраться самому. Приведу только настройки регистров. Предварительные установки: TRISA = %11111111 TRISB = %00000000 TRISC = %00011111 TRISD = %00001010 TRISE = %00000111 ' PIE1 = 0 PIE2 = 0 CCP1CON = 0 CCPR1L = 0 CCPR1H = 0 CCP2CON = 0 CCPR2L = 0 CCPR2H = 0 T3CON = 0 T2CON = 0 T1CON = %00000110 T0CON = 0 ' INTCON1 = %00000000 INTCON2 = %10000000 INTCON3 = %00000000 RCON = %10000000 PIE1 = 0 PIE2 = 0 PIR1 = 0 PIR2 = 0 IPR1 = 0 IPR2 = 0 ... ... TMR1L = 255 TMR1H = 255 INTCON1.6 = 1 INTCON1.7 = 0... ...
'-------------------------- прерывания-------------------------- Int_Label: Context Save If PIR1.0 = 1 Then BITS_STOP.0 = 1 End If ' PIR1.0 = 0: TMR1L = 255: TMR1H = 255 Context Restore... ... Установки при пуске станка в основную работу. TMR1L = 255: TMR1H = 255 T1CON.0 = 1 IPR1.0 = 1 PIE1.0 = 1 INTCON1.6 = 1 INTCON1.7 = 1 Если у Вас будет желание, могу выложить всю программу с протеусом.
|
|
|
|
ivan_fd |
Дата: Ср, 24.09.2014, 22:04 | Сообщение # 10 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
dimitriy-bc, говорю Вам еще раз. Нету на ноге RC0 прерываний.!!!!!!! Никаких фронтов и спадов.
|
|
|
|
dimitriy-bc |
Дата: Чт, 25.09.2014, 11:15 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата ivan_fd ( ) dimitriy-bc, говорю Вам еще раз. Нету на ноге RC0 прерываний.!!!!!!! Никаких фронтов и спадов. ivan_fd, может Вы и правы. Но как Вы объясните работу микроконтроллера в прикреплении. Единственное, что не хочет нормально работать предделитель. Если подскажите, буду очень благодарен!
|
|
|
|
ivan_fd |
Дата: Чт, 25.09.2014, 15:07 | Сообщение # 12 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
А что здесь объяснять, так как уже Вам говорили. Срабатывает прерывание по переполнению таймера 1. На вход RC0 подается внешняя генерация, таймер тикает, дошел до 65535, происходит прерывание по переполнению таймера.
А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON.
Вот и все.
Сообщение отредактировал
ivan_fd - Чт, 25.09.2014, 15:22
|
|
|
|
dimitriy-bc |
Дата: Чт, 25.09.2014, 15:17 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата dimitriy-bc ( ) Единственное, что не хочет нормально работать предделитель. Это и есть проблема.
|
|
|
|
ivan_fd |
Дата: Чт, 25.09.2014, 15:24 | Сообщение # 14 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON.
|
|
|
|
dimitriy-bc |
Дата: Чт, 25.09.2014, 15:35 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата ivan_fd ( ) А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON. В показательном (hhh) варианте и моем рабочем предделитель не используется. Но в рабочем такое впечатление, что T1CON включил предделитель 1:2. Если я пытаюсь включить предделитель в hhh, то деление ни на два ни на 4 ни на... не происходит. Вот и вопрос, то ли что-то не довключил, то ли протеус глючит.
|
|
|
|