ATmega16 DS1620 vs 16x2 LCD i2c buszon

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
lacbp
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2010. november 22. hétfő, 7:00

ATmega16 DS1620 vs 16x2 LCD i2c buszon

Hozzászólás Szerző: lacbp »

Sziasztok!

Nem akartam új topicot nyitni,mert annyi helyen olvashatok a problémámról, de képtelen vagyok megoldani. Valamit tuti elszúrok. (vagy a progi rossz)
Adott egy mega16 - a későbbi bővíthetőség miatt.
egyenlőre 1db ds1620 (azért ez,mert az LM nincs benne a proteus ISIS-ben és ezzel tesztelek, mivel basic-ben nem sok tapasztalatom van)
és egy 2 soros LCD.

Egyenlőre annak is örülnék, ha 1db hőmérő értékeit le tudnám olvasni.

A program ennyi:

$crystal = 8000000 'Sebesseg
$regfile = "M16def.dat" 'Chip
$baud = 9600
$swstack = 128
$hwstack = 128
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portc.3 , Rs = Portc.2

Declare Sub Homerseklet_olvas
Dim Homerseklet As Byte
Dim Felfok As Byte
Dim Th As Byte
Dim Tl As Byte


Config Sda = Porta.1
Config Scl = Porta.0

Cls

Prog:

Call Homerseklet_olvas

If Felfok = 128 Then Felfok = 5 Else Felfok = 0
Locate 1 , 1
Lcd "**** " ; Homerseklet ; "," ; Felfok ; Chr(0) ; "C" ; " ****"
Goto Prog

End

Sub Homerseklet_olvas
'hőmérést elkezdeni
I2cstart '12c busz start parancs
I2cwbyte &H90 'ds1621 címe
I2cwbyte &HEE 'hőmérést elvégezni parancs
I2cstop 'stop parancs
'-------------
'hőmérsékletet kiolvasni
I2cstart 'i2c start parancs
I2cwbyte &H90 'ds1621 címe
I2cwbyte &HAA 'Hőmérséklet olvasása parancs
I2cstop 'i2c busz stop parancs

I2cstart
I2cwbyte &H91
I2crbyte Homerseklet , Ack 'hőmérséklet
I2crbyte Felfok , Nack '0.5 'C jelzés kiolvasása
I2cstop
End Sub

az I2C ic a0 a1 02 lába alacsony szinten.

a bekőtés így néz ki
Kép


Mit rontottam el?

köszönöm![/img]
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

Az I2C kivezetések nyitott kollektoros (draines) kivezetések, felhúzó ellenállásokat szokás a kivezetésekre kötni.
[/img]
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az i2c írás-olvasás címe nem lehet azonos!
A &h90 szerintem &h91.
Avatar
lacbp
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2010. november 22. hétfő, 7:00

Hozzászólás Szerző: lacbp »

Robert írta:Az i2c írás-olvasás címe nem lehet azonos!
A &h90 szerintem &h91.

A felhúzó ellenállásokat betettem. 2x 2k2.

átírtam 90 - 91 -re..

még nem jó:(

a 255.0 fokot ír ki...

AMúgy ha összejönne egy napkkollektor vezérlést szeretnék megvalósítani, amibe belevariálnám a kazán + keringető szivattyú , és külső - belső hőmérséklet kijelzéseket.

de már az első lépéseknél elakadtam:(
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

I2C olvasási szekvencia:

1. startbit küldés
2. eszköz megcímzése, cím &h91 (írás)
3. parancsbájt kiküldése
4. ismételt startbit kiküldése
5. eszköz megcímzése, cím &h90 (olvasás)
6. bájt beolvasása
7. stopbit kiküldése

Kimaradt a programból az ismételt startbit és kétszer kell címezni, előszöőr a parancsot adjuk meg (írás), majd másodszor az olvasási szándékot közöljük a második startbit után
Avatar
lacbp
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2010. november 22. hétfő, 7:00

Hozzászólás Szerző: lacbp »

szegoj írta:I2C olvasási szekvencia:

1. startbit küldés
2. eszköz megcímzése, cím &h91 (írás)
3. parancsbájt kiküldése
4. ismételt startbit kiküldése
5. eszköz megcímzése, cím &h90 (olvasás)
6. bájt beolvasása
7. stopbit kiküldése

Kimaradt a programból az ismételt startbit és kétszer kell címezni, előszöőr a parancsot adjuk meg (írás), majd másodszor az olvasási szándékot közöljük a második startbit után

Ezt megírnád nekem basicben? az ic címlábai alacsony szintre kötve... szóval elvileg 1001000x
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Megvan a Helpben I2CRBYTE:

Kód: Egész kijelölése


Const Addressw = 174            ' write address
Const Addressr = 175             ' read address

Dim B1 As Byte , Adres As Byte , Value As Byte             'dim byte


  I2cstart                    'generate start
  I2cwbyte Addressw           'slave adsress
  I2cwbyte Adres              'address of EEPROM
  I2cstart                    'repeated start
  I2cwbyte Addressr           'slave address (read)
  I2crbyte Value , Nack       'read byte
  I2cstop                     'generate stop
:arrow:
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

Az alábbi címen megtalálható az IC adatlapja:
pdfserv.maxim-ic.com/en/ds/DS1621.pdf

Körülbelül így alakítanám a programot

Sub Homerseklet_olvas
'hőmérést elkezdeni
I2cstart '12c busz start parancs
I2cwbyte &H91 'ds1621 írás
I2cwbyte &HEE 'hőmérést elvégezni parancs
I2cstop 'stop parancs
'-------------

'hőmérsékletet kiolvasni
I2cstart 'i2c start parancs
I2cwbyte &H91 'ds1621 írás
I2cwbyte &HAA 'Hőmérséklet olvasása parancs

' itt jön az ismételt startbit
'
I2cstart
I2cwbyte &H90 'ds1621 olvasás
I2crbyte Homerseklet , Ack 'hőmérséklet
I2crbyte Felfok , Nack '0.5 'C jelzés kiolvasása
I2cstop
End Sub
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

Bocs felcseréltem:
az írás címe &h90, az olvasásé a &h91 !
Avatar
lacbp
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2010. november 22. hétfő, 7:00

Hozzászólás Szerző: lacbp »

szegoj írta:Bocs felcseréltem:
az írás címe &h90, az olvasásé a &h91 !

ÉÉÉÉS Itt a pont!

Köszönöm!

Hidd el, kb 20 féle helyről 20 különböző féle megoldást töltöttem le. és egyikkel sem ment...
De a te leírásod alapján megy.
Érdekes, hogy csak a hexa számokat átírtam abban, amit én csináltam, és úgy is működik!

Már csak a negatív fokokkal van baja, de annak majd még utána nézek!

Köszi!
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

LM75-nél a negatív úgy műxik, hogy a visszaadott hőmérséklet egy byte.
Ami 0-127-ig a pozitív fok, ha nagyobb mint 127 akkor az értékből ki kell vonni 255-öt és megkapjuk a negatív értéket.
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

A DS1621 két bájtot ad vissza olvasáskor.
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

Hozzászólás Szerző: szegoj »

Megadott hőmérsékleten a bájtok binárisan illetve hexadecimálisan a következők:
+125°C 01111101 00000000 7D00h
+25°C 00011001 00000000 1900h
+½°C 00000000 10000000 0080h
+0°C 00000000 00000000 0000h
-½°C 11111111 10000000 FF80h
-25°C 11100111 00000000 E700h
-55°C 11001001 00000000 C900h
Válasz küldése