Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ivan Mojster
Pridružen/-a: Pon Mar 2004 18:49 Prispevkov: 45 Kraj: Cerkno
|
Objavljeno: Pon Jan 28, 2008 6:36 pm Naslov sporočila: 12 bit ADC - max127 |
|
|
Pozdravljeni,
ali je kdo mogoče že napisal kakšen program za max127 v avr ali bascomu, ker na netu ne najdem nič uporabnega. To je sicer starejši proizvod, vendar zelo zanimiv. uporablja I2C protokol. |
|
Nazaj na vrh |
|
|
Rplink3r Novinec
Pridružen/-a: Čet Okt 2007 19:25 Prispevkov: 2
|
Objavljeno: Ned Feb 03, 2008 12:26 pm Naslov sporočila: |
|
|
Glede na to da je v uporabi i2c protokol, je na netu veliko primerov uporabe le tega z bascomom. Kakor pa vidim v datasheetu je lepo napisano za Control byte, z katerim pošlješ zahtevo za podatek in nekatere nastavitve na ADC, z dvema data bytima pa dobiš 12 biten podatek o vrednosti nazaj. En bajt je celih 8bitov, drugi pač samo 4. To sem zvedel iz manj ko 1min branja datasheeta. Predlagam preštudirat datasheet ter glede na primere z i2c napisat program. _________________ Life is just too simple to understand. |
|
Nazaj na vrh |
|
|
ivan Mojster
Pridružen/-a: Pon Mar 2004 18:49 Prispevkov: 45 Kraj: Cerkno
|
Objavljeno: Pet Feb 15, 2008 6:04 pm Naslov sporočila: |
|
|
Malo sem prebral podatke od max127 in napisal spodnji program,
vendar mi ne deluje, v čem je problem, saj bi načeloma moralo delovati.
Koda: | $regfile = "m8def.dat"
' ADC max127
'$hwstack = 32
'$swstack = 8
'$framesize = 24
$crystal = 1000000
$baud = 2400
Config Sda = Portc.5 ' 10 k ohm na +
Config Scl = Portc.4 ' 10 k ohm na +
'Max127 has a adress 0101 A2 A1 A0 RW
Const Adr_vpis = &B01010000 'adresa VPIS 01010000
Const Adr_branje = &B01010001 'adresa BRANJE 01010001
Const Kanal_st0 = &B10000000 'Control-Byte za AD-Kanal 0
Dim Beri_vred_h As Byte
Dim Beri_vred_l As Byte
'I2cinit
Print "test max127"
Do
I2cstart
I2cwbyte Adr_vpis ' adresa vpis
I2cwbyte Kanal_st0 ' številka kanala 0
I2cstop
Waitms 100
I2cstart
I2cwbyte Adr_branje ' adresa branje
I2crbyte Beri_vred_h ' branje H
I2crbyte Beri_vred_l ' branje L
I2cstop
Print " H " ; Beri_vred_h ; " L " ; Beri_vred_l ' izpis na COM
Waitms 100
Loop |
lp ivan |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Pet Feb 15, 2008 7:19 pm Naslov sporočila: 12 bit ADC max127 |
|
|
Ivan,
malo sem gledal pdf MAX 127, in mi ni jasno zakaj po poslanem kontrolnem bajtu uporabljaš zakasnitev, moral bi uporabiti ACK. Na ta način zamudiš pretvorbo.
Prav tako poskusi uporabiti I2Cdelay, ker mi se zdi da je I2C prehiter za toje vezje. Ali imaš naslov čipa (pine A0, A1 in A2 vezane na maso)?
Vlado |
|
Nazaj na vrh |
|
|
ivan Mojster
Pridružen/-a: Pon Mar 2004 18:49 Prispevkov: 45 Kraj: Cerkno
|
Objavljeno: Pet Feb 22, 2008 6:19 pm Naslov sporočila: 12 bit ADC MAX127 |
|
|
Končno mi je uspelo oživeti max127. Če koga zanima je spodaj delujoča koda
Koda: | '12 bit ADC max127
'AVR Compiler version :1.11.8.7
$regfile = "m8def.dat"
'$hwstack = 32
'$swstack = 8
'$framesize = 24
$crystal = 1000000
$baud = 2400
$lib "i2c_twi.lbx" ' uporabimo hardverski SDA in SCL , od m8 naprej
Config Sda = Portc.5 ' 1o kohm na +5V
Config Scl = Portc.4 ' 1o kohm na +5V
'Max127 has a adress 0101 A2 A1 A0 RW
Const Adr_vpis = &B01010000 'adresa VPIS 01010000
Const Adr_branje = &B01010001 'adresa BRANJE 01010001
'-------------------------------- 'START=1 CHANNEL=0 RANGE=0 BIPOLAR=0 POWERDOWN=0
Const Kanal_st0 = &B10000000 'Control-Byte za AD-Kanal 0
'Const Kanal_st1 = &B10010000
'Const Kanal_st2 = &B10100000
'Const Kanal_st3 = &B10110000
'Const Kanal_st4 = &B11000000
'Const Kanal_st5 = &B11010000
'Const Kanal_st6 = &B11100000
'Const Kanal_st7 = &B11110000
'Const Kanal_st0 = &B10001000 ' 0 do 10 v
Dim Beri_vred_h As Byte
Dim Beri_vred_l As Byte
Dim Ad0 As Integer
Dim Ad0_1 As Integer
Print "test max127"
Do
I2cstart
I2cwbyte Adr_vpis
I2cwbyte Kanal_st0
I2cstop
' Print "Error : " ; Err 'show error status
I2cstart
I2cwbyte Adr_branje
I2crbyte Beri_vred_h , Ack
I2crbyte Beri_vred_l , Nack
I2cstop
'Print "Error : " ; Err 'show error status
Print " H " ; Beri_vred_h ; " L " ; Beri_vred_l
Print Bin(beri_vred_h)
Print Bin(beri_vred_l)
Ad0 = Beri_vred_h * 16 'Ad0 =((beri_vred_h * 16) + Beri_vred_l)
Ad0_1 = Ad0 + Beri_vred_l
Print Ad0_1
Waitms 2000
Loop
|
Lp ivan |
|
Nazaj na vrh |
|
|
Jernej_ Profesionalec
Pridružen/-a: Tor Jan 2008 22:46 Prispevkov: 57 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
|