久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2852|回復(fù): 8
收起左側(cè)

BASCOM AVR ADS1110 _16-BIT模數(shù)轉(zhuǎn)換器仿真

[復(fù)制鏈接]
ID:342822 發(fā)表于 2023-10-8 23:45 | 顯示全部樓層 |閱讀模式
屏幕截圖(148).png
$regfile = "m8def.dat"
$crystal = 8000000
'$baud = 19200



'Config Clockdiv = 1                                        ' 確保芯片以8 MHz運行
Config Scl = Portc.5                                        ' 使用i2c引腳
Config Sda = Portc.4
Config Twi = 400000                                         ' i2c 速度
I2cinit
$lib "i2c_twi.lbx"                                          ' 不使用模擬軟I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib"                                  ' 用這個特殊的lib覆蓋默認lib
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

Config Single = Scientific , Digits = 3     '設(shè)置 單精度=科學(xué)計數(shù)法,保留點后位數(shù)
'Digits值為0將不會產(chǎn)生尾隨零。1-7之間的值可用于指定逗號后面的位數(shù)。

' ADS1110的I2C 地址
'  -------------
' ADS1110的I2C地址是1001aaa,其中aaa是出廠時默認設(shè)置。ADS1110有8種不同類型,每種類型都有不同的I2C地址。封裝上,
' ADS1110的每種類型都以EDx為標識,其中x表示地址變量。

'   部件               設(shè)備I2C設(shè)備地址               部件
'   型號            BIN        HEX        DEC       標記
' ---------       -------      ----       ---     -------
' ADS1110A0       1001000      0x48       72        ED0
' ADS1110A1       1001001      0x49       73        ED1
' ADS1110A2       1001010      0x4A       74        ED2
' ADS1110A3       1001011      0x4B       75        ED3
' ADS1110A4       1001100      0x4C       76        ED4
' ADS1110A5       1001101      0x4D       77        ED5
'ADS1110A6       1001110      0x4E       78        ED6
' ADS1110A7       1001111      0x4F       79        ED7
'  ----------------------------
Const ADS1110_DIZHI = &B10010001         '選擇ED0標識的芯片ADS1110A0  地址:1001000 + 位0(讀/寫)
'Const Addressw = &B10010000                          '沒使用

Dim dianya_zhuanhuan As Single                 '計算電壓轉(zhuǎn)換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數(shù)據(jù)測量變量
Pga = 1                                           '
Cls

Do
Gosub duqu                                      '調(diào)用測量讀取計算子程序
Gosub xianshi                                   '調(diào)用測量結(jié)果子程序
Waitms 250
Waitms 50
Loop
End


'------------------------------------------------------------------------------
duqu:           '測量讀取計算子程序
I2cstart
I2cwbyte ADS1110_DIZHI                        '讀取地址
I2crbyte CELIANGh , Ack                       '測量讀數(shù)   如果要讀取更多字節(jié),請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節(jié),則指定NACK
I2cstop                                       '停止位

'轉(zhuǎn)換這兩個字節(jié)是通過一些簡單的數(shù)學(xué)運算完成的。當以15 SPS采樣時,ADS1110返回的值(不是電壓)落在-32768和32767之間。
'該值的較高字節(jié)乘以 256,然后添加到較低的字節(jié) – 然后乘以 2.048,最后除以 32768。

   dianya_zhuanhuan = CELIANGh * 256                       '左移至高8位
   dianya_zhuanhuan = dianya_zhuanhuan + CELIANGl           '添加低8位
   dianya_zhuanhuan = dianya_zhuanhuan * 2.048
   dianya_zhuanhuan = dianya_zhuanhuan / 32768
   dianya_zhuanhuan = dianya_zhuanhuan / Pga
dianya_zhuanhuan = dianya_zhuanhuan *1000    '擴大1千倍以mV單位顯示
Return


'-----------------------------------------------------------------------------------
xianshi:                                         '在LCD上顯示測量結(jié)果子程序
Setfont Font12x16
Lcdat 1, 6 , chr(130);chr(131);chr(132);":";'顯示Font12x16.font中的漢字字符:“電壓值”

Lcdat 5 , 20 , Fusing(dianya_zhuanhuan , "#.&");"mV" ;"    "        '12x16字體顯示:保留小數(shù)點后3位.

Setfont Font8x8tt
Lcdat 2 , 64 , Fusing(dianya_zhuanhuan , "#.&");"mV" ;       '8x8字體顯示

Return

'-------------------------------------------------------------------------------------------
$include "../Font12x16.font"                                   ' 字體文件
$include "../font8x8TT.font"





評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2023-10-9 21:53 | 顯示全部樓層


來個動態(tài)的

49gif.gif

回復(fù)

使用道具 舉報

ID:1111498 發(fā)表于 2024-2-27 17:18 | 顯示全部樓層
你好,我參照這個用MEGA16代替了mega8,讀出來的數(shù)據(jù)全部是0,求大佬解答,十分感謝!
$regfile = "m16adef.dat"
$crystal = 12000000
$baud = 9600

Config Scl = Portc.0                                       
Config Sda = Portc.1
Config Twi = 400000                                         
I2cinit
$lib "i2c_twi.lbx"                                          ' 不使用模擬軟I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib"                                  ' 用這個特殊的lib覆蓋默認lib


Config Single = Scientific , Digits = 3     '設(shè)置 單精度=科學(xué)計數(shù)法,保留點后位數(shù)


Dim dianya_zhuanhuan As Single                 '計算電壓轉(zhuǎn)換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數(shù)據(jù)測量變量
Pga = 1                                           '


Do
Gosub xie                                     '調(diào)用測量讀取計算子程序
Gosub duqu                                  '調(diào)用測量結(jié)果子程序
print dianya_zhuanhuan               'dianya_zhuanhuan
Waitms 250
Waitms 50
Loop
End


'------------------------------------------------------------------------------
xie:
I2cstart                                                'start condition
I2cwbyte &H90                                       'slave address
I2cwbyte &H8C                                         'asdress of EEPROM
I2cstop                                                 'stop condition
Waitms 10                                               'wait for 10 milliseconds
Return


duqu:           '測量讀取計算子程序
I2cstart
I2cwbyte &H91                        '讀取地址
I2crbyte CELIANGh , Ack                       '測量讀數(shù)   如果要讀取更多字節(jié),請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節(jié),則指定NACK
I2cstop                                       '停止位

   dianya_zhuanhuan = CELIANGh * 256                       '左移至高8位
   dianya_zhuanhuan = dianya_zhuanhuan + CELIANGl           '添加低8位
   dianya_zhuanhuan = dianya_zhuanhuan * 2.048
   dianya_zhuanhuan = dianya_zhuanhuan / 32768
   dianya_zhuanhuan = dianya_zhuanhuan / Pga
dianya_zhuanhuan = dianya_zhuanhuan *1000    '擴大1千倍以mV單位顯示
Return
回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2024-2-27 22:24 | 顯示全部樓層
先生,不能簡單地套用啊~~~
這個ads1110只有一個adc通道。你那個1115有4個通道需另外要配置的
我已上傳了別人寫的程序及仿真動畫圖片,你再琢磨琢磨
回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2024-2-27 22:29 | 顯示全部樓層
63.gif

$regfile = "m16def.dat"                                      ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
'$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 64                                             ' default use 40 for the frame space


Declare Function Get_adc(byval Ain_x As Byte) As Integer

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , Rs = Portb.0 , E = Portb.1

Config Lcd = 16 * 2                                         '配置液晶屏
Cursor Off Noblink


Dim Myinteger As Integer
Dim Voltage As Single
Dim Vol_str As String * 8



'采樣接口引腳配置
Dim Channel(8) As Byte
'AIN0-AIN1                'AIN0-AIN3                'AIN1-AIN3                'AIN2-AIN3
Channel(5) = &B00000000 : Channel(6) = &B00010000 : Channel(7) = &B00100000 : Channel(8) = &B00110000
'AIN0-GND                 'AIN1-GND                 'AIN2-GND                 'AIN3-GND
Channel(1) = &B01000000 : Channel(2) = &B01010000 : Channel(3) = &B01100000 : Channel(4) = &B01110000

'配置引腳以用于I2C總線
Config Scl = PortC.0                                       '是串行時鐘SCL
Config Sda = PortC.1                                        '是串行數(shù)據(jù)SDA
I2cinit

'*************************************************************************************
Cls
Do
   Myinteger = Get_adc(2)
   'Cls
   Locate 1 , 1
   Lcd Hex(myinteger)

   Voltage = Myinteger / 32768
   Voltage = Voltage * 4096
   Myinteger = Round(voltage)
   Vol_str = Str(myinteger)
   Vol_str = Format(vol_str , "0.000")
   Locate 2 , 1
   Lcd Vol_str

   Waitms 600
Loop
End

'*************************************************************************************
Function Get_adc(byval Ain_x As Byte) As Integer

   Local Config_high As Byte
   Local Config_low As Byte

   'addr_pin接地
   '寫入ads1115的地址

   'W_addr = &H90
   '從ads1115讀取的地址
   'R_addr = &H91

   Config_high = &B10000000
   Config_high = Config_high + Channel(2)
  Config_high = Config_high + &B00000010                   ' Pga(2)  ±4.096V
   'Config_high = Config_high + &B00000100                   ' Pga(3)  ±2.048V
   Config_low = &B10000000                                  ' 128SPS

   '初始化I2C
   I2cstart
   I2cwbyte &H90                                            ' W_地址
   I2cwbyte &B00000001                                      ' 指向Config寄存器
   I2cwbyte Config_high
   I2cwbyte Config_low
   I2cstop

   '讀_ad
   I2cstart                                                 ' 生成起始碼
   I2cwbyte &H90                                            ' W_addr發(fā)送地址
   I2cwbyte &B00000000                                      ' 指向轉(zhuǎn)換寄存器
   I2cstart                                                 ' 起動條件
   I2cwbyte &H91                                            ' 讀_addr的從機地址
   I2crbyte Config_high , Ack
   I2crbyte Config_low , Nack
   I2cstop

   Get_adc = Makeint(config_low , Config_high) '將兩個字節(jié)壓縮成一個字或整數(shù)。等效代碼是:VARN=(256*MSB)+LSB

End Function



回復(fù)

使用道具 舉報

ID:1111498 發(fā)表于 2024-2-27 22:35 | 顯示全部樓層
我已經(jīng)轉(zhuǎn)戰(zhàn)使用ADS1110了,沒有使用ADS1115了。我只需要一個通道就可以。我現(xiàn)在是ADS1110和ATMEGA16。使用上面那個程序,讀出來的數(shù)據(jù)全是0.0
麻煩大神指導(dǎo)指導(dǎo)
回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2024-2-28 00:11 | 顯示全部樓層
65.gif 轉(zhuǎn)移到mega16只改動ADC引腳
這里有幾個地方要注意
1.ADS1110封裝標記在芯片屬性里配置
2.字體文件要添加到代碼頁左邊欄中。
附程序:
$regfile = "m16def.dat"
$crystal = 8000000
'$baud = 19200
'Config Clockdiv = 1                                        ' 確保芯片以8 MHz運行
Config Scl = Portc.0                                        ' 使用i2c引腳
Config Sda = Portc.1
Config Twi = 400000                                         ' i2c 速度
I2cinit
$lib "i2c_twi.lbx"                                          ' 不使用模擬軟I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib"                                  ' 用這個特殊的lib覆蓋默認lib
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

Config Single = Scientific , Digits = 2     '設(shè)置 單精度=科學(xué)計數(shù)法,保留點后位數(shù)
'  ----------------------------
  Const ADS1110_DIZHI = &B10010001         '選擇ED0標識的芯片ADS1110A0  地址:1001000 + 位0(讀/寫)
Const ADS1110_DIZHI_1 = &B10010011         '選擇ED0標識的芯片
'Const Addressw = &B10010000                          '沒使用
Dim dianya_zhuanhuan As Single                 '計算電壓轉(zhuǎn)換變量
Dim dianya_zhuanhuan_1 as Single
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數(shù)據(jù)測量變量
Dim CELIANGh_1 As Byte , CELIANGl_1 As Byte        '數(shù)據(jù)測量變量
Pga = 1                                           '
Cls

Do
Gosub duqu_1
Gosub duqu                                      '調(diào)用測量讀取計算子程序
Gosub xianshi                                   '調(diào)用測量結(jié)果子程序
Waitms 250
Waitms 50
Loop
End
'------------------------------------------------------------------------------
duqu:           '測量讀取計算子程序
I2cstart
I2cwbyte ADS1110_DIZHI                        '讀取地址
I2crbyte CELIANGh , Ack                       '測量讀數(shù)   如果要讀取更多字節(jié),請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節(jié),則指定NACK
I2cstop                                       '停止位

   dianya_zhuanhuan = CELIANGh * 256                       '左移至高8位
   dianya_zhuanhuan = dianya_zhuanhuan + CELIANGl           '添加低8位
   dianya_zhuanhuan = dianya_zhuanhuan * 2.048
   dianya_zhuanhuan = dianya_zhuanhuan / 32768
   dianya_zhuanhuan = dianya_zhuanhuan / Pga
dianya_zhuanhuan = dianya_zhuanhuan *1000    '擴大1千倍以mV單位顯示
Return
duqu_1:
I2cstart
I2cwbyte ADS1110_DIZHI_1                        '讀取地址
I2crbyte CELIANGh_1 , Ack                       '測量讀數(shù)   如果要讀取更多字節(jié),請指定ACK。
I2crbyte CELIANGl_1 , Nack                      '如果NACK是要讀取的最后一個字節(jié),則指定NACK
I2cstop                                       '停止位
dianya_zhuanhuan_1 = CELIANGh_1 * 256                       '左移至高8位
   dianya_zhuanhuan_1 = dianya_zhuanhuan_1 + CELIANGl_1           '添加低8位
Return
'-----------------------------------------------------------------------------------
xianshi:                                         '在LCD上顯示測量結(jié)果子程序
Setfont Font12x16
Lcdat 2 ,1, dianya_zhuanhuan ;"mV" ;"  "       '8x8字體顯示
Return
'-------------------------------------------------------------------------------------------
$include "../Font12x16.font"                                   ' 字體文件
'$include "../font8x8TT.font"



回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2024-2-28 01:23 | 顯示全部樓層
991005 發(fā)表于 2024-2-27 22:35
我已經(jīng)轉(zhuǎn)戰(zhàn)使用ADS1110了,沒有使用ADS1115了。我只需要一個通道就可以。我現(xiàn)在是ADS1110和ATMEGA16。使用 ...

66.gif

按你提供的代碼運行良好
$regfile = "m16adef.dat"
$crystal = 8000000
$baud = 9600

Config Scl = Portc.0                                       
Config Sda = Portc.1
Config Twi = 400000                                         
I2cinit
$lib "i2c_twi.lbx"                                          ' 不使用模擬軟I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib"                                  ' 用這個特殊的lib覆蓋默認lib


Config Single = Scientific , Digits = 3     '設(shè)置 單精度=科學(xué)計數(shù)法,保留點后位數(shù)


Dim dianya_zhuanhuan As Single                 '計算電壓轉(zhuǎn)換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數(shù)據(jù)測量變量
Pga = 1                                           '


Do
Gosub xie                                     '調(diào)用測量讀取計算子程序
Gosub duqu                                  '調(diào)用測量結(jié)果子程序
print dianya_zhuanhuan               'dianya_zhuanhuan
Waitms 250
Waitms 50
Loop
End


'------------------------------------------------------------------------------
xie:

I2cstart
                                        'asdress of EEPROM                                               'start condition
I2cwbyte &H90                                       'slave address
I2cwbyte &H8C
I2cstop                                                 'stop condition
Waitms 10                                               'wait for 10 milliseconds
Return


duqu:           '測量讀取計算子程序
I2cstart
I2cwbyte &H91                        '讀取地址
I2crbyte CELIANGh , Ack                       '測量讀數(shù)   如果要讀取更多字節(jié),請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節(jié),則指定NACK
I2cstop                                       '停止位

   dianya_zhuanhuan = CELIANGh * 256                       '左移至高8位
   dianya_zhuanhuan = dianya_zhuanhuan + CELIANGl           '添加低8位
   dianya_zhuanhuan = dianya_zhuanhuan * 2.048
   dianya_zhuanhuan = dianya_zhuanhuan / 32768
   dianya_zhuanhuan = dianya_zhuanhuan / Pga
dianya_zhuanhuan = dianya_zhuanhuan *1000    '擴大1千倍以mV單位顯示
Return



回復(fù)

使用道具 舉報

ID:342822 發(fā)表于 2024-2-28 10:03 | 顯示全部樓層
問題可能出在單片機與終端通訊配置上:
1,要做到mega16屬性中晶振頻率與程序代碼中的頻率一致。
2,終端中波特率的選擇與代碼中的一致。
3,單片機與終端連接是叫擦連接即:TXD---RXD
試試看,祝你成功~~
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷av久久久久久久 | 欧美freesex黑人又粗又大 | 欧美一区二区三区免费电影 | 国产美女福利在线观看 | xx视频在线| 中文字幕不卡在线观看 | 在线观看精品 | 欧美男人的天堂 | 超碰成人免费观看 | 中文字幕一区在线观看视频 | 久久精品com | 亚洲人在线播放 | www.免费看片.com | 美女黄18岁以下禁止观看 | 337p日韩 | 国产成人精品免高潮在线观看 | 日本一区二区高清视频 | 亚洲一区视频在线 | 免费h在线 | 婷婷色在线 | 浴室洗澡偷拍一区二区 | 日韩色综合| 欧美一级二级三级 | av一区二区三区 | avmans最新导航地址 | 国产乱码精品一区二区三区五月婷 | 欧美在线小视频 | 美女久久视频 | 精品视频99 | 亚洲成人福利视频 | 欧美aaaa视频 | 国产剧情一区 | 欧美国产精品一区二区三区 | 久久国产精品精品国产色婷婷 | 亚洲精品一区二区三区四区高清 | 国产精品成人一区 | 亚洲成人一区 | 久久99一区二区 | 亚洲国产中文字幕 | 久久亚洲一区二区三区四区 | 亚洲国产欧美日韩 |