12.02.2015, 14:36
|
|
Частый гость
Регистрация: 11.02.2015
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Проблема с программой для 16f873A. Первый раз в первый класс:)
Уважаемые гуру! Пробую силы в освоении PIC. Решил убить сразу двух зайцев - немного попробовать себя в программировании, а чтобы не абстрактное устройство создать, решил сваять модуль сопряжения кнопок на руле с ГУ Pioneer. Идея простая - кнопки просто замыкают резисторы на землю, т.е. подаем поделенное напряжение на вход АЦП, считаем время сколько была кнопка замкнута, затем в соответствии с табличкой подаем на выход ШИМ нужное напряжение (ГУ в штатном включении управляется замыканием резисторов в родном пульте на землю, т.е. изменением напряжения на входе wired remote). Разделение на короткое и длинное нажатия нужно потому, что на руле кнопок 6, а ГУ "понимает" 10 команд.
Собрал в Proteus 7.7 sp2, но не работает (наверное, что-то не так все же делаю), собрал в "железе" - также не работает(причем картина отличается от виртуальной модели по поведению). Программу ваял в MPLAB X IDE 2.15 на MPLAB XC8 Compiler. Если есть у кого время и желание, потыкайте меня носом, где накосячил
|
|
|
Сказали "Спасибо" egorkalight
|
|
|
12.02.2015, 21:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
Это у вас будет модуль управления магнитолой Пионер с джостика на руле?
|
|
|
Сказали "Спасибо" vavan1983
|
|
|
12.02.2015, 22:31
|
|
Частый гость
Регистрация: 11.02.2015
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
не с джойстика, со штатных кнопок на руле, но подключается это в порт wired remote, куда именно джойстик подключается.
Последний раз редактировалось egorkalight; 12.02.2015 в 22:33.
Причина: дополнение
|
|
|
Сказали "Спасибо" egorkalight
|
|
|
13.02.2015, 06:06
|
|
Прохожий
Регистрация: 27.01.2015
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
А что именно не работает? Напряжение не выставляется, или с АЦП проблемы? Разберитесь сначала с чем-то одним. Я-бы начал с генерации выходного напряжения. Значения можно рассчитать. Когда магнитола начнёт отрабатывать все команды, у Вас уже будет таблица настройки ШИМ. А обработка кнопок - задача тривиальная. Ещё, как вариант не использовать ШИМ, а собрать на выходе PIC аналогичный мост из резисторов и управлять им ( имитировать нажатие реальной клавиатуры ).
|
|
|
Сказали "Спасибо" shindbad
|
|
|
13.02.2015, 09:48
|
|
Частый гость
Регистрация: 03.11.2010
Сообщений: 18
Сказал спасибо: 5
Сказали Спасибо 23 раз(а) в 6 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
Пока +5v через резистор (1-3к) на MCLR (1 нога) не подашь, ничего и не будет.
|
|
|
Сказали "Спасибо" niko56K
|
|
|
13.02.2015, 11:06
|
|
Частый гость
Регистрация: 11.02.2015
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
shindbad В протеусе никак не реагирует на нажатия кнопок, т.е. на выходе ШИМ устанавливается около 5В и все. В железе если нажмешь кнопку, то выход ШИМ падает до 0в и пока не снимешь питание, выход больше не поднимается. Табличка значений ШИМ рассчитана и в программе уже есть. А каким образом управлять мостом из резисторов? Задействовать для каждой кнопки отдельный порт? Извините за глупые вопросы.
niko56KСейчас попробую
|
|
|
Сказали "Спасибо" egorkalight
|
|
|
13.02.2015, 11:39
|
|
Прохожий
Регистрация: 27.11.2010
Сообщений: 1
Сказал спасибо: 53
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
|
|
|
Сказали "Спасибо" asia540
|
|
|
13.02.2015, 11:51
|
|
Частый гость
Регистрация: 11.02.2015
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
asia540 Да, идея была взята именно оттуда. За что автору огромное спасибо! Расчет значений для АЦП был взят оттуда. Только там автор использует ИК-канал управления и для программы - ассемблер. Я же пытаюсь использовать проводной канал (что, как мне казалось, проще) и Си.
niko56K Теперь поведение железа и виртуальной модели стали похожи
Ошибка в логике программы, которую я и не вижу
|
|
|
Сказали "Спасибо" egorkalight
|
|
|
19.02.2015, 19:25
|
|
Прописка
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
Сообщение от egorkalight
|
asia540...Расчет значений для АЦП был взят оттуда....
|
Расчёт каких значений? Вас арифметике в школе не обучали? Я просто ох..ю от нынешних "схемотехников"...Вы хотя-бы издалека представляете, что хотите получить?
Последний раз редактировалось shindax; 19.02.2015 в 19:27.
|
|
|
Сказали "Спасибо" shindax
|
|
|
19.02.2015, 19:35
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,563 сообщении(ях)
|
Re: Проблема с программой для 16f873A. Первый раз в первый класс:)
Сообщение от shindax
|
Расчёт каких значений? Вас арифметике в школе не обучали? Я просто ох..ю от нынешних "схемотехников"...Вы хотя-бы издалека представляете, что хотите получить?
|
Оттуда ...
Код:
|
;************************************************* ******************************
; Опрос кнопок пульта.
BtnCheck
; Преобразование.
bsf ADCON0,GO ; Начинаем преобразование.
ADCLoop btfsc ADCON0,GO ; Ожидаем, пока преобразование
goto ADCLoop ; не будет завершено.
movf ADRESH,W ; Берем верхний байт результата
movwf ADCRes ; преобразования и запомнинаем как
; результат ("загрубляем" до 8bit).
; Определение нажатой кнопки по результату преобразования.
clrf Btn ; Очищаем результат опроса кнопок.
movf ADCRes,W ; Берем результат АЦП.
bsf STATUS,C ; Устанавливаем флаг заема.
sublw Btn0 ; Вычитаем из порога результат АЦП.
btfss STATUS,C ; Если флаг не изменился - пропускаем,
incf Btn,F ; иначе увеличиваем значение результата.
movf ADCRes,W
bsf STATUS,C
sublw Btn1
btfss STATUS,C
incf Btn,F
movf ADCRes,W
bsf STATUS,C
sublw Btn2
btfss STATUS,C
incf Btn,F
movf ADCRes,W
bsf STATUS,C
sublw Btn3
btfss STATUS,C
incf Btn,F
movf ADCRes,W
bsf STATUS,C
sublw Btn4
btfss STATUS,C
incf Btn,F
return
;************************************************* ******************************
; Табличное соответствие кнопки и ИК-команды.
Btn2IR addwf PCL,F ; Делаем вычисляемый переход.
retlw IRCmd0 ; Команда для кнопки Btn0.
retlw IRCmd1 ; Команда для кнопки Btn1.
retlw IRCmd2 ; Команда для кнопки Btn2.
retlw IRCmd3 ; Команда для кнопки Btn3.
retlw IRCmd4 ; Команда для кнопки Btn4.
;************************************************* ******************************
; Посылка новой команды
SendNewCmd movf Btn,W ; Берем значение нажатой кнопки,
movwf BtnPrev ; запоминаем как предыдущее значение,
call Btn2IR ; находим по таблице нужную команду ИК,
movwf IrCmd ; готовим ее к посылке
call SendCmd ; и посылаем. |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:50.
|
|