www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

I2c in dva mikrokontrolerja 4051

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
pajo
Član
Član



Pridružen-a: Čet 29 Jan 2004 8:50
Prispevkov: 687
Aktiv.: 3.08

PrispevekObjavljeno: Tor Apr 17, 2007 11:16 am    Naslov sporočila:  I2c in dva mikrokontrolerja 4051 Odgovori s citatom

Imam dva kontrolerja 4051. Med njima bi rad naredil I2C povezavo. V tem primeru je treba enega določiti kot Master oziroma oddajno stran in drugega kot slave. Odddajno stran-master mi ni problem narediti. Me pa zanima, kako je s slave stranjo in če mogoče obstaja že kakšen programček, oziroma kako se naj zadeve lotim.
Delam pa v Bascomu.

Hvala!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2105
Aktiv.: 10.08
Kraj: Krško

PrispevekObjavljeno: Tor Apr 17, 2007 6:48 pm    Naslov sporočila:   Odgovori s citatom

Si probal z kašnim eepromom?Sicer pa poveza med kontrolerjema velja pri UART,kjer imaš Rx in Tx priključke. Ponavadi se I2C uporablja za razne tempareturne senzorje in priključevanje raznih eeprom-ov, kjer je v tem primeru uC master. Probaj z UART povezavo. Tale 100% deluje (master-slave). Podroben primer je opisan v knjigi "programiranje mikrokontrolera programskim jezikom BASCOM" na strani 53.



Lp,denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.02
Kraj: Dragomer

PrispevekObjavljeno: Tor Apr 17, 2007 9:47 pm    Naslov sporočila:  V Bascomu ne bo šlo Odgovori s citatom

Bascom8051, ki s katerim lahko progrmairaš AT89c2051, podpira i2c protokol komunikacije, kjer je uC vedno master, slave pa je bodisi eeprom ali kak drug i2c slave.
Seveda bi lahko naštudiral i2c protokol in potem v assemblerju naredil rutine, ki bi pripravile uC, da bi se obnašal kot slave, a zakaj.

Dva uC-a povežeš lažje v komunikacijo preko UART-a, se pravi RX in TX pinov, in Bascom ima ukaze tako za pisanje kot tudi branje.

Če boš opisal, kaj bi rad dosegel, ti bomo lažje svetovali, kakšna orodja vzeti v roke.

Pozdrav
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pajo
Član
Član



Pridružen-a: Čet 29 Jan 2004 8:50
Prispevkov: 687
Aktiv.: 3.08

PrispevekObjavljeno: Sre Apr 18, 2007 8:12 am    Naslov sporočila:   Odgovori s citatom

Imam dva kontrolerja. Prvi je uporabljen za merjenje temp. z dalasovimi senzorji DS1820. Ker so te meritve sorazmerno počasne, sem se odločil, da bi en kontroler opravljal samo meritve. Drugi pa krmili releje in en koračni motorček. Dodani so še en PCF8583 en e-eprom 24lc04 in še en PCF8591. Komunikacija prek i2c vodila in drugim kontrolerjem je takrat že bila vzpostavljena. Tako sem prišel na idejo, da bi se prvi kontroler obnašal kot slave i2c naprava. Tudi tiskanina je že tako pripravljena. Pozneje, ko sem že oddal to temo, sem se spomnil, da ima PCF8583 interni ROM pomnilnik. Tako sem oba kontrolerja določil, da delujeta kot master, in to tako, da prvi vpisuje v PCF8583, drugi pa iz njega podatke bere. Na ta posredni način sem komunikacijo rešil. Nisem pa še stestiral, kaj se zgodi, če se slučajno oba masterja pojavita istočasno na vodilu.

lp
Anton
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.02
Kraj: Dragomer

PrispevekObjavljeno: Sre Apr 18, 2007 10:50 am    Naslov sporočila:  Točno to sem hotel predlagati Odgovori s citatom

Točno to sem hotel predlagati.
Nekaj podobnega sem izvedel in opisal v članku GPS sledilnik objavljenem v zanji ali predzadnji številki Sveta elektronike. Tudi programje sem dal na razpolago v izvirni obliki.
Tam ene mikroprocesor posluša, kaj pravi GPS miška in podatke daje v I2C -RTCRAM, drugi pa jih po potrebni od tam jemlje in pošlje po GSM telefonu kot SMS.
Tam sem uvedel še en signal, - dva pina, od vsakega mikrokontrolerja po eden, s skupnim pullup uporomo. Če en mikroprocesor da 'low' na ta pin, s tem pove drugemu, da je sedaj on master, in uporablja cel I2cbus. Predno si mikroprocesor privošči dostop do busa, preveri, če je njegov pin, s katerim si dopovedujeta, kdo bo šel na i2c, high, torej free, in če je, potem najprej da ta pin na low in potem gre na i2cbus delat kar pač ima za delat.
Funkcionira. Pogni si programe iz SE strežnika download!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
pajo
Član
Član



Pridružen-a: Čet 29 Jan 2004 8:50
Prispevkov: 687
Aktiv.: 3.08

PrispevekObjavljeno: Sre Apr 18, 2007 12:55 pm    Naslov sporočila:   Odgovori s citatom

Tudi sam sem že razmišljal o tretji liniji. Ker drugje ne rabim prekinitev Int0 in Int1, sem nameraval narediti zadevo prek prekinitvenih rutin.
Sem pa poskušal tudi z SHIFTIN / SHIFTOUT. Vendar pa je, kot kaže v prevajalniku hrošč. V primeru, da uporabim ukaz SHIFTIN, le-temu lahko nastavim zunanji clock, kar je nujno, saj mora en procesor generirat takt za oba.

Iz Bascom helpa:
SHIFTIN pin , pclock , var , option [PRE]
SHIFTOUT pin , pclock , var , option

Remarks

pin The portpin which serves as as input/output.
pclock The portpin which generates the clock.
var The variable that is assigned.
option Option can be :
0 - MSB shifted in/out first when clock goes low
1 - MSB shifted in/out first when clock goes high
2 - LSB shifted in/out first when clock goes low
3 - LSB shifted in/out first when clock goes high
For the SHIFTIN statement you can add 4 to the parameter to use the external clock signal for shifting.

Če mu nastavim option na 4, se zadeva zazanka, oziroma čaka. To je vidno tudi v simulatorju.

Vsekakor pa bom obiskal SE, kot revijo, kot download Wink

Hvala!

lp, Anton
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
logist
Član
Član



Pridružen-a: Pon 25 Jan 2010 1:12
Prispevkov: 126
Aktiv.: 0.73
Kraj: dom(o)vina

PrispevekObjavljeno: Ned Jan 08, 2012 7:11 pm    Naslov sporočila:   Odgovori s citatom

Na ATmega88 sem priklopil numerično tipkovnico in napisal rutino, ki bere ScansCodes in jih pretvori v ASCII znak. Sedaj pa želim dodati da mi preko i2c vodila ATmega88, ki je slave na vodilu masterju (Atmega324P) pošlje ta ASCII znak, ker master pa je povezan z linksysom WRT-54GL, tako da serijska komunikacija na ATmega88 odpade. Tako da sedaj sem napisal na ATmega88(slave) program da mi sprejema podatke od Atmega324P(master) Tako da master>slave komunikacija deluje.

Sedaj me zanima, ker ko sem bral in pisal program nisem nikjer videl, da bi lahko slave poslal zahtevo, da želi oddati določeno število podatkov (ko se pač po domače povedano slavu zazdi) Ampak vedno je predpogoj da se prvo pošlje SLA+R (iz strani masterja) in nato lahko slave odda željen podatek, ki je na čakanju. Ker slave po prijetju SLA+R more najprej oddati podatek koliko paketkov bo poslal masterju in šele nato lahko začne oddajat paketke.
Edina izmed rešitev, ki sem se je spomnil, da uporabin en pin od Atmega88 in ga povežem na prekinitev, ker tako ima rešeno PFC8574 da ko se zgodi sprememba na pinih sproži prekinitev iz visokega stanja na nizki.

Namen tega vprašanja ni pridobitev kode, ampak samo nasvet kako to zadevo rešiti.

Hvala.

_________________
Mihael
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
logist
Član
Član



Pridružen-a: Pon 25 Jan 2010 1:12
Prispevkov: 126
Aktiv.: 0.73
Kraj: dom(o)vina

PrispevekObjavljeno: Pon Jan 09, 2012 12:43 am    Naslov sporočila:   Odgovori s citatom

Kot sem, predvideval je edina rešitev z uporabo prekinitvije na Masteru, ter zadeva mi sedaj deluje Razz.

Ko napišem dokumentacijo programa oz. pokomentiram do konca, da bom še komu jasno ne samo meni bom objavil komplet zadevo.

_________________
Mihael
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 80 dni


Powered by phpBB © 2001, 2005 phpBB Group