i2c

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 9737
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. június 25. péntek, 5:38

Az I2C az jó!
Csak nem Tiny2313-l!
Mert a megvalósítás miatt itt minden felfutó el megszakítást generál és abból építi fel a I2C címet/adatot. Azaz rengeteg erőforrást leköt.

ATMega chipben van valódi TWI/I2C, ez abszolút nem erőforrásigényes, a belső cél HW-t használja a kommunikációra a rendszer. Külön előnye ennek a megoldásnak, hogy a Sleep/PowerDown állapotból a processzort fel tudja kelteni...

I2C alapok:
A master ugye egyfolytában kérdezget, hogy mi van a tuloldalt. A Slave válaszol.
Azaz a kommunikáció kezdeményezése csak a master által lehetséges! Ezért van a I2C eszközöknek INT kimenete, ami a masetr egyik INT lábára javasolt kötni. A Slave(k) ezen át jelzik, hogy valakivel foglalkozni kell (Az INT kimenetek szabványosan openkollektorosak, azaz közösíthetőek.
Nálam a I2C-n lóg rajta az LCD és a nyomógombok. Teljesen jól beváltak.

Nézd meg az I2C_slave.bas állományt. Nagyon jól benne van minden.
Az eszközödnek SAJÁT címe van az I2C buszon, parancsokat tud fodadni paraméteresen és adatokat tud visszaadni. Max 254-t egy lépcsőben, egymás után.

Hátránya egyedül, hogy a függvénykönyvtárt külön meg kell venni/rendelni.

Ami Neked kell:
http://www.mcselec.com/index.php?page=s ... p&Itemid=1

Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 178
Csatlakozott: 2008. február 17. vasárnap, 7:00
Tartózkodási hely: Szuhakálló

HozzászólásSzerző: kefeur » 2010. június 25. péntek, 20:02

Ezek alapján meg lehet csinálni amit szeretnék.

Kicsit eldramatizáltam a helyzetet.
Köszönöm a segítséget!
Kefeur

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. július 19. hétfő, 12:56

Szervusztok Istenek!

Lenne egy picike elakadásom!
I2C-re kötöttem egy MAX7328 (Pcf8574) portbővítőt (Semmi extra 8 bit I/O, megszakításkimenettel)
Ha az IC-t csak bemenetként, vagy kimenetként használom, akkor a programozása nagyon egyszerű. Most viszont elakadtam, mivel a P0-P3 az bemenet, a P4-P7 viszont kimenet. (nyomógomb, LED)

Megszakítás érkezésekor megkapm az aktuális portállapotot, de hogyan tudnám különvenni az alsó 4 és a felső 4 bit értékét? Mivel a LED bit-jei mindig más és más, így muszáj lenne valahogy szétválasztani a be és kimenetet.

Segítsetek légyszives, ha tudtok! :cry:

Valami olyasmire gondoltam, mint a SRING konstansnál (változónál) a LEFT, MID, RIGHT parancs

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9737
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. július 19. hétfő, 13:14

Ertek.bitlab = megoldassal?

Ertek.0 -> 0.bit
Ertek.1 -> 1.bit
Ertek.2 -> 2.bit


A felső 4 bitet meg eldobod, ill nem dolgozod fel...



Másik:
Ertek->BIN->String->MID :)
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2010. július 19. hétfő, 13:19-kor.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3210
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2010. július 19. hétfő, 13:14

Használd a:
Rotate, Shift
Reset, Set
Utasításokat, a helpben találsz infót hozzá!

8)

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. július 19. hétfő, 14:58

Robert írta:Ertek.bitlab = megoldassal?

Ertek.0 -> 0.bit
Ertek.1 -> 1.bit
Ertek.2 -> 2.bit


A felső 4 bitet meg eldobod, ill nem dolgozod fel...



Másik:
Ertek->BIN->String->MID :)


Robert! Az első ötleted bejött, de csak akkor, ha minden lábat input-ra állítok.

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

I2cinit
I2cstart
I2cwbyte Max7328w
I2cwbyte 255
I2cstop


Ha az értékét átírom (bármi másra) nincs megszakítás. Ez mitől lehet?

Mellékelem a próbaprogramot is

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

$regfile = "m32def.dat"                                     'Mikrokontlorrer típusa
$crystal = 8000000

Dim Ertek As Byte
Dim Ertek1 As String * 8
Dim Ertek2 As String * 4
Dim Ertek3 As Byte

Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portb.6 , Rs = Portb.4
Config Lcdmode = Port

Config Scl = Portc.0                                        'I2C (Scl)beállítása
Config Sda = Portc.1                                        'I2C (Sda) beállítása
Config I2cdelay = 10
Config Pind.2 = Input

Config Int0 = Falling

Const Max7328r = &H41
Const Max7328w = &H40

I2cinit
I2cstart
I2cwbyte Max7328w
I2cwbyte 255
I2cstop

On Int0 Max7328

Enable Interrupts
Enable Int0


Initlcd
Cursor Off
Cursor Noblink
Cls

Do

Ertek1 = Bin(ertek)
Ertek2 = Right(ertek1 , 4)
Ertek3 = Val(ertek2)

Locate 1 , 1
Lcd Ertek2 ; "    " ; Ertek3
Waitms 100
Cls
Loop

Max7328:
  Waitms 5
  I2cstart
  I2cwbyte Max7328r
  I2crbyte Ertek , Nack
  I2cstop
  Gifr = 64
Return
End


