Stránka 7 z 10
Re: Arduino pomoc
Napsal: 15. 12. 2014, 8:18
od packa
jsou tam požitý všechny piny , ale nepotřebuju ovládat podsvícení takže mám pin volný , jen si nevím rady s tou knihovnou , zatím ji studuju
Re: Arduino pomoc
Napsal: 15. 12. 2014, 9:08
od Mex
Co to je za chip?
A co to znamená, že jsou použité všechny piny?
Ten integráč má pouzdro 16pin, LCD se dá i s podsvícením ovládat po 7 drátech (ve 4-bit režimu).
Takže vyšetřit nějaký pin se možná dá.
Re: Arduino pomoc
Napsal: 16. 12. 2014, 5:12
od packa
Je tam tenhle šváb: PCF8574 a první tři piny jsou pro nastavení adresy

- PCF8574 lcd.png (59.48 KiB) Zobrazeno 6922 x
Re: Arduino pomoc
Napsal: 16. 12. 2014, 9:24
od Mex
Pokud nechceš obětovat to řízení podsvícení, tak klidně odpoj signál R/W a použij ho pro to druhé Enable.
Signál R/W se často nezapojuje, protože číst data z LCD je celkem k ničemu, a bez BUSY flagu dá taky snadno obejít.
Re: Arduino pomoc
Napsal: 17. 12. 2014, 12:45
od packa
ok děkuji za radu , a nechtěl by ses kouknout na tu knihovnu ?
Re: Arduino pomoc
Napsal: 17. 12. 2014, 4:35
od Mex
Zběžně jsem se na tu knihovnu díval, je to předpokládám to
http://www.xs4all.nl/~hmario/arduino/Li ... al_I2C.zip" onclick="window.open(this.href);return false; .
Tady se pin R/W nepoužívá, takže ho můžeš na displeji klidně uzemnit a ušetřený pin používat pro Enable2.
Pokud nebudeš používat kurzor, tak se to výrazně zjednoduší.
Pokud bys kurzor používal, tak budeš muset udržovat informaci jestli je kurzor zobrazený, na kterém z displejů je zobrazený a při přechodech mezi nimi bys ho musel přepínat. V tomto případě by to bylo víc práce.
Pokud nebudeš používat kurzor a nějaké to různé podivné rolování textu (podle mě v praxi absolutně nevyužitelné), tak by mělo stačit upravit snad jen rutiny "setCursor" a pak nejnižší funkci "pulseEnable", kde podle čísla řádku budeš aktivovat Enable1 nebo Enable2.
Příkazy asi můžeš posílat současně na oba displeje, takže tady můžeš vždy aktivovat Enable1 i Enable2.
Nějak takhle:
Kód: Vybrat vše
void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row > _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row % 2]));
}
void LiquidCrystal_I2C::pulseEnable(uint8_t _data){
uint8_t enable_x;
if (_data & Rs) {
if (row < 2) {
enable_x = En;
} else {
enable_x = En2;
}
} else {
enable_x = En | En2;
}
expanderWrite(_data | enable_x); // En high
delayMicroseconds(1); // enable pulse must be >450ns
expanderWrite(_data & ~enable_x); // En low
delayMicroseconds(50); // commands need > 37us to settle
}
V LiquidCrystal_I2C.h si pak přidej definici:
Kód: Vybrat vše
#define En2 B00100000 // Enable2 bit
Nemám to jak vyzkoušet, takže je to jen teoretický nástřel.
Možná se to bude muset ještě někde přiohnout, ale rozhodně to realizovatelné je.
Re: Arduino pomoc
Napsal: 17. 12. 2014, 10:09
od Hades
Mex píše:Pokud nechceš obětovat to řízení podsvícení, tak klidně odpoj signál R/W a použij ho pro to druhé Enable.
Signál R/W se často nezapojuje, protože číst data z LCD je celkem k ničemu, a bez BUSY flagu dá taky snadno obejít.
to je dobrej nápad...
z LCD se nečte, taky k čemu, když ho ovládáš...
další volný signál...
se přiznám, že jsem podsvícení LCD vyřešil prasácky "samo domo"...
zbyl mi jeden volnej pin, a protože stejně volám v cyklu klávesnici, tak "nábojová pumpa", kde při každé stisknuté klávese pošlu impuls... tranzistor nabije kondík, a pak je to jen otázkou dalšího C-MOS, co drží podsvícení (jasně že je to prasárna, ale funkční...)
Re: Arduino pomoc
Napsal: 19. 12. 2014, 5:20
od packa
Mex píše:Zběžně jsem se na tu knihovnu díval, je to předpokládám to
http://www.xs4all.nl/~hmario/arduino/Li ... al_I2C.zip" onclick="window.open(this.href);return false; .
Tady se pin R/W nepoužívá, takže ho můžeš na displeji klidně uzemnit a ušetřený pin používat pro Enable2.
Pokud nebudeš používat kurzor, tak se to výrazně zjednoduší.
Pokud bys kurzor používal, tak budeš muset udržovat informaci jestli je kurzor zobrazený, na kterém z displejů je zobrazený a při přechodech mezi nimi bys ho musel přepínat. V tomto případě by to bylo víc práce.
Pokud nebudeš používat kurzor a nějaké to různé podivné rolování textu (podle mě v praxi absolutně nevyužitelné), tak by mělo stačit upravit snad jen rutiny "setCursor" a pak nejnižší funkci "pulseEnable", kde podle čísla řádku budeš aktivovat Enable1 nebo Enable2.
Příkazy asi můžeš posílat současně na oba displeje, takže tady můžeš vždy aktivovat Enable1 i Enable2.
Nějak takhle:
Kód: Vybrat vše
void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
if ( row > _numlines ) {
row = _numlines-1; // we count rows starting w/0
}
command(LCD_SETDDRAMADDR | (col + row_offsets[row % 2]));
}
void LiquidCrystal_I2C::pulseEnable(uint8_t _data){
uint8_t enable_x;
if (_data & Rs) {
if (row < 2) {
enable_x = En;
} else {
enable_x = En2;
}
} else {
enable_x = En | En2;
}
expanderWrite(_data | enable_x); // En high
delayMicroseconds(1); // enable pulse must be >450ns
expanderWrite(_data & ~enable_x); // En low
delayMicroseconds(50); // commands need > 37us to settle
}
V LiquidCrystal_I2C.h si pak přidej definici:
Kód: Vybrat vše
#define En2 B00100000 // Enable2 bit
Nemám to jak vyzkoušet, takže je to jen teoretický nástřel.
Možná se to bude muset ještě někde přiohnout, ale rozhodně to realizovatelné je.
Tak jsem upravyl knihovny , jak jsi poslal , ale vyhazuje hlášku : error: 'row' was not declared in this scope
jak jej mám nadefinovat ?
Dík
Packa
Re: Arduino pomoc
Napsal: 19. 12. 2014, 6:08
od Mex
Jsem na cestách, tak mám internet jenom na mobilu. Takže jenom stručně.
Máš pravdu, on si tam nepamatuje adresu řádku. Takže do *.h do definice třídy budeš muset doplnit něco jako "uint8_t _row;".
V proceduře setCursor do ní uložíš adresu řádku (na konci přidej "_row = row;"). V proceduře home pak bude "_row = 0;".
No a v té proceduře write místo "row" použiješ "_row".
Pokud bys dělal nějaké víceřádkové výpisy, tak bys ještě musel i v té proceduře write testovat přechod na nový řádek a tedy případně i na druhý displej. Ale to asi nebude nutné, víceřádkový výpis na takhle malý displej se většinou nepoužívá. Zvlášť proto, že pak by to bylo navrdo zamčené pro displej téhle konkrétní velikosti.
Re: Arduino pomoc
Napsal: 19. 12. 2014, 7:16
od packa
Mex ty jsi hlava
chodí to naprosto parádně ,
Velice děkuji
Re: Arduino pomoc
Napsal: 19. 12. 2014, 7:37
od Hades
A pak že to nepojede

Re: Arduino pomoc
Napsal: 19. 12. 2014, 7:56
od packa
Hades píše:A pak že to nepojede

Nojo jede , ale co to dalo , a hlavně bez vás bych to nedal . Takže ještě jednou děkuji všem za pomoc
Re: Arduino pomoc
Napsal: 19. 12. 2014, 8:03
od Hades
Mex u tebe má "jedno významné plus"...
Já ti nepomohl, protože mimo web, a Mex byl rychlejší.
sakra, nechci bejt na MEX-íka jedovatej, ale dělá on něco jiného, než že sedí za klábosnicí?
To: Mex
dobrej vodstřel "z debila"
njn, velký potlesk.
p.s.
taky už by mohl "Sám Náš Nejvyžší" přidat tuhle ikonku
Re: Arduino pomoc
Napsal: 19. 12. 2014, 9:24
od Mex
packa píše:chodí to
Dík žes napsal, když něco funguje to vždycky potěší.

Re: Arduino pomoc Algoritmus
Napsal: 21. 12. 2014, 2:33
od packa
Tak se pomalu pouštím do dalšího projektu , koupil jsem za pár šprdliků akumulátorovou vřetenovou sekačku , bez aku , ale to je to nejmenší , dá se použít i bez aku na ruční postrk v kolech jsou převody s volnoběžkama ty nahradím motory a budu z ní dělat robotickou sekačku , na netu je kupa různých pokusů , ale u žádné mě nenadchla orientace v prostoru , mám doma robotický vysavač IROBOT a tam se dá mluvit o plánování trasy a výpočtech - IROBOT je asi to nejlepší na trhu .
Ale všechny projekty co jsou kde na netu tak robot jede k překážce po dotyku se otočí třeba o 40° a jede dál až znovu narazí díky čemuž dříve či později možná pokreje celý prostor , ale kupu míst projede třeba desetkrát a neefektivně .
Nemáte nebo nevíte o nějakém použitelném algoritmu který by se dal pro tuhle aplikaci použít ?