LCD20x4 I2C

C,C++,C#

Moderátori: psichac, Moderátori

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 02 Feb 2018, 20:27

zdravím C-čkarov,

dnes mám rozlietaný deň, ale už som u toho a mám
radostnú správu. Podarilo sa :applause: .
Bolo to tým zlým bitovým súčtom | vo funkcii lcdcmd a lcdchar.
Ďakujem za pomoc!

Ešte by som sa vás opýtal ako je s pripájaním knižníc.
V tomto programe som si chcel najprv knižnicu delay
s časovými funkciami a knižnicu i2c s funkciami zbernice I2C
pripojiť do hlavného programu, ale vypisovalo stále chyby.
Tak som to musel všetko prepísať do tohoto jedného programu.
Čo je treba urobiť, aby sa knižnica korektne pripojila?
Ďakujem!
0

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa Tribec Zacks » 02 Feb 2018, 20:39

zdar gogo, parada a gratz.
ak to chces rozdelit a mat to v samostatnom subore, tak si vytvor dalsie dva subory, jeden header file, napr i2c.h a source file i2c.c
do header subora napises prototyp funkcie void lcdcmd(unsigned char cmd); <-- len prototyp funkcie (kazdej pouzitej v kniznici), samotne cele funkcie das do i2c.c. v hlavnom subore main.c pridas #include "i2c.h", vo svojom IDE budes musiet niekde v projekte nastavit "include paths" a pridat tam kde sa tieto nachadzaju. tymto stylom mozes pekne rozdelit zdrojove subory do samostatnych adresarov, samotny projekt, header pre tvoj mcu, linker subor atd
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

kamilko
Stály člen
Stály člen
Príspevky: 269
Dátum registrácie: 21 Okt 2017, 14:07
Bydlisko: kosice

Re: LCD20x4 I2C

Príspevok od používateľa kamilko » 04 Feb 2018, 08:26

Hlavne rozlisovat medzi definiciou a deklaráciou premenej a pouzit extern pre premenu.
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 06 Feb 2018, 21:42

zdar kamilko,

Som len na začiatku s C-čkom.
Viem čo je definícia a daklarácia funkcie.
Čo si myslel tým použitím extern pre premennú ???
0

Používateľov profilový obrázok
juraj77
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 23 Sep 2012, 22:39
Bydlisko: Nitra
Vek: 44

Re: LCD20x4 I2C

Príspevok od používateľa juraj77 » 06 Feb 2018, 21:49

Pokial viem tak extern v C treba použiť vtedy ak máš program napísaný vo viacerých súboroch.Pravdepodobne by ti Compiler vyhodil chybu že nepozná premennú a vtedy ju treba definovať ako extern...
0
" Bez vody si viem predstaviť život, ale bez internetu a počítača nie.."

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa Tribec Zacks » 06 Feb 2018, 22:46

gogo, ak mas napriklad look-up-table (eg. int array[x]...) definovanu v inom subore ako main.c a chces ju pouzit, tak ju musis znovu deklarovat v main ako extern int array[x]; inak ako pisal jurtaj dostanes kompiler error.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 07 Feb 2018, 13:51

Ďakujem za info chalani !
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 09 Feb 2018, 20:23

Už som tu zasa, zdravi C-čkarov.

chcel som to zasa niekam posunúť a skúšam komunikáciu s RTC ds1307.
Myslel som, že keď mi ide komunikácia cez I2C s expanderom pcf8574,
tak to pôjde aj s rtc, ale mýlil som sa :( . Je v tom nejaká záludnosť?
Čo by mala obsahovať funkcia na čítanie, lebo táto mi robí problém ako ju napísať.
Na nete som našiel vela funkcii, ale každá je dosť odlišná.
Je treba rtc na začiatku nejako inicializovať? Lebo v DS som nič nenašiel.
Pridávam aj nejaké časti kódu, či je to správne.

Ďakujem!

toto je funkcia pre zapis sekund:
void writesec(unsigned char hod)
{
i2c_start();
send(rtc_adr); // adresa rtc 0xD0 zapis
send(0x00); // register sekund
send(hod); // hodnota, ktora sa ma zapisat
i2c_stop();
}

toto je funkcia pre načítanie sekund:
void readsec()
{
unsigned char valsec;

i2c_start();
send(rtc_adr);
send(0x00);
i2c_stop();
i2c_start();
send(0xd1); // adresa - citanie
valsec=i2c_read();
i2c_stop();
}
0

kamilko
Stály člen
Stály člen
Príspevky: 269
Dátum registrácie: 21 Okt 2017, 14:07
Bydlisko: kosice

Re: LCD20x4 I2C

Príspevok od používateľa kamilko » 09 Feb 2018, 21:26

Adresu mas spravnu? Dostavas odpoved ACK od RTC?
0

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa Tribec Zacks » 09 Feb 2018, 21:34

strana 8:

Bit 7 of Register 0 is the clock halt (CH) bit. When this bit is set to 1, the oscillator is disabled. When cleared to 0, the oscillator is enabled. On first application of power to the device the time and date registers are typically reset to 01/01/00 01 00:00:00
(MM/DD/YY DOW HH:MM:SS). The CH bit in the seconds register will be set to a 1.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa peterple » 10 Feb 2018, 19:15

funkcia readsec nie je správne. Možno aj nejakú hodnotu prečítaš, ale si ju uložíš do lokálnej premennej a tá po skončení funkcie zanikne. Takže sa k tej prečítanej hodnote už nijako nedostaneš. Teda by mala vracať hodnotu a nie void.
Inak tam chybu nevidím, za predpokladu že tie low level funkcie fungujú ako majú. I keď nerozumiem ako je tam signalizovaná chyba.
Tiež to nekonzistentné použitie rtc_adr nie je pekné.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 11 Feb 2018, 14:51

Zdravim,

K:
adresa rtc je správna 0xD0.
T:
Bit CH v regisrty 0 mám v 0, takže oscilátor ide.
P:
Ja som to tam zabudol napísať, ale za funkciou i2c_stop
je ešte zobrazenie hodnoty. Ostatné funkcie by mali byť
v poriadku.

void readsec()
{
unsigned char valsec;

i2c_start();
send(rtc_adr);
send(0x00);
i2c_stop();
i2c_start();
send(0xd1); // adresa - citanie
valsec=i2c_read();
i2c_stop();
==============tu je ešte zobrazenie hodnoty
}

Musím skúšať a hladať chybu, prečo mi to nejde.

Ďakujem za rady!
0

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa Tribec Zacks » 11 Feb 2018, 17:10

gogo, uz je to nejaky cas co som mal i2c na analyzatore, ale ak chces citat, tak by si nemal posielat stop command, je tam repeated start pre zariadenie, ak ho stopnes, tak device bude ocakavat zase svoju adresu, adresu registra a samotne citanie az potom, sekvencia by mala vypadat neak takto:
1. start command
2. adresa ic + write bit
3. adresa interneho registra
4. start znovu
5. adresa registra + read bit
6. citat zariadenie
7. stop command

ty mu posielas stop v medzicase
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa peterple » 12 Feb 2018, 19:27

Ten stop a znovu štart by vadiť nemal. Síce sa to bežne robí opakovaným štartom ale nutnosť to nieje. A áno po štart podmienke tam ide adresa zariadenia a naozaj tam aj ide (0xD0) plus nultý bit do jednotky že čítanie, takže 0xD1. Potom už sa číta koľko len chce.
Ja tam chybu nevidím. Skôr bude niekde inde.
A čo vlastne vyčituješ? Stále to isté? Ak tam zapíšeš 00 tak stále čítaš 00. Skús zapísať aj inú platnú hodnotu a prečítať späť. Najlepšie by bolo to odchytitť skopom, ak je možnosť.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 12 Feb 2018, 21:14

Zdravim,

skúšal som to aj bez toho stopu a neišlo to.

Ja tam len raz zapíšem hodnotu, nastavim to a potom už len čítam späť
plynúci čas.
Musím to celé znova prerobiť a zistiť, kde robím chybu.
0

gogo
Stály člen
Stály člen
Príspevky: 167
Dátum registrácie: 28 Sep 2009, 00:00
Bydlisko: Skalica

Re: LCD20x4 I2C

Príspevok od používateľa gogo » 26 Feb 2018, 20:42

Zdravim,

zabudol som sem hodiť foto, funguje to, podarilo sa .
Chyba bola vo funkcii čítania i2c zbernice. Pri tom stálom
prepisovaní som tam mal jeden clock navyše.
Ďakujem všetkým!
Prílohy
rtc.jpg
0

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: LCD20x4 I2C

Príspevok od používateľa Tribec Zacks » 26 Feb 2018, 20:58

Gratz. :thumbup:
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok