Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » 12f629 и програмный ШИМ для RGB + управление с энкодера (Проблемы со стеком)
12f629 и програмный ШИМ для RGB + управление с энкодера
buller Дата: Чт, 27.10.2011, 23:03  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 10
Репутация: 0   ±
Замечания:   ±
На сайте с 07.10.2011

Статус: Offline

Это только тестовый вариант программы и тестовый вариант схемы.
Мне нужно узнать почему стек переполняется и как этого избежать.
При написании программ раньше у меня уже возникали проблемы со стеком, но сам я так и не смог их одолеть, поэтому прошу помощи в более продвинутых в этом вопросе людей.
Прикрепления: 12f.rar(16Kb)
ЯНДЕКС Дата: 27.10.2011
ADMIN Дата: Пт, 28.10.2011, 06:13  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1110
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Если вызываешь подпрограмму командой GOSUB, то после этого нужно из нее возвращаться командой RETURN.
У тебя же - вызов через GOSUB, а возврат в какое-то другое место:

GoSub SHIM

SHIM:
PWM GPIO.0, R, 3
PWM GPIO.1, G, 3
'PWM GPIO.5, B, 3
GoTo Main 'Здесь нужно писать return

За счет этого и переполняется стек, поскольку при вызове ПП значение текущего адреса сохраняется в стек, а при возврате извлекается
terrarus Дата: Пт, 28.10.2011, 10:51  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Что-то я совсем не могу понять назначение и принципы функционирования этого устройства.
Что значит "управление с энкодера"?
Можно ли вкратце пояснить как должно работать оно?


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Пт, 28.10.2011, 10:53
buller Дата: Пт, 28.10.2011, 11:33  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Новенький
Сообщений: 10
Репутация: 0   ±
Замечания:   ±
На сайте с 07.10.2011

Статус: Offline

Quote (terrarus)
Что-то я совсем не могу понять назначение и принципы функционирования этого устройства. Что значит "управление с энкодера"? Можно ли вкратце пояснить как должно работать оно?


Конечно все просто. На основе этой схемы будет построен контроллер RGB светодиода, который будет работать в двух режимах.
1й режим это автоматическое плавное изменение цветов из непрерывного спектра
2й режим это выбор какого то одного цвета из спектра

энкодер работает здесь как элемент управления. Крутя его в одну или другую сторону можно или изменять время задержки при смене цветов (если это 1й режим) или выбрать какой то цвет из непрерывного спектра (если это 2й режим)
При подаче питая ничего не работает, пока не будет нажата кнопка енкодера, которая переведет его в 1й режим. При повторном нажатии будет осуществлен переход на 2й режим. И если нажать ее еще раз то контроллер снова перейдет в режим ожидания.

Добавлено (28.10.2011, 11.33.01)
---------------------------------------------
Quote (ADMIN)
Если вызываешь подпрограмму командой GOSUB, то после этого нужно из нее возвращаться командой RETURN. У тебя же - вызов через GOSUB, а возврат в какое-то другое место: GoSub SHIM SHIM: PWM GPIO.0, R, 3 PWM GPIO.1, G, 3 'PWM GPIO.5, B, 3 GoTo Main 'Здесь нужно писать return За счет этого и переполняется стек, поскольку при вызове ПП значение текущего адреса сохраняется в стек, а при возврате извлекается


Но тогда из SHIM она вернется на ту подпрограмму из которой она пришла, а мне нужно чтоб из SHIM возвращалась в main потому что там есть обработка кнопки

А если я добавлю в каждой ПП после команди gosub SHIM команду Return?

Сообщение отредактировал buller - Пт, 28.10.2011, 11:34
ADMIN Дата: Пт, 28.10.2011, 12:10  |                                                                                                                Сообщение # 5
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1110
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (buller)
Но тогда из SHIM она вернется на ту подпрограмму из которой она пришла, а мне нужно чтоб из SHIM возвращалась в main потому что там есть обработка кнопки А если я добавлю в каждой ПП после команди gosub SHIM команду Return?


Так ты после того как вернешься по RETURN из подпрограммы - иди куда хочешь - хоть на Main, хоть куда. Главное, чтобы стек вернулся на уровень вверх, иначе с каждым заходом в ПП SHIM - стек будет углубляться - последствия работы такой неправильной программы - непредсказуемы
buller Дата: Сб, 29.10.2011, 14:13  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Новенький
Сообщений: 10
Репутация: 0   ±
Замечания:   ±
На сайте с 07.10.2011

Статус: Offline

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

Но здесь у меня другая проблема возникла. В Протеусе программа работает, а в реальной схеме нет. Не понятно почему при подаче питания все три цвета горят ярко и с одинаковой интенсивностью и ПИК никак не реагирует на обороты ручки энкодера, как я понимаю не исполняется команда ветвления Select..Case.
При написании вот такой конструкции вместо Select..Case -- все работает отлично. При поворачивании ручки в одну сторону цвета начинают светить ярче а при повороте в другую гаснут.
Code

minus:
r=r+5
g=g+2
b=b+15
return

plus:
r=0
g=0
b=0
return

Почему же не работает Select..Case?
Прикрепления: PWM.dsn(67Kb) · 12f.bas(4Kb)

Сообщение отредактировал buller - Сб, 29.10.2011, 14:13
megavolt85 Дата: Чт, 03.11.2011, 02:56  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 10.01.2010

Статус: Offline

попробуй до Main: вставить coloR=0
Форум Picbasic.ru » Программирование МК » Proton PicBasic » 12f629 и програмный ШИМ для RGB + управление с энкодера (Проблемы со стеком)
Страница 1 из 11
Поиск: