Multiplexni rizeni 7segmentovky

fero_zezina: po uprave jsem to uz nezkousel, ale snad to pofrci :wink:
Je to psany pro megu32. Kdybys to chtel pouzit pro m8, je potreba vymenit myslim PORTA za jinej :wink:

[code]#include <avr/io.h>

#define POCET_CISLIC 4

int main(void)
{
unsigned char poradi_cislice = 0, i, j;
unsigned char pole_zobrazeni]={~63,~48,~91,~79,~102,~109,~125,~7,~127,~111};
unsigned char pole_data[POCET_CISLIC];

//PORTA - segmenty, "0" segment sviti
//PORTB - vyber cislice, "1" cislice sviti
DDRA = 0xFF;
DDRB = 0x0F; 					//vyuzivam pouze dolni 4b


//pro zkousku
pole_data[0] = 4;				//nejnizsi rad (cislice)
pole_data[1] = 3;
pole_data[2] = 2;
pole_data[3] = 1;

for(;;)
{

	PORTB = 0;					//zhasne disp. 

	PORTA = pole_zobrazeni[pole_data[poradi_cislice]];		//hodnota pro pozadovanou cislici
	PORTB = (1<<poradi_cislice);							//rozsviti pozadovany rad (cislici)

	//poradi_cislice++;
	if(++poradi_cislice == POCET_CISLIC)
	{
		poradi_cislice = 0;
	}


	//------------------- zpozdeni kolem 1 ms
	for(i=0; i<19; i++)
	{
		for(j=0; j<255;j++)
		{
			//nutno mit vypnute optimalizace,
			//jinak by byla smycka odstranena
		}
	}
	//-------------------

}

return 0;

}
[/code]

Prosím tě o vysvětlení, proč používáš pro zpoždění dvojitou smyčku „for“ a ne třeba „delay_ms (1);“

Použití smyčky možná není smrtelný hřích.
Horší je podle mne vzdát se výhod optimalizace.

Pokud použijete deklaraci

volatile unsigned char i,j;

optimalizátor smyčku neodstraní.

delay nelze pouzit vzdy, zalezi mj. i na frekvenci mcu a nez nekde hledat, kdy to muzu a nemuzu pouzit, to to radsi napisu rucne… (navic nevim, v jakym hlavickovym souboru se nachazi)

Co se tyka optimalizaci, zasadne je vypinam, radsi ozelim par bytu pameti, nez potom hledat chybu nekde, kde ji nemuzu najit, protoze tam nevidim… Teprve kdyz je program hotov, tak je zapnu a pokud to funguje dal, tak je necham.

Volatile pouzivam, ale ze to zabrani odstraneni cely zbytecny smycky jsem nevedel (asi z dob zacatku, kdy mi vzdycky zmizela, ale to jsem tam volatile urcite nemel…). Vstkutku to tak je, dik za tip :wink:

Dakkujem, prestudujem pozrem :smiley: