Автор Тема: Експеримент с Atmega8  (Прочетена 12449 пъти)

durankulakat

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 103
    • Профил
Експеримент с Atmega8
« -: Април 10, 2009, 10:42:10 pm »
Днес реших да направя нещо различно с микроконтролера. Задачата е да се отваря и затваря механизма на 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

   Поздрави!
Иван Петров 16г
skype: slayer_kolyo