Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • LCD20x4 I2C

LCD20x4 I2C

C,C++,C#

Moderátori: psichac, Moderátori

LCD20x4 I2C

Odosla┼ąod gogo » 01 Feb 2018, 10:48

Zdravim v┼íetk├Żch C-─Źkarov!
Za─Ź├şnavam v├ím trochu fu┼íova┼ą do remesla.
Sk├║┼íam prejs┼ą z asm do c. Rob├şm s mcu x51. Konkr├ętne C8051F040.
Nie─Źo u┼ż sa mi podarilo a teraz sa sna┼żim rozbeha┼ą LCD displej
pripojen├Ż cez zbernicu I2C. Je to ten modul, ─Źo pou┼ż├şvaj├║ arduinisti.
LCD 20x4 a PCF8574.
Dva dni sa s t├Żm hr├ím a nedar├ş sa mi to rozchodi┼ą.
Mohli by ste sa pros├şm niekto pozrie┼ą na prilo┼żen├Ż s├║bor a poradi┼ą mi,
kde a ─Źo rob├şm zle.

─Äakujem!
Pr├şlohy
lcd_i2c.c
(5.19 KiB) Stiahnutá 44 krát
gogo
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 137
Zalo┼żen├Ż: 28.09.2009
Bydlisko: Skalica
Karma: 2

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 01 Feb 2018, 13:05

zdar gogo, iba zbezne som ti na to pozrel, neviem co to mas za kompiler, ale nemali by byt tie binarne zapisy s prefixom -> 0b00000000?
btw pls, prepis ich na hexadecimalny zapis, toto je nieco strasne pozerat, ved to ide z hlavy a priamo medzi bin a hex.
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: LCD20x4 I2C

Odosla┼ąod gogo » 01 Feb 2018, 14:08

ahoj,
─Ćakujem za odpove─Ć!
Moment├ílne som v pr├íci, ale ke─Ć pr├şdem domov, hne─Ć vysk├║┼íam.
Kompiler je s├║─Źas┼ąou IDE od Silabsu.
To ma nenapadlo s t├Żm prefixom, ke─Ć nehl├ísil chybu.
gogo
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 137
Zalo┼żen├Ż: 28.09.2009
Bydlisko: Skalica
Karma: 2

Re: LCD20x4 I2C

Odosla┼ąod jirka.jirka. » 01 Feb 2018, 16:53

Mysl├şm si, ┼że to vlastn─Ť chyba nen├ş. Proto┼że jsi to zapsal v dekadick├ęm tvaru.
jirka.jirka.
Obr├ízok pou┼ż├şvate─ża
Zasl├║┼żil├Ż ─Źlen
Zasl├║┼żil├Ż ─Źlen
Pr├şspevky: 1166
Zalo┼żen├Ż: 17.10.2008
Bydlisko: Uhersk├ę Hradi┼ít─Ť
Karma: 12

Re: LCD20x4 I2C

Odosla┼ąod maskrtnik01 » 01 Feb 2018, 17:35

├üno. ─îakal by som s├şce warning, ┼że tak├ę vysok├ę ─Ź├şslo sa do jedn├ęho bajtu nev├┤jde. Ale syntaktick├í chyba to nie je, len to znamen├í nie─Źo in├ę.
maskrtnik01
Obr├ízok pou┼ż├şvate─ża
Zasl├║┼żil├Ż ─Źlen
Zasl├║┼żil├Ż ─Źlen
Pr├şspevky: 1329
Vek: 22.83
Zalo┼żen├Ż: 20.07.2010
Bydlisko: okolie KE
Karma: 6

Re: LCD20x4 I2C

Odosla┼ąod boraicho » 01 Feb 2018, 18:05

Tribec, frajer si ked vie┼í zhlavy hned prevadza┼ą bin na hex :)
ja tie┼ż pou┼żivam iba bin, ved konec koncov aj v DS je ve─Ź┼íina v bin popisana.
"Aj nevinne vyzeraj├║ca s├║─Źiastka, m├┤┼że by┼ą pr├ş─Źinou nefunk─Źnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
boraicho
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 11842
Vek: 30.76
Zalo┼żen├Ż: 03.02.2007
Bydlisko: Prešov
Karma: 44

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 01 Feb 2018, 18:13

@Boraicho:

hadam pomoze, je to lahke a ak pises kod na mcu tak by si to mal vedet :)

K├│d: Vybra┼ą v┼íetko
DEC    BIN    HEX
0      0000   0x0
1      0001   0x1
2      0010   0x2
3      0011   0x3
4      0100   0x4
5      0101   0x5
6      0110   0x6
7      0111   0x7
8      1000   0x8
9      1001   0x9
10      1010   0xA
11      1011   0xB
12      1100   0xC
13      1101   0xD
14      1110   0xE
15      1111   0xF


