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

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

Статус: Offline

Quote (ADMIN)
Во-первых, есть ли даташит на энкодер?

Quote (ivan_fd)
Как Вы подключили Энкодер, схема?

Нет, даташита нет схемы. Я ссылаюсь вот на эту статейку

Quote (ADMIN)
что видно в протеусе при отладке?

В протеусе не пробывал делаю сразу на стэнде, работаю на прямую с железом.

Quote (ADMIN)
В-третьих, чтобы обрабатывалось нужное прерывание, правильно, нужно ввести проверку условий:

За этот совет плюсик, попробую по такому методу.

ivan_fd, За код спасибо буду разбераться.

Я методом проб обнаружил что возможно проблема в "дребезге" контактов. Думаю что можно придумать.
И так же выяснил что прерывание по INT работают у меня по обеим фронтам, по переднему и заднему. Хотя строка Option_Reg.6 = 1 в коде присутствует.
ЯНДЕКС Дата: 14.06.2011
ivan_fd Дата: Вт, 14.06.2011, 22:32  |                                                                                                                Сообщение # 632
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Скорее всего проблема в дребезге, он ведь механический.
Alexej79 Дата: Ср, 15.06.2011, 10:35  |                                                                                                                Сообщение # 633
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 71
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Quote (ivan_fd)
Скорее всего проблема в дребезге

Так оно и было. Проблема была в дребезге. Подсоидинил как по схеме выше всё заработало чики чики.
Спасибо за помощь.
Rex72 Дата: Пт, 17.06.2011, 13:48  |                                                                                                                Сообщение # 634
Группа: Проверенные
Ранг:  Новенький
Сообщений: 3
Репутация: 0   ±
Замечания:   ±
На сайте с 07.06.2011

Статус: Offline

Здравствуйте
Вот разбираю оператор LCDOUT.
$FE - это предвесник команды? тогда почему FE?
holyuser Дата: Пт, 17.06.2011, 23:11  |                                                                                                                Сообщение # 635
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (Rex72)
почему FE?


Так надо.
Читать даташиты тоже не вредно.
Rex72 Дата: Сб, 18.06.2011, 14:04  |                                                                                                                Сообщение # 636
Группа: Проверенные
Ранг:  Новенький
Сообщений: 3
Репутация: 0   ±
Замечания:   ±
На сайте с 07.06.2011

Статус: Offline

даташиты чего?, если жки, то читал
команда/данные различаются по RS
Выставили RS=0, выставили косанду (ну напр. $18-сдвиг экрана влево), и клацнули сигналом Е.
где я не понял?
сбственно всё работает - схемку своял, програмку написал. Понять хочется.
На асемблере облом писать.
ivan_fd Дата: Сб, 18.06.2011, 14:24  |                                                                                                                Сообщение # 637
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В Help-e PicBasicPro есть описание команды LCDOUT. Там написаны какие команды можно писать.


А почему $FE, (точно не знаю) может так сделали разработчики компилятора.
Rex72 Дата: Сб, 18.06.2011, 14:56  |                                                                                                                Сообщение # 638
Группа: Проверенные
Ранг:  Новенький
Сообщений: 3
Репутация: 0   ±
Замечания:   ±
На сайте с 07.06.2011

Статус: Offline

@ivan_fd
Та это всё понятно :), кстати в хелпе не все команды написаты.
В ЖКИ, в памяти строки 40 символов, можно например, загнать все 40 и гонять их по строке тудой-сюдой командами $18 и $1С.
а вообще

Сообщение отредактировал Rex72 - Сб, 18.06.2011, 14:58
Anatolii Дата: Пн, 20.06.2011, 21:46  |                                                                                                                Сообщение # 639
Группа: Проверенные
Ранг:  Новенький
Сообщений: 1
Репутация: 0   ±
Замечания:   ±
На сайте с 07.01.2011

Статус: Offline

