2 Strijar
А то звуки сожрали 14кб из 16 доступных
А можно ли поподробней ???
roboforum.ruТехнический форум по робототехнике. |
|
|
#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 писал(а):Я понимаю что микроконтроллер достаточно быстрый, но помимо опроса датчиков, он еще будет выполнять программу. Думаю для позиционирования нужно поставить отдельный контроллер например atmega8.
loid писал(а):Как я говорил раньше - программировал в БЕЙСИКЕ. Там все программы однопоточные. Слышал легенду что с СИ возможно делать многопоточные программы. Применимо ли это к AVR?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6