| Вольтметр | 
| 
				
			 | 
| 
| 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 |  
 |  |  |  |