Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Проект на Attiny13. VirtualWall для робота пылесоса

Страниц (1): [1]
 

1. killgur - 11 Ноября, 2015 - 21:35:37 - перейти к сообщению
Пока изучал таймеры AVR собрал себе полезное устройство для робота пылесоса.

Виртуальную стену, чтоб дверь не закрывать в соседнюю комнату.

Код получился небольшой и влез в Attiny13 (даже не с буквой А)
найденную в загашнике.

CODE:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define GENA 0

#define LED_PORT PORTB
#define LED_PIN 4

// F_CPU 9600000UL задано в MAKEFILE
// clkdiv8 = off отключен в фузах
// ATtiny13

volatile unsigned char comm[8]={'1','0','1','0','0','0','1','0'}; // 0xA2 - код команды
int pos = 0;
volatile unsigned char sb [1];



int main(void)
{
DDRB|=(1<<LED_PIN); //включаем пин 4 модуляция светодиода (нога 3)

DDRB|=(1<<GENA); //включаем пин 0 (oc0а) меандр 40кHz на светодиод (нога 5)

//Установка таймеров
TCCR0A|=(1<<COM0A0)|(1<<WGM01); // !!! MODE 2 (CTC) нога 5 переключает состояние по совпадению
TCCR0B|=(1<<CS00); //PRESCALER=1

// в регистр сравнения заносим значение 119 -> fген=40кHz).

OCR0A = 119;


sei();

while(1)
{
while(pos<=7)
{
sb [1] = comm[pos];
switch (sb [1])
{
case '1' : { LED_PORT |= 1 << LED_PIN; //зажечь
_delay_ms(3);
LED_PORT &= ~(1 << LED_PIN); //погасить
_delay_ms(1);break;
}
case '0' : { LED_PORT |= 1 << LED_PIN; //зажечь
_delay_ms(1);
LED_PORT &= ~(1 << LED_PIN); //погасить
_delay_ms(3);break;
}
default: break;

}
pos=pos+1;
}
if (pos>7) pos=0;

LED_PORT &= ~(1 << LED_PIN); // пауза 16 мс
_delay_ms(16);
}
}


Напряжение питания от 4х аккумуляторов "AA" - 4,8В (больше 5,5В нельзя)

Устройство собрано и работает, пылесос заворачивает от луча и едет назад.


Источники вдохновения здесь и здесь

Первый источник самый правильный и лучший (на PIC), там все и нашел, из второго только паузу добавил в конец каждой посылки.


Архив с исходниками, скомпилированной прошивкой,

протеусами и прочим можно скачать по ссылке https://yadi.sk/d/IseVtlzDkPdLB
2. killgur - 22 Ноября, 2015 - 16:39:53 - перейти к сообщению
Доделал "виртуальную стену"

фото изнутри.
3. killgur - 22 Ноября, 2015 - 16:48:35 - перейти к сообщению
общий вид
4. Петр Киселев - 23 Ноября, 2015 - 06:45:35 - перейти к сообщению
killgur, неплохо было бы посмотреть на блок-схему этой "виртуальной стены"!
Мне, например, она может пригодиться при замене УЗ сенсоров. Или при организации системы маяков. Подбираюсь к ним.
(Добавление)
Тем более, что несколько штучек Attiny13 у меня есть. Хотелось бы их пустить в дело, чего им просто валяться!
5. killgur - 23 Ноября, 2015 - 11:29:51 - перейти к сообщению
Петр Киселев пишет:
killgur, неплохо было бы посмотреть на блок-схему этой "виртуальной стены"!
Мне, например, она может пригодиться при замене УЗ сенсоров. Или при организации системы маяков. Подбираюсь к ним.
(Добавление)
Тем более, что несколько штучек Attiny13 у меня есть. Хотелось бы их пустить в дело, чего им просто валяться!


можно взглянуть
http://www.enide.net/webcms/uplo...iagram_small.png

(без средней блок-схемы я ее не делал) и в этой схеме нет паузы 16 мс между передачей команды.
6. killgur - 23 Ноября, 2015 - 17:51:20 - перейти к сообщению
killgur пишет:
Петр Киселев пишет:
killgur, неплохо было бы посмотреть на блок-схему этой "виртуальной стены"!
Мне, например, она может пригодиться при замене УЗ сенсоров. Или при организации системы маяков. Подбираюсь к ним.
(Добавление)
Тем более, что несколько штучек Attiny13 у меня есть. Хотелось бы их пустить в дело, чего им просто валяться!


можно взглянуть
http://www.enide.net/webcms/uplo...iagram_small.png

(без средней блок-схемы я ее не делал) и в этой схеме нет паузы 16 мс между передачей команды.


P.S.
Систему маяков я делать не буду (по эстетическим соображениям) воспользуюсь возможностями ESP8266 буду составлять карту.