Помогите разобраться я новичок в этом деле. Написал программу для PIC16F873A собрал и протестировал схему в протеусе, все работает.
Собрав все в железе все заработало так как я и хотел, но в процессе работы периодически сбрасывается PORTC.4 в ноль. Помогите найти ошибку в программе.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright © 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 17.04.2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'Присваивание символов для портов на вход
Symbol sw1 = portB.7 'Стоп шпинделя 2
symbol sw2 = portB.5 'Пуск шпинделя
symbol sw3 = portB.2 'Ось Х-
symbol sw4 = portB.3 'Ось Х+
symbol sw5 = portB.0 'Ось Y-
symbol sw6 = portB.1 'Ось Y+
symbol sw7 = portB.6 'Стоп шпинделя 2
symbol sw8 = portB.4 'Толчок шпинделя
symbol sw9 = portC.7 'ускоренный ход
symbol sw10 = portC.6 'Переключение подач
'Присваивание символов для портов на выход
symbol EM1 = portC.4 'Пуск шпинделя
symbol EM2 = portC.1 'Пуск оси х или у +
symbol EM3 = portC.2 'Пуск оси х или у -
symbol EM4 = portC.5 'Толчок шинделя
SYMBOL EM5 = portC.0 'Ускоренный ход
symbol EM6 = portC.3 'Переключение подачи
'Конфигурация портов
TrisB = %11111111 'Устанавливаем порт В на выход
PortB = %00000000 'Записываем нули в порт В
OPTION_REG=%11111111 'Отключаем резисторы порта В
TrisC = %11000000 'Устанавливаем 5 и 6 бит порта С на вход, остольные на выход
PortC = %00000000 'Записываем нули в порт С

main: 'Начало программы
if sw1 xor sw7 then
portC=0
goto main
else
goto cycly
endif
cycly:
if sw10=0 then 'если выполнено условие то включить
EM6=1 'переключение подачи
EM2=0 'и сбросить ЕМ2 и ЕМ3 в ноль
EM3=0
EM5=0
goto main 'и вернутся в начало программы
else
EM6=0
ENdif
if (sw1=0)and(sw7=0)and(sw2=0)then
EM1=1
endif
if EM1=1 then
goto cycly1
else
goto cycly2
endif
cycly1:
if sw9=0 then
EM5=1
else
EM5=0
endif
if (sw3 xor sw5) AND (sw4 xor sw6) then
EM2=0
EM3=0
goto main
endif
if sw3 xor sw5 then
EM2=1
else
EM2=0
endif
if sw4 xor sw6 then
EM3=1
else
EM3=0
endif
goto main
cycly2:
if sw8=0 then
EM4=1
else
EM4=0
endif
if sw9=0 then
EM5=1
else
EM5=0
EM2=0
EM3=0
goto main
endif
if (sw3 xor sw5) AND (sw4 xor sw6) then
EM2=0
EM3=0
goto main
endif
if sw3 xor sw5 then
EM2=1
else
EM2=0
endif
if sw4 xor sw6 then
EM3=1
else
EM3=0
endif
goto main
end
retas Дата: Вт, 21.06.2011, 12:05  |                                                                                                                Сообщение # 640
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

ПМ, здесь дело в правиле "чтение-модификация-запись", т.е. дав команду, скажем EM2=0
нет никакой гарантии что остальные выходы порта останутся без изменений.

А что, Pic Basic pro не позволяет конструкцию типа:

if EM1=1 then
goto cycly1
else
goto cycly2
endif

написать короче:

if EM1=1 then goto cycly1
goto cycly2

А так как у вас после упомянутой конструкции сразу стоит
метка cycly1, то и вообще можно обойтись одной строчкой
(ибо чем меьше в прогре goto, тем лучше):

if EM1=0 then goto cycly2

Удачи!
Diam Дата: Вт, 28.06.2011, 13:03  |                                                                                                                Сообщение # 641
Группа: Проверенные
Ранг:  Новенький
Сообщений: 9
Репутация: 0   ±
Замечания:   ±
На сайте с 31.05.2011

Статус: Offline

Пытаюсь освоить АЦП по книге Хилинского
Как поправить прогу, чтобы выводила данные с запятой?

Заранее спасибо

MAIN:
ADCIN 0, RES
VOLTS1 = RES*CONV1
VOLTS2 = RES*CONV2
VOLTS2 = VOLTS2 / 100
VOLTS1 = VOLTS1 + VOLTS2

LCDOUT $FE,2, "V =", DEC4 VOLTS1
PAUSE 500
GOTO MAIN

