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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Pic Basic pro для начинающих
contra Дата: Сб, 08.05.2010, 11:45  |                                                                                                                Сообщение # 241
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

Привет всем! Собрал счётчик импульсов на PIC16F84. Сначала работает нормально, а потом перестаёт работать (индикатор собранный на 7- сегментном индикаторе гаснет) подскажите пожалуйста в чём дело? Причём вырубается через разные промежутки времени, после выключения - включения опять какое-то времяработает нормально.
ЯНДЕКС Дата: 08.05.2010
contra Дата: Сб, 15.05.2010, 13:33  |                                                                                                                Сообщение # 242
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

с предыдущим вопросом разобрался, но появился другой
почему я не могу увеличить скорость счёта? Если кнопка переключается со скоростью более чем 1 герц (приблизительно)
например 10 гц то, скорость счёта остаётся как и при 1 гц
вот код прораммы:
Прикрепления: AAASS.pbp (2.7 Kb)
ADMIN Дата: Сб, 15.05.2010, 20:05  |                                                                                                                Сообщение # 243
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

Спасибо, ADMIN Попробую эти рекомендации, но на всякий случай вот схема:
Прикрепления: chetcik_impulso.dsn (93.8 Kb)
contra Дата: Пн, 17.05.2010, 09:55  |                                                                                                                Сообщение # 245
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 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,

Прикрепления: chetcik_impulso.bmp (88.8 Kb)
ADMIN Дата: Пн, 17.05.2010, 17:13  |                                                                                                                Сообщение # 246
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да без проблем, обращайтесь. Все-таки, уберите из прерываний операции. Устанавливайте там флаг, а в основной проверяйте его.
contra Дата: Пт, 21.05.2010, 15:29  |                                                                                                                Сообщение # 247
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

ADMIN, поясните пожалуйста вот эти действия (Все-таки, уберите из прерываний операции. Устанавливайте там флаг, а в основной проверяйте его.) Что-то я, как ни пытался -ничего не понял. Если можно поясните на моём примере как должна выглядеть П.П. прерывания. Спасибо.
l2_star Дата: Вс, 30.05.2010, 15:03  |                                                                                                                Сообщение # 248
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 12.04.2010

Статус: Offline

нашел статейку в инете мне не вериться что будет работать.
а в протеусе одни ошибки помогите разобраться

Бегущий текст на светодиодной матрице 7x5.
Схема подключения очень проста и пояснять практически нечего.
Ножка А4 подключена не как все из порта А т.к. это выход с
открытым коллектором, и когда на неё подаёшь "1", то она "висит"
в воздухе. Поэтому надо её принудительно к плюсу подключить.


На матрице красным показаны номера ног. На вашей матрице
может быть не так!

Программа не сложнее схемы. Прога выводит движущийся
текст "С НОВЫМ ГОДОМ" smile

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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 12.04.2010

Статус: Offline

я про свое сообщение а не про счетчик
ADMIN Дата: Пн, 31.05.2010, 02:17  |                                                                                                                Сообщение # 251
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote
нашел статейку в инете мне не вериться что будет работать.
а в протеусе одни ошибки помогите разобраться

Ну я про твое сообщение и спрашиваю. Там же выделено, к кому обращаюсь.

ЯНДЕКС Дата: 31.05.2010
Семеркин Дата: Пн, 31.05.2010, 21:18  |                                                                                                                Сообщение # 252
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 31.05.2010

Статус: Offline

ПОМОГИТЕ !
доброго времени суток форумчане. задумал сделать авто GSM сигналку на 16F628А пике.
сделал железо - программатор и саму сигналку
прочитал учебник по PIC BASIC? поморгал светодиодами в разных вариантах, слодовательно все железо работает,
но есть одна проблема: не могу организовать на микроконтроллере опрос наличия напряжения на выводе
по книге команда BUTTON подходит, но при смене всех параметров команда контроллер никак не хочет реагировать на состояние ключа.
помогите как решить головоломку и победить наконец этот PIC злой.
Dmitry Дата: Пн, 31.05.2010, 22:24  |                                                                                                                Сообщение # 253
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (Семеркин)
но есть одна проблема: не могу организовать на микроконтроллере опрос наличия напряжения на выводе

А зачем Button? Може просто if PORTA.0 = 1 then ...
Вместо PORTA.0 подставить требуемый вывод.
Семеркин Дата: Пн, 31.05.2010, 22:49  |                                                                                                                Сообщение # 254
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 31.05.2010

Статус: Offline

так пробывал не реагирует на состояние вывода,
может вывод нужно какимто образом сконфигурировать или подготовить к команде if porta.0=1 then...
Dmitry Дата: Вт, 01.06.2010, 00:46  |                                                                                                                Сообщение # 255
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Ну так как можно не видя программы понять как сконфигурированы порты.
Судя по пику, вам надо отключить компараторы - в начале программы написать

CMCON=7

тогда порты скорее всего заработают

Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Поиск: