Rozsvěcování matice LED s posuvnými registry - vzorový kód

Ahoj,
potřeboval bych naprogramovat AtMegu32,
konkrétně rozsvěcování matice LED s posuvnými registry,
dvě přerušení tlačítkem,
komunikace přes RS232, (dva příkazy+ odesílání z avr do pc),

Bylo by super, kdyby se někde daly najít vzorové kódy,
nevíte prosím o něčem takovém??
Vždycky se někde zaseknu :frowning:(

Jak moc se liší programování v CodeVision a v AVRstudiu? …myslel jsem si, že vůbec, ale hlavičkový soubory jsou odlišný v mým CodeVisionu nefungujou tyhle řádky
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <util/delay.h>
fungujou vždycky nějak obměněný…

Díky za odpovědi a trpělivost :wink:

:arrow_right: administrator: přejmenováno z "vzorové kódy?"

Co je na tych IO take ze zrovna tie chces pouzit ? Akej matice led 44 alebo 100100 ? co a ako sa tam ma zobrazovat ? o akych prudoch sa bavime lebo len posuvne registre stacit asi nebudu…

V prvor rade si treba ujasnit ze 74HC574 nie je posuvny register

měla by to být matice 48*10 LED, proudy 20mA= 1LED

inspiroval jsem se tady:
instructables.com/id/Led-Cub … /?ALLSTEPS

konkrétně tyhle dvě schémata:

cdn.instructables.com/FJA/4IZJ/G … .LARGE.jpg
cdn.instructables.com/FJ4/7RE1/G … .LARGE.jpg

Pokud by existovala lepší možnost rozšíření pinů, tak bych se rád inspiroval…případně by mi stačil i odkaz na dobrej zdroj kódů v C

:arrow_right: administrator: přiloženy externí soubory


Pokud bys použil 74594 nebo 74595, tak si tím dost zjednodušíš DPS a nejsi omezený na 8 IO. Prostě jich do série posadíš, kolik chceš. Připojíš to celé jako řetěz na 3 piny MCU a máš vystaráno. Případně na 4. pin MCU můžeš připojit !OE (u 74595) a jedním signálem rozsvicovat a zhasínat celou kostku případně tímto pinem pomocí PWM řídit jas celé kostky. 74594 má místo !OE (Output enable) pin !RCLR (Register Clear - reset výstupních registrů). Jinak se zápis dat a přenos dat z posuvných registrů do výstupních provádí shodně. Můžeš na to použít IO s menším počtem nožiček a pokud je možnost, můžeš i využít hardwareový SPI interfaci MCU.

A pokud místo tý spousty tranzistorů použiješ ULN2803, která umí spínat až 0,5A / pin, tak se Ti deska taky celkem zjednoduší.

Díky moc! přesně tohle jsem potřeboval! (tranzistory asi nebudou potřeba vůbec, budu spínat vždycky max dvě ledky)

Ještě by se mi hodil dobře okomentovanej kód v C

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

… voznámkuješ si to už sám, že jo ? :wink:

Tak nějak si myslím, že pokud nejsi schopný napsat program, který zapíše 8-bitovou hodnotu do 8-bitového registru (74HC574), pak bys asi měl začít něčím jednodušším. Třeba blikáním LED na pinu mcu a pak se teprve pouštět do složitějších věcí. Ono totiž použít SPI pro zápis do 74595 není složité, ale pokud nechápeš, co se děje v mcu a nejsi schopný z datasheetu vyčíst, jak dostat data na výstupy IO, měl bys trošku přibrzdit a na tyhle základy se podívat. My Ti tady poradíme a pomůžeme, ale základy by sis měl nastudovat. O programování AVR je toho na Internetu spousta.

NApriklad takto data z premenej “r1” sa prenesu do posuvneho registra 4094 a zapisu na jeho vystup

[code]//;************************ LCD ***************************
void prenosLCD (void) //;prenosLCD
{
unsigned char a;

for(a=0b10000000;a>0;a>>=1)
	{
clk=0;
dat=0;
if	(r1&a)	 
dat=1; 
clk=1;
	}
		
str=1;
__delay_us(2);
str=0;
__delay_us(2);
return;
}[/code]