Pic Basic pro для начинающих
|
|
contra |
Дата: Сб, 08.05.2010, 11:45 | Сообщение # 241 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
Привет всем! Собрал счётчик импульсов на PIC16F84. Сначала работает нормально, а потом перестаёт работать (индикатор собранный на 7- сегментном индикаторе гаснет) подскажите пожалуйста в чём дело? Причём вырубается через разные промежутки времени, после выключения - включения опять какое-то времяработает нормально.
|
|
|
|
contra |
Дата: Сб, 15.05.2010, 13:33 | Сообщение # 242 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
с предыдущим вопросом разобрался, но появился другой почему я не могу увеличить скорость счёта? Если кнопка переключается со скоростью более чем 1 герц (приблизительно) например 10 гц то, скорость счёта остаётся как и при 1 гц вот код прораммы:
|
|
|
|
ADMIN |
Дата: Сб, 15.05.2010, 20:05 | Сообщение # 243 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Во-первых, в прерывании у вас стоят паузы в миллисекунды, а также выполняются какие-то действия - это занимает время. Тактирование TMR0 - внутренне (option_reg.5 = 0) - один раз за 256 мкС. Возможно, накапливается ошибка здесь. Поможет отладка. В MPLAB, например. Я бы, например, в прерывании ставил флаг, а в теле программы проверял его и при выполнении условия, выполнял бы те действия, которые вы поместили в прерывание.. Так будет правильней. ПП прерывания не предназначена для расчетов и особенно задержек. Тогда уж и схемку можно глянуть...заодно. INTCON = %00100000 ' Разрешить прерывания по переполнению TMR0 - эта строчка - лишняя. Зачем? ведь далее вы указываете это: INTCON = %10100000 ' Включить прерывания по переполнению TMR0
|
|
|
|
contra |
Дата: Вс, 16.05.2010, 16:22 | Сообщение # 244 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
Спасибо, ADMIN Попробую эти рекомендации, но на всякий случай вот схема:
|
|
|
|
contra |
Дата: Пн, 17.05.2010, 09:55 | Сообщение # 245 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
что то не получилось прикрепить вот ещо: Добавлено (17.05.2010, 08.17.02) ---------------------------------------------
Quote (ADMIN) Я бы, например, в прерывании ставил флаг, а в теле программы проверял его и при выполнении условия, выполнял бы те действия, которые вы поместили в прерывание. Я не знаю, как это делается, а OPTION_REG поставил такое значение: = %00000110 - скорость счёта увеличилась, но в железе (В PROTEUS- нормально) появилось мерцание индикатора (все разряды) Что может быть? Добавлено (17.05.2010, 09.51.58) --------------------------------------------- ADMIN, Спасибо!!! Уменьшил паузы до 1 милисек., а OPTION_REG восстановил до начального значения (мерцание индикатора пропало) - скорость счета увеличилась до необходимой, хотя наверное, можно было-бы увеличить ещё. Добавлено (17.05.2010, 09.55.06) --------------------------------------------- Спасибо за бескорыстную помощь ADMIN,
|
|
|
|
ADMIN |
Дата: Пн, 17.05.2010, 17:13 | Сообщение # 246 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Да без проблем, обращайтесь. Все-таки, уберите из прерываний операции. Устанавливайте там флаг, а в основной проверяйте его.
|
|
|
|
contra |
Дата: Пт, 21.05.2010, 15:29 | Сообщение # 247 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
ADMIN, поясните пожалуйста вот эти действия (Все-таки, уберите из прерываний операции. Устанавливайте там флаг, а в основной проверяйте его.) Что-то я, как ни пытался -ничего не понял. Если можно поясните на моём примере как должна выглядеть П.П. прерывания. Спасибо.
|
|
|
|
l2_star |
Дата: Вс, 30.05.2010, 15:03 | Сообщение # 248 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
25
Замечания:
±
На сайте с 12.04.2010
Статус:
Offline
|
нашел статейку в инете мне не вериться что будет работать. а в протеусе одни ошибки помогите разобраться Бегущий текст на светодиодной матрице 7x5. Схема подключения очень проста и пояснять практически нечего. Ножка А4 подключена не как все из порта А т.к. это выход с открытым коллектором, и когда на неё подаёшь "1", то она "висит" в воздухе. Поэтому надо её принудительно к плюсу подключить. На матрице красным показаны номера ног. На вашей матрице может быть не так! Программа не сложнее схемы. Прога выводит движущийся текст "С НОВЫМ ГОДОМ" PicBasic: TRISA=%00000000 TRISB=%00000000 dannie var byte strochki var byte n var byte m var byte x var byte c var byte strochki = 126 : m = 0 : c = 1 odin for x = 1 to 70 for n = m + 6 to m step -1 read n , dannie porta = dannie portb = strochki strochki = strochki - c c = c * 2 next n strochki = 126 : c = 1 porta=%00000000 portb=%11111111 next x m = m + 1 if m = 65 then m = 0 goto odin '-------------------------- data 0,0,0,0, 0 data 14,17,17 'C data 0, 0, 0, 0 data 31,4,31 'H data 0 data 14,17,14 'O data 0 data 31,21,10 'B data 0 data 31,20,8,0,31 'bI data 0 data 31,2,4,2,31 'M data 0, 0, 0, 0 data 31,1,1 'G data 0 data 14,17,14 'O data 0 data 24,14,9,14,24 ' D data 0 data 14,17,14 'O data 0 data 31,2,4,2,31 'M data 0, 0 '-----------------------------
|
|
|
|
ADMIN |
Дата: Вс, 30.05.2010, 16:24 | Сообщение # 249 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
contra, Вот основной принцип. У меня сейчас не начем проверить программу, даже редактора нет подходящего. Приходится в блокноте писать. Code
@ device pic16F84A,xt_osc define OSC 4 Cnt var word Digit var byte 'пременная-указатель(если Digit=0, то переменной присваивается 'значение первой константы, если Digit= 1 то значение второй константы и т.д. Pattern var byte 'переменная для хранения 7-ми сегментного кода odin var byte dva var byte tri var byte isrbit var bit 'Объявим переменную (битовую), клторая будет указывать программе на то, что произошло прерывание chetire var byte 'добавлено Digit1 var porta.0 Digit2 var porta.1 Digit3 var porta.2 digit4 var porta.3 Pbutton var portb.7 i var byte
TRISA = 0 TRISB = $80 'включить все ножки portb нв выход (кроме portb.7- на вход, к нему подключим кнопу) isrbit = 0 '************** Преывания *****************
INTCON = %00100000 ' Разрешить прерывания по переполнению TMR0 OPTION_REG = %00000111 ' Подключить предделитель с коэфф 1:256 TMR0 = 155
on interrupt goto ISR ' При возникновении прерывания перейти на метку ISR INTCON = %10100000 ' Включить прерывания по переполнению TMR0 'cnt = 0 Loop: Cnt = 0 NXT: i = 0 'button Pbutton,0,0,100,i,0,nxt pause 2
if portb.7 = 1 then nxt cnt = cnt + 1 ' инкрементируем переменную счёта digit = cnt dig 3 gosub convert chetire = pattern Digit = cnt dig 2 gosub convert odin = pattern digit = cnt dig 1 gosub convert dva = pattern digit = cnt dig 0 gosub convert tri = pattern for i = 1 to 10000 pause 1
next i If cnt = 9999 then loop if isrbit = 1 then 'Если было прерывание, то isrbit = 0 'сбросим в ноль! gosub subisr 'и перейдем на подпрограмму обработки Endif goto NXT
disable Isr: TMR0 = 155 isrbit = 1 'Установим флаг, сигнализирующий о том, что было прерывание INTCON.2 = 0 resume enable convert: lookup digit,[$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F],pattern pattern = pattern^$FF return
subisr: 'Подпрограмма, которая должна выполняться после факта прерывания portb = odin DIGIT4 = 0 Digit3 = 0 digit2 = 0 digit1 = 1 pause 4 digit1 = 0 portb = dva DIGIT4 = 0 digit3 = 0 digit2 = 1 digit1 = 0 pause 4 digit2 = 0 portb = tri DIGIT4 = 0 digit3 = 1 digit2 = 0 digit1 = 0 pause 4 digit3 = 0 PORTB = chetire digit4 = 1 digit3 = 0 digit2 = 0 digit1 = 0 pause 4 digit4 = 0 return
end
l2_star, Что за ошибки в протеусе? Может, скрин приложить стоит?
|
|
|
|
l2_star |
Дата: Вс, 30.05.2010, 23:56 | Сообщение # 250 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
25
Замечания:
±
На сайте с 12.04.2010
Статус:
Offline
|
я про свое сообщение а не про счетчик
|
|
|
|
ADMIN |
Дата: Пн, 31.05.2010, 02:17 | Сообщение # 251 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Quote нашел статейку в инете мне не вериться что будет работать. а в протеусе одни ошибки помогите разобраться Ну я про твое сообщение и спрашиваю. Там же выделено, к кому обращаюсь.
|
|
|
|
Семеркин |
Дата: Пн, 31.05.2010, 21:18 | Сообщение # 252 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 31.05.2010
Статус:
Offline
|
ПОМОГИТЕ ! доброго времени суток форумчане. задумал сделать авто GSM сигналку на 16F628А пике. сделал железо - программатор и саму сигналку прочитал учебник по PIC BASIC? поморгал светодиодами в разных вариантах, слодовательно все железо работает, но есть одна проблема: не могу организовать на микроконтроллере опрос наличия напряжения на выводе по книге команда BUTTON подходит, но при смене всех параметров команда контроллер никак не хочет реагировать на состояние ключа. помогите как решить головоломку и победить наконец этот PIC злой.
|
|
|
|
Dmitry |
Дата: Пн, 31.05.2010, 22:24 | Сообщение # 253 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Quote (Семеркин) но есть одна проблема: не могу организовать на микроконтроллере опрос наличия напряжения на выводе А зачем Button? Може просто if PORTA.0 = 1 then ... Вместо PORTA.0 подставить требуемый вывод.
|
|
|
|
Семеркин |
Дата: Пн, 31.05.2010, 22:49 | Сообщение # 254 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 31.05.2010
Статус:
Offline
|
так пробывал не реагирует на состояние вывода, может вывод нужно какимто образом сконфигурировать или подготовить к команде if porta.0=1 then...
|
|
|
|
Dmitry |
Дата: Вт, 01.06.2010, 00:46 | Сообщение # 255 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Ну так как можно не видя программы понять как сконфигурированы порты. Судя по пику, вам надо отключить компараторы - в начале программы написать CMCON=7 тогда порты скорее всего заработают
|
|
|
|