LCD20x4 I2C
Moderátori: psichac, Moderátori
Re: LCD20x4 I2C
zdravím C-čkarov,
dnes mám rozlietaný deň, ale už som u toho a mám
radostnú správu. Podarilo sa .
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!
dnes mám rozlietaný deň, ale už som u toho a mám
radostnú správu. Podarilo sa .
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
- Tribec Zacks
- Pokročilý člen
- Príspevky: 714
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: LCD20x4 I2C
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
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.
Re: LCD20x4 I2C
Hlavne rozlisovat medzi definiciou a deklaráciou premenej a pouzit extern pre premenu.
0
Re: LCD20x4 I2C
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ú ???
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
Re: LCD20x4 I2C
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.."
- Tribec Zacks
- Pokročilý člen
- Príspevky: 714
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: LCD20x4 I2C
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.
Re: LCD20x4 I2C
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();
}
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
- Tribec Zacks
- Pokročilý člen
- Príspevky: 714
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: LCD20x4 I2C
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.
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.
-
- 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
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é.
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í.
Re: LCD20x4 I2C
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!
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
- Tribec Zacks
- Pokročilý člen
- Príspevky: 714
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: LCD20x4 I2C
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
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.
-
- 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
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ť.
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í.
Re: LCD20x4 I2C
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.
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
Re: LCD20x4 I2C
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!
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!
0
- Tribec Zacks
- Pokročilý člen
- Príspevky: 714
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: LCD20x4 I2C
Gratz.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 17 Odpovedí
- 2552 Zobrazení
-
Posledný príspevok od používateľa Sani1