Мелкие вопросы по МК и ПЛИС.
Вычёркиваете из схемы фиксированные производителем лапы (RESET, OC1B, AIN0, AIN1, ADC6, ADC7). Оставшиеся лапы назначаете самостоятельно, с учётом возможности совмещения функций ввода-вывода (индикация-кнопки).
- Реклама
- Сообщения: 822
- Зарегистрирован: Вс июн 02, 2013 12:23:03
В том то и дело что ни одного целого порта не остается для семисегментного индикатора и думаю как же быть?
Неудобно работать с пинами с разных портов.
Ну если так уж быть как объединить скажем 5 пинов одного порта и 3 другого порта как один целый 8 битовый массив?
Чтоб сразу записать 8 битовое значение.
Неудобно работать с пинами с разных портов.
Ну если так уж быть как объединить скажем 5 пинов одного порта и 3 другого порта как один целый 8 битовый массив?
Чтоб сразу записать 8 битовое значение.
Выключать, чтобы не было непредсказуемого поведения пока будете загружать регистры. Это крайне необходимо если ШИМ у вас управляет силовыми ключами иначе можно силовые ключи пожечь и т.д. и т.п.
Если вы это делаете в самом начале после сброса то дополнительно отключать не нужно, таймер и так стоит.
А если в прошивке используется "программный сброс" переходом на нулевое прерывание то это делать просто необходимо.
Учитывая целый ряд обстоятельств, лучше его отключить даже если знаете что он отключен - кто его знает куда потом в будущем пойдет этот код...
Если вы это делаете в самом начале после сброса то дополнительно отключать не нужно, таймер и так стоит.
А если в прошивке используется "программный сброс" переходом на нулевое прерывание то это делать просто необходимо.
Учитывая целый ряд обстоятельств, лучше его отключить даже если знаете что он отключен - кто его знает куда потом в будущем пойдет этот код...
немного доработать аппаратную часть, добавить регистр сдвига для сегментов - он потребует всего 3-х выводов от контроллера. В другом случае, если это решение неприемлемо - написать подпрограмму(назвать её что-то вроде set_segment) которая на входе возьмет один байт и распихает его по нужным портам используя логические выражения и прочее - да хоть побитно. Изменяя аппаратную конфигурацию достаточно будет просто переписать эту подпрограмму. Впрочем этот вариант универсален - программу переписывать не надо, а подпрограмма может с такой же эффективностью работать и с внешним регистром сдвига.ни одного целого порта не остается для семисегментного индикатора и думаю как же быть?
- Сообщения: 10
- Зарегистрирован: Пн июн 30, 2014 14:47:24
Добрый день! Попросили сделать УЗО с выводом на семисегментный индикатор тока утечки (дифференциального тока) в диапазоне 1-100мА. Хочу все это сделать на ATmega8. Как вывести данные с МК на индикатор я знаю, но как подружить трансформатор тока и АЦП МК нет. Буду благодарен за любую информацию. Заранее спасибо!
Ну так, там не просто трансформатор а дифференциальный трансформатор. да очень просто, с него подаете напряжение через обязательный ограничитель(чтобы не спалить МК) прямо на вход АЦП, и измеряете с частотой примерно 50*16гц, со входного напряжения можно взять сигнал перехода через ноль - привязать моменты начала накопления сумм к переходу через ноль, итого у вас каждый период сетевого напряжения будет значение тока просуммированного 16 раз за период. Останется поделить его на 16(обычный логический сдвиг вправо, но вообще делить стоит после умножения чтобы не потерять младшие разряды числа) и умножить на коэффициент пропорциональности(зависит от коэфициента трансформации, нагрузки трансформатора тока и т.д. - этот коэфициент поддается рассчету при помощи обычной арифметики) и у тебя получится ток. Только учти, АЦП не измеряет отрицательные значения а значит у тебя измерено будет ровно в 2 раза меньше номинала - т.е. надо будет умножить показания еще на два.
- Реклама
Дак он извне и задаётся, просто я добавил код для переустановки пакета, чтобы молотил постоянно.ibiza11 писал(а):так 4.56мкстолько пакет то извне надо задавать)
Этот кусок :
Код: Выделить всё
if(!--BitNum){
BitNum=16;
Packet=0xAAAA;
}
Не могу спорить, т.к. не знаю ассемблера АВР. Но, сдаётся мне, что там в передаче фигурирует всего один байт.ibiza11 писал(а): мне кажется вариант akl тут несомненно лидер по скорости.
В принципе, можно ещё немного подукоротить время выполнения, сделав побайтовый вывод данных. Выиграем время за счёт сдвига переменной.
Сделать можно всё, даже на ЯВУ, но нужно хорошо знать свой ассемблер и компилятор, и то, во что он разворачивает код.
- Сообщения: 822
- Зарегистрирован: Вс июн 02, 2013 12:23:03
не могу понять чем отличается режим 11 от 9.ibiza11 писал(а):
В протеусе я получаю один и тот же результат.
Хотя у 11 написано только phase correct, а у 9 еще и frequency, то меняя значение в OCR1A частота меняется в обеих режимах.
Найдите 10 отличий
Вторая колонка с права на лево.
Запись в регистр OCR1A может производиться сразу при выполнении команды вывода в порт в/в (immediate), а может буферизироваться и производиться, когда счётчик находиться в "нижней" (bottom) или "верхней" (top) точке счёта. Чтобы не было искажения импульсов, когда запись в порт в/в производится в середине цикла счёта.
Запись в регистр OCR1A может производиться сразу при выполнении команды вывода в порт в/в (immediate), а может буферизироваться и производиться, когда счётчик находиться в "нижней" (bottom) или "верхней" (top) точке счёта. Чтобы не было искажения импульсов, когда запись в порт в/в производится в середине цикла счёта.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 20
- Зарегистрирован: Чт июн 26, 2014 15:27:55
Друзья, у меня вопрос. Можно ли использовать выход RESET микроконтроллера для перезапуска контроллера часто? Я сделал таймер для аквариума, запускается с момента подачи питания, и чтоб корректировать, сместить временной интервал, нужно его перезапустить. Я сделал на одном выходе обнуление переменных, работает прекрасно. Но смущает, что RESET болтается без дела, а целый порт для обнуления переменных задействован. Не будет ли вреда контроллеру, если я буду перезапускать его RESETом?
- Сообщения: 20
- Зарегистрирован: Чт июн 26, 2014 15:27:55
У меня ATTINY13, собсно даже не задумывался над этим. Прекрасно работает и обнуление переменных, но меня уж очень смущает то, что нога RESET без делаChettuser писал(а):А команда RESET не?
Если конечно в Вашем МК она есть.
- Сообщения: 20
- Зарегистрирован: Чт июн 26, 2014 15:27:55
- Сообщения: 52
- Зарегистрирован: Чт дек 12, 2013 02:28:20
Добрый вечер уважаемые коты.
Помогите новичку в одном вопросе.
Нужно собрать управление инкубатором которое будет поддерживать определенную температуру и каждые 2 часа переворачивать яйца.
Как можно решить проблему что бы МК считал время и включал мотор и при этом не перестал бы смотреть за температурой?
Вот код, на синтаксис не обращайте внимания все точки с запятым потом поставлю. Как можно переделать алгоритм?
температура берется с датчика ds18b20
мотор будет отключатся по достижению латков яиц двум концевикам (прикрепил картинку)
Помогите новичку в одном вопросе.
Нужно собрать управление инкубатором которое будет поддерживать определенную температуру и каждые 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 КБ) 374 скачивания
Про таймеры почитайте. А заодно и грамматику полистайте.
Fucking static initialization order fiasco
- Сообщения: 20
- Зарегистрирован: Чт июн 26, 2014 15:27:55
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){включаем переворот яиц}, и так далее. Если интересно, то позже скину тебе код, который я делал для включения света и кормушки в аквариуме.
В документации есть формула из нее получается:
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){включаем переворот яиц}, и так далее. Если интересно, то позже скину тебе код, который я делал для включения света и кормушки в аквариуме.
судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет. Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.
Fucking static initialization order fiasco
- Сообщения: 20
- Зарегистрирован: Чт июн 26, 2014 15:27:55
Моя первая попытка программирования это было моргание светодиода и залоченный МКPink-Pank писал(а):судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет. Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.
- Сообщения: 52
- Зарегистрирован: Чт дек 12, 2013 02:28:20
Starmarik спасибо за отзывчивость.
Я тоже думал что надо сделать с таймером но увы еще не совсем понимаю как работать с ним.
О какого мнения вы на счет регулятора температуры? По вашему такой код будет нормально держать температуру или же я совсем нечего полезного не написал?
Я тоже думал что надо сделать с таймером но увы еще не совсем понимаю как работать с ним.
буду очень признателен за код. Думаю уловлю суть работы и смогу доделать свой.Starmarik писал(а): Если интересно, то позже скину тебе код, который я делал для включения света и кормушки в аквариуме.
О какого мнения вы на счет регулятора температуры? По вашему такой код будет нормально держать температуру или же я совсем нечего полезного не написал?
Код: Выделить всё
if (температура < t){Включить нагреватель}
else{ if(температура > t){Выключить нагреватель} }не первая попытка и не последняя. О вы что с пелёнок занимались контролерами или же без начало сразу дошли до конца ?Pink-Pank писал(а):судя по коду, который предоставил beniamin91 - это его первая попытка программирования. И дальше нее он не пойдет.
Ты не в моем голове и не знаешь что мне нужно, свои негативные эмоции держите в себе!Pink-Pank писал(а):Ему нужно, чтобы кто-то за него написал. А это несколько в другом разделе.
Скажите, а кто-нибудь пробовал анализировать протокол RF-пультов для освещения типа таких:

?
Как они вообще работают и насколько они унифицированы?
Хотелось с помощью покупного пульта управлять самодельным контроллером для люстры.
Помимо этого видел радиомодули УАРТ. В принципе они позволили бы реализовать что угодно. Но не делать же пульт самому.

?
Как они вообще работают и насколько они унифицированы?
Хотелось с помощью покупного пульта управлять самодельным контроллером для люстры.
Помимо этого видел радиомодули УАРТ. В принципе они позволили бы реализовать что угодно. Но не делать же пульт самому.



