Вольтметр на pic16F676
|
|
ivan_fd |
Дата: Сб, 23.07.2011, 17:26 | Сообщение # 16 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Alexej79) Это дублируются те параметры которые устанавливаются по умолчанию. Я их с программы выкинул. Без них работает. Не знаю правильно ли это или нет?
Declare Adin_Res 10 ; 10-bit result required Здесь мы устанавливаем 10 разрядный результат. Declare Adin_Tad FRC ; RC OSC chosen Здесь, внутренний RC генератор модуля АЦП. Declare Adin_Stime 100 ; Allow 50us sample time Здесь, время для зарядки конденсатора.
Эти параметры не дублируются, это насторойка АЦП.
ADCON1 = %10000010
Первые четыре бита - управляющие биты настройки каналов АЦП. В данном случаи 0010 - RA0-RA1-RA2-RA3-RA5 - аналоговые. Седьмой - хранение результата. В нашем случаи правое выравнивание.
Если у Вас есть даташит (к стати есть на русском), то в нем все прекрасно и доходчиво написано.Добавлено (23.07.2011, 17.26.36) ---------------------------------------------
Quote (Alexej79) Вот в этом месте я прописываю не 1024, Должно быть 1023, потому, что 10 бит - это максимум 1023.
Сообщение отредактировал
ivan_fd - Сб, 23.07.2011, 17:24
|
|
|
|
Alexej79 |
Дата: Сб, 23.07.2011, 19:08 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
71
Замечания:
±
На сайте с 16.08.2010
Статус:
Offline
|
Quote (ivan_fd) Если у Вас есть даташит (к стати есть на русском), то в нем все прекрасно и доходчиво написано. Я когда читаю даташит то запутываюсь основательно. Там всё так описано по научному, мне понятней на пальцах когда объясняют.
Quote (ivan_fd) Эти параметры не дублируются, это насторойка АЦП Вот ссылка на статью на которую я ссылался ТЫЦ и прилеплю маленькую вырезку с этого документа ниже.
Из даташита информация по регистру ADCON1: Quote (ivan_fd) Седьмой - хранение результата. В нашем случаи правое выравнивание. 7-6 биты не читаются. Не подумайте что я спорю я просто хочу разобраться.
Да и ещё в моём случае когда на вход АЦП подаю 5в то значение есть 65535
Сообщение отредактировал
Alexej79 - Сб, 23.07.2011, 19:28
|
|
|
|
anatol |
Дата: Сб, 23.07.2011, 21:16 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Как вы друг друга будете понимать, если один(mikhail09p) советует на 16F874A , а ТС работает на 18F2550. У 18F2550 надо кофигурировать ADCON1 (настройка количества каналов АЦП), ADCON2 (выравнивание, время преобразования, тип генератора) и с помощью ADCON0 опрашивать в нужном алгоритме каналы.
Сообщение отредактировал
anatol - Сб, 23.07.2011, 21:17
|
|
|
|
ivan_fd |
Дата: Вс, 24.07.2011, 00:36 | Сообщение # 19 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Alexej79) Вот ссылка на статью на которую я ссылался
Будет по умолчанию, если вы используете директиву ADIn. Quote (Alexej79) 7-6 биты не читаются. Не подумайте что я спорю я просто хочу разобраться.
Я говорил о контроллере 16f874, пример выше был на нем и я думал Вы о нем спрашиваете. А если Вы пишите на 2550, то соответственно и регистры другие.
Quote (Alexej79) Да и ещё в моём случае когда на вход АЦП подаю 5в то значение есть 65535
Как в контроллере в котором 10-ти разрядный АЦП может быть результат 65535?
Добавлено (24.07.2011, 00.36.32) --------------------------------------------- Попробуйте дописать вот такую строчку ADCON2.7 = 1 , и Вы у видите правильный результат.
Сообщение отредактировал
ivan_fd - Вс, 24.07.2011, 00:36
|
|
|
|
mikhail09p |
Дата: Вс, 24.07.2011, 10:08 | Сообщение # 20 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (anatol) Как вы друг друга будете понимать, если один(mikhail09p) советует на 16F874A , а ТС работает на 18F2550.
А я и не увидел
|
|
|
|
freeeeedom400 |
Дата: Ср, 27.07.2011, 10:29 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
8
Замечания:
±
На сайте с 27.07.2011
Статус:
Offline
|
mikhail09p, поделитесь программой на которой был написан код к вашему вольт-амперметру, плз!
|
|
|
|
mikhail09p |
Дата: Ср, 27.07.2011, 23:16 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (freeeeedom400) mikhail09p, поделитесь программой на которой был написан код к вашему вольт-амперметру, плз! Протон. Он присутствует тут на сайте. Есть подробная инструкция по установке. Рекомендую. Для начинающего (да и вообще) самое то.Добавлено (27.07.2011, 23.16.26) ---------------------------------------------
Quote (monlis) Даташит есть на него русский ! Выложите, пожалуйста, даташит на форум.
|
|
|
|
DNM |
Дата: Вт, 04.10.2011, 23:25 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Quote (monlis) Товарищи ! Написал прогу просто отображение числа 123 на индикаторе! Но в пиксимуляторе переключаються все сегменты 111,222,333 как заставить его работать правильно ??? Помогите ! Вот прога!
вот так можно '*** проект на PIC 16F676 №1 *** '*** подключение семисегментного индикатора *** '*** три значащих цифры *** CMCON = %111 ' 0x07h ANSEL=%00001000 TRISA = %00010000 TRISC = %000000
u VAR BYTE[10] ;задаем массив d1 var byte ;переменная, хранящая значение первой цифры d2 var byte ;переменная, хранящая значение второй цифры d3 var byte ;переменная, хранящая значение третьей цифры n var byte ;служебные переменные t var byte a var byte ;список переменных '*** Сегменты индикатора *** ' RC0 ' --- 'RC1|RA5|RC3 ' --- 'RC2| |RC5 ' --- .RB0 ' RC4 ' --- --- --- ' | || || | ' --- --- --- ' | || || | ' --- --- --- ' RA1 RA0 RA2 '****************************** ;заполняем массив 'общий анод u[0]=%00000011 '---0--- u[1]=%10011111 '---1--- u[2]=%00100101 '---2--- u[3]=%00001101 '---3--- u[4]=%10011001 '---4--- u[5]=%01001001 '---5--- u[6]=%01000001 '---6--- u[7]=%00011111 '---7--- u[8]=%00000001 '---8--- u[9]=%00001001 '---9---
'***тело программы*********** portc=0 porta=%00000111 ;потушить все три цифры
start d1=1 ; вывести на табло 123 d2=2 d3=3 call ind_K ;подпрограмма индикации goto start
'**** подпрограмма индикации трех цифр *** ind_K n=u[d3] call codum ;задать соответствие по портам кодирующей матрицы porta.2=0 ;зажечь третью цифру pause 5 ;подождать 5 мс porta.2=1 ;потушить третью цифру '--- n=u[d2] call codum ;задать соответствие по портам кодирующей матрицы porta.0=0 ;зажечь вторую цифру pause 5 ;подождать 5 мс porta.0=1 ;потушить вторую цифру '--- n=u[d1] call codum ;задать соответствие по портам кодирующей матрицы porta.1=0 ;зажечь первую цифру pause 5 ;подождать 5 мс porta.1=1 ;потушить первую цифру '--- return codum portc.0 = n.7 portc.3 = n.6 portc.5 = n.5 portc.4 = n.4 portc.2 = n.3 portc.1 = n.2 porta.5 = n.1 return
Более подробно здесь: http://asemlab.net/
|
|
|
|
lospartos |
Дата: Вс, 23.10.2011, 12:44 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 19.03.2011
Статус:
Offline
|
DNM, спасибо! Отличный и доступный пример! А как вывести на 4 индикатора 4 цифры? И разъясните, пожалуйста, математический смысл этих строк: CMCON = %111 ' 0x07h ANSEL=%00001000
|
|
|
|
ADMIN |
Дата: Вс, 23.10.2011, 16:48 | Сообщение # 25 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Статья по установке протона здесь CMCON - регистр микроконтроллера - смотрим по даташиту - отвечает за работу встроенного компаратора. Чтобы его отключить и дать работать портам без него и требуется записать число 7 в него, по другому, в двоичном формате - число 7 выглядит как %00000111, или просто %111, в шестнадцатиричном - $07 в интерпретации Picbasic. Регистр ANSEL - отвечает за работу встроенного АЦП - смотри по даташиту, я не помню, какой бит в нем за что отвечает
|
|
|
|
доцент2 |
Дата: Вт, 10.01.2012, 07:31 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
может и мне кто поможет. решил для вольтметра написать програмку, чтобы потренироваться. при работе на LCD все работает без проблем, а вот с LED возникли проблемы. для отображения результатов использовал трех- разрядный семи сегментный индикатор. индикация по замыслу должна работать от прерывания по таймеру 0. В качестве примера набросал схемку без делителей на входе АЦП при этом значение напряжения от 0 до 5 вольт. Для отображения точки использовал транзистор. При подключении его базы к общему выводу второго разряда последний гаснет? Далее, в протеусе симуляция длиться около 2...3 секунд и программа виснет. Может что-то упустил при "оформлении" прерывания?Добавлено (10.01.2012, 07.31.01) --------------------------------------------- ошибка оказалась простая. в рус. датащите переводчик перепутал названия двух таблиц ADCON1 и ANSEL после исправления работает отлично. хотя с LCD работала и так. наверное наличие прерывания и показало ошибку.
|
|
|
|
RA9UBD |
Дата: Вт, 10.01.2012, 12:38 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
63
Замечания:
±
На сайте с 11.04.2008
Статус:
Offline
|
Вот готовый проект Вольтметра и амперметра, а 7 сег индикаторах.
|
|
|
|
доцент2 |
Дата: Пт, 13.01.2012, 21:12 | Сообщение # 28 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
собрал вольтметр в железе на макетке. программа без прерываний. в протеусе все работает нормально, а в железе не хочет. на индикаторе постоянно высвечивается "4.5". при замыкании входа АЦП (вывод 3) на массу - "0.0". при подключении батарейки на 3V к делителю - схема вообще не реагирует, а непосредственно к выводу АЦП показывает значения примерно 18.6. регулировка подстроечником на показания почти не влияет. питание устройства пока от небольшого блока питания с напряжением 5.06В. пробовал два контроллера результат один и тотже. подскажите в чем может быть причина.Добавлено (13.01.2012, 21.12.55) --------------------------------------------- причина оказалась простой. внутренний генератор был выставлен как INTOSС, а надо было INTOSCIO.
|
|
|
|
skiip |
Дата: Ср, 04.11.2015, 06:26 | Сообщение # 29 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
26
Замечания:
±
На сайте с 24.12.2008
Статус:
Offline
|
Здравствуйте Впервые столкнулся с PIC16F676, хочу разобраться и работать с этим контроллером. Хотелось бы использовать «проще». На 16F84 много навесного с генератором, а этот (676) контролер внутри программный. На F84 собрано много схем (противоугонка на машину (ключ DALAS DS1990), термометры DALAS DS18B20, и так просто я назвал для себя «ЧПУ для 4 скоростных двигателей на станки»). Вам отправляю программу, и проект в протеусе. Что-то я не пойму, почему порт RA4 не работает на выход. Зная RA3, работает только на вход. Может, я использую внутренний генератор, а мой порт «RA4/T1G/OSC2/AN3.По программе я добавил разряд для отображения. Он не заработал. Хотел сделать выход на реле (но если не работает). В задумке не использую АЦП (в проекте будет шина 1-Wire-net). Поправьте меня, пожалуйста. @ device pic16F676, INTOSC, MCLR_OFF, WDT_OFF DEFINE ADC_OSC 4 CMCON = 7 ' компаратор выключен %00000111 ANSEL =0'%001 ' выбор источника тактового сигнала Fosc/8 TRISA = %0000000 ' вывод PORTA на вsход TRISC = %0000000 ' выводы PORTC с 1 по 6 навыход cifra var byte 'переменнаядля хранения 7-ми сегментного кода tri var byte 'переменная для хранения 7-ми сегментного кода для третьего разряда dva var byte 'переменная для хранения 7-ми сегментного кода для второго разряда odin var byte 'переменная для хранения 7-ми сегментного кода для первого разряда nol var byte 'переменнаядля хранения 7-ми сегментного кода для нулевого разряда dispV VAR WORD 'конечныйрезультат измерения (выводиться на дисплей) digit0 var PORTA.0 ' 0-й разрядиндикатора digit1 var PORTA.1 ' 1-й разрядиндикатора digit2 var PORTA.2 ' 2-й разрядиндикатора digit3 var PORTA.4 ' 3-й разрядиндикатора a varPORTC.0'+++++++++++++++++++++++++++++++++++++++++++++ b var PORTC.2'+ + c var PORTC.4'+ + d var PORTC.5'+ сегменты индикатора + e var PORTA.5'+ + f var PORTC.1'+ + g varPORTC.3'+++++++++++++++++++++++++++++++++++++++++++++ begin: dispV =1234 ' значение '**************** Инкременируем переменную счета************************** nol =dispV dig 0 'определяем первую цифру из переменной dispV odin =dispV dig 1 'определяем вторую цифру из переменной dispV dva =dispV dig 2 'определяем третью цифру из переменной dispV tri =dispV dig 3 'определяем четвертую цифру из переменной dispV gosub DISPLAY goto begin DISPLAY: cifra=nol ' записываем в cifra значение нулевой цифры gosub convert digit0=0 'включаем 0-й разряд индикатора pause 10'рауза digit0=1 'отключаем 0-й разряд индикатора cifra=odin ' записываем в cifra значение первой цифры gosub convert digit1=0 'включаем 1-й разряд индикатора pause 10'рауза digit1=1 'отключаем 1-й разряд индикатора cifra=dva ' записываем в cifra значение второй цифры gosub convert digit2=0 ' включаем2-й разряд индикатора pause 10'рауза digit2=1 'отключаем 2-й разряд индикатора cifra=tri ' записываем в cifra значение третьей цифры gosub convert digit3=0 ' включаем3-й разряд индикатора pause 10'рауза digit3=1 'отключаем 3-й разряд индикатора convert: Select case cifra case 0 a=1: b=1: c=1: d=1: e=1: f=1: g=0 case 1 a=0: b=1: c=1: d=0: e=0: f=0: g=0 case 2 a=1: b=1: c=0: d=1: e=1: f=0: g=1 case 3 a=1: b=1: c=1: d=1: e=0: f=0: g=1 case 4 a=0: b=1: c=1: d=0: e=0: f=1: g=1 case 5 a=1: b=0: c=1: d=1: e=0: f=1: g=1 case 6 a=1: b=0: c=1: d=1: e=1: f=1: g=1 case 7 a=1: b=1: c=1: d=0: e=0: f=0: g=0 case 8 a=1: b=1: c=1: d=1: e=1: f=1: g=1 case 9 a=1: b=1: c=1: d=1: e=0: f=1: g=1 case 10 a=0: b=0: c=0: d=0: e=0: f=0: g=0 end select return
skiip
|
|
|
|
skiip |
Дата: Ср, 04.11.2015, 06:52 | Сообщение # 30 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
26
Замечания:
±
На сайте с 24.12.2008
Статус:
Offline
|
Привет доцент2, Вольт метр. В программе всё разжевано пошагово. швалу (напряжение и отображение на дисплее) можно задать програмно под любое. Допустим U верхнее 18V а на индикаторе 100%. смотри сторку 28 ( scaleV con 2046) посмотрите мой архив вроде как всё работает и в железяке. вот только я сам не пойму, почему RA3 не задействуют как вход. программу брал уже не помню где просто решил собрать. и для себя взял за основу принцип работы контроллера. там даташит на русском 16F676
skiip
|
|
|
|