ПРЕРЫВАНИЯ PIC18F452 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 3123»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ПРЕРЫВАНИЯ PIC18F452
ПРЕРЫВАНИЯ PIC18F452
dimitriy-bc Дата: Вт, 23.09.2014, 11:23  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Я что-то не включил, или это глюк протеуса?
ЯНДЕКС Дата: 23.09.2014
ivan_fd Дата: Вт, 23.09.2014, 23:05  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

По какому входу RC0? По какому перепаду? Вы включили прерывания по переполнению
таймера 1.  А сам вход RC0 не имеет никаких внешних прерываний.


Меня все время преследуют умные мысли...но я быстрее!!!
dimitriy-bc Дата: Ср, 24.09.2014, 11:09  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата brown ()
то возможно есть некая задержка в несколько тактов - нужно хорошо покурить даташит, тем более он есть на русском.

Задержка не в тактах, а именно в количестве фронтов. Даташит на русском читал. Текст из инглиша привел только для того чтоб указать конкретные места из оригинала. А вообще я ингишем на ВВВЫЫЫ.

Сообщение отредактировал dimitriy-bc - Ср, 24.09.2014, 14:10
brown Дата: Ср, 24.09.2014, 14:59  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 335
Репутация: 10   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

По поводу задержек: нашел только это 
Цитата
Время перехода на обработку прерываний от внешних источников (прерывания INT, изменение уровня сигнала на
входах PORTB и др.) составляет три-четыре цикла команд. Время перехода не зависит от типа выполняемой команды
(однословная или двухсловная).


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
dimitriy-bc Дата: Ср, 24.09.2014, 15:28  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

brown,  спасибо. Но как говорится, это не спасет отца русской демократии  cry .
Сейчас этот станок собираю. Буду надеется, что в железе поведет себя по другому. В противном случае попробую решить задачу программно.

Сообщение отредактировал dimitriy-bc - Ср, 24.09.2014, 15:34
MiXaS Дата: Ср, 24.09.2014, 16:33  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 613
Репутация: 26   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

dimitriy-bc,  говорю Вам еще раз. Нету на ноге RC0 прерываний.!!!!!!! Никаких фронтов и спадов.

Меня все время преследуют умные мысли...но я быстрее!!!
dimitriy-bc Дата: Чт, 25.09.2014, 11:15  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата ivan_fd ()
dimitriy-bc,  говорю Вам еще раз. Нету на ноге RC0 прерываний.!!!!!!! Никаких фронтов и спадов.

ivan_fd, может Вы и правы. Но как Вы объясните работу микроконтроллера в прикреплении. Единственное, что не хочет нормально работать предделитель. Если подскажите, буду очень благодарен!
Прикрепления: hhh.rar(57Kb)
ivan_fd Дата: Чт, 25.09.2014, 15:07  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А что здесь объяснять, так как уже Вам говорили.
Срабатывает прерывание по переполнению таймера 1. На вход RC0 подается внешняя генерация, таймер тикает, дошел до 65535, происходит прерывание по переполнению таймера.

А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON.

Вот и все.


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Чт, 25.09.2014, 15:22
dimitriy-bc Дата: Чт, 25.09.2014, 15:17  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата dimitriy-bc ()
Единственное, что не хочет нормально работать предделитель.

Это и есть проблема.
ivan_fd Дата: Чт, 25.09.2014, 15:24  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON.

Меня все время преследуют умные мысли...но я быстрее!!!
dimitriy-bc Дата: Чт, 25.09.2014, 15:35  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 190
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата ivan_fd ()
А пред делитель Вы и вовсе не используете. Посмотрите внимательно на регистр T1CON.

В показательном (hhh) варианте  и моем рабочем предделитель не используется. Но в рабочем такое впечатление, что T1CON включил предделитель 1:2. Если я пытаюсь включить предделитель в hhh, то деление ни на два ни на 4 ни на... не происходит. Вот и вопрос, то ли что-то не довключил, то ли протеус глючит.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » ПРЕРЫВАНИЯ PIC18F452
Страница 1 из 3123»
Поиск: