PCF8574

Zaenkrat bomo tu dali več ali manj vse. Ko se bo vsebina širila bomo podforume dodajali.

PCF8574

OdgovorNapisal/-a lojzek » 03 Feb 2020, 13:58

Pozdravljeni,

vprašanje za nekoga z izkušnjami z omenjenim IO ekspanderjem, preden se ga lotim.

Kupil sem LCD z IIC komunikacijo, ki uporablja ta PCF.

glede na izvleček iz navodil PDF
The data byte follows the address acknowledge. If the R/W bit is high, the data from this device are the values
read from the P port. If the R/W bit is low, the data are from the master, to be output to the P port. The data byte
is followed by an acknowledge sent from this device. If other data bytes are sent from the master, following the
acknowledge, they are ignored by this device.
Data are output only if complete bytes are received and
acknowledged. The output data will be valid at time, tpv, after the low-to-high transition of SCL and during the
clock cycle for the acknowledge.


in sliko timingov komunikacije IIC
Timingi.PNG

razumem in domnevam, da PCF po klicu sprejme samo EN podatek, ostale ignorira?
Torej, če hočem na LCD napisati 5 znakov enega za drugim, moram PCF poklicati 5x in za vsakim klicem dodati po en podatek {vsakič START - ACK - Naslov PCF - ACK - podatek - ACK - STOP} ? Torej PCFju poslati 10 bytov? (ignorirajmo komande ki morajo pred tem že biti poslane LCDju).

Upam da se motim, ker je to potem zelo počasen izpis... :_waiting
Nimate dovoljenj za ogled prilog tega prispevka.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a zanka » 03 Feb 2020, 17:19

Pogledal sem svojo kodo, ki jo uporabljam za komunikacijo. START potrebuješ prvič. Potem pa nizaš znake (v tvojem primeru "podatek") do STOP. Kar pomeni, da za vsako črko potrebuješ 4 podatke. Prvi podatek je črka zgornjih 4 bitov | RS, drugi podatek je črka zgornjih 4 bitov | RS | EN, tretji podatek je črka spodnje 4 bite | RS in zadnji podatek je črka spodnje 4 bite | RS | EN. Torej za 1 črko potrebuješ 4x poslati.
Uporabniški avatar
zanka
 
Prispevkov: 2530
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 112 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: PCF8574

OdgovorNapisal/-a urosg » 03 Feb 2020, 18:43

Ne, pošiljaš kar zaporedno, torej, najprej pošlješ naslov naprave ter potem data byte, med vsakim data bytom pa dobiš nazaj od PCFja ACK.
Uporabniški avatar
urosg
 
Prispevkov: 377
Pridružen: 10 Feb 2015, 14:38
Kraj: Domžale, Mengeš, Kamnik
Zahvalil se je: 11 krat
Prejel zahvalo: 45 krat
Uporabnika povabil: mucek
Število neizkoriščenih povabil: 4

Re: PCF8574

OdgovorNapisal/-a lojzek » 03 Feb 2020, 19:14

@ zanka: Thx, tako kot je opisano, pošljem prvo črko. Ko pa hočem poslati 2. črko od petih v prvotnem postu...
Običajno je pri IIC napravah - kar jih jaz poznam- potem naprej več poti:
1. sprejemnik odgovori z ACK in ti pošlješ naslednji podatek - ali več podatkov (zaključiš s STOP)
2. Pošlješ REPEATED START in potem pošiljaš naslednje podatke (zaključiš s STOP) - to sem že malo pozabil, ampak če je prava pot, bom hitro nazaj.

Tukaj pa nisem gotov, če prav razumem PDF tega čipa...
Za poslati drugo črko:
3. Sprejemnik odgovori na sprejem črke (v dveh delih) z ACK, zaključiš s STOP (ker drugače po PDF naslednje podatke IIC vmesnik ignorira). Zopet začneš s START, pošlješ adreso PCF in potem po tvojem postopku črko... potem pa se do konca besedila vrtiš v 3. točki... :_think Tudi to ne more biti.... :_think To najverjetneje ne more držat, ni logike.

Mogoče sem malo narobe zastavil vprašanje.
Moram naglasit da v normalni komunikaciji znam uporabljat LCD v 4 bitnem načinu.

Bolj pravo vprašanje bi bilo, kaj je potrebno storiti po poslani prvi polovici prvega podatka in ukaznih bitov.?
1a: Tisto pod 1.) in poslati drugo polovico podatka (in ukaznih bitov)
2a: tisto pod 2.) in poslati drugo polovico podatka (in ukaznih bitov)
3a: tisto pod 3.) in poslati drugo polovico podatka (in ukaznih bitov)

