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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вольтметр на pic16F676 (Нужна помощь)
Вольтметр на pic16F676
ivan_fd Дата: Сб, 23.07.2011, 17:26  |                                                                                                                Сообщение # 16
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 16.08.2010

Статус: Offline

Quote (ivan_fd)
Если у Вас есть даташит (к стати есть на русском), то в нем все прекрасно и доходчиво написано.

Я когда читаю даташит то запутываюсь основательно. Там всё так описано по научному, мне понятней на пальцах когда объясняют.

Quote (ivan_fd)
Эти параметры не дублируются, это насторойка АЦП

Вот ссылка на статью на которую я ссылался ТЫЦ и прилеплю маленькую вырезку с этого документа ниже.


Из даташита информация по регистру ADCON1:

Quote (ivan_fd)
Седьмой - хранение результата. В нашем случаи правое выравнивание.

7-6 биты не читаются.
Не подумайте что я спорю я просто хочу разобраться.

Да и ещё в моём случае когда на вход АЦП подаю 5в то значение есть 65535
Прикрепления: 1500048.jpg (194.1 Kb) · 8258543.jpg (50.3 Kb)

Сообщение отредактировал Alexej79 - Сб, 23.07.2011, 19:28
anatol Дата: Сб, 23.07.2011, 21:16  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (anatol)
Как вы друг друга будете понимать, если один(mikhail09p) советует на 16F874A , а ТС работает на 18F2550.


А я и не увидел
lol
freeeeedom400 Дата: Ср, 27.07.2011, 10:29  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 27.07.2011

Статус: Offline

mikhail09p, поделитесь программой на которой был написан код к вашему вольт-амперметру, плз!
ЯНДЕКС Дата: 27.07.2011
mikhail09p Дата: Ср, 27.07.2011, 23:16  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (freeeeedom400)
mikhail09p, поделитесь программой на которой был написан код к вашему вольт-амперметру, плз!

Протон. Он присутствует тут на сайте. Есть подробная инструкция по установке. Рекомендую.
Для начинающего (да и вообще) самое то.

Добавлено (27.07.2011, 23.16.26)
---------------------------------------------

Quote (monlis)
Даташит есть на него русский !

Выложите, пожалуйста, даташит на форум.
DNM Дата: Вт, 04.10.2011, 23:25  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 75
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

DNM, спасибо! Отличный и доступный пример!
А как вывести на 4 индикатора 4 цифры?
И разъясните, пожалуйста, математический смысл этих строк:
CMCON = %111 ' 0x07h
ANSEL=%00001000
ADMIN Дата: Вс, 23.10.2011, 16:48  |                                                                                                                Сообщение # 25
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Статья по установке протона здесь
CMCON - регистр микроконтроллера - смотрим по даташиту - отвечает за работу встроенного компаратора. Чтобы его отключить и дать работать портам без него и требуется записать число 7 в него, по другому, в двоичном формате - число 7 выглядит как %00000111, или просто %111, в шестнадцатиричном - $07 в интерпретации Picbasic.
Регистр ANSEL - отвечает за работу встроенного АЦП - смотри по даташиту, я не помню, какой бит в нем за что отвечает
доцент2 Дата: Вт, 10.01.2012, 07:31  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

может и мне кто поможет. решил для вольтметра написать програмку, чтобы потренироваться. при работе на LCD все работает без проблем, а вот с LED возникли проблемы.
для отображения результатов использовал трех- разрядный семи сегментный индикатор. индикация по замыслу должна работать от прерывания по таймеру 0. В качестве примера набросал схемку без делителей на входе АЦП при этом значение напряжения от 0 до 5 вольт. Для отображения точки использовал транзистор. При подключении его базы к общему выводу второго разряда последний гаснет? Далее, в протеусе симуляция длиться около 2...3 секунд и программа виснет. Может что-то упустил при "оформлении" прерывания?

Добавлено (10.01.2012, 07.31.01)
---------------------------------------------
ошибка оказалась простая. в рус. датащите переводчик перепутал названия двух таблиц ADCON1 и ANSEL после исправления работает отлично. хотя с LCD работала и так. наверное наличие прерывания и показало ошибку.

Прикрепления: __2.dsn (33.6 Kb) · _0-40V.pbp (6.5 Kb)
RA9UBD Дата: Вт, 10.01.2012, 12:38  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 63
Репутация: 0   ±
Замечания:   ±
На сайте с 11.04.2008

Статус: Offline

Вот готовый проект Вольтметра и амперметра, а 7 сег индикаторах.
Прикрепления: V-meter_UBD_876.rar (161.5 Kb)
доцент2 Дата: Пт, 13.01.2012, 21:12  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

собрал вольтметр в железе на макетке. программа без прерываний. в протеусе все работает нормально, а в железе не хочет.
на индикаторе постоянно высвечивается "4.5". при замыкании входа АЦП (вывод 3) на массу - "0.0". при подключении батарейки на 3V к делителю - схема вообще не реагирует, а непосредственно к выводу АЦП показывает значения примерно 18.6. регулировка подстроечником на показания почти не влияет. питание устройства пока от небольшого блока питания с напряжением 5.06В. пробовал два контроллера результат один и тотже. подскажите в чем может быть причина.

Добавлено (13.01.2012, 21.12.55)
---------------------------------------------
причина оказалась простой. внутренний генератор был выставлен как INTOSС, а надо было INTOSCIO.

Прикрепления: 3584040.rar (37.5 Kb)
skiip Дата: Ср, 04.11.2015, 06:26  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Прикрепления: rabotaet_0-4.pbp (3.5 Kb) · rabotaet_0-4.dsn (86.2 Kb)


skiip
skiip Дата: Ср, 04.11.2015, 06:52  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 26
Репутация: 0   ±
Замечания:   ±
На сайте с 24.12.2008

Статус: Offline

Привет доцент2
Вольт метр. В программе всё разжевано пошагово. швалу (напряжение и отображение на дисплее) можно задать програмно под любое. Допустим U верхнее 18V а на индикаторе 100%. смотри сторку 28 (   scaleV    con 2046)
посмотрите мой архив  вроде как всё работает и в железяке. вот только я сам не пойму, почему RA3 не задействуют как вход. программу брал уже не помню где просто решил собрать. и для себя взял за основу принцип работы контроллера. там даташит на русском 16F676
Прикрепления: 16f676.rar (1.19 Mb)


skiip
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вольтметр на pic16F676 (Нужна помощь)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: