Stránka 5 z 6
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 04 úno 2020, 21:18
od kiRRow
Navyšovat napětí nahoru (a ještě k tomu DC/DC) se vyplatí opravdu v případech jako je např blesk u fotoaparátu ... atp ... pro trvalejší provoz to je opravdu nevhodné, hlavně při větším a stálém odběru.
Pokud potřebuji 12V pro něco ... 5V pro arduino a 3.3V pro některé jeho senzory ... baterie by měla mít 12-14V (typický olověný bezúdržbový akumulátor)
12V bych napájel přes pojistku přímo z akumulátoru, dolů bych to srazil na 7V DC/DC měničem a prohnal pinem VIN (nebo přes souosý konektor) a 3.3 V bych už poslal z arduina (za předpokladu, že je tam rozumný odběr)
Baterie...Teču, když tohle někdo řekne a představuje si jeden monočlánek AAA... Baterie je přece více akumulátorů (v podstatě jakýchkoliv věcí, třeba raketometná baterie) sestavených tak aby se tvářili jako jeden člen.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 04 úno 2020, 21:24
od kiRRow
Hehe ... v tenhle moment musíš buď program zmáčknout ... tj začít psát vlastní knihovny šetřící každou nulu a jedničku a velmi pečlivě si hlídat (tu bych začal) co nahráváš do SRAM paměti, třeba při výpisu na serial použít F("text") a to co neměním v proměnné, tak PROGMEM ... takhle ty data zůstanou jen v flash paměti, ale je k nim zase složitější přístup (z hlediska toho čipu, né programátora) ... ne všechny proměnné musí být globální
Nebo je to konečně super výmluva proč si koupit dražší a lepší hračku ... to co mi na UNU zabralo 70%, tak na MEGA to bylo 7%
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 07:22
od ondraN
Dělat všechny proměnné globální, ikdyž to opravdu není třeba, je volovina. Pro proměnné, co použiješ jen někde, je dobré je odsunout na vyšší úroveň.
Kód: Vybrat vše
int promenna1; //tahle promenna je definovana globalne a zabere 2byte RAM po celou dobu
{
int promenna2; //tahle promenna je lokalni, zabere 2byte RAM jen po dobu, nez pogram opusti slozene zavorky, zaklada a uvolnuje se v zasobniku
}
Tahle vlastnost se nazývá anglicky scope a doporučuji prostudovat.
Paměť se dá ušetřit i použitím unionů, ale to už chce trochu hlubší znalosti a dobře si promyslet strukturu a použití proměnných.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 09:18
od Maxim
Já to potřebuji rozchodit na Arduino mini pro, to má stenou paměť jako UNO, ne?
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 09:38
od ondraN
Maxim píše: ↑05 úno 2020, 09:18
Já to potřebuji rozchodit na Arduino mini pro, to má stenou paměť jako UNO, ne?
To záleží na procesoru. 328P má 2K, 168P má jen 1K RAM.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 09:44
od Maxim
mám 328P....
nové čipy se zatím nechystají?
teď koukám, že existují ATMEGA32U4, které mají SRAM 2.5 KB, ale našel jsem je pouze v Arduino NANO.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 09:52
od ondraN
V té řadě je 328P nejvyšší. Jestli chceš víc paměti, tak z těch osmibitových jedině Mega. Pokud ale ještě upravíš ten program, tak se to tam vejde.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 10:04
od Maxim
Ok, zkusím ještě zabojovat.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 10:09
od ondraN
Pro začátek zkus vyházet všechny zbytečné proměnné na jedno použití deklarované globálně. Je jich tam fakt hodně.
Re: konverze datových typů / komunikace s displayem pomocí SPI
Napsal: 05 úno 2020, 10:26
od ondraN
Kód: Vybrat vše
long zobrazeniCasuAZnakuCasu(char *pomocnePole , size_t velikostPole , long pocetCyklu) {
long hodnotaCasuUpravena = pocetCyklu;
hodnotaCasuUpravena = pocetCyklu * 2;
if (hodnotaCasuUpravena < 99) {
hodnotaCasuUpravena = snprintf(pomocnePole, velikostPole - 1, "%i" , (long)hodnotaCasuUpravena); //převede int "hodnotaCasu" na řetězec "velikostPole" a uloží do velikostPole délku proměnné velikostPole, kterou vrací funkce snprinf
pomocnePole[hodnotaCasuUpravena] = 's'; //na konec řetězce připíše s
}
if ((hodnotaCasuUpravena > 99) and (hodnotaCasuUpravena < 5939)) {
hodnotaCasuUpravena = hodnotaCasuUpravena / 60;
hodnotaCasuUpravena = snprintf(pomocnePole, velikostPole - 1, "%i" , (long)hodnotaCasuUpravena); //převede int "hodnotaCasu" na řetězec "velikostPole" a uloží do velikostPole délku proměnné velikostPole, kterou vrací funkce snprinf
pomocnePole[hodnotaCasuUpravena] = 'm'; //na konec řetězce připíše m
}
if (hodnotaCasuUpravena > 5939) {
hodnotaCasuUpravena = hodnotaCasuUpravena / 3600;
hodnotaCasuUpravena = snprintf(pomocnePole, velikostPole - 1, "%i" , (long)hodnotaCasuUpravena); //převede int "hodnotaCasu" na řetězec "velikostPole" a uloží do velikostPole délku proměnné velikostPole, kterou vrací funkce snprinf
pomocnePole[hodnotaCasuUpravena] = 'h'; //na konec řetězce připíše h
}
pomocnePole[hodnotaCasuUpravena + 1] = 0; //vytvoří novou zarážku na konci řetězce
return pomocnePole + 1;
}
Víš, co ti vrací tahle funkce v tvém programu??