Вольтметр
|
|
Ruber | Дата: Воскресенье, 20.04.2014, 15:33 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 14
Статус: Offline
| Нужно сделать вольтамперметр для БП. Начал с вольтметра, взял мегу 88 и дисплей WH1602 Но по какой-то непонятной мне причине, Значение показываются не такие какие я ожидал. Подключил аккумулятор 3.3в, замерил его на мультиметре показывало 3,8. Подключил к своему устройсву, показывает 8,9. Крутил переменный резистор но значения были в пределах от 8.7 до 9.8 , никак не 3,8. В чем может быть ошибка в моем коде? Схема для снятия значения с батареи: Программа: Код $regfile "m88def.dat" $crystal = 8000000
'Конфигурируем ЖКИ Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Dim Volt As Single
Dim Readadc As Word
Initlcd Cursor Off Noblink
Config Adc = Single , Prescaler = Auto , Reference = Internal
Do
Start Adc
Readadc = Getadc(5) Volt = Readadc / 1023 Volt = Volt * 30 Stop Adc
Cls
Locate 1 , 1 Lcd "U" ; "=" ; Fusing(volt , "##.#") ; "V"
Waitms 500
Loop
End
|
|
| |
top | Дата: Воскресенье, 20.04.2014, 16:02 | Сообщение # 2 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| Если вы используете внутренний источник опорного напряжения 2.56 В, то надо диапазон измеряемого напряжения привести к диапазону 0...2.56 В. Делается это как вы поняли резистивным делителем. Собственно все как и в статье с этого сайта.
Если вы хотите повторить конструкцию с сайта, то присмотритесь к следующему тектсту: W = Getadc(1) M1 = W * 3 ' переводим значение АЦП в вольты. Так как запятая у меня ' фиксированная, то для удобства работать будем с целыми числами 3069/1023=3 ' где 3069 максимальное значение напряжения отображаемое вольтметром, ' или 30.69 В
и сразу все поймете.
Если конткретнее, то вместо: Readadc = Getadc(5) Volt = Readadc / 1023 Volt = Volt * 30 Stop Adc
надо: Readadc = Getadc(5) '1023 максимум Volt = Readadc * 3 '1023*3=3069 максимум Volt = Volt / 100 '3069/100=30.69 максимум Stop Adc
Чисто логически эти два варианта примерно эквивалентны. Но кто его знает, может заработает
Сообщение отредактировал top - Воскресенье, 20.04.2014, 16:10 |
|
| |
Ruber | Дата: Воскресенье, 20.04.2014, 17:04 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 14
Статус: Offline
| Цитата top ( ) Readadc = Getadc(5) '1023 максимумVolt = Readadc * 3 '1023*3=3069 максимумVolt = Volt / 100 '3069/100=30.69 максимумStop Изменил как вы и сказали но ничего не изменилось(
|
|
| |
GSV | Дата: Воскресенье, 20.04.2014, 17:21 | Сообщение # 4 |
Группа: Друзья
Сообщений: 38
Статус: Offline
| 1.Если вы используете внутренний источник опорного напряжения 2,56В, Config Adc = Single , Prescaler = Auto , Reference = Internal то максимальное выходное напряжение с делителя должно быть около 2,55В 2.Если максимальное входное входное напряжение 30В,то коэффициент на который нужно умножить показание АЦП будет равен: 30/1023 = 0,0293
Примерно так: Readadc = Getadc(5) Volt = Readadc *0,0293
Так как у вас переменная Volt задана как Single,то на экране должно выводиться напряжение заданного вами формата #.## V
|
|
| |
Ruber | Дата: Воскресенье, 20.04.2014, 19:08 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 14
Статус: Offline
| ничего не помогло(
|
|
| |
GSV | Дата: Воскресенье, 20.04.2014, 19:30 | Сообщение # 6 |
Группа: Друзья
Сообщений: 38
Статус: Offline
| С делителем все верно? На входе 30 на выходе 2,55?
|
|
| |
trim | Дата: Воскресенье, 20.04.2014, 22:39 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 105
Статус: Offline
| привет .в даташите вроде как есть ограничение по входящему напряжению у АЦП надоть делать через операцыонник
|
|
| |
Ruber | Дата: Среда, 30.04.2014, 15:06 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 14
Статус: Offline
| Ах да ) Мой вольт метр заработал=) Незнаю какой магией, но заработал с этим куском Код Readadc = Getadc(5) '1023 максимум Volt = Readadc * 3 '1023*3=3069 максимум Volt = Volt / 100 '3069/100=30.69 максимум Stop Adc (если нажать на картинку видно лучше)
Сообщение отредактировал Ruber - Среда, 30.04.2014, 15:12 |
|
| |