Технический форум по робототехнике.
trofim » 01 ноя 2007, 15:32
2 Strijar
А то звуки сожрали 14кб из 16 доступных
А можно ли поподробней ???
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;
}
}
loid » 02 ноя 2007, 08:29
Вернусь к шасси. Оно у меня на ходу, осталось сделать передний бампер и боковые датчики наличия стены. Для позиционирования робота сначала хотел поставить на каждой стороне по одному датчику от мыши, но почитав о том как его прикрутить к AVR - передумал. Для начала хочу следать на старой доброй опто-механики. Взять пару колёс с прорезями от мыши и считать ими прошедшее расстояние. Вопрос в следующем: как в программе правильно опрашивать эти датчики? Их подключать через прерывания или просто читать данные с порта? При чтении не будут ли отклонения.
Master » 02 ноя 2007, 08:42
Взять пару колёс с прорезями от мыши и считать ими прошедшее расстояние.
Можно диск разукрасить полосками, мишиные датчики работают и на отражение тоже.
Вопрос в следующем: как в программе правильно опрашивать эти датчики? Их подключать через прерывания или просто читать данные с порта?
Это дело вкуса. Можно и так и так.
При чтении не будут ли отклонения.
Если чтение не будет попадать на выполнение прерывания, то нет. Будет больше погрешность в проскальзывании колес, чем при ошибках чтения.
loid » 02 ноя 2007, 09:16
Я понимаю что микроконтроллер достаточно быстрый, но помимо опроса датчиков, он еще будет выполнять программу. Думаю для позиционирования нужно поставить отдельный контроллер например atmega8.
Master » 02 ноя 2007, 09:47
loid писал(а):Я понимаю что микроконтроллер достаточно быстрый, но помимо опроса датчиков, он еще будет выполнять программу. Думаю для позиционирования нужно поставить отдельный контроллер например atmega8.
Не нада одного МК хватит с головой. ИМХО.
loid » 08 ноя 2007, 05:03
Как я говорил раньше - программировал в БЕЙСИКЕ. Там все программы однопоточные. Слышал легенду что с СИ возможно делать многопоточные программы. Применимо ли это к AVR?
EdGull » 08 ноя 2007, 08:46
loid писал(а):Как я говорил раньше - программировал в БЕЙСИКЕ. Там все программы однопоточные. Слышал легенду что с СИ возможно делать многопоточные программы. Применимо ли это к AVR?
На бейские тоже никто не запрещает написать много поточность. В Bascom есть даже исходники операционки. Только если она аппаратно не поддерживается, то это называется псевдомногопоточность. А у AVR нет аппаратной многопоточности.
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.
loid » 12 ноя 2007, 10:00
Помогите разобраться со входами МК. По каким правилам подавать сиглалы в МК? Почитав на сайте avr123.nm.ru, понял что сигналы могут подаваться от 0 до напряжения питания (5 вольт), но так же написано что сила тока не должна привышать 20 мВ. Как с этим быть? К atmrga16 допаются сигналы от датчиков мыши вот через такую схемку. Оцените.
Поделитесь опытом кто как опрашивал ( или считывал данные ) с энкодеров.
- Вложения
-

- scrill.JPG (12.92 КиБ) Просмотров: 2310
Strijar » 12 ноя 2007, 18:33
loid » 16 ноя 2007, 15:42
Так я и думал что для работы датчика движения нужно либо прерывание либо отдельный контроллер. Не могу разобраться с прерываниями на atmega16 где можно почитать про это азбуку?
Digit » 16 ноя 2007, 16:30
Авр сейчас видимо расслабился, поэтому я скажу

Там:
avr123.nm.ru - Краткий курс AVR
loid » 17 ноя 2007, 08:28
Я там читал, но что то не допёр

Digit » 17 ноя 2007, 18:35
А на
http://www.gaw.ru смотрел? Там много документации и примеров на русском языке...
Добавлено спустя 1 минуту 50 секунд:И если смотрел, то что именно не понятно с прерываниями? Что именно не получается? Рассказывай по шагам, что хочешь сделать и как именно делаешь. Тогда скажем, где ошибся.
А написать за тебя программку - это конечно быстрый выход, но педагогически не правильный
