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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Пишем программу для Вольтметра 0-30Вольт (Простой вольтметр на PIC16f676 (PIC16f73?))
Пишем программу для Вольтметра 0-30Вольт
Gysmi Дата: Пн, 26.12.2011, 18:00  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 48
Репутация: 0   ±
Замечания:   ±
На сайте с 23.12.2011

Статус: Offline

Нашёл простую схемку вольтметра на PIC16f676,хочу собрать на pic16f73,правда там ЦАП 8 битный
Задача научиться составлять несложную программку.Надо всё разжевать и с большими подробностями написать программу,кто силён?Работаем все вместе
Прикрепления: 8241407.png (23.1 Kb)
ЯНДЕКС Дата: 26.12.2011
Gysmi Дата: Пн, 26.12.2011, 18:10  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 48
Репутация: 0   ±
Замечания:   ±
На сайте с 23.12.2011

Статус: Offline

На 73 реально собрать?
Прикрепления: 7156358.jpg (51.6 Kb)
DAY Дата: Вт, 27.12.2011, 00:20  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 21
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Это мой вольтметр. Подсвечивает немного разряды соседние, но я его закинул пока. все просто и тупо. надо только смотреть мануал по командам.
Может мне кто подскажет, как из байта записать нужный бит в конкретную ногу МК. например из %00001000 записать еденицу в porta.2

Code
Define ADC_BITS     10  ' Задать число разрядов в результате
Define ADC_CLOCK    3    ' Выбрать источник тактового сигнала (3 = RC)
Define ADC_SAMPLEUS    50    ' Задать время преобразования в микросекундах
'------------------------------------------------------------------------------
     TRISA = %00000001  ' Установить PORTA  
     TRISC = %00000000
     ADCON0 = %10000001   
     CMCON0 = 7
     ANSEL = 1
     volt var Word
     seg var Byte
     cifra var Byte
     a var Word
     b var Byte
     c var Byte  
     n var Byte
'------------------------------------------------------------------------------
main:     
     ADCIN 0, volt
     Adcin 0, a
     volt = (volt + a)/2
     For c = 0 To 8
     GoSub loop
     Next c
     GoTo main
loop:

     For n = 0 To 2
     cifra = volt Dig n
     GoSub decoder  
     pause 2
     Low PORTA.5:Low PORTA.4:Low PORTC.5     
     PORTA = b << 1
     PORTC = b >> 2    
     If n = 0 Then High PORTA.5:Low PORTA.4:Low PORTC.5
     If n = 1 Then High PORTA.4:Low PORTA.5:Low PORTC.5
     If n = 2 Then High PORTC.5:Low PORTA.5:Low PORTA.4
     Next n

Return
      
decoder:     
    LookUp cifra, [$C0, $F9, $A4, $B0, $99, $92, $82, $F8, $80, $90, $BF, $FF ], b
'   таблица       0     1    2    3    4    5    6    7    8    9    -   off
    Return


Найденное на халяву, исчезает мгновенно, лишь сто раз заработанное всегда будет твоим.
retas Дата: Вт, 27.12.2011, 00:33  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

DAY!, смотри оператор GetBit (но это в Протоне!!!).
rvstar Дата: Вт, 27.12.2011, 00:35  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 7   ±
Замечания:   ±
На сайте с 09.10.2007

Статус: Offline

OUTPUT PORTA.2
a VAR BYTE
a = %00001000

PORTA.2 = a.3

Сообщение отредактировал rvstar - Вт, 27.12.2011, 00:37
Gysmi Дата: Вс, 01.01.2012, 13:36  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 48
Репутация: 0   ±
Замечания:   ±
На сайте с 23.12.2011

Статус: Offline

DAY,спасибо за программу!

Добавлено (01.01.2012, 13.36.31)
---------------------------------------------
Какое назначение переменных-a,b,c,n ? Хорошо бы ещё коментарии к каждой строке сделать

доцент2 Дата: Вс, 08.01.2012, 11:48  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

