Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

Ну так, там не просто трансформатор а дифференциальный трансформатор. да очень просто, с него подаете напряжение через обязательный ограничитель(чтобы не спалить МК) прямо на вход АЦП, и измеряете с частотой примерно 50*16гц, со входного напряжения можно взять сигнал перехода через ноль - привязать моменты начала накопления сумм к переходу через ноль, итого у вас каждый период сетевого напряжения будет значение тока просуммированного 16 раз за период. Останется поделить его на 16(обычный логический сдвиг вправо, но вообще делить стоит после умножения чтобы не потерять младшие разряды числа) и умножить на коэффициент пропорциональности(зависит от коэфициента трансформации, нагрузки трансформатора тока и т.д. - этот коэфициент поддается рассчету при помощи обычной арифметики) и у тебя получится ток. Только учти, АЦП не измеряет отрицательные значения а значит у тебя измерено будет ровно в 2 раза меньше номинала - т.е. надо будет умножить показания еще на два.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

ibiza11 писал(а):так 4.56мкс :)) только пакет то извне надо задавать)
Дак он извне и задаётся, просто я добавил код для переустановки пакета, чтобы молотил постоянно.
Этот кусок :

Код: Выделить всё

   if(!--BitNum){
     BitNum=16;
     Packet=0xAAAA;
   }
можно убрать. Тогда будет "одиночный выстрел" и съэкономится ещё несколько тактов (уберётся условие).Хотя нет, вру, условие убрать не получится. Нужно контролировать окончание передачи.
ibiza11 писал(а): мне кажется вариант akl тут несомненно лидер по скорости.
Не могу спорить, т.к. не знаю ассемблера АВР. Но, сдаётся мне, что там в передаче фигурирует всего один байт.
В принципе, можно ещё немного подукоротить время выполнения, сделав побайтовый вывод данных. Выиграем время за счёт сдвига переменной.
Сделать можно всё, даже на ЯВУ, но нужно хорошо знать свой ассемблер и компилятор, и то, во что он разворачивает код.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение amd9800 »

ibiza11 писал(а):Изображение

не могу понять чем отличается режим 11 от 9.

В протеусе я получаю один и тот же результат.

Хотя у 11 написано только phase correct, а у 9 еще и frequency, то меняя значение в OCR1A частота меняется в обеих режимах.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Kavka »

Найдите 10 отличий :) Вторая колонка с права на лево.
Запись в регистр OCR1A может производиться сразу при выполнении команды вывода в порт в/в (immediate), а может буферизироваться и производиться, когда счётчик находиться в "нижней" (bottom) или "верхней" (top) точке счёта. Чтобы не было искажения импульсов, когда запись в порт в/в производится в середине цикла счёта.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Друзья, у меня вопрос. Можно ли использовать выход RESET микроконтроллера для перезапуска контроллера часто? Я сделал таймер для аквариума, запускается с момента подачи питания, и чтоб корректировать, сместить временной интервал, нужно его перезапустить. Я сделал на одном выходе обнуление переменных, работает прекрасно. Но смущает, что RESET болтается без дела, а целый порт для обнуления переменных задействован. Не будет ли вреда контроллеру, если я буду перезапускать его RESETом?
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

А команда RESET не? :)
Если конечно в Вашем МК она есть. :)))
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Chettuser писал(а):А команда RESET не? :)
Если конечно в Вашем МК она есть. :)))

У меня ATTINY13, собсно даже не задумывался над этим. Прекрасно работает и обнуление переменных, но меня уж очень смущает то, что нога RESET без дела :)
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Вот так и вырастают... хакеры :)))
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Chettuser писал(а):Вот так и вырастают... хакеры :)))

:))) :))) :)))
beniamin91
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт дек 12, 2013 02:28:20

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение beniamin91 »

Добрый вечер уважаемые коты.
Помогите новичку в одном вопросе.
Нужно собрать управление инкубатором которое будет поддерживать определенную температуру и каждые 2 часа переворачивать яйца.
Как можно решить проблему что бы МК считал время и включал мотор и при этом не перестал бы смотреть за температурой?
Вот код, на синтаксис не обращайте внимания все точки с запятым потом поставлю. Как можно переделать алгоритм?

Код: Выделить всё

t = 37
c = 7200000
s = 0


if (температура < t){Включить нагреватель}
else{ if(температура > t){Выключить нагреватель} }




/////////////////нужно проверять нижнее условие по каждые 2 часа//////////////////

delay_ms(c)


if (s = 0)
   {Включить матор по часавой
    s++}
else { if(s = 1)
   {Включить матор против часавой
    s == 0}
     }


температура берется с датчика ds18b20
мотор будет отключатся по достижению латков яиц двум концевикам (прикрепил картинку)
Вложения
Безымянный.png
(11.38 КБ) 365 скачиваний
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Pink-Pank »

Про таймеры почитайте. А заодно и грамматику полистайте.
Fucking static initialization order fiasco
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

beniamin91, можно сделать отсчет времени таймером. Например, как сделал я для аквариума - настройка таймера на прерывание по совпадению, вот расчет значений на 100 Гц, тоесть на 1/100 секунды -(за расчет отдельное спасибо oleg110592) 1/100 секунды равно 100Гц, Внутренний генератор тини13 9.6 MHz.
В документации есть формула из нее получается:
OCR=(Fclk/Focn*N)-1
N - коэффициент предделителя (1, 8, 64, 256, or 1024)
OCR=(9600000/100*N)-1=(9600000/(100*1024))-1= 92.75=93 . Далее в функции прерывания таймера ставишь увеличение переменной, напр. sec++, а в основном цикле пишеш отсчет времени, например, if (sec==6000){min++; sec=0} - одна минута, if (min==60){hour++; min=0} - один час. Далее условие на два часа - if(hour==2){включаем переворот яиц}, и так далее. Если интересно, то позже скину тебе код, который я делал для включения света и кормушки в аквариуме.
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Pink-Pank »

судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет. Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.
Fucking static initialization order fiasco
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Pink-Pank писал(а):судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет. Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.

Моя первая попытка программирования это было моргание светодиода и залоченный МК :) Но я увидел, всю мощь, так сказать, контроллеров, и изучаю дальше. Думаю, у товарища beniamin91 все еще впереди :))
beniamin91
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт дек 12, 2013 02:28:20

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение beniamin91 »

Starmarik спасибо за отзывчивость.
Я тоже думал что надо сделать с таймером но увы еще не совсем понимаю как работать с ним.
Starmarik писал(а): Если интересно, то позже скину тебе код, который я делал для включения света и кормушки в аквариуме.

буду очень признателен за код. Думаю уловлю суть работы и смогу доделать свой.
О какого мнения вы на счет регулятора температуры? По вашему такой код будет нормально держать температуру или же я совсем нечего полезного не написал?

Код: Выделить всё

if (температура < t){Включить нагреватель}
else{ if(температура > t){Выключить нагреватель} }

Pink-Pank писал(а):судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет.

не первая попытка и не последняя. О вы что с пелёнок занимались контролерами или же без начало сразу дошли до конца ?
Pink-Pank писал(а):Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.

Ты не в моем голове и не знаешь что мне нужно, свои негативные эмоции держите в себе!
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение aam »

Скажите, а кто-нибудь пробовал анализировать протокол RF-пультов для освещения типа таких:
Изображение
?
Как они вообще работают и насколько они унифицированы?

Хотелось с помощью покупного пульта управлять самодельным контроллером для люстры.

Помимо этого видел радиомодули УАРТ. В принципе они позволили бы реализовать что угодно. Но не делать же пульт самому.
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

beniamin91 держи код, коменты на украинском, думаю, разберешся :)
Спойлер

Код: Выделить всё

#include <tiny13.h>
#include <delay.h>
unsigned int m_sec=0x00;//переменная мсек
unsigned int tim=0x00;  //таймер
unsigned char min=0x00;//переменная мин
unsigned char hour=0x00;//переменная час
unsigned char count=0x00;
unsigned int counter=0x00;
                 

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)     //прерывания по совпадению
{
m_sec++;                                //переменная 1/100 секунды увеличивается
counter++;
}

// Timer 0 output compare B interrupt service routine
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
// Place your code here

}


void reset() //обнулення змінних
{
m_sec=0;min=0;hour=0;tim=0;
}


