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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2774|回復: 8
收起左側

BASCOM AVR ADS1110 _16-BIT模數轉換器仿真

[復制鏈接]
ID:342822 發表于 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     '設置 單精度=科學計數法,保留點后位數
'Digits值為0將不會產生尾隨零。1-7之間的值可用于指定逗號后面的位數。

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

'   部件               設備I2C設備地址               部件
'   型號            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                 '計算電壓轉換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數據測量變量
Pga = 1                                           '
Cls

Do
Gosub duqu                                      '調用測量讀取計算子程序
Gosub xianshi                                   '調用測量結果子程序
Waitms 250
Waitms 50
Loop
End


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

'轉換這兩個字節是通過一些簡單的數學運算完成的。當以15 SPS采樣時,ADS1110返回的值(不是電壓)落在-32768和32767之間。
'該值的較高字節乘以 256,然后添加到較低的字節 – 然后乘以 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上顯示測量結果子程序
Setfont Font12x16
Lcdat 1, 6 , chr(130);chr(131);chr(132);":";'顯示Font12x16.font中的漢字字符:“電壓值”

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

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

Return

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





評分

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

查看全部評分

回復

使用道具 舉報

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


來個動態的

49gif.gif

回復

使用道具 舉報

ID:1111498 發表于 2024-2-27 17:18 | 顯示全部樓層
你好,我參照這個用MEGA16代替了mega8,讀出來的數據全部是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     '設置 單精度=科學計數法,保留點后位數


Dim dianya_zhuanhuan As Single                 '計算電壓轉換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數據測量變量
Pga = 1                                           '


Do
Gosub xie                                     '調用測量讀取計算子程序
Gosub duqu                                  '調用測量結果子程序
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                       '測量讀數   如果要讀取更多字節,請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節,則指定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
回復

使用道具 舉報

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

使用道具 舉報

ID:342822 發表于 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                                        '是串行數據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發送地址
   I2cwbyte &B00000000                                      ' 指向轉換寄存器
   I2cstart                                                 ' 起動條件
   I2cwbyte &H91                                            ' 讀_addr的從機地址
   I2crbyte Config_high , Ack
   I2crbyte Config_low , Nack
   I2cstop

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

End Function



回復

使用道具 舉報

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

使用道具 舉報

ID:342822 發表于 2024-2-28 00:11 | 顯示全部樓層
65.gif 轉移到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     '設置 單精度=科學計數法,保留點后位數
'  ----------------------------
  Const ADS1110_DIZHI = &B10010001         '選擇ED0標識的芯片ADS1110A0  地址:1001000 + 位0(讀/寫)
Const ADS1110_DIZHI_1 = &B10010011         '選擇ED0標識的芯片
'Const Addressw = &B10010000                          '沒使用
Dim dianya_zhuanhuan As Single                 '計算電壓轉換變量
Dim dianya_zhuanhuan_1 as Single
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數據測量變量
Dim CELIANGh_1 As Byte , CELIANGl_1 As Byte        '數據測量變量
Pga = 1                                           '
Cls

Do
Gosub duqu_1
Gosub duqu                                      '調用測量讀取計算子程序
Gosub xianshi                                   '調用測量結果子程序
Waitms 250
Waitms 50
Loop
End
'------------------------------------------------------------------------------
duqu:           '測量讀取計算子程序
I2cstart
I2cwbyte ADS1110_DIZHI                        '讀取地址
I2crbyte CELIANGh , Ack                       '測量讀數   如果要讀取更多字節,請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節,則指定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                       '測量讀數   如果要讀取更多字節,請指定ACK。
I2crbyte CELIANGl_1 , Nack                      '如果NACK是要讀取的最后一個字節,則指定NACK
I2cstop                                       '停止位
dianya_zhuanhuan_1 = CELIANGh_1 * 256                       '左移至高8位
   dianya_zhuanhuan_1 = dianya_zhuanhuan_1 + CELIANGl_1           '添加低8位
Return
'-----------------------------------------------------------------------------------
xianshi:                                         '在LCD上顯示測量結果子程序
Setfont Font12x16
Lcdat 2 ,1, dianya_zhuanhuan ;"mV" ;"  "       '8x8字體顯示
Return
'-------------------------------------------------------------------------------------------
$include "../Font12x16.font"                                   ' 字體文件
'$include "../font8x8TT.font"



回復

使用道具 舉報

ID:342822 發表于 2024-2-28 01:23 | 顯示全部樓層
991005 發表于 2024-2-27 22:35
我已經轉戰使用ADS1110了,沒有使用ADS1115了。我只需要一個通道就可以。我現在是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     '設置 單精度=科學計數法,保留點后位數


Dim dianya_zhuanhuan As Single                 '計算電壓轉換變量
Dim Pga As Integer                            '增益變量
Dim CELIANGh As Byte , CELIANGl As Byte        '數據測量變量
Pga = 1                                           '


Do
Gosub xie                                     '調用測量讀取計算子程序
Gosub duqu                                  '調用測量結果子程序
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                       '測量讀數   如果要讀取更多字節,請指定ACK。
I2crbyte CELIANGl , Nack                      '如果NACK是要讀取的最后一個字節,則指定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



回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄页网址在线观看 | 久久y| 99r在线| 成人欧美一区二区三区视频xxx | 视频一区 亚洲 | 99热99| 亚洲欧美日韩精品久久亚洲区 | 男女网站免费 | 美女在线国产 | 成人一区二区三区在线观看 | 久久一及片 | 特黄毛片 | 国产精品一区二区免费看 | 四虎成人免费视频 | 国产一区二区自拍 | 国产亚洲精品一区二区三区 | 久久99深爱久久99精品 | 在线精品一区二区 | 日本不卡一区二区三区在线观看 | 国产亚洲欧美另类一区二区三区 | 免费观看黄色片视频 | 国产精品免费一区二区三区 | 精品视频 免费 | 久久久久香蕉视频 | 久草青青草 | 欧美日一区| 涩涩视频网站在线观看 | av大片在线观看 | 午夜精品久久久 | 精品久久久久久久久久久久久久 | 精品久久久久久久久久久久久久 | a免费观看 | 91精品在线播放 | 国产蜜臀| 精品国产乱码久久久久久中文 | 亚洲精彩视频在线观看 | 国产精品日韩 | 日韩av在线一区 | 逼逼视频| 91免费版在线观看 | 亚洲精品视频一区 |