может и мне кто поможет. решил для вольтметра написать програмку, чтобы потренироваться. при работе на LCD все работает без проблем, а вот с LED возникли проблемы.
для отображения результатов использовал трех- разрядный семи сегментный индикатор. индикация по замыслу должна работать от прерывания по таймеру 0. В качестве примера набросал схемку без делителей на входе АЦП при этом значение напряжения от 0 до 5 вольт. Для отображения точки использовал транзистор. При подключении его базы к общему выводу второго разряда последний гаснет? Далее, в протеусе симуляция длиться около 2...3 секунд и программа виснет. Может что-то упустил при "оформлении" прерывания?
Прикрепления: __2.dsn (33.6 Kb) · _0-40V.pbp (6.4 Kb)
Gysmi Дата: Вс, 08.01.2012, 18:58  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 48
Репутация: 0   ±
Замечания:   ±
На сайте с 23.12.2011

Статус: Offline

А первая программка попроще будет
Сообщение отредактировал Gysmi - Вс, 08.01.2012, 18:59
доцент2 Дата: Вс, 08.01.2012, 21:07  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

знаю, что проще. но я хотел на прерывании сделать динамическую индикацию. упростил немного выбор включения разряда индикатора и програмка пошла нормально работать. прошло около часа запустил в Протеусе и опять началось... работает около трех секунд и виснет. Может сам Протеус глючит, кто с этим сталкивался может подскажете в чем дело!?
Прикрепления: 9567361.dsn (88.8 Kb) · 1199207.pbp (6.3 Kb)
ivan_fd Дата: Пн, 09.01.2012, 15:19  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

PicBsicPro сейчас у меня нету. Но так на первый взгляд: зачем Вы вызываете в подпрограмме прерывания, процедуру convert , которая находится в этой же процедуре прерывания?
Зачем Вам Select case cifra в процедуре прерывания, сформируйте значение сегментов до прерывания.
доцент2 Дата: Пн, 09.01.2012, 19:49  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

у меня есть вариант такие. мне интересно было рассмотреть разные варианты, пускай и слишком мудреные.
Но почему виснет программа отработав НОРМАЛЬНО 2...3 секунды. Вот это для меня пока вопрос. Может в протеусе настроить надо что-то?
ЯНДЕКС Дата: 09.01.2012
ivan_fd Дата: Пн, 09.01.2012, 21:17  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Я Вам написал, что Вы сделали неправильно, и никакие это не мудреные варианты - это неправильно.

А на счет Протеуса, сейчас поставил PBP, скомпилировал. Так у меня она не виснет.
Только не мешало бы вот это дописать - ansel = %00001000

Сообщение отредактировал ivan_fd - Пн, 09.01.2012, 21:18
доцент2 Дата: Пн, 09.01.2012, 22:10  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

ivan_fd
Я скачал перевод даташид на pic16f676, там в ANSEL записали все что относиться к ADCON1 поэтому у меня и закралась ошибочка. СПАСИБО ОГРОМНОЕ, теперь работает. А что касается текста програмки - если заработала значит все правильно, просто некрасиво написано и если проект серьезный могут вылезти неприятности. На данном этапе я просто хотел разобраться с таймером. Если интересно вот более лучший вариант (интересно ваше мнение).
Прикрепления: 8097318.rar (35.3 Kb)
ivan_fd Дата: Пн, 09.01.2012, 23:55  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

biggrin Немного лучше но все же, в прерывании делать паузы pauseus 1500 не хорошо. Вы в прерывании выводите все три цифры за одно прерывание, а нужно выводить сначала одну, потом вторую, третью и снова сначала.
Удачи!
доцент2 Дата: Ср, 11.01.2012, 22:18  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

собрал вольтметр в железе на макетке. программа без прерываний. в протеусе все работает нормально, а в железе не хочет.
на индикаторе постоянно высвечивается "4.5". при замыкании входа АЦП (вывод 3) на массу - "0.0". при подключении батарейки на 3V к делителю - схема вообще не реагирует, а непосредственно к выводу АЦП показывает значения примерно 18.6. регулировка подстроечником на показания почти не влияет. пробовал два контроллера результат один и тотже. подскажите в чем может быть причина.
Форум Picbasic.ru » Программирование МК » PicBasicPro » Пишем программу для Вольтметра 0-30Вольт (Простой вольтметр на PIC16f676 (PIC16f73?))
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: