Страница 536 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 17:53:03
просто КОТ
Такой ещё вопрос.. А какой командой задаётся потолок счёта таймеру? т.е. чтоб не по переполнению, а по совпадению. Такого не могу чёт найти, хотя явно есть.Надо взвести его на 10мс.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 18:21:02
КРАМ
При каждом таймере (кроме нулевого) есть регистр (OCR), который подключен вместе с таймером к цифровому компаратору.
Достаточно записать в этот регистр необходимую величину пересчета и Вы добьетесь искомого.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 18:32:56
ARV
Не достаточно, но необходимо. Ещё необходимо сконфигурировать режим СТС или иной подходящий.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 19:06:21
просто КОТ
Код: Выделить всё
// При частоте генератора 14.7456 МГц и делителе 1024, 1000ms - 14400 тактов.
OCR3AH=56; OCR3AL=63;
Из какого-то примера. Что есть 56 и 63? Разве не с ОДНИМ числом совпадение?
И да, какими командами запускать/прекращать действие таймера?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 20:16:48
просто КОТ
Спойлер
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char Coef = 100;
unsigned char B = 100;
ISR(TIM0_COMPA_vect) {
TCCR0B|=(0<<CS00)|(0<<CS02); // îñòàíîâèòü.
PORTA |= 0x02;
}
ISR(INT0_vect) {
PORTA &= ~0x02;
TCCR0B|=(1<<CS00)|(1<<CS02); // Äåëèòü ÷àñòîòó íà 1024.
}
int main (void){
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
GIMSK |= (1<<INT0);
MCUCR = (0<<ISC01) | (1<<ISC00); //i'a`n~o`?i^e`e"e`n~u"
GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
TCCR0B|=(0<<CS00)|(0<<CS02); // îñòàíîâèòü.
TIMSK|=(1<<OCIE0A); // Ðàçðåøèòü ïðåðûâàíèå ïî ñîâïàäåíèþ.
DDRA = 0xFF;
OCR0A = 156;
sei();
while (1){
_delay_ms(1000);
PORTA |= 0x10;
_delay_ms(1000);
PORTA &= ~0x10;
}
return 0;
}
Пытаюсь сделать типа диммер. Т.е. он принимает сигнал о переходе фазы через ноль. Запускает таймер на совпадение и потом должен таймер сработать и на 2 пин вывести высокий уровень. При следующем переходе через 0 ставится низкий уровень и снова таймер. Что не так? Компилятор говорит что-то непонятное:
Спойлер
../Test.c: In function 'main':
../Test.c:29: error: 'TIMSK' undeclared (first use in this function)
../Test.c:29: error: (Each undeclared identifier is reported only once
../Test.c:29: error: for each function it appears in.)
make: *** [Test.o] Error 1
Build failed with 3 errors and 0 warnings...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт сен 09, 2014 22:11:39
oleg110592
'TIMSK' undeclared
нет такого регистра у Tiny24, если посмотреть документацию есть регистр TIMSK0

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 12:30:23
baghear
Добрый день, для чего мк нужна сигнатура, как её можно использовать ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 13:13:58
Engineer_Keen
Ну например чтобы оболочка для программирования знала какие фьюзы есть в этом контроллере и каков размер его памяти.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 13:52:47
просто КОТ
Продолжаем холивар. Сделал код, почти как выше. буквально пара правок. Записываю 39 в сравнение. делитель 1024, тактовая 8МГц. Итого прерывание на 10мс выходит. Подаю прямоугольник 50Гц на вход. должно быть на выходе прямоугольник совпадающий по фазе, но 100Гц. А там нечто странное.
Спойлер
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char Coef = 100;
unsigned char B = 100;
ISR(TIM0_COMPA_vect) {
TCCR0B|=(0<<CS00)|(0<<CS02); // îñòàíîâèòü.
PORTA |= 0x02;
}
ISR(INT0_vect) {
PORTA &= ~0x02;
OCR0A = 39;
TCCR0B|=(1<<CS00)|(1<<CS02); // Äåëèòü ÷àñòîòó íà 1024.
}
int main (void){
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
GIMSK |= (1<<INT0);
MCUCR = (0<<ISC01) | (1<<ISC00); //i'a`n~o`?i^e`e"e`n~u"
GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
TCCR0B|=(0<<CS00)|(0<<CS02); // îñòàíîâèòü.
TIMSK0|=(1<<OCIE0A); // Ðàçðåøèòü ïðåðûâàíèå ïî ñîâïàäåíèþ.
DDRA = 0xFF;
sei();
while (1){
_delay_ms(1000);
PORTA |= 0x10;
_delay_ms(1000);
PORTA &= ~0x10;
}
return 0;
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 14:02:31
baghear
Спасибо, а можно ли её, сигнатуру, перезаписать?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 14:42:09
Gudd-Head
Что значит "переписать"? Куда переписать? Куда переписать?
Если вы хотите сжульничать и, скажем, 8-ю Мегу продавать как 48-ю, подменив сигнатуру, то не получится.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 14:49:55
просто КОТ
А мне шо скажете?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 15:56:27
Baasil
Не трогайте делей, делайте на прерываниях)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 16:09:58
просто КОТ
Дык на делеях работает. Хотя это и грузит всё. Мне такое НЕ подходит. А вот на прерываниях не запустилось. Хотя должно было.
Код: Выделить всё
ISR(INT0_vect) { // Фаза пересекаетноль
PORTA &= ~0x02; // Симистор закрыт
OCR0A = 39; // Заводим таймер на 9мс
TCCR0B|=(1<<CS00)|(1<<CS02); // Выставляем делитель 1024
}
ISR(TIM0_COMPA_vect) { // Прошло 9мс
TCCR0B|=(0<<CS00)|(0<<CS02); // Остановили таймер.
PORTA |= 0x02; // Симистор открыт до следующего перехода фазы через ноль.
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 17:01:31
baghear
Спасибо!!!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср сен 10, 2014 21:00:51
Paranoia Agent
Ребят, помогите выбрать платку

Очень срочно (за 2 дня) нужна готовая плата с ПЛИС или микроконтроллером для примитивной задачки:
- получить данные с компьютера (можно через COM, можно через ethernet, ~300 кбит/сек)
- примитивно обработать (выделить управляющие команды + небольшая обработка (пара бинарных операций))
- вывести на 2 вывода ( ~250 кбит/сек с амплитудой не менее 2В).
Требования:
- наличие коммуникационного порта (COM или ethernet);
- ну и, естественно, наличие в магазинах Санкт-Петербурга;
- также к нему нужен программатор и питание.
Желательно:
- питание от USB;
- маленький размер;
- маленькая цена (ПЛИСы, практически, отметаются);
- процессор AVR (я с ARM не работал);
- если есть еще и корпус, то совсем шикарно.
Я выбрал вот эту, но не знаю, справится иль нет:
http://www.terraelectronica.ru/catalog_ ... DE=1087512
Еще есть такая:
http://www.terraelectronica.ru/catalog_ ... ODE=339595
У кого есть какие предложения, хочется послушать.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт сен 12, 2014 01:37:14
isx
Доброй ночи!
Никак не могу побороть проблему в CVAVR с AtMega16.
Вот часть кода:
Код: Выделить всё
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data=ADCH;
// Place your code here
if (adc_data != adc_dataold) {
OCR0 = adc_data;
adc_dataold = adc_data;
}
}
...
PORTA=0b00010000;
DDRA=0b01101111;
PORTB=0b00000000;
DDRB=0b11111111;
...
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0b01110001;
TCNT0=0x00;
OCR0=0x10;
Эта фигня регулирует яркость свечения светодиода от ручки переменника. Беда в том, что когда постепенно уменьшаешь свечение, то в определённый момент (процентов на 20 яркости) вместо того чтоб потухнуть, диод наоборот загорается на полную.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт сен 12, 2014 07:11:51
Mishany
по коду вроде правильно, единственное проверить в настройке ацп, что в adch действительно 8 bit, и проверить переменник, может в нем проблема.
и проще сделать в прерывании OCR0=ADCH; что бы не было лишних бестолковых сравнений и присваиваний в прерывании (50-250 тыс. раз в секунду заходить в оператор if .....).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт сен 12, 2014 07:41:10
isx
Сравнение итак в прерывании АЦП. Просто протеус жёстко тупил от простого присваивания.
Кстати, в протеусе тоже всё работает. Я уже и без переменника закорачивал - что на плюс, что на минус - один хрен горит на полную.
Пробывл и на другом МК - результат тот же.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт сен 12, 2014 08:54:50
Chettuser
Светодиод случайно не DIGITAL ?