0b 0111 1010
=
0111 1010
0x7  0xA
=
0x7A

Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: LCD20x4 I2C

Odosla┼ąod alidedko » 01 Feb 2018, 18:29

Ja to prevadzam tak, ako som si zvykol:
Sprava dolava hodnota bitov 1-2-4-8, spocitam jednotkove pozicie, do 9 je cislo, od 9 hodnota A-F.

Jednoduche, rychle. Po case to je nieco ako pozriet na hodinky, ak je velka rucicka na 12 a mala na 3, vies, ze su 3 hodiny :D
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.
alidedko
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 3963
Vek: 27.62
Zalo┼żen├Ż: 04.02.2013
Bydlisko: U alibabky v Poprade
Paragraf: 21
Karma: 26

Re: LCD20x4 I2C

Odosla┼ąod boraicho » 01 Feb 2018, 18:34

aha takto , nee ─Źosi u─Źi┼ą sa je to zbyto─Źne u m┼ła, ked to je v bin tak aspon rovno vidim ktory bit je a ktory nieje zapnuty ale diky :)
v bin je to pohoda. a ja som u┼ż stary na take triky
"Aj nevinne vyzeraj├║ca s├║─Źiastka, m├┤┼że by┼ą pr├ş─Źinou nefunk─Źnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
boraicho
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 11842
Vek: 30.76
Zalo┼żen├Ż: 03.02.2007
Bydlisko: Prešov
Karma: 44

Re: LCD20x4 I2C

Odosla┼ąod peterple » 01 Feb 2018, 19:02

jirka.jirka. nap├şsal:Mysl├şm si, ┼że to vlastn─Ť chyba nen├ş. Proto┼że jsi to zapsal v dekadick├ęm tvaru.

No tak pozor. V C kon┼ítanty za─Ź├şnaj├║ce nulou s├║ osmi─Źkov├ę ─Ź├şsla. Tak┼że tam m├í pomie┼ían├ę desiatkov├ę a osmi─Źkov├ę kon┼ítanty. ─îaka┼ą ┼że kompiler upozorn├ş na pr├şli┼í ve─żk├║ kon┼ítantu je chyba, ani len warningu to nie je hodn├ę. Hold programovanie v C je prech├ídzka m├şnov├Żm po─żom. A ┼że ich tam tak├Żchto je ako maku. Len┼że ve─ża vec├ş sa ┼ąah├í aj do vy┼í┼í├şch jazykov. Napr javascript, tam tie┼ż 0 na za─Źiatku znamen├í osmi─Źkov├║ kon┼ítantu. Ale ked┼że ─żud├ş ─Źo pozn├í tak├ęto historick├ę s├║stavy je u┼ż m├ílo tak v strict m├│de je to u┼ż error.

Klasick├ę C prefix 0xb 0b nepozn├í. Videl som to na AVR a teraz to m├í kotlin. Napr├şklad Arduino to m├í obabran├ę cez textov├ę makr├í.
Naposledy upravil peterple d┼ła 01 Feb 2018, 20:32, celkovo upraven├ę 1 kr├ít.
Uk├í┼ż m├║dremu chybu a on sa ti po─Ćakuje. Uk├í┼ż chybu hlup├íkovi a on sa uraz├ş.
peterple
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 1898
Vek: 52.81
Zalo┼żen├Ż: 25.06.2013
Bydlisko: Krajn├ę
Karma: 52

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 01 Feb 2018, 19:24

@peterple,
gcc / gnu arm toolchain s tym tiez nema problem.
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: LCD20x4 I2C

Odosla┼ąod boraicho » 01 Feb 2018, 19:33

0xb? ─Źo to je? ja v┼íade zapisujem 0xFF; alebo 0b11111111; alebo 255;

osmi─Źkove nepou┼żivam, neviem..
"Aj nevinne vyzeraj├║ca s├║─Źiastka, m├┤┼że by┼ą pr├ş─Źinou nefunk─Źnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
boraicho
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 11842
Vek: 30.76
Zalo┼żen├Ż: 03.02.2007
Bydlisko: Prešov
Karma: 44

Re: LCD20x4 I2C

Odosla┼ąod jirka.jirka. » 01 Feb 2018, 19:59

0xb? ─Źo to je? ja v┼íade zapisujem 0xFF; alebo 0b11111111; alebo 255;

osmi─Źkove nepou┼żivam, neviem..


Jsem na tom ├║pln─Ť stejn─Ť. :D
Pou┼ż├şv├ím pouze: bin├írn├ş, des├ştkov├í, ┼íectn├íckov├í a zat├şm v┼żdy sta─Źilo.

Jinak z├ípis v bin├írn├şm k├│du jsem pou┼ż├şval hodn─Ť u 8-bit, ale nyn├ş u 32-bit u┼ż jsem musel j├şt do HEXa, proto┼że t─Ťch 1 a 0 u┼ż bylo hodn─Ť. :D
jirka.jirka.
Obr├ízok pou┼ż├şvate─ża
Zasl├║┼żil├Ż ─Źlen
Zasl├║┼żil├Ż ─Źlen
Pr├şspevky: 1166
Zalo┼żen├Ż: 17.10.2008
Bydlisko: Uhersk├ę Hradi┼ít─Ť
Karma: 12

Re: LCD20x4 I2C

Odosla┼ąod peterple » 01 Feb 2018, 20:25

0xb je hl├║pos┼ą. Malo to by┼ą 0b. No a s tou osmi─Źkovou to nie je tak├ę ist├ę ┼że ju nepou┼ż├şvate. Sta─Ź├ş nap├şsa┼ą
K├│d: Vybra┼ą v┼íetko
if (i<0100){
}

M├┤┼żete na tom necha┼ą p├ír hod├şn debugovania pre─Źo to nefunguje do sto ale iba do 64.
Uk├í┼ż m├║dremu chybu a on sa ti po─Ćakuje. Uk├í┼ż chybu hlup├íkovi a on sa uraz├ş.
peterple
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 1898
Vek: 52.81
Zalo┼żen├Ż: 25.06.2013
Bydlisko: Krajn├ę
Karma: 52

Re: LCD20x4 I2C

Odosla┼ąod gogo » 01 Feb 2018, 21:00

zdavim,
sk├║sil som zada┼ą prefix 0b, ale hl├ísilo chybu. Tento kompiler
bin├írne ─Ź├şsla nepozn├í. Ako ste p├şsali, ─Ź├şsla za─Ź├şnaj├║ce 0 = 8-kov├í s├║stava.
Prep├şsal som do hexa a nie─Źo sa pohlo.
Inicializ├ícia prebehla, ale len po ─Źas┼ą pr├şkaz 0x02 4-bitov├í komunik├ícia.
Nasleduj├║ca sekvencia pr├şkazov pomocou funkcie lcdcmd nejde a ani
data nejd├║ zapisova┼ą pomocou funkicie lcdchar.
gogo
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 137
Zalo┼żen├Ż: 28.09.2009
Bydlisko: Skalica
Karma: 2

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 01 Feb 2018, 22:16

gogo, ta tvoja funkcia na softwarove i2c vypada trochu podozrivo:

K├│d: Vybra┼ą v┼íetko
unsigned char send(unsigned char d)
{
   unsigned char i, m=0x80, ack;
   scl=0;
   delay_us(5);

   for (i=0;i<8;i++)
      {
      sda=d&m;                      <----------- sda mas definovany ako single bit (0) na porte 4, 'd' a 'm' tu mas ako 8bit premenne
      m=m>>1;                       <----------- tu shiftujes m, predpokladam ze chces kontrolovat stav kazdeho bitu a ten priradit na port
      delay_us(12);                                 takto je to nespravne.
      scl=1;
      delay_us(12);
      scl=0;
      delay_us(12);
      }
   sda=1;
   delay_us(12);
   scl=1;
   delay_us(12);
   ack=sda;
   scl=0;
   delay_us(25);

   return ack;
}


tu som ti nasiel link na softwarove i2c, mozes mu tam urobit kratke delaye aby to vychadzalo na zakladnych 100khz +/-.
predpokladam ale ze niesi na nejakych extra rychlych frekvenciach, tak to mozno aj mozes nechat tak ako je a iba to preportuj na svoj kompiler, define <-> sbit a podobne.. ak mas logicky analyzer, tak sa ho neboj pouzit :)
ak si stym nebudes vedet dat rady tak pis. najskor ale rozbehaj samotne I2C aby si si bol isty ze funguje ako ma, potom pripoj lcd a pokracuj dalej
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: LCD20x4 I2C

Odosla┼ąod peterple » 01 Feb 2018, 23:05

