Днес реших да направя нещо различно с микроконтролера. Задачата е да се отваря и затваря механизма на CD (безкраен цикъл). Не е много, но ми беше интересно да го направя :-D . Схемата е следната: 1 микроконтролер и 1 драйвер l293d, D1 и D2 на микроконтролера са свързани към input 1 и input 2 на драйвера(единия Н мост), а C5 e свързан към ключа на механизма (който е в логичесто 1 при двете крайни положения: напълно отворено и напълно затворено). Към драйвера е свързан мотора от CD-то. Ако не си представяте схемата пишете да пусна снимка. Първият опит с кода беше неуспешен (аз го писах
) . С него посоката се обръщаше само веднъж и след това се опитваше да излезе извън рамката
.
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 4000000UL
int main(void)
{
DDRD = 0xff;
DDRC = 0x00;
PORTD|=_BV(PD1);
while(1)
{
while (!(PINC&(1<<PC5)))
{
if(PINC&(1<<PC5))
{
PORTD&=~_BV(PD1);
PORTD|=_BV(PD2);
}
}
while(!(PINC&(1<<PC5)))
{
if(PINC&(1<<PC5))
{
PORTD&=~_BV(PD2);
PORTD|=_BV(PD1);
}
}
}
}
yasko ми даде един друг код, за което му благодаря :biri: , който работеше
. Ето го:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 4000000UL
int main(void)
{
DDRD = 0xff;
DDRC = 0x00;
PORTD |= _BV(PD1);
PORTD &= ~_BV(PD2);
while(1)
{
if (PINC&_BV(PC5))
{
if (PORTD&_BV(PD1))
{
PORTD |= _BV(PD2);
PORTD &= ~_BV(PD1);
}
else
{
PORTD |= _BV(PD1);
PORTD &= ~_BV(PD2);
}
while (PINC&_BV(PC5));
}
}
}
Ето и клипче на работата на схемата:
http://www.youtube.com/watch?v=rtlsKrxzY5o Поздрави!