Добавлено (28.06.2011, 13.03.34)
---------------------------------------------
Ребята!!!
Не забывайте про начинающих!!!


С уважением Александр
ЯНДЕКС Дата: 28.06.2011
MiXaS Дата: Вт, 28.06.2011, 15:38  |                                                                                                                Сообщение # 642
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Нашел у себя проект рабочий, вроде понятный:

Code
define OSC 20  
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

DEFINE ADC_BITS 8 ' Определяем разрядность преобразования
DEFINE ADC_CLOCK 3 ' Определяем источник синхронизации для АЦП
DEFINE ADC_SAMPLEUS 50 ' Определяем время преобразования

Res Var Word ' Определяем переменную, в которую записывается

Volts1 Var Word ' Первые два десятичных разряда результата в мВ
Volts2 Var Word ' Вторые два десятичных разряда результата в мВ

Conv1 Con 19 ' 5000/256 = 19.53, this is the decimal part
Conv2 Con 53 ' Это дробная часть числа

TRISA = 1 ' Устанавливаем вывод RA0 (AN0) на вход
TRISB = 0 ' Весь PORTB на выход
PAUSE 50 ' Ждем 0.5 сек инициализации ЖКИ
ADCON1 = 0 ' Устанавливаем выводы AN0 - AN4 как аналоговые входа
OPTION_REG = %00000000  
ADCON0 = %11000001 ' Устанавливаем внутренний источник

LCDOUT $FE, 1 ' Очищаем экран ЖКИ
LCDOUT $48, $61, $BE, $70, $C7, $B6, $65, $BD, $B8, $65
Main:
ADCIN 0, Res ' Считываем аналоговое значение и сохраняем в
Volts1 = Res * Conv1 ' Умножаем это значение на 19
Volts2 = Res * Conv2
Volts2 = Volts2 / 100
Volts1 = Volts1 + Volts2 ' Получаем результат в милливольтах

LCDOUT $FE,$C0,"V = ",DEC1 Volts1/1000 ,".", dec3 volts1,$20, $42, $6F, $BB, $C4, $BF  

PAUSE 50 ' Ждем 0,5 секунд
GOTO Main
END
Diam Дата: Ср, 29.06.2011, 21:33  |                                                                                                                Сообщение # 643
Группа: Проверенные
Ранг:  Новенький
Сообщений: 9
Репутация: 0   ±
Замечания:   ±
На сайте с 31.05.2011

Статус: Offline

Вот, спасибо добрый человек!
У Вас и правда данные с запятой выводит - уже проверил.
Пойду разбираться где я накосячил.

Спасибо еще раз и удачи Вам!

Добавлено (28.06.2011, 16.45.06)
---------------------------------------------
MiXaS, с напряжением все понял - еще раз спасибо
LCDOUT $FE,$C0,"V = ",DEC1 Volts1/1000 ,".", dec3 volts1,$20, $42, $6F, $BB, $C4, $BF
просто не не думал, что внутри LCDOUT можно еще и арифметические действия выполнять.

Тогда может еще подскажешь, или примерчиком кинешь - как решают умные люди проблему с амперметром?

Добавлено (29.06.2011, 21.33.51)
---------------------------------------------
Похоже никто амперметров не строил?
Ну хоть ссылочкой помогите, чтоб на PIC BASIC было
Пожалуйста cry


С уважением Александр
ivan_fd Дата: Ср, 29.06.2011, 22:25  |                                                                                                                Сообщение # 644
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Diam)
как решают умные люди проблему с амперметром


Что Вы имеете ввиду, проблемы с амперметром.
Это тот же самый вольтметр, только снимается напряжение с, например, шунта и через ОУ на вход АЦП.
Diam Дата: Чт, 30.06.2011, 06:56  |                                                                                                                Сообщение # 645
Группа: Проверенные
Ранг:  Новенький
Сообщений: 9
Репутация: 0   ±
Замечания:   ±
На сайте с 31.05.2011

Статус: Offline

То есть, как я понял - в программе контроллера менять ничего не нужно?
А операционник обязательно нужен - просто на этой схеме
нет ОУ, одни делители на резиках?
Или я опять чего то не понимаю?


С уважением Александр
Сообщение отредактировал Diam - Чт, 30.06.2011, 06:58
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Поиск: