Страница 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 ?