Программирование AVR

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

Re: Программирование AVR

Сообщение Alexeyslav »

Может, я чего не так понимаю... но в табличке дано N от 2 до 19 и формула обратной связи, где указаны как минимум ДВА отвода а не один. т.е. мало того что табличка рассчитана до 19 бит, так еще и с двумя-четыремя отводами. А нужен всего-навсего ОДИН и для 32(33) бит. Где эти данные взять в той таблице? Нету-с... для 20 и более бит там есть ссылка на теорию, изучать которую нет никакого желания.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Программирование AVR

Сообщение Gudd-Head »

Нет, мы, наверное, с вами разные таблицы смотрим :)
http://www.newwaveinstruments.com/resou ... r_lfsr.htm
Внизу есть Tables of M-Sequence Feedback Taps
И там до 32-х бит.
Да, у 32-х битного начинается с 4-х отводов: http://www.newwaveinstruments.com/resou ... stages.txt
Но я склонен верить тому, что с меньшим количеством просто не получится М-последовательности. Если вы можете это опровергнуть и подтвердить — вэлкам.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование AVR

Сообщение Alexeyslav »

Когда-то давным-давно сохранил такие данные для ГСЧ на регистре с одним отводом:

N, M, период повторения: (за цикл повторения выходит "1" на 1 больше чем "0")

10, 7, 1023
11, 9, 2047
15, 14, 32767
17, 14, 131071
18, 11, 262143
28, 25, 268435455
33, 20, 8589934591
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Программирование AVR

Сообщение YS »

В табличке по ссылке нет этих данных. ... Какому-нибудь прожженому математику...


Ну, ХЗ. В таблице приведено: количество бит, оптимальный полином, период. Или вам не это надо? Насчет прожженного математика - у нас это было на четвертом курсе. И не скажу, что я был самый прилежный студент, однако для понимания, что это, смутных воспоминаний хватает. :))

Например, по ссылке видно что, чтобы получить нормальный генератор с периодом 65535 (третья колонка), надо взять шестнадцатиразрядный сдвиговый регистр (первая колонка), сделать отводы от 16, 14, 13, 11 битов (степени при x), и, заXORив их, подать на вход регистра. С выхода будем снимать ПСП.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование AVR

Сообщение Alexeyslav »

Аппаратно зоXOR-ить 4 бита - без проблем, а программно это лишние операции. Тем и хорош ГСЧ на регистре с одним отводом.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Программирование AVR

Сообщение Gudd-Head »

Alexeyslav писал(а):а программно это лишние операции

По одной команде на каждый отвод. Это разве много?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Программирование AVR

Сообщение YS »

Тем и хорош ГСЧ на регистре с одним отводом.


И это единственное его преимущество. Наилучшие статистические свойства последовательности получаются именно при указанных полиномах. А с одним отводом будет тоскливо.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
MTSnik
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вс май 02, 2010 05:32:09

Re: Программирование AVR

Сообщение MTSnik »

Уважаемые форумчане, подскажите как дописать код программы для тини13.

#include <avr/delay.h>
void main(void)
{
PORTB=0b00000000;
DDRB=0b00000011;
while (1)
{
if (!(PINB & (1<<PINB2))) // проверить "0" на линии 1 порта pB2
{

PORTB |= _BV(PB0); // установить "1" на линии PB0
}
else
if (!(PINB &(1<<PINB3)))// проверить "0" на линии 1 порта pB3
{
PORTB &= ~_BV(PB0); // установить "0" на линии PD1
}
else
if (!(PINB & (1<<PINB4))) // проверить "0" на линии 1 порта pB4
{
PORTB |= _BV(PB1); // установить "1" на линии PB0
}
};
}

имеется два светодиода, 3 кнопки. РВ2, РВ3 включают/выключают РВ0, РВ4 включает РВ1. нужно чтоб РВ0 включался/выключался только тогда, когда включён РВ1 Заранее благодарен.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Программирование AVR

Сообщение alex_ »

Ну тут всё просто, используй операторы и/или(&/|) :))
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование AVR

Сообщение Alexeyslav »

Довольно сложный для восприятия код. Я бы завёл три логические переменные с говорящими за себя именами, куда сначала скопировал бы состояние кнопок, а уже потом более наглядным образом реализовывал бы логику. Она оказалась бы достаточно очевидной.

В таком лесу из трёх сосен не мудрено и заблудится.
MTSnik
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вс май 02, 2010 05:32:09

Re: Программирование AVR

Сообщение MTSnik »

Спасибо за ответы. Я пока начинаю осваивать программирование.
Вчера новые "три сосны" состряпал. В протеусе вроде работает.
#include <avr/io.h>
#define F_CPU 9600000UL
#include <avr/delay.h>
void main(void)
{
PORTB=0b00000000;
DDRB=0b00000011;
while (1)
{
if (!(PINB & (1<<PINB2))) // проверить "0" на линии 1 порта pB2
{
PORTB |= _BV(PB0); // установить "1" на линии PB0
_delay_us(200);
start:
{
if (!(PINB &(1<<PINB3)))// проверить "0" на линии 1 порта pB3
{
PORTB &= ~_BV(PB0); // установить "0" на линии PD0
_delay_us(200);
}
else
if (!(PINB & (1<<PINB4))) // проверить "0" на линии 1 порта pB4
{
PORTB |= _BV(PB0); // установить "1" на линии PB0
_delay_us(200);
}
goto start;
}}}}

Сегодня буду пробовать с прерыванием.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Программирование AVR

Сообщение Pnjom-Penb »

MTSnik писал(а):Я пока начинаю осваивать программирование.
Лучше с самого начала забыть про goto.
И еще - чтобы html не съедал форматирование исходника, используйте теги [сode]...[/сode]
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Программирование AVR

Сообщение Jack_A »

Pnjom-Penb писал(а):Лучше с самого начала забыть про goto.

Бедное go to... Правила хорошего тона не рекомендуют использовать go to <вперед> . А для безусловного зацикливания - чем оно хуже пресловутого while (1) ( меня до сих пор смешит эта конструкция :) ) . Уверен, что компилятор генерирует на while (1) тот же самый код (=JMP), что и для простого и понятного go to <начало цикла>
Конечно, это мое личное мнение, тем боле я для МК на С не пишу.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Программирование AVR

Сообщение Alexeyslav »

А на советы даже не обратил внимания... в твоём коде запутаться как в трёх соснах! Не привыкай писать столь непонятный код, да ещё умудряясь сделать его запутанным в 10 строчках.
Действуй логично, последовательно и наглядно. Вынеси столь сложные конструкции как проверка бита порта за пределы основного алгоритма, чтобы они не мешали взгляду и не позволяли путаться в трёх соснах.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Программирование AVR

Сообщение YS »

меня до сих пор смешит эта конструкция


В таком случае используйте for (;;) - кстати, некоторые люди считают такой способ организации бесконечного цикла предпочтительным. :)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Ответить

Вернуться в «AVR»