roboforum.ru

Технический форум по робототехнике.

Робот-Пылесос

Re: Робот-Пылесос

trofim » 01 ноя 2007, 15:32

2 Strijar
А то звуки сожрали 14кб из 16 доступных
А можно ли поподробней ???

Re: Робот-Пылесос

Strijar » 01 ноя 2007, 20:11

А что именно? Звук 8 бит, частота 8кц, хранятся в массивах (ну типа wav). При наступлении определеных события выводятся на динамик через ШИМ.

Код: Выделить всёРазвернуть
#include <avr/pgmspace.h>
#include <avr/interrupt.h>

unsigned int    sound = 0;
unsigned char   *data;

#define DIV_0           ((0 << CS22) | (0 << CS21) | (1 << CS20))
#define DIV_8           ((0 << CS22) | (1 << CS21) | (0 << CS20))
#define DIV_64          ((0 << CS22) | (1 << CS21) | (1 << CS20))
#define DIV_256         ((1 << CS22) | (0 << CS21) | (0 << CS20))
#define DIV_1024        ((1 << CS22) | (0 << CS21) | (1 << CS20))

ISR(SIG_OUTPUT_COMPARE3A) {
    sei();

    if (sound) {
        if (sound--) {
            OCR1B = pgm_read_byte(data++);
        } else {
            TCCR1A = 0;
            TCCR1B = 0;
            TCCR3B = 0;
            DDRE &= ~(1 << PE2);
        }
    }
    TCNT3 = 0;
}

void SoundPlay(unsigned char* wave, unsigned int wave_size) {
    if (!sound) {
        data = wave;
        sound = wave_size;

        /* PWM 8bit, 32kHz */

        DDRE |= (1 << PE2);
        TCCR1A = (1 << WGM10) | (1 << COM1B1);
        TCCR1B = (1 << WGM12) | DIV_0;

        /* Change samples timer - 8kHz */

        TCCR3A = 0;
        TCCR3B = DIV_8;
        OCR3A = 125;
        ETIMSK |= (1 << OCIE3A);
        TCNT3 = 0;
    }
}

Re: Робот-Пылесос

loid » 02 ноя 2007, 08:29

Вернусь к шасси. Оно у меня на ходу, осталось сделать передний бампер и боковые датчики наличия стены. Для позиционирования робота сначала хотел поставить на каждой стороне по одному датчику от мыши, но почитав о том как его прикрутить к AVR - передумал. Для начала хочу следать на старой доброй опто-механики. Взять пару колёс с прорезями от мыши и считать ими прошедшее расстояние. Вопрос в следующем: как в программе правильно опрашивать эти датчики? Их подключать через прерывания или просто читать данные с порта? При чтении не будут ли отклонения.

Re: Робот-Пылесос

Master » 02 ноя 2007, 08:42

Взять пару колёс с прорезями от мыши и считать ими прошедшее расстояние.

Можно диск разукрасить полосками, мишиные датчики работают и на отражение тоже.
Вопрос в следующем: как в программе правильно опрашивать эти датчики? Их подключать через прерывания или просто читать данные с порта?

Это дело вкуса. Можно и так и так.
При чтении не будут ли отклонения.

Если чтение не будет попадать на выполнение прерывания, то нет. Будет больше погрешность в проскальзывании колес, чем при ошибках чтения.

Re: Робот-Пылесос

loid » 02 ноя 2007, 09:16

Я понимаю что микроконтроллер достаточно быстрый, но помимо опроса датчиков, он еще будет выполнять программу. Думаю для позиционирования нужно поставить отдельный контроллер например atmega8.

Re: Робот-Пылесос

Master » 02 ноя 2007, 09:47

loid писал(а):Я понимаю что микроконтроллер достаточно быстрый, но помимо опроса датчиков, он еще будет выполнять программу. Думаю для позиционирования нужно поставить отдельный контроллер например atmega8.

Не нада одного МК хватит с головой. ИМХО.

Re: Робот-Пылесос

loid » 08 ноя 2007, 05:03

Как я говорил раньше - программировал в БЕЙСИКЕ. Там все программы однопоточные. Слышал легенду что с СИ возможно делать многопоточные программы. Применимо ли это к AVR?

Re: Робот-Пылесос

EdGull » 08 ноя 2007, 08:46

loid писал(а):Как я говорил раньше - программировал в БЕЙСИКЕ. Там все программы однопоточные. Слышал легенду что с СИ возможно делать многопоточные программы. Применимо ли это к AVR?

На бейские тоже никто не запрещает написать много поточность. В Bascom есть даже исходники операционки. Только если она аппаратно не поддерживается, то это называется псевдомногопоточность. А у AVR нет аппаратной многопоточности.

Re: Робот-Пылесос

loid » 09 ноя 2007, 07:48

Собрал датчик движения на основе опто-механической мыши. Выглядит он так: на ось колёсика с прорезями насадил scroll, если кому интересно выложу фото. Прошу совет по поводу обработки информации поступающего с датчика. Он тоже взят из мыши - это сдвоенный фото-транзистор (или диод, кому как нравиться). При прокручивании колёсика вперёд - изменение сигналов с фото-датчика происходит в такой последовательности: 0-0 1-0 0-1 0-0 1-0 0-1 0-0 и т.д. При прокручивании в обратном направлении: 0-0 0-1 1-0 0-0 0-1 1-0 0-0. От этих датчиклв нужно получать значение: направление прокручивания и значение, на сколько единиц колёсико прокрутилось в ту или другую сторону. Может у кого был опыт с этим делом. Так же мучает вопрос как опрашивать их в программе. Я думаю что всё-таки на опрос нужно ставить отдельный чип, например ATtyny25.

Re: Робот-Пылесос

loid » 12 ноя 2007, 10:00

Помогите разобраться со входами МК. По каким правилам подавать сиглалы в МК? Почитав на сайте avr123.nm.ru, понял что сигналы могут подаваться от 0 до напряжения питания (5 вольт), но так же написано что сила тока не должна привышать 20 мВ. Как с этим быть? К atmrga16 допаются сигналы от датчиков мыши вот через такую схемку. Оцените.

Поделитесь опытом кто как опрашивал ( или считывал данные ) с энкодеров.
Вложения
scrill.JPG
scrill.JPG (12.92 КиБ) Просмотров: 2310

Re: Робот-Пылесос

Strijar » 12 ноя 2007, 18:33


Re: Робот-Пылесос

loid » 16 ноя 2007, 15:42

Так я и думал что для работы датчика движения нужно либо прерывание либо отдельный контроллер. Не могу разобраться с прерываниями на atmega16 где можно почитать про это азбуку?

Re: Робот-Пылесос

Digit » 16 ноя 2007, 16:30

Авр сейчас видимо расслабился, поэтому я скажу :) Там: avr123.nm.ru - Краткий курс AVR

Re: Робот-Пылесос

loid » 17 ноя 2007, 08:28

Я там читал, но что то не допёр :cry:

Re: Робот-Пылесос

Digit » 17 ноя 2007, 18:35

А на http://www.gaw.ru смотрел? Там много документации и примеров на русском языке...

Добавлено спустя 1 минуту 50 секунд:
И если смотрел, то что именно не понятно с прерываниями? Что именно не получается? Рассказывай по шагам, что хочешь сделать и как именно делаешь. Тогда скажем, где ошибся.
А написать за тебя программку - это конечно быстрый выход, но педагогически не правильный :wink:


cron
Rambler\'s Top100 Mail.ru counter