Pic Basic pro для начинающих
|
|
Alexej79 |
Дата: Вт, 14.06.2011, 21:47 | Сообщение # 631 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Quote (ADMIN) Во-первых, есть ли даташит на энкодер? Quote (ivan_fd) Как Вы подключили Энкодер, схема? Нет, даташита нет схемы. Я ссылаюсь вот на эту статейку
Quote (ADMIN) что видно в протеусе при отладке? В протеусе не пробывал делаю сразу на стэнде, работаю на прямую с железом.
Quote (ADMIN) В-третьих, чтобы обрабатывалось нужное прерывание, правильно, нужно ввести проверку условий: За этот совет плюсик, попробую по такому методу.
ivan_fd, За код спасибо буду разбераться.
Я методом проб обнаружил что возможно проблема в "дребезге" контактов. Думаю что можно придумать. И так же выяснил что прерывание по INT работают у меня по обеим фронтам, по переднему и заднему. Хотя строка Option_Reg.6 = 1 в коде присутствует.
|
|
|
|
ivan_fd |
Дата: Вт, 14.06.2011, 22:32 | Сообщение # 632 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Скорее всего проблема в дребезге, он ведь механический.
|
|
|
|
Alexej79 |
Дата: Ср, 15.06.2011, 10:35 | Сообщение # 633 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Quote (ivan_fd) Скорее всего проблема в дребезге Так оно и было. Проблема была в дребезге. Подсоидинил как по схеме выше всё заработало чики чики. Спасибо за помощь.
|
|
|
|
Rex72 |
Дата: Пт, 17.06.2011, 13:48 | Сообщение # 634 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 07.06.2011
Статус:
Offline
|
Здравствуйте Вот разбираю оператор LCDOUT. $FE - это предвесник команды? тогда почему FE?
|
|
|
|
holyuser |
Дата: Пт, 17.06.2011, 23:11 | Сообщение # 635 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Так надо. Читать даташиты тоже не вредно.
|
|
|
|
Rex72 |
Дата: Сб, 18.06.2011, 14:04 | Сообщение # 636 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 07.06.2011
Статус:
Offline
|
даташиты чего?, если жки, то читал команда/данные различаются по RS Выставили RS=0, выставили косанду (ну напр. $18-сдвиг экрана влево), и клацнули сигналом Е. где я не понял? сбственно всё работает - схемку своял, програмку написал. Понять хочется. На асемблере облом писать.
|
|
|
|
ivan_fd |
Дата: Сб, 18.06.2011, 14:24 | Сообщение # 637 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
В Help-e PicBasicPro есть описание команды LCDOUT. Там написаны какие команды можно писать.
А почему $FE, (точно не знаю) может так сделали разработчики компилятора.
|
|
|
|
Rex72 |
Дата: Сб, 18.06.2011, 14:56 | Сообщение # 638 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 07.06.2011
Статус:
Offline
|
@ivan_fd Та это всё понятно :), кстати в хелпе не все команды написаты. В ЖКИ, в памяти строки 40 символов, можно например, загнать все 40 и гонять их по строке тудой-сюдой командами $18 и $1С. а вообще
Сообщение отредактировал
Rex72 - Сб, 18.06.2011, 14:58
|
|
|
|
Anatolii |
Дата: Пн, 20.06.2011, 21:46 | Сообщение # 639 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
1
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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) --------------------------------------------- Ребята!!! Не забывайте про начинающих!!!
С уважением Александр
|
|
|
|
MiXaS |
Дата: Вт, 28.06.2011, 15:38 | Сообщение # 642 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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 было Пожалуйста
С уважением Александр
|
|
|
|
ivan_fd |
Дата: Ср, 29.06.2011, 22:25 | Сообщение # 644 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Diam) как решают умные люди проблему с амперметром
Что Вы имеете ввиду, проблемы с амперметром. Это тот же самый вольтметр, только снимается напряжение с, например, шунта и через ОУ на вход АЦП.
|
|
|
|
Diam |
Дата: Чт, 30.06.2011, 06:56 | Сообщение # 645 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 31.05.2011
Статус:
Offline
|
То есть, как я понял - в программе контроллера менять ничего не нужно? А операционник обязательно нужен - просто на этой схеме нет ОУ, одни делители на резиках? Или я опять чего то не понимаю?
С уважением Александр
Сообщение отредактировал
Diam - Чт, 30.06.2011, 06:58
|
|
|
|