A VAL fügvénnyel próbálom visszaállítani STRING-ből valami kezelhetőbb formátumba...

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. július 19. hétfő, 17:03

Szervusztok Istenek!

Bocs, hogy mindíg írkálok, de úgy néz ki, hogy rájöttem a gubancra!ű

A kimeneteken lévő LED-ed, ha mennek, kevés delej jut az INT kimenetre, így az AVR nem mindíg érzékeli.

Mit lehetne tenni ezellen??

Jelenleg direktben fut az AVR-re!

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. július 19. hétfő, 17:09

ampervadasz írta:Szervusztok Istenek!

Bocs, hogy mindíg írkálok, de úgy néz ki, hogy rájöttem a gubancra!ű

A kimeneteken lévő LED-ed, ha mennek, kevés delej jut az INT kimenetre, így az AVR nem mindíg érzékeli.

Mit lehetne tenni ezellen??

Jelenleg direktben fut az AVR-re!


Megvan! :D
MEGA32 esetén a Portd.2 = 1 segített!

Működik minden tökéletesen :wink:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9737
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. július 19. hétfő, 17:13

INT és a táp közt 10k felhúzóellenállás benn van?
INT az L->H vagy H->L jelre van. A generált INT az H->L élet ad.


Amit nem leltem: A IC honnan tudja hogy a lába kimenet vagy bemenet?
Vagy kívülről _kényszeritesz_ jelet rá? Azaz a lábra azt írod, hogy H szint legyen és GNDre lehúzod közbe egy kapcsolóval?


Az LCDre eleg ha binarisan kiirod a felso sorba a kiirt adatot, az alsoba meg a visszaolvasottat....
Nem kell a stringmuvelettel vacakolni:)


http://shpat.com/docs/maxim/MAX7328-MAX7329.pdf

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9737
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. július 19. hétfő, 17:14

Akkor bejött a tipp:
Openkollektoros az INT-ed és nem volt felhúzóellenállás....
Azért ne az AVR belsőjét használd (nem stabil erre a célra), hanem külső 4k7-t....

Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2010. július 19. hétfő, 17:25

Kösz a tippet!

Még beépítek akkor egy külső ellenállást

Ha a chip-nek "255" értéket küldök akkor az összes lába bemenet (H). Ezt egy nyomógombbal testre húzva érzékeli a chip és megszakítást generál. Viszont ha LED van rajta, akkor az nem világít, mivel mind a két lába magas szinten van!

Ha "0" értéket adok be akkor minden láb kimenet (L). ezt hiába is húznám testre nyomógombbal. :) . Viszont a led így tud világítani! Az, hogy a led bekapcsolása miért nem indít megszakítást azt már csakis a MAXIM tudja!

A lényeg, hogy minden tökéletesen működik!

Avatar
Giorgio
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2008. január 26. szombat, 7:00

HozzászólásSzerző: Giorgio » 2010. október 4. hétfő, 13:50

Sziasztok!

Őőő ... beütöttem a keresőbe, hogy I2C óra és egy halom topic-ot hozott találatnak. Ezért szeretnék most ebbe a topic-ba feltenni egy kérdést:

Vettem egy PCF8583-as óra IC-t és az a bajom, hogy 23.59.59.mp után nem ugrik a nap a következő napra. (gondolom uez a helyzet a hónappal és az évvel is) Kicsit körülményesen fogalmaztam, de gondolom értitek mi a problémám. Összegezve vettem egy órát és kész, pedig naptárnak van írva, akkor most, hogy is van ez? Tudnátok erre magyarázatot adni? Köszönöm.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3210
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2010. október 4. hétfő, 14:24

Hú ez ennél bonyolultabb lesz!
Kezdésnek itt olvasgass:
ÓraIC-k használata:
http://avr.tavir.hu/modules.php?name=Fo ... ht=pcf8583
PCF8563 év és a nap lekérdezése:
http://avr.tavir.hu/modules.php?name=Fo ... ht=pcf8583
:wink:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9737
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. október 4. hétfő, 16:09

Mi a mintaprogid? had tanuljunk mi is, hogy miből mi lett.... :)

Az órát Te számolod, vagy a naptárIC?
A Bascom órarutinját használod vagy sem?
Esetleg az óra 1 sec INT-et hazsnálod ki?:)

Na jó, gonoszklodtam, de ez mind az ÓraIC-t hazsnálja és pontos idő is születik belőle....

Hülye kérdés:
Az óra IC jár? Ott a kvarc mellette és pl. a beírt 12:01:25 ha kiolvasod 10 mp múlva, akkor 12:01:25 vagy 12:01:35 jön ki?

Avatar
Giorgio
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2008. január 26. szombat, 7:00

HozzászólásSzerző: Giorgio » 2010. október 4. hétfő, 16:16

Köszönöm szépen, de egy kicsit zavarban vagyok.
Nem igazán értem ... a linken lévő prog most bascom-ban van írva? Gondolom igen.

Nem vagyok valami nagy programozó, csak C-ben bohóckodom. Ezért egy újjabb és remélhetőleg utolsó kérdés:

Tehát, nekem nem az adatkezeléssel van gondom, mert be tudok írni az óra memóriájába és ki is tudom olvasni őket.
Csak az nem derül ki számomra a linkből, hogy akkor most naptól (weekday) kezdve a hónapokat, napokat (1.-31.), stb. már nekem kell szoftveresen kezelnem?

Megoldom, nem gond, csak ha ez így van, akkor nem egy nagy pukkanás ez az IC.


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 6 vendég