Tvoj namig mi najbolj diši na 1. možnost.?
Zadnjič spremenil lojzek, dne 03 Feb 2020, 19:18, skupaj popravljeno 1 krat.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a lojzek » 03 Feb 2020, 19:17

Hufff sem zgleda pol ure tipkal in je vmes priletel še en odgovor (v potrditev mojega razmišljanja). Hvala obema.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a zanka » 03 Feb 2020, 20:38

PCF8574 ni nič drugega kot to, da bajt po prejemu preslika v svojih 8 linij. Podal sem primer, kako šofirati LCD v 4-bitnem načinu v povezavi z njim. Zaradi 4 linij je potrebno bajt poslati 2x, tako kot če bi bil zaslon povezan neposredno z uC. Ker je za oba kosa potrebno poskrbeti za "strobe" je enkrat EN, drugič ga pa ni. EN pri meni pomeni 5V, torej s prvim podatkom poskrbim, da je EN na masi, potem pa z podatek ponovno pošljem, pri čemer tudi EN, da je ta na 5V. Torej so za en ASCII znak potrebne 2 x 2 = 4 spremembe na izhodu.

Glede I2C in vprašanj glede ACK ... PCF8574 si lahko predstavljaš kot pomnilnik. Najprej je START potem je naslov periferije in za tem so podatki, na koncu STOP. Vsak podatek prestavi naslovni števec za 1 naprej, zato lahko v eni potezi START -- STOP, pošlješ 32 ali 40 bajtov. Lahko za vsaj bajt narediš START -- STOP, ampak ni nujno. Zagotovo bo počasneje. Odvisno je od uC. Večina ima za I2C DMA, kar pomeni, da po sprejetem ACK samodejno pošlje naslednji bajt iz pomnilnika. Če nima DMA, je potrebno ročno (seveda programsko) poslati naslednji bajt, ampak brez START -- STOP.

REPEATED START pride v igro, če bi najprej pisal v pomnilnik (da poveš naslov v spominu, če je to eprom ipd.), potem pa bi iz njega bral. Tipično za I2C.
Uporabniški avatar
zanka
 
Prispevkov: 2530
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 112 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: PCF8574

OdgovorNapisal/-a zanka » 03 Feb 2020, 20:42

Za hitrost si poglej naslednje. 100kHz I2C, vmes je nekaj premora, da lahko človek prebere.
Uporabniški avatar
zanka
 
Prispevkov: 2530
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 112 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: PCF8574

OdgovorNapisal/-a lojzek » 04 Feb 2020, 09:40

Hvala lepa, tega kar si lepo in obširno razložil, nisem znal razumeti iz PDFja. Tega, da se PCF torej obnaša kot "normalna" IIC naprava.

Sedaj pa v izdelavo knjižnice in učenje nečesa novega.

LP Branko
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a S56FPW » 04 Feb 2020, 11:33

za Arduino je kjižnica že napisana
Nimate dovoljenj za ogled prilog tega prispevka.
http://lea.hamradio.si/~s56fpw/
Uporabniški avatar
S56FPW
 
Prispevkov: 531
Pridružen: 27 Jan 2015, 00:00
Kraj: Ljubljana
Zahvalil se je: 156 krat
Prejel zahvalo: 241 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 46

Re: PCF8574

OdgovorNapisal/-a lojzek » 05 Feb 2020, 07:13

Hvala za knjižnico, lepo je videti tudi drugačen pristop do rešitve. Predvsem header datoteka mi je zanimiva.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a lojzek » 10 Feb 2020, 21:47

Narejeno, napisal, oz. spremenil mojo dosedanjo klasično LCD knjižnico.
Proti LCDju lahko pošiljaš podatke kar po vrsti, brez STOP in ponovni klic PCFja. Čas med komunikacijami se lahko meri tudi v sekundah (še nepreveril) Moraš biti pa pazljiv, da v primeru več TWI naprav ne pozabiš zaključit povezavo zLCDjem :) in potem klicat druge.
Ugotovil pa tudi, da ima ta(k) moj IIC vmesnik tudi en bit svojega izhoda uporabljen za LCD osvetlitev.

Zanimivo pri tem mi je to, da prejšnji uporabljen 20x4 LCD za osvetlitev potrebuje 12V (pozabil, kak predupor sem moral dodati). In porabi kar konkretne mA za osvetlitev.
Ta nov plavi LCD pa za osvetlitev potrebuje 5V. Pa še brez problema deluje preko napajanja preko Volkovega Usbprog. Torej zanemarljive (in nepomerjene) mA. In TWI vmesnik ima celo krmilje za vklop osvetlitve. Preko IIC.

PS, hvala sodelujočim v debati.

PPS, če kdo rabi... Imam samo še nekaj detajlov za urediti.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2

Re: PCF8574

OdgovorNapisal/-a reber » 11 Feb 2020, 13:35

Jaz sem za hec priključil dva LCD z I2C vmesnikom na isto vodilo, kar je praviloma normalno, če je naslov vsake I2C naprave drugačen.
No, jaz sem to probal z dvema vmesnikoma ki imata isti (default) naslov in dela.

Ali je to bolj slučajno da dela? ker če sta dve napravi z istim naslovom, potem istočasno odgovorita z ACK, ali lahko kaj crkne?
Preizkus je bil z namenom, če želim isti podatek prikazovati na dveh enakih LCD, samo prikazovati, nobene druge funkcije ne bi uporabil.

Jasno je, da če gre za različne podatke na dveh LCD, da mora naslov vmesnika bitu drugačen, da se ve komu se kaj pošilja in seveda tudi v primeruistega podatka bi bilo verjetno bolje, če imata vsak svoj naslov in podatek poslati vsakemu posebej?

Ali se arduino knjižnica za I2C LCD kaj tepe s kakšno drugo knjižnico za I2C npr za I2C senzorje, če bi imel vse na istem vodilu?
Kako je s tem? ali je bolje prečesati knjižnice in narediti svojo? oziroma, da bi namesto knjižnice ta del kode vstavil kar na glavno stran.
Mene strašno motijo te knjižnice, ker pojma nimam kako delujejo, naredim nekaj, deluje in nimam pojma kako deluje, že tako sem zelo švoh v programiranju, potem pa še to. :_dunno
Sporočila sprejemam na e-mail objavljen na www.reber.si
Uporabniški avatar
reber
 
Prispevkov: 1192
Pridružen: 17 Mar 2015, 21:30
Kraj: Bled
Zahvalil se je: 68 krat
Prejel zahvalo: 337 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 255

Re: PCF8574

OdgovorNapisal/-a zanka » 11 Feb 2020, 18:29

I2C je pull-up vodilo oziroma se signalizira s priklopi na maso. Če en ali oba hkrati priklopita na maso bo zaznan le en ACK.
Uporabniški avatar
zanka
 
Prispevkov: 2530
Pridružen: 17 Mar 2016, 01:16
Zahvalil se je: 112 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 48

Re: PCF8574

OdgovorNapisal/-a VolkD » 11 Feb 2020, 20:04

Drži, če sta oba dovolj sinhrona. V nasprotnem bo pa en malo daljši ACK :)
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 40534
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 8510 krat
Prejel zahvalo: 4934 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: PCF8574

OdgovorNapisal/-a lojzek » 12 Feb 2020, 22:18

reber je napisal/-a:Jaz sem za hec priključil dva LCD z I2C vmesnikom na isto vodilo, kar je praviloma normalno, če je naslov vsake I2C naprave drugačen.
No, jaz sem to probal z dvema vmesnikoma ki imata isti (default) naslov in dela.


To imam še v planu.
reber je napisal/-a:Ali se arduino knjižnica za I2C LCD kaj tepe s kakšno drugo knjižnico za I2C npr za I2C senzorje, če bi imel vse na istem vodilu?
Kako je s tem? ali je bolje prečesati knjižnice in narediti svojo? oziroma, da bi namesto knjižnice ta del kode vstavil kar na glavno stran.
Mene strašno motijo te knjižnice, ker pojma nimam kako delujejo, naredim nekaj, deluje in nimam pojma kako deluje, že tako sem zelo švoh v programiranju, potem pa še to. :_dunno


Jaz sem svojo TWI knjižnico naredil že pred časom, in sem z njo fural že nekaj naprav, seveda različnih. Protokol je isti, torej mora veljati za vse. Edinole mogoče ima katera od naprav manjšo razliko, npr zunanji EEPROM, ki veliko uporablja branje /pisanje. Samo pri pisanju vanje so (vse bolj se mi dozdeva) vse naprave enake.
lojzek
 
Prispevkov: 175
Pridružen: 25 Feb 2015, 14:18
Zahvalil se je: 5 krat
Prejel zahvalo: 29 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 2


Vrni se na Elektronika

Kdo je na strani

Po forumu brska: MSN [Bot] in 3 gostov