void main(void)
{

// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State5=T State4=P State3=P State2=0 State1=0 State0=0
PORTB=0x18;
DDRB=0x07;


// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x5D;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x0C;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
       /*ТАЙМЕР ВИКЛЮЧЕННЯ ФІЛЬТРА*/
       if(!PINB.3){PORTB.2=1;}
       if(counter==100){count++;counter=0;}
       if(count==10){PORTB.2=0;count=0;}
       
       /*ГЕНЕРАЦІЯ ХВИЛИН І ГОДИН*/
       if(m_sec==3000){tim++;}           //30-секундний таймер для автокормушки
       if(m_sec==6000){m_sec=0;min++;}  //1 хвилина         
       if(min==60){min=0; hour++;}      //1 година

        /*КОРМУШКА*/
       //запуск автоматичної кормушки на 30 секунд
        if(hour==0&min==0&tim==0){PORTB.0=1;tim=0;}
        else{PORTB.0=0;} 
       
       /*СВІТЛО*/
       if(hour==0){PORTB.1=1;}//включення світла одразу після запуску
       if(hour==4){PORTB.1=0;}//виключення світла через 4 години   
       if(hour==24){hour=0;} //24 години
       
       /*ОБНУЛЕННЯ ТАЙМЕРА*/
       if(!PINB.4){reset();} //обнулення таймера
    } 
}

На счет того кода, который ты написал, то там действительно ничего нет :) Извини за критику :) Я сам начинающий, но учусь, учусь и учусь. На счет подключения датчика, погугли в нете, есть готовые примеры подключения к avr, для начала как раз, чтоб в коде разобраться, и скачай Протеус, удобно проверять виртуально работу схемы и программу. Из моего кода выбери себе генерацию времени, и таймер. Да, чуть не забыл - код писан в CodeVisionAVR, Успехов :)
beniamin91
Открыл глаза
Сообщения: 52
Зарегистрирован: Чт дек 12, 2013 02:28:20

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение beniamin91 »

Starmarik Спасибо за помощь, сейчас скачаю протеус и буду тестировать.
Желаю всем удачи.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

... новеньких F1 давно вроде не было. Ориентироваться - простое F0, сложнее F3, F4. А F2 да уже и F1, мне лично, пока думаю в ближайшем не потребуются.

И все же - есть ли будущее у массовой F1? В основном на aliexpress продаются как раз таки они, а вот F2 и F3 попадаются не часто. Как насчёт простых F0?
Кстати, цены на более взрослые МК не такие уж и маленькие. А везде пишут о том, что STM дешевле. Возможно это раньше было?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение oleg110592 »

берем самый дешевый из F1:
STM32F100C4T6B ARM Cortex-M3 32-bit, Flash: 16K, RAM: 4K, UART: 2, АЦП: 10 x 12bit, ШИМ: 6 x 16bit Тип корпуса: LQFP48
Цена 23,00 Грн

сравниваем с F0:
STM32F051C6T6 32бит ARM Cortex M0, 48МГц, 32кб Flash, 4кб ОЗУ, SPI, I2C, I2S, 2xUSART, CEC, 9 таймеров, АЦП 12 бит * 10 каналов, 12бит *ЦАП Тип корпуса: LQFP48
Цена 26,75 Грн

STM32F030C8T6
32бит ARM Cortex M0, 48МГц, 64кб Flash, 8кб ОЗУ, SPI, I2C, I2S, 1xUSART, CEC, 6 таймеров, АЦП 12 бит * 10 каналов, 12бит *ЦАП
Тип корпуса: LQFP48 Цена 26,00 Грн

STM32F030C6T6 32бит ARM Cortex M0, 48МГц, 32кб Flash, 4кб ОЗУ, SPI, I2C, 1xUSART, 4 таймера, АЦП 12 бит * 12 каналов, 39 GPIO, Цена 59.14р (в гривнах не нашел)

Если не волнует Cortex-M3, то какой выбор делаем?
цены на более взрослые МК не такие уж и маленькие

На то они и взрослые - у нас самый дешевый:
STM32F372V8T6 Ядро: ARM Cortex-M4: FLASH: 64 КБайт: RAM: 16 КБайт: АЦПканалов: 25: АЦПразр: 16: ЦАП: 1 Fcore: 72 Мгц
Цена 61,00 Грн

чуть дороже:
STM32F401VBT6 ARM Cortex-M4 Converters : A/D 16x12b; RAM Size : 64K x 8; ;FLASH: 128KB ; Number of I/O : 81; Peripherals : DMA, I2S, POR, PWM, WDTIrDA, LIN, SDIO, SPI, UART/USART, USB OTG; Speed : 84MHz
Цена 76,75 Грн.

В принципе недорого, для сравнения взрослый другой фирмы:
ATmega1280-16AU AVR 8-bit, Flash: 128K, RAM: 8K, EEPROM: 4K, UART: 4, АЦП: 16 x 10bit, ШИМ: 16 x 16bit Тип корпуса: TQFP100 Производитель: ATMEL
Цена 204,50 Грн.
Ответить

Вернуться в «Разные вопросы по МК»