single bit je zase mimo C ┼ítandart. Len┼że 8051 m├í nie─Źo tak├ę ako pole jednobitov├Żch premenn├Żch, ktor├ę s├║ premapovan├ę do niektor├Żch IO adries. Inak povedan├ę m├í 8051 in┼ítrukcie ktor├ę dok├í┼żu manipulova┼ą s jedin├Żm bitom a dokonca m├í aj tak├Ż register ktor├Ż zast├íva funkciu jednobitov├ęho akumul├ítora (Carry flag). Cel├ę to tvor├ş tak├Ż bitov├Ż procesor a je to ve─żmi ┼íikovn├ę. Assemblerista to ur─Źite pozn├í.
Druh├í vec je ako to ten kompiler m├í naimplementovan├ę. M├┤┼że to by┼ą cez t├║ C boolovsk├║ logiku ┼że 0 je false a ─Źoko─żvek in├ę je true. V takomto pr├şpade by t├í Gogova kon┼ítrukcia fungovala. Ale na druhej strane to kludne m├┤┼że by┼ą aj tak ako to zobral Zacks. Teda zobere sa nult├Ż bit toho v├Żsledku logick├ęho s├║─Źinu.
Toto si treba vysk├║┼ía┼ą treb├írs aj na LEDke ak nem├í┼í logick├Ż analyz├ítor aby bolo jasno ako to kompil├ítor berie.
Uk├í┼ż m├║dremu chybu a on sa ti po─Ćakuje. Uk├í┼ż chybu hlup├íkovi a on sa uraz├ş.
peterple
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 1898
Vek: 52.81
Zalo┼żen├Ż: 25.06.2013
Bydlisko: Krajn├ę
Karma: 52

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 02 Feb 2018, 00:10

@peterple, ja si 8051 pamatam len velmi zbezne este zo skolskych zaciatkov, moj prvy mcu encounter :) viem ze vie single bit manipulaciu nativne v hardwari, aj rovno zapis na port a citanie z toho isteho registra... ale prisiel mi ten zapis v kode trochu podozrivy, skor by som cakal nieco na styl sda = (d&m) ? 1 :0; alebo cez if... ...treba poznat svoj kompiler co robi veru :)

kazdopadne pis, radi ti tu na to kukneme, btw dalsi moj postreh z kodu, funkcia lcdcmd(unsigned char char)...
zoberme si 'clear' lcd command 0x01

K├│d: Vybra┼ą v┼íetko
lcddata=cmd;
// lcddata = 0x01

lcddata=lcddata & 0xF0;
// lcddata = 0x00

lcddata=lcddata | 0xFC;   // e=1, rs=0
// lcddata = 0xFC

sendbytei2c(0xFC);

delay_us(50);
lcddata=lcddata & 0xF8;   // e=0
// lcddata = 0xF8

sendbytei2c(0xF8);
delay_us(1000);

lcddata=cmd;
// lcddata = 0x01

lcddata=lcddata << 4;      // posun o 4 bity do prava
// lcddata = 0x10

lcddata=lcddata & 0xF0;
// lcddata = 0x10

lcddata=lcddata | 0xFC;   // e=1, rs=0
// lcddata = 0xFC

sendbytei2c(0xFC);

delay_us(50);
lcddata=lcddata & 0xF8;   // e=0
// lcddata = 0xFC

sendbytei2c(0xFC);
delay_ms(20);


niesom si isty ci to vypada spravne (v kombinacii s tou podozrivou send funkciou)....
ak mi unika chovanie tvojho toolchainu tak sa ospravedlnujem, ja by som mozno volil trochu iny pristup. kazdopadne pis ako ide progress. ako pisal peterple, tak to spomal aj na par hz delayami a vystacis si aj s ledkou okukat ci to shiftuje data a clk, tak ako ma.
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: LCD20x4 I2C

Odosla┼ąod gogo » 02 Feb 2018, 09:11

─Äakujem chlapi za rady!
Tribec, máš pravdu. Je tam chyba.

lcddata=lcddata & 11110000;
lcddata=lcddata | 1111 1100; // e=1, rs=0
sendbytei2c(lcddata);

kde s├║ tie 4 pod─Źiarknut├ę jednotky, tak tam musia by┼ą nuly,
lebo to posiela horn├Ż pol byt a ten je 0 a ja tam m├ím F.
gogo
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 137
Zalo┼żen├Ż: 28.09.2009
Bydlisko: Skalica
Karma: 2

Re: LCD20x4 I2C

Odosla┼ąod Tribec Zacks » 02 Feb 2018, 15:29

bez problemu, niekedy je lahsie vidiet problem inymi ocami.
daj vediet ako ti to ide.
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obr├ízok pou┼ż├şvate─ża
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 623
Vek: 37.07
Zalo┼żen├Ż: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Ďalšia

Nasp├Ą┼ą na C,C++,C#

Kto je pr├ştomn├Ż

U┼ż├şvatelia prezeraj├║ci si toto f├│rum: ┼Żiadny registrovan├Ż pou┼ż├şvate─ż a 1 hos┼ą.

Forums ©
Autor str├ínky je Ondrej Z├ívodsk├Ż(zawin), o graficky design sa star├í ─Żubo┼í Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
─îas potrebn├Ż k spracovaniu str├ínky 0.82 sek├║nd