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 

12F675 in I2C
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Sob Feb 21, 2009 5:44 pm    Naslov sporočila:  12F675 in I2C Odgovori s citatom

Že nekaj časa sepripravljam oziroma spravljam narediti merilnik napetosti in toka za svoj napajalni. Preletel sem forum in našel zanimive izvedbe in ena izmed njih je bil tudi Silvotov vmeter z 12F675 in komunikacijo I2C z gonilnikom za led display. Upam da si nisem zadal pretežkega projekta. Zadevo bi/bom napisal v Cju.

Del kode imam že napisane (merilni del), zataknilo se mi je pri komunikaciji med picem in SAA1064.

1. Dobljeno meritev bo potrebno pošiljati po kosih? Tisočice posebaj, stotice posebaj,..??

2. SCL ni vezan na clock, ampak ga prožim sam?

3.I2C deluje nekako tako(pošiljanje bitov): START->PIŠI(v mojem primeru)->NASLOV REGISTRA-> PODATKI->STOP
Kam umestim preverjanje?

Upam da si nisem zadal pretežak projekt! Hvala za vso pomoč!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Feb 21, 2009 6:31 pm    Naslov sporočila:   Odgovori s citatom

SAA1064 je zanimiv čip. (o njem nameravam nekaj več napisati v članku, ki ga pripravljam za našo revijo)

Na kratko:Za start bitom sledi naslov čipa 0 1 1 1 0 A1 A0 0 (A0 in A1 je fizični naslov, katerega določiš hardversko) sledijo instruction byte (dejansko naslov kam boš pisal) nato sledi podatek. Naslov se ob vsakem vpisu poveča za 1. Torej če je vrednost instruction byte 0 potem začeš pisat v kontrolni register sledi digit1 -4.

Kar se tiše C-ja ti žal ne znam pomagat.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Sob Feb 21, 2009 6:56 pm    Naslov sporočila:   Odgovori s citatom

Glede na sliko (iz datasheeta) me zanimajo te Aji! Jih je potrebno brati ali ne? Namesto Cx mu pošljem binarno kodo vrednost(tosočice, stotice pretvorim v binarno in pošljem)?


reg.JPG
 Opis:
 Velikost datoteke:  29 KB
 Pogledana:  7 krat

reg.JPG


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



Pridružen-a: Sob 05 Jun 2004 23:24
Prispevkov: 230
Aktiv.: 0.97
Kraj: Žirovnica, LJ

PrispevekObjavljeno: Sob Feb 21, 2009 7:03 pm    Naslov sporočila:   Odgovori s citatom

A-ji pomenijo ACK, torej acknowledge = potrditev. Če si boš prebral kakšen uvod v I2C protokol, boš kmalu videl, kaj je njihova naloga, kdaj jih moraš poslati, in kdaj brati. Veliko piše že v datasheetu za kakšen močnejši PIC, ki podpira hardverski I2C. Glede A1 in A0 ti je pa že Silvo napisal, če slučajno sprašuješ za te A-je. Nastaviš jih tako, da postaviš določene pine tvojega čipa na visok ali nizek nivo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Sob Feb 21, 2009 7:06 pm    Naslov sporočila:   Odgovori s citatom

Za A1,.. sem razumel! A (acknowledge) so potem nuja! Kar zakomplicirano! Bom najprej spisal kodo za pretvorbo v binarno!

Nazadnje urejal/a Tonci Sob Feb 21, 2009 7:10 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Feb 21, 2009 7:09 pm    Naslov sporočila:   Odgovori s citatom

Potrditve je seveda potrebno brati. Vsaj clock mora teči - torej tudi 9-ti bit. Pravilno izveden I2C protokol mora delati tako, da logično 1 postavlja pullup - ob logični 1 pin definiraš kot vhod ob logični 0 pa kot izhod z nizkim stanjem. Uporabniki vodila vedno "vlačijo" vodilo na dol. V takem primeru ne more priti do stanja, da bi en uporabnik vlekel vodilo na gor drugi na dol.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Feb 21, 2009 7:31 pm    Naslov sporočila:   Odgovori s citatom

Tonći je napisal/a:
Za A1,.. sem razumel! A (acknowledge) so potem nuja! Kar zakomplicirano! Bom najprej spisal kodo za pretvorbo v binarno!


Ne razumem kaj boš pretvarjal v binarno? Vseeno je ali napišeš 255, 0xff, b'11111111' . Binarni zapis je v danem primeru bolj pregleden.
C-ja ne poznam - če prevajalnik različnih zapisov ne razume (kar dvomim) vzami windowsov calculator ter pretvori vrednost v ustrezno.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Sob Feb 21, 2009 7:36 pm    Naslov sporočila:   Odgovori s citatom

AD vrne vrednost med 0 in 1023. Dobljeno vrednost pretvorim v napetost in recimo dobim 16.32V (pika je nepomembna)! Ko bom poslav na prvi displaj 1ko jo moram poslati v binarnem in vsa ostala tri števila, kar pomeni, da moram poljubno število razbiti najprej na 4 števila od 0 do 9 in potem vsako ok dnjih sspremeniti v binarno kodo!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Sob Feb 21, 2009 7:50 pm    Naslov sporočila:   Odgovori s citatom

Najprej spravi "k pameti" vodilo. Potem bo potrebno narediti tabelo znakov. "Cifre" boš potreboval na koncu, ko ti bo že vse delalo.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
cfrik
Član
Član



Pridružen-a: Sre 24 Jan 2007 16:15
Prispevkov: 39
Aktiv.: 0.17
Kraj: Trbovlje

PrispevekObjavljeno: Ned Feb 22, 2009 12:37 pm    Naslov sporočila:   Odgovori s citatom

Tonći na tem mestu imaš nekaj primerov c kode za I2C za pic.

http://www.microchipc.com/sourcecode/index.php

Najprej preštudiraj to in preuredi za tvoj mikrokontroler, potem pa se boš ukvarjal s pretvarjanjem števila v cifre.

LP Samo

_________________
lepo je imeti poklic in hobi na istem področju vendar je časa premalo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Ned Feb 22, 2009 1:23 pm    Naslov sporočila:   Odgovori s citatom

Danes sem napisal začetni in končni ukaz!
Koda:
     void start(void)
     {                       //SDA=0,SCL=0
     
     SDA=1;                  //SDA=1,SCL=0
     Delay_us(100);
     SCL=1;                  //SDA=1,SCL=1
     Delay_us(100);
     SDA=0;                  //SDA=0,SCL=1
     Delay_us(100);
     SCL = 0;                //SDA=0,SCL=0
     Delay_us(100);
     }
     

     void stop(void)
     {
       SDA=0;                 //SDA=0,SCL=x
       Delay_us(100);
       SCL=1;                 //SDA=0,SCL=1
       Delay_us(100);
       SDA=1;                 //SDA=1,SCL=1
       Delay_us(100);
      }


http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm
http://laps.fri.uni-lj.si/ars/ars_files/Osnove_I2C.pdf

Pomagam si z zgornjimi linki!
Hvala za vso pomoč do sedaj! Bom še kasneje poročal, kako napredujem!

Edit: Dodana koda za izbor "sužnja"! Upam da ni kje kakšne napake! Sad Vsako opozorilo dobrodošlo!

Koda:
      void slave (void)
      {     //01110A1A00
       SDA=0;                 //SDA=0,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=0,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=0,SCL=0
       Delay_us(100);

       SDA=1;                 //SDA=1,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=1,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=1,SCL=0
       Delay_us(100);
       
       SCL=1;                 //SDA=1,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=1,SCL=0
       Delay_us(100);
       
       SCL=1;                 //SDA=1,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=1,SCL=0
       Delay_us(100);
       
       SDA=0;                 //SDA=0,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=0,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=0,SCL=0
       Delay_us(100);
       
       SDA=A1;                 //SDA=A1,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=A1,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=A1,SCL=0
       Delay_us(100);
       
       SDA=A0;                 //SDA=A0,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=A0,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=A0,SCL=0
       Delay_us(100);
       
       SDA=0;                 //SDA=0,SCL=0
       Delay_us(100);
       SCL=1;                 //SDA=0,SCL=1
       Delay_us(100);
       SCL=0;                 //SDA=0,SCL=0
       Delay_us(100);
      }


Evo naletel sem na manjšo težavo! In sicer potrdilni bit! Uro SCL dam iz 1 v nič in čakam da SDA postavi na 0? To pomeni da predčasno dam SDA na 1 potem pa čakam, da postavi na 0 pri prehodu SCL iz 1 v 0? Moram SDA predstaviti kot vhod v tem primeru? HVALA!


Nazadnje urejal/a Tonci Ned Feb 22, 2009 3:19 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Feb 22, 2009 3:15 pm    Naslov sporočila:   Odgovori s citatom

Upam, da veš, da SAA1064 nima vgrajenega kakega character seta (kot recimo kontroler za lcd HD44780) Podatki, ki jih pošlješ se shranejo v latch ter se v isti obliki pošljejo na izhodne pine. Torej, če mu boš poslal "1" se bo na izhodu vklopili pini ASCI vrednosti "1" Pri izdelavi hardvera pa moraš biti pozoren, da enaki biti različnih izhodov pripadata enakemu segmentu displjeja, sicer boš imel precej težav s programiranjem.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Ned Feb 22, 2009 3:24 pm    Naslov sporočila:   Odgovori s citatom

Če te prav razumem, ciljaš na to, da postavljam SCL in SDA vrednost 0 in 1?
Definiral sem ju tako #define SDA GPIO.F5
#define SCL GPIO.F4 in ko sem probal na led diodi je delovalo, tako da mislim, da nebi smelo biti težav ali se motim?


da enaki biti različnih izhodov pripadata enakemu segmentu displjeja, sicer boš imel precej težav s programiranjem. - je to zgolj kot opozorilo (ste imeli podobne težave) ali zaradi moje kode?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.93
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Feb 22, 2009 3:41 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
...da enaki biti različnih izhodov pripadata enakemu segmentu displjeja, sicer boš imel precej težav s programiranjem. - je to zgolj kot opozorilo (ste imeli podobne težave) ali zaradi moje kode?


Koda nima nobene veze z napisanim. (kar se "C"-ja tiče ti bo moral pomagat kdo drug) Na tole sem te le opozoril, ko boš prišel tako daleč, da bo začelo kaj "letet" na displej. (domnevam sicer, da imaš hardware sestavljen na testni plošči)

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tonci
Član
Član



Pridružen-a: Tor 05 Avg 2008 18:14
Prispevkov: 629
Aktiv.: 3.06
Kraj: Domžale

PrispevekObjavljeno: Ned Feb 22, 2009 4:00 pm    Naslov sporočila:   Odgovori s citatom

ACK funkcijo bom pisal na konci, ker moram še malo pobrskati in ta del razumeti.

Sedaj me zanima zgol "teoretični del" če mu lahko tako rečem.

Po startu-slave adress-ACK-instruction Byte-ack sledi vrednost, ki se izbiše na zalonu-ack-stop. To je zaporedje te komunikacije.

Sedaj me zanima, če za 2 številko, 3 in 4 ponovim zgornji postopek ali je možno dat v vtsto 4 tako imenovane vrednosti (control byte) na zgornji sliki in sam zapisuje vse 4 števila na zaslon(g. Silvo je omeniv da se instuction byte sam povečuje, zato sem tako sklepal)?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group