241
Робо-сумо / Моят сумо робот
« -: Май 08, 2009, 12:11:04 am »
Първо ще е добре да качиш, новата и поправена схема, където има всички компоненти. Относно програми за правене на блок-схеми и дргуги подобни -попаднах на тази:
http://live.gnome.org/Dia - тя е open source и има добри възможности
Сега да минем към софтуера - твърдението че когато даден порт е конфигуриран като вход, ще се чете като високо ниво не е съвсем коректно.
Ако вземе Порт C и имаме:
тогова I/O порта е конфигуриран като високо импедансен вход и ако бъде оставен висящ, състоянието на отделните пинове няма да ясно, най-верояно поради наличието на външни смущения ще се преключват от 0-1 и обратно. Обаче ако конфигурираме порта така:
тогава включваме вградените pull-up резистори (50-100к) и входовете ше бъдат във високо ниво, дори ако са оставени висящи.
Сега нека да видим как изглежда на C следната проверка от няколко условия:
Доколкото сxващам под подава сигнал се разбира нулево ниво така че нещата изглеждат така:
С други думи условието ще бъде валидно, когато PC5=0, a PC2,PC3,PC4=1. Така написано това условие изглежда малко тромаво, но утре ще измислим нещо по елегантно.
http://live.gnome.org/Dia - тя е open source и има добри възможности
Сега да минем към софтуера - твърдението че когато даден порт е конфигуриран като вход, ще се чете като високо ниво не е съвсем коректно.
Ако вземе Порт C и имаме:
Код: [Маркирай кода]
DDRC=0x00; PORTC=0x00;
тогова I/O порта е конфигуриран като високо импедансен вход и ако бъде оставен висящ, състоянието на отделните пинове няма да ясно, най-верояно поради наличието на външни смущения ще се преключват от 0-1 и обратно. Обаче ако конфигурираме порта така:
Код: [Маркирай кода]
DDRC=0x00; PORTC=0xFF;
,тогава включваме вградените pull-up резистори (50-100к) и входовете ше бъдат във високо ниво, дори ако са оставени висящи.
Сега нека да видим как изглежда на C следната проверка от няколко условия:
Цитат
ако десният IR сензор подава сигнал, левия и десния сензор за линия подават сигнал (робота не е на ръба), тогава:
Доколкото сxващам под подава сигнал се разбира нулево ниво така че нещата изглеждат така:
Код: [Маркирай кода]
if (!PINC&(1<<PC5)&&(PINC&(1<<PC2))&&(PINC&(1<<PC3))&&(PINC&(1<<PC4))) {}
С други думи условието ще бъде валидно, когато PC5=0, a PC2,PC3,PC4=1. Така написано това условие изглежда малко тромаво, но утре ще измислим нещо по елегантно.