![]() |
Îñâàèâàåì AVR! |
|
íîâîñòè | ñ ÷åãî íà÷àòü? | ññûëêè | ó÷åáíèê | ïðèìåðû | ïðîãðàììàòîð | îòëàä÷èêè | îñöèëëîãðàô | äàâíî ýòî áûëî | download | ñîòðóäíè÷åñòâî | ïèøèòå ìíå
ïðèìåð îòëàäêè | áåãóùèå îãíè | Ìèãàëêà | Ýêîíîìèì ðåñóðñ ÏÇÓ | Ðàáîòàåì ñ USART | 555
|
Íà ýòîé ñòðàíè÷êå âàì ïðåäëàãàåòñÿ äîñòàòî÷íî ïðîñòîé ïðèìåð, èäåþ êîòîðîãî ìíå ïðåäëîæèë kuznecov_s@bru3.uralkaly.ru. Íàäåþñü, ïðèìåð óäà÷íûé - âî ïåðâûõ, ïðîãðàììà (è ñàìî óñòðîéñòâî) äîñòàòî÷íî ïðîñòû, âî âòîðûõ - ðåçóëüòàò âåñüìà íàãëÿäåí. Ýòî ïðîñòåéøàÿ ïðîãðàììà äëÿ ðåàëèçàöèè ýôôåêòà "áåãóùèå îãíè", êîòîðóþ ïðè æåëàíèè ëåãêî ìîäèôèöèðîâàòü è ðàçâèâàòü äàëüøå. |
Ñõåìà ïðîñòåéøèõ áåãóùèõ îãíåé äëÿ AT90s8535. Êâàðö 8 ÌÃö, ñâåòîäèîäû ëþáûå (íàïðèìåð ÀË307Á) |
|
Èòàê, çàäà÷à - äîñòàòî÷íî ïðîñòàÿ. Åñòü AVR, ê íåìó ïîäêëþ÷åíû 8 ñâåòîäèîäîâ è 2 êíîïêè. Ïðè íàæàòèè íà îäíó èç êíîïîê ãîðÿùèé ñâåòîäèîä áåæèò â îäíó ñòîðîíó, è íàîáîðîò. Ïóñòü ìû èñïîëüçóåì ãîðÿ÷î ìíîþ ëþáèìûé AT90s8535, ñâåòîäèîäû ïîäêëþ÷åíû ê ïîðòó PORTC, à êíîïêè - íà ïåðâûå äâà ïèíà ïîðòà PORTA. Íó, åñòåñòâåííî, íå çàáûòî ïðî ïèòàíèå è êâàðö... À ïðîãðàììà áóäåò òàêàÿ:
|
|
; +--------------------+ ;------------|(c)nml, 22-oct-2002 |----------------------------- ; +--------------------+ ; íó, â îáùåì, ïðèêèíåì ïðîñòåéøèå ñâåòîâûå ýôôåêòû äëß AVR ; ïóñòü áóäåò òàê (äëß íà÷àëà): íà PORTC ïîäêëþ÷åíû 8 ñâåòîäèîäîâ, ; íà PORTA.0 è PORTA.1 ïîäêëþ÷åíû êíîïêè, çàìûêàíèå íà çåìëþ. ; Ïðè íàæàòèè íà êíîïêè - ïóñòü "âåðòèòñß" îäèí ãîðßøèé, â ðàçíûõ ; íàïðàâëåíèßõ. Ñêîðîñòü (ïîêà) ôèêñèðîâàíà. ; Ñâåòîäèîäû ïîäêë. òàê, ÷òîáû ãîðåëè ïðè ïîäà÷å "0" ;--------------------------------------------------------------- ; Íó ÷å, ïðèñòóïèì? :-) áåç óìíè÷àíüß (ïðåðûâàíèé è ïðî÷åãî) ;--------------------------------------------------------------- .include "8535def.inc" ; òóò îïðåäåëßþòñß èìåíà ðåãèñòðîâ ; ñïåö ôóíêöèé è ïðî÷åå ñèìâîëüíîå ; äëß óäîáñòâà îïðåäåëèì ñèìâîëüíûå èìåíà ðåãñòðîâ ; âåäü COUNTER ïðè ÷òåíèè ïðîãðàììû ãîðàçäî ïîíßòíåå, ; ÷åì R22 :-) .def TMP = R16 ; èñïîëüçóåì ðåã íà÷èíàß ñ 16, òàê êàê íàì .def VERT = R17 ; ìíîãî íå íàäî, à ìëàäøèå íå ìîãóò èñï â .def COUNT1 = R18 ; îïåðàöèßõ ñ íåïîñðåäñòâåííûì îïåðàíäîì .def COUNT2 = R19 ; ÷òî èíîãäà íåóäîáíî .def COUNT3 = R20 ; ;.def = R21 ; ;.def = R22 ; ;.def = R23 ; ;.def = R24 ; ;.def = R25 ; âñå, äàëüøå ïîøëè ïàðû óêàçàòåëåé X,Y,Z ; âïðî÷åì, ïðè íåîáõîäèìîñòè ìîæíî è èõ ; èñïîëüçîâàòü, ýòî îáû÷íûå ðåãèñòðû .org 0 ; ïî âêë ïèò-ß èëè ñáðîñó ïðîãðàììà ñòàðòóåò ñ 0 rjmp START ;\ .org 0x50 ; ñóòü ïîäîáíîãî "ñòàðòà" îïèñàíà ó ìåíß íà ñàéòå, START: ;/ñîõðàíåíèå ðåñóðñà ; èíèöèàëèçèðóåìñß. Íó, âî ïåðâûõ, íàäî óñòàíîâèòü óêàçàòåëü ; ñòåêà, ïðåðûâàíèß è ïîäïðîãðàììû áåç ýòîãî ðàáîòàòü íå áóäóò ; Îí óñòàíàâëèâàåòñß íà êîíåö ÎÇÓ (ñòåê ðàñòåò âíèç) ldi TMP,low(RAMEND) ; ramend îïðåäåëåíî â .inc òàê êàê out SPL,TMP ; äëß ðàçíûõ ïðîöåññîðîâ ðàçíûå ldi TMP,high(RAMEND) out SPH,TMP ; ãîòîâî. TMP èñïîëüçîâàëè êàê ïåðåâàëî÷íóþ áàçó, âûâîä ; âîçìîæåí òîëüêî èç ðåãèñòðà. ; òåïåðü íàäî îïðåäåëèòü êàê áóäåò ðàáîòàòü ïîðò. Äëß ýòîãî ; åñòü ðåãèñòð DDRx - çàïèñûâàß â ñîîòâåòñòâóþùèé ðàçðßä "1", ; îïðåäåëßåì òîò æå ðàçðßä PORTx êàê âûõîäíîé. Åñëè "0" - òî ; âõîäíîé, ïðè ýòîì çàïèñü "1" â PORTx ïîäêëþ÷èò ïîäòßãèâàþùèé ; ðåçèñòîð íà + ser TMP ; =FF out DDRC,TMP ; PORTC-âñå âûõîäíûå out PORTA,TMP ; PORTA ïî óìîë÷àíèþ íà ââîä, çàïèñü "1" ; íóæíà äëß ïîäòßãèâàþùèõ ðåçèñòîðîâ ldi VERT,0xFE ; ýòî òî, ÷òî âåðòåòüñß áóäåò ; âïðî÷åì, ìîæíî è äðóãîå ÷èñëî.... ; íàïðèìåð,0x0F - áóäóò 4 ãîðßùèõ. ; íó âîò è âñß, íàâåðíîå, èíèöèàëèçàöèß. ; ïðåðûâàíèß âñå ïîñëå ñòàðòà çàïðåùåíû, íè÷åãî ïåðåîïðåäåëßòü ; íå íàäî. ; òåïåðü íàì äëß ïîëó÷åíèß ýôôåêòà "áåãóùåãî îãíß" íàäî, â îáùåì-òî, ; ñäåëàòü ïàóçó (åñëè âåðòåòü ñ ÷àñòîòîé â 1 êãö - íå óâèäèøü íè÷åãî), ; ïîòîì â çàâèñèìîñòè îò íàæàòîé êíîïêè ñäâèíóòü âïðàâî èëè âëåâî, ; íå çàáûòü âûâåñòè â ïîðò è îïßòü íà ïàóçó. Èòàê: LOOP: out PORTC,VERT ; ñîáñòâåííî âûâîä â ïîðò. ñþäà ïðèäåì ïîñëå ; êàæäîãî ñäâèãà! ldi COUNT3,16 ; ñì. íà ôîðìèðîâàíèå çàäåðæêè WAIT: dec COUNT1 brne WAIT ; ýòî äàñò 256*3 òàêòà = 96 ìêñ ïàóçó. ìàëîâàòî! dec COUNT2 brne WAIT ; ãðóáî ýòî óìíîæèò íà 256, 25 ìñ - òîæå ìàëî... ; íàì áû 0,4ñåê=100 ìñ - åùå íà 16 óìíîæèòü. dec COUNT3 brne WAIT ; âñå, ïàóçà êîí÷èëàñü. òåïåðü ñìîòðèì íà êíîïêè ; ê÷òàòè, âðåìß ñ÷èòàëîñü èñõîäß èç 8ìÃö òàêòîâîé in TMP,PINA ; ââîä íå èç PORTx, à PINx! ; òóò åñëè êí íàæàòà, òî ñîîòâ áèò áóäåò =0 sbrs TMP,0 ; ýòà êîìàíäà ïðîïóñòèò ñëåäóþùóþ, åñëè áèò TMP.0=1 rjmp vlevo ; òî åñòü åñëè ïåðâàß êíîïêà íå íàæàòà sbrs TMP,1 rjmp vpravo ; -//- âòîðàß rjmp LOOP ; åñëè íè÷åãî íå íàæàòî, òî è íå äåëàòü íè÷åãî ;----------------------------------------------------------------------------- ; à âîò òóò ñîáñòâåííî îñóùåñòâëßåì ñäâèãè. Òóò íàäî èìåòü â âèäó, ÷òî ó AVR ; åñòü òîëüêî ñäâèã ÷åðåç "C" ðàçðßä, à íàì áû íàäî ñðàçó èç 7 â 0 è íàîáîðîò! ;----------------------------------------------------------------------------- vlevo: mov TMP,VERT ; âî âðåìåííûé rol TMP ; ðåçóëüòàò ïî áàðàáàíó, ãëàâíîå C áèò rol VERT ; òóò â 0 âäâèíåòñß ñòàðøèé! rjmp LOOP ; âûâåäåòñß òàì! ;-------------- vpravo: mov TMP,VERT ; ror TMP ; ror VERT ; rjmp LOOP ; òóò, â îáùåì-òî, âñå àíàëîãè÷íî ;------------ .exit ; âñå, ïîñëå ýòîãî óæå íå òðàíñëèðóåòñß! ---------------------------------------------------------- âîò è âñå... ïî èäåå, äîëæíî ðàáîòàòü. ïàßòü ýòî äëß ïðîâåðêè êàê-òî ëåíèâî. ---------------------------------------------------------- Äà, ïðè íàæàòèè íà îáå êíîïêè ðàáîòàòü áóäåò êàê ïðè íàæàòîé ïåðâîé, òóò ïîëó÷àåòñß ïðèîðèòåò. À ìîæíî áûëî áû ïîñëå ââîäà ñ PINA ñäåëàòü andi TMP,3 ; îñòàâèòü 2 ìë áèòà breq oba_nazaty ; åñëè ÎÁÀ íóëè, òî íà îòäåëüíóþ âåòâü ; íàïðèìåð, çàæå÷ü âñå ñâåòîäèîäû... Âîîáùå òóò ãðîìàäíåéøèé ïðîñòîð äëß ôàíòàçèè. - ñäåëàòü íå íà 8, à 16 è áîëåå (31 ìàõ) ñâåòîäèîäîâ - ïîäêëþ÷èòü ïîòåíöèîìåòð íà âõîä ÀÖÏ è ïëàâíî èçìåíßòü ñêîðîñòü âðàùåíèß - êðóòèòü íå "1", à õðåíîâó òó÷ó ðàçíûõ êîìáèíàöèé, ýôôåêòîâ ïðèäóìàòü ìîæíî ìíîãî... (íàïðèìåð 2 ïîñëåäíèõ ïî èñêë ÈËÈ íà ïåðâûé) - ñäåëàòü ïëàâíîå çàæèãàíèå/ãàøåíèå (òèïà çâåçäíîãî íåáà â Íîðòîíå) - óïðàâëßòü âñåé ýòîé õðåíüþ ñ êîìïà ïî RS232 (íóæíà ñõåìà ñîãëàñîâàíèß óðîâíåé, íà êîìïå +-12V) âïðî÷åì, ñõåìà íåñëîæíàß.
|
|
|
Âîò, ñîáñòâåííî, è âñÿ ïðîãðàììà. Äàæå ïðîâåðåíî (íå ïîëåíèëñÿ òàêè) - ðàáîòàåò :-) Æåëàþ óñïåõà! |
|
|
|
|
|
|
|
|
||||||||||||||||||||||
(ñ)nml 08-Dec-2006