> Парочка строк на Бейсике, для pic
 Always Green Member is Offline
   Posted: 26-06-2006, 02:28 (post 1, #619814)

Ненавижу Fujitsu за их харды...

Group: Members
Posts: 3274
Warn:0%-----
Господа програмисты, помогите решить проблемку.
Черкните пару строчек на пикбэйсике.
Задача - прочитать уровень сигнала, скажем на PORTA.1 . Если высокий, то выставить третье состояние, скажем на PORTA.2, если низкий, выставить высокий уровень там же.
Очень нужно наладить одну схемку на pic16f628a - заменил рекомендуемые схемой транзисторы и оптопары на имеющиеся под рукой и как результат придется подбирать резисторы и кондеры.

Для освоения Ассемблера я староват, а Бейсик в самый раз. Если не влом, киньте ссылочку с описанием команд пикбейсика, желательно на русском. Поиском что-то не ищется, наверное не те слова в поиск вставляю...
PM Email Poster
Top Bottom
 TAHKEP Member is Offline
 Posted: 26-06-2006, 10:34 (post 2, #619887)

Sowjetische Panzersoldat

Group: Members
Posts: 934
Warn:0%-----
Наверное, смогу написать такое, но только на pic'овском asm'e :( Кроме того, разве у PIC16 можно поставить порт в третье состояние? Его вроде бы в таком случае на вход ставят?
PM Email Poster ICQ
Top Bottom
 Vlad_il Member is Offline
 Posted: 26-06-2006, 11:02 (post 3, #619896)

Intellectuals group

Group: News makers
Posts: 3628
Warn:0%-----
1. Что ты имееш виду под 3-м состоянием?

Насколько я помню PIC-и один из портов можно настрить под аналог тогда на ЦАП-е можно выстовить что хочеш.

Маленький совет: хочеш работать нормально с PIC-ми учи C.
PM Email Poster Users Website MSN
Top Bottom
 TAHKEP Member is Offline
 Posted: 26-06-2006, 11:39 (post 4, #619905)

Sowjetische Panzersoldat

Group: Members
Posts: 934
Warn:0%-----
QUOTE (Vlad_il @ 26-06-2006, 11:02)
Маленький совет: хочеш работать нормально с PIC-ми учи C.
Зачем? Все эти надстройки -- бейсики, С для написания несложных програм на PIC не нужны вообще. Выучить 33 команды PIC'овского ASM гораздо проще и продуктивней, имхо.
PM Email Poster ICQ
Top Bottom
 Vlad_il Member is Offline
 Posted: 26-06-2006, 12:24 (post 5, #619911)

Intellectuals group

Group: News makers
Posts: 3628
Warn:0%-----
Ню-Ню. Смотря какая программа. У нас проги были довольно сложные плюс экран, клавиатура и часы. Плюс с 10-ок аналоговых и дигитальных сенсоров и большое колечество релюшек. Нам не всегда C хатало из за сложных матиматических расчетов с точностью в 10-м знаке после запятой. Частенько начальник на форт переходил.
PM Email Poster Users Website MSN
Top Bottom
 TAHKEP Member is Offline
 Posted: 26-06-2006, 12:55 (post 6, #619920)

Sowjetische Panzersoldat

Group: Members
Posts: 934
Warn:0%-----
Дык я ж написал -- "несложных". Если есть сложная математика -- да, С сильно облегчит жизнь. Но если прога типа поглядеть что на одном порту и что-то сделать на другом -- вполне подходит асм. Кроме того в железках, которые должны активно работать в реальном времени асм имхо тоже предпочтительнее -- точно знаешь, что за команда выполняется в любой момент времени. Ну и это -- иногда довольно "развесистую" прогу нужно утоптать в "маленький" проц.
PM Email Poster ICQ
Top Bottom
 Always Green Member is Offline
 Posted: 26-06-2006, 12:55 (post 7, #619921)

Ненавижу Fujitsu за их харды...

Group: Members
Posts: 3274
Warn:0%-----
QUOTE (Vlad_il @ 26-06-2006, 11:02)
1. Что ты имееш виду под 3-м состоянием?
На выходах без всяких команд третье состояние - "отключен" (высокое сопротивление в обе стороны, к земле и к питанию. К примеру, я подал на выход высокий уровень, потом низкий. Ну а потом хочу отключить вообще нафиг - а если при этом на вход работает, мне пофиг.
QUOTE
Выучить 33 команды PIC'овского ASM гораздо проще и продуктивней, имхо.

С пиками работать практически не собираюсь, просто сейчас надо настроить всего одну неработающую по входам схему.

Экономить память мне тоже ни к чему, посему непроизводительный бейсик мне тоже подходит.
К примеру команда бейсика pause 1000 после компилирования превращается в кучу строчек на ассемблере. Что для полного чайника легче - одна строчка бейсика или куча строчек ассемблерас циклами, обращениями к стекам, регистрам и прочим ужасам программирования :fear2:, и все ради экономии нескольких байт?

Что касается всяких си, паскалей, фортранов и прочих эсперанто, а так же до, ре, ми - на microchip.com есть бесплатный компилятор с picбейсика а как чайнику компилировать си?

TAHKEP, в крайнем случае подойдет и ассемблер, но только в HEX, а то у меня нечем в хекс перевести... (из хекса в ассемблере я могу посмотреть через icprog). Если горишь желание помочь, несмотря на жару, то тогда задание конкретнее - читаем RB1 и RA1. Если на RB1 единица, то на RB6 ноль и наоборот. Если на RA1 единица, то на RB7 ноль и наоборот.
В идеале конечно, мне надо выловить на RA1 наличие-отсутствие импульсов 22кгц, но так сильно напрягать не буду, тем более что не знаю, какой кварц подберу (сейчас 11,0294, а рабочая прошивка рассчитана на 14,31818), да и наверное это лишнее, во всяком случае, на данном этапе...
PM Email Poster
Top Bottom
 TAHKEP Member is Offline
 Posted: 26-06-2006, 18:10 (post 8, #620017)

Sowjetische Panzersoldat

Group: Members
Posts: 934
Warn:0%-----
QUOTE (Always Green @ 26-06-2006, 12:55)
TAHKEP, в крайнем случае подойдет и ассемблер, но только в HEX, а то у меня нечем в хекс перевести...
Качни с Microchip.com Mplab IDE Пригодится имхо в любом случае
QUOTE (Always Green @ 26-06-2006, 12:55)
(из хекса в ассемблере я могу посмотреть через icprog). Если горишь желание помочь, несмотря на жару, то тогда задание конкретнее - читаем RB1 и RA1. Если на RB1 единица, то на RB6 ноль и наоборот. Если на RA1 единица, то на RB7 ноль и наоборот.
На мой непросвещенный вгляд, может быть подойдёт такой код:
CODE
...
InitPORTS               ;  Инициализация портов
   BANKSEL  TRISA       ;  Выбираем банк, в котором нах. TRISA
   MOVLW    B'00000010' ;  Ставим первый канал порта на вход (1) остальные на вывод (0)
   MOVWF    TRISA       ;  Прописываем такую настройку для PORTA
   MOVWF    TRISB       ;  и PORTB
   BANKSEL  PORTA       ;  Возвращаемся в банк, где лежат регистры портов

WORK                    ;  Главный рабочий цикл, сначала проверим PORTA
   BTFSS    PORTA,1     ;  Если на RA1 -- ноль
   GOTO     RA7_1       ;  -- переходин на установку в RA7 единички
   BCF      PORTA,7     ;  -- иначе -- RA7=0
   GOTO     CHKPORTB    ;  Переходим на проверку PORTB

RA7_1
   BSF      PORTA,7     ;  RA7=1

CHKPORTB                ;  Проверка PORTB
   BTFSS    PORTB,1     ;  Если на RB1 ноль
   GOTO     RB6_1       ;  -- переходин на установку в RB6 единички
   BCF      PORTB,6     ;  -- иначе -- RB6=0
   GOTO     WORK        ;  Повторяем опрос портов

RB6_1
   BSF      PORTB,6     ;  RB6=1
   GOTO     WORK        ;  Повторяем опрос портов
...
   END
HEX этого куска
CODE
:020000040000FA
:020000002028B6
:100040008316031302308500860083120313851C78
:100050002B2885132C288517861C30280613272863
:040060000617272830
:00000001FF
P.S. Щас прийдёт ув. Vlad_il и будет громко смеяться :wink:
PM Email Poster ICQ
Top Bottom
 Vlad_il Member is Offline
 Posted: 27-06-2006, 10:09 (post 9, #620317)

Intellectuals group

Group: News makers
Posts: 3628
Warn:0%-----
QUOTE (TAHKEP @ 26-06-2006, 15:10)
P.S. Щас прийдёт ув. Vlad_il и будет громко смеяться :wink:
А вот и не приду. ЗЫ. :diablo:
PM Email Poster Users Website MSN
Top Bottom
 Always Green Member is Offline
 Posted: 27-06-2006, 20:20 (post 10, #620530)

Ненавижу Fujitsu за их харды...

Group: Members
Posts: 3274
Warn:0%-----
TAHKEP, спасибо!
Опробую через неделю - уехал на дачу. Вернулся только потому что там сдох телевизор и надо купить новый.
QUOTE (TAHKEP @ 26-06-2006, 18:10)
CODE
...
InitPORTS               ;  Инициализация портов
   BANKSEL  TRISA       ;  Выбираем банк, в котором нах. TRISA
   MOVLW    B'00000010' ;  Ставим первый канал порта на вход (1) остальные на вывод (0)
   MOVWF    TRISA       ;  Прописываем такую настройку для PORTA
   MOVWF    TRISB       ;  и PORTB
   BANKSEL  PORTA       ;  Возвращаемся в банк, где лежат регистры портов

WORK                    ;  Главный рабочий цикл, сначала проверим PORTA
   BTFSS    PORTA,1     ;  Если на RA1 -- ноль
   GOTO     RA7_1       ;  -- переходин на установку в RA7 единички
   BCF      PORTA,7     ;  -- иначе -- RA7=0
   GOTO     CHKPORTB    ;  Переходим на проверку PORTB

RA7_1
   BSF      PORTA,7     ;  RA7=1

CHKPORTB                ;  Проверка PORTB
   BTFSS    PORTB,1     ;  Если на RB1 ноль
   GOTO     RB6_1       ;  -- переходин на установку в RB6 единички
   BCF      PORTB,6     ;  -- иначе -- RB6=0
   GOTO     WORK        ;  Повторяем опрос портов

RB6_1
   BSF      PORTB,6     ;  RB6=1
   GOTO     WORK        ;  Повторяем опрос портов
...
   END
начиная с метки Work (я так правильно понимаю, что то что InitPORTS, WORK, RA7_1, CHKPORTB, RB6_1 - это всё метки?) практически
все понятно. BTFSS наверное то же самое что "IF то что после меня равно 0" Наверное имеется небольшая описка, в задании если RA1=0, то не RA7=1, а RB7=1.
"Почти понятно" потому что, вроде получается что в любом случае, нольли на входе или единица, все равно выполняется команда
CODE
BCF      PORTх,у


Ну а метка InitPORTS вообще выше моего понимания... То есть если не выполнить инициализацию, порты не будут работать ни на прием ни на отдачу? Это что-то вроде правил этикета, по которым прежде чем взять блюдо со стола надо предложить его другим?
QUOTE
Ставим первый канал порта на вход (1) остальные на вывод (0)
То есть те входы, которые не работают на ввод работают как выходы? А как же ножки, к которым подключен кварц (RA7 и RA6)? Они то и не входы и не выходы?

В общем, вернусь с дачи, буду думать. Зря топик в глюкодром перенесли - тут еще флеймить и флеймить.... :)
PM Email Poster
Top Bottom
 TAHKEP Member is Offline
 Posted: 28-06-2006, 12:37 (post 11, #620737)

Sowjetische Panzersoldat

Group: Members
Posts: 934
Warn:0%-----
QUOTE (Always Green @ 27-06-2006, 20:20)
(я так правильно понимаю, что то что InitPORTS, WORK, RA7_1, CHKPORTB, RB6_1 - это всё метки?)
Да
QUOTE (Always Green @ 27-06-2006, 20:20)
BTFSS наверное то же самое что "IF то что после меня равно 0"
BTFSS расшифровывается как "Bit Test F Skip if Set" т.е. пропустить следующую команду если N-ный бит регистра F равен 1 (т.е. в нашем случае, в зависимости от состояния RA1 или RB1 будет либо выполнена либо пропушена следующая за BTFSS команда GOTO)
QUOTE (Always Green @ 27-06-2006, 20:20)
Наверное имеется небольшая описка, в задании если RA1=0, то не RA7=1, а RB7=1.
Виноват :( Тогда изменяем BCF PORTA,7 на BCF PORTB,7 и BSF PORTA,7 на BSF PORTB,7
QUOTE (Always Green @ 27-06-2006, 20:20)
"Почти понятно" потому что, вроде получается что в любом случае, нольли на входе или единица, все равно выполняется команда BCF PORTх,у
Имхо таки нет :) Пусть на RA1=1 Тогда При проверке BTFSS будет пропущена следующая команда GOTO RA7_1 и выполнена будет команда BCF PORTA,7, а затем (командой GOTO CHKPORTB) будет осуществлён переход на проверку состояния следующего входа. Если же на RA1=0 то GOTO НЕ будет пропущена и будет осуществлён переход на метку RA7_1 и выполнена команда BSF PORTA,7
QUOTE (Always Green @ 27-06-2006, 20:20)
Ну а метка InitPORTS вообще выше моего понимания... То есть если не выполнить инициализацию, порты не будут работать ни на прием ни на отдачу?
По умолчанию в этом pic'е все порты работают как входы. Если Вы будете что-то писать в порт (записью нужных значение в управляющий регистр PORTx) работающий как вход, то на вывод сам он не встанет и изменять своё состояние не будет. Что бы он стал выводом его надо настроить с помощью управляющего региcтра TRISx, установив в соответствующем разряде 0 (ноль). Легко запомнить 1-I-Input, 0-O-Output :wink:
QUOTE (Always Green @ 27-06-2006, 20:20)
Ставим первый канал порта на вход (1) остальные на вывод (0)
То есть те входы, которые не работают на ввод работают как выходы? А как же ножки, к которым подключен кварц (RA7 и RA6)? Они то и не входы и не выходы?
Тут всё немножко сложнее, то чем будут эти ножки проца -- обычными I/O портами или входами импульсов от кварца определяется настройкой источника тактирующего сигнала. Эта настройка задаётся в специальном слове конфигурации проца при программировании или может быть указана в коде программы с помощью команды __CONFIG Тогда при генерации HEX настройки уже будут в этот HEX прописаны
PM Email Poster ICQ
Top Bottom
Topic Options