Pic Basic pro для начинающих
|
|
rumun73 |
Дата: Вс, 31.10.2010, 12:38 | Сообщение # 391 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 30.10.2010
Статус:
Offline
|
Эд17 Спасибо, что откликнулись! Таблица истинности прикрепил. Изначально на выводах GP2, GP4, GP5 должны быть единицы (включены подтягивающие резисторы) следовательно задержка равна 12 часам. Что ещё важно, перемычки будут устанавливаться только при выключенном устройстве. То есть контроллеру нужно будет опросить состояние этих выводов один раз и затем в зависимости от их состояния переходить на подпрограммы моргания и таймера задержки.
Лажу на басу только басисты слышат.
Сообщение отредактировал
rumun73 - Вс, 31.10.2010, 12:43
|
|
|
|
Евгений |
Дата: Вс, 31.10.2010, 12:53 | Сообщение # 392 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 07.10.2010
Статус:
Offline
|
Добрый день. нужна помощь помогите у меня в программе протеус работает , а в железе нет то есть работает только кнопка меню а кнопки + - нет . Крыша едет. программа прилагаеться а также протеус схема
|
|
|
|
MasterPic |
Дата: Вс, 31.10.2010, 13:19 | Сообщение # 393 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Quote (rumun73) На выводе GP1 контроллер должен генерировать импульсы секундной длительности (то есть меандр, просто моргать ,что бы визуально было видно, что схема работает). А дальше уже сложнее. На выводе GP0 изначально присутствует лог. единица. Но через определённое время (устанавливаемое джамперами 1 -3) она меняется на три секунды на лог. ноль. Потом весь процесс повторяется заново. С первой частью программы как моргать диодом мне более-менее понятно. Но остальное мне пока не по силам. Прошу у вас помощи. На какие команды смотреть? Как опрашивать состояние джамперов? Может есть какие то подобные готовые примеры? Алгоритм такой: Main: High GPIO.0 ' Проверяем джампер 1: if GPIO.4 = 0 then time = 1 endif Проверяем джампер 2: if GPIO.3 = 0 then time = 2 endif Проверяем джампер 3: if GPIO.2 = 0 then time = 3 endif Потом: Loop1: If time = 1 then PAUSE 1000 endif If time = 2 then PAUSE 2000 endif If time = 3 then PAUSE 3000 endif Low GPIO.0 Pause 3000 Goto Main В общем, смысл такой. Применительно к данному примеру: If gpio.2. = 0 and gpio.3 = 0 and gpio.4 = 0 then time = 2 endif If gpio.2. = 0 and gpio.3 = 0 and gpio.4 = 1 then time = 4 endif и так далее...
Сообщение отредактировал
MasterPic - Вс, 31.10.2010, 13:23
|
|
|
|
Эд17 |
Дата: Вс, 31.10.2010, 17:29 | Сообщение # 394 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.09.2010
Статус:
Offline
|
rumun73, вот пример проги только наверняка не оптимальный скорее для примера и дальнейшей доводки до ума,проблема в том что нужны очень длинные задержки а на их формирование как оказалось уходит уйма программной памяти ,сам не ожидал и получилрсь что даже этот кусок уже не лезет в 12ый пик кроме того так и не догнал как оформить паралельную работу контрольной лампочки,вообще было бы прекрасно если бы подключились "старшие" товарищи а то мы новички далеко не уедем TRISIO = %00111100 'устанавливаем выводы 6,7 на выход остальные на вход i var word 'обьявляем переменную для организации длинных задержек symbol j1 = GPIO.5 'для удобства переименовываем выводы symbol j2 = GPIO.4 'j1-j3,джамперы symbol j3 = GPIO.2 symbol up = GPIO.0 'up-выход управления ключём symbol in = GPIO.1 'ирдикатор работы clear main: 'метка начала программы up = 1 'устанавоиваем 1 на выводе управления if j1=1 and j2=1 and j3=1 then 'если все джампы разомкнуты gosub taim1 'переходим к п/прогр. задержки 12 часов else 'если нет up = 1 'оставляем единицу на выводе управления endif if j1=1 and j2=1 and j3=0 then 'если джамп j3-0 gosub taim2 'переходим к п/прогр. задержки 10 часов else 'если нет up = 1 'оставляем единицу на выводе управления endif goto main end taim1: 'п/прогр. задержки 12 часов For i = 0 to 43200 'цикл от 0 до 43200 по 1 сек т.е 12 часов up = 0 'во время цикла на выводе управления 0 pause 1000 'та самая секунда которую считаем 43200 раз next up = 1 'при выходе из цикла на выводе управления 1 return taim2: for i = 0 to 36000 up = 0 pause 1000 next up = 1 return Добавлено (31.10.2010, 17.29.26) --------------------------------------------- что то не понял куда делись прбелы?
|
|
|
|
rumun73 |
Дата: Вс, 31.10.2010, 18:04 | Сообщение # 395 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 30.10.2010
Статус:
Offline
|
MasterPic, Спасибо, что подключились! Я тоже думал использовать для опроса состояния портов команду IF.. THEN но не знал, что она позволяет опрашивать сразу несколько пинов а не один. Эд17, Вы тут уже столько расписали )) Меня пока хватило только на написание конфигурации, и то наверное не правильно ) @ device PIC12F629,INTRC_OSC_NOCLKOUT,wdt_off,pwrt_on,mclr_on TRISIO = %111100 SYMBOL LED_1HZ = GPIO.0 SYMBOL REBOOT = GPIO.1 symbol JMP1 = GPIO.5 symbol JMP2 = GPIO.3 symbol JMP3 = GPIO.2 OPTION_REG.7 = 1 Main: if JMP1 = 0 then gosub main1 GOTO Main main1: high LED_1HZ PAUSE 1000 LOW LED_1HZ PAUSE 1000 RETURN Всё, что после метки к основной программе не имеет отношения - это просто я проверял.. Мне тоже не понятно, как совместить работу двух подпрограмм одновременно. Я экспериментировал с двумя семисегментниками - что бы один выводил цифры а другой буквы одновременно. Но неполучилось.
Лажу на басу только басисты слышат.
|
|
|
|
Эд17 |
Дата: Вс, 31.10.2010, 18:37 | Сообщение # 396 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.09.2010
Статус:
Offline
|
rumun73, вообще если верить даташиту регистр OPTION после сбросов весь устанавливается в 1, поэтому подтягивающие резисторы уже подключены. А у вас со строкой @ device PIC12F629,INTRC_OSC_NOCLKOUT,wdt_off,pwrt_on,mclr_on компилировалось нормально? У меня почему то компилятор ругается. Я тоже пытаюсь что то сделать с 12 пиком но с моим опытом памяти не на что не хватает . Если возникнут какие то идеи или вопросы пишите надо попытаться добить тему. MasterPic посоветовал но это только опрос, а дальше то как? интуитивно чую надо бы применить имеющиеся таймеры но как с ними работать так и не понял,вообще было бы хорошо создать отдельную ветку для обсуждения работы с переферией: таймерами, прерываниями и пр.
|
|
|
|
rumun73 |
Дата: Вс, 31.10.2010, 18:45 | Сообщение # 397 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 30.10.2010
Статус:
Offline
|
Эд17 Скомпиллировалось всё нормально. Про регистр OPTION мне ничего неизвестно (я вообще не знаю что это такое - нашёл такую запись в каком то примере). У меня есть программа на асемблере для подобного устройства (там только две ножки установки и внешний кварц) но я там вообще ничего не понимаю ((
Лажу на басу только басисты слышат.
|
|
|
|
Эд17 |
Дата: Вс, 31.10.2010, 20:23 | Сообщение # 398 |
Группа:
Пользователи
Ранг:
Начал соображать
Сообщений:
19
Замечания:
±
На сайте с 16.09.2010
Статус:
Offline
|
rumun73, Да асм это не для начинающих а про внутренннюю структуру мк я бы посоветовал почитать по началу туго доходит но без этого ни как а для возникающих по ходу вопросов есть форум
|
|
|
|
Alexej79 |
Дата: Сб, 06.11.2010, 16:29 | Сообщение # 399 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Всем привет. Подскажите мне начинающему почему при использовании кнопки с камнем 12f629 при подключении её на вывод порта GP1 ничего не получается. А при подключении кнопки к другим выводам всё работает как запланировал?
|
|
|
|
ivan_fd |
Дата: Сб, 06.11.2010, 18:06 | Сообщение # 400 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Показывайте код инициализации камня, тады можно сказать в чем проблема.
|
|
|
|
Alexej79 |
Дата: Сб, 06.11.2010, 18:16 | Сообщение # 401 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Quote (ivan_fd) Показывайте код инициализации камня Что это значит? У меня ещё вопрос появился. Пытаюсь прилепить две кнопки при нажатии первой переменная Х увеличивается на еденицу а при нажатии на вторую наоборот уменьшается. После чего идёт проверка переменной Х если она больше 0 то загорается светодиод. Ну что то не получается где ошибаюсь? X var Byte X = 0 Led var GPIO.0 main: IF X > 0 THEN HIGH LED ELSE LOW Led Endif If GPIO.4 = 1 Then x = x + 1 If GPIO.5 = 1 Then x = x - 1 Goto main End Как можно в режиме отладки посмотреть чему равна переменная Х?
|
|
|
|
ivan_fd |
Дата: Сб, 06.11.2010, 19:37 | Сообщение # 402 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Alexej79) Что это значит? Лучше весь код давайте. Quote (Alexej79) Ну что то не получается где ошибаюсь? С первого взгляда все в норме. Только после опроса кнопки желательно добавить задержку ( Антидребезг )
|
|
|
|
Alexej79 |
Дата: Сб, 06.11.2010, 19:50 | Сообщение # 403 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Пробывал я паузу ставить, всё равно не прёт. Только по одному разу получается. Два раза на одну кнопку жму свет горит потом на другую тоже два раза, тухнит. пробую опять загорается но уже не тухнит.
|
|
|
|
ivan_fd |
Дата: Сб, 06.11.2010, 19:52 | Сообщение # 404 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ну так давайте код посмотрим.
|
|
|
|
Alexej79 |
Дата: Сб, 06.11.2010, 20:23 | Сообщение # 405 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Quote (ivan_fd) Ну так давайте код посмотрим. Ни как ни могу понять что за код? Я всё это прогоняю в Протеусе в само железо я не заливаю. Где код взять?
|
|
|
|