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??