Страница 4 из 4
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 10:26:21
Alexeyslav
Может, я чего не так понимаю... но в табличке дано N от 2 до 19 и формула обратной связи, где указаны как минимум ДВА отвода а не один. т.е. мало того что табличка рассчитана до 19 бит, так еще и с двумя-четыремя отводами. А нужен всего-навсего ОДИН и для 32(33) бит. Где эти данные взять в той таблице? Нету-с... для 20 и более бит там есть ссылка на теорию, изучать которую нет никакого желания.
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 10:32:54
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
Но я склонен верить тому, что с меньшим количеством просто не получится М-последовательности. Если вы можете это опровергнуть и подтвердить — вэлкам.
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 11:00:45
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
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 12:18:22
YS
В табличке по ссылке нет этих данных. ... Какому-нибудь прожженому математику...
Ну, ХЗ. В таблице приведено: количество бит, оптимальный полином, период. Или вам не это надо? Насчет прожженного математика - у нас это было на четвертом курсе. И не скажу, что я был самый прилежный студент, однако для понимания, что это, смутных воспоминаний хватает.
Например, по
ссылке видно что, чтобы получить нормальный генератор с периодом 65535 (третья колонка), надо взять шестнадцатиразрядный сдвиговый регистр (первая колонка), сделать отводы от 16, 14, 13, 11 битов (степени при x), и, заXORив их, подать на вход регистра. С выхода будем снимать ПСП.
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 12:44:59
Alexeyslav
Аппаратно зоXOR-ить 4 бита - без проблем, а программно это лишние операции. Тем и хорош ГСЧ на регистре с одним отводом.
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 12:49:06
Gudd-Head
Alexeyslav писал(а):а программно это лишние операции
По одной команде на каждый отвод. Это разве много?
Re: Программирование AVR
Добавлено: Ср авг 21, 2013 13:29:43
YS
Тем и хорош ГСЧ на регистре с одним отводом.
И это единственное его преимущество. Наилучшие статистические свойства последовательности получаются именно при указанных полиномах. А с одним отводом будет тоскливо.
Re: Программирование AVR
Добавлено: Чт окт 22, 2015 05:52:28
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 Заранее благодарен.
Re: Программирование AVR
Добавлено: Чт окт 22, 2015 08:40:26
alex_
Ну тут всё просто, используй операторы и/или(&/|)

Re: Программирование AVR
Добавлено: Чт окт 22, 2015 20:05:39
Alexeyslav
Довольно сложный для восприятия код. Я бы завёл три логические переменные с говорящими за себя именами, куда сначала скопировал бы состояние кнопок, а уже потом более наглядным образом реализовывал бы логику. Она оказалась бы достаточно очевидной.
В таком лесу из трёх сосен не мудрено и заблудится.
Re: Программирование AVR
Добавлено: Пт окт 23, 2015 05:06:33
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;
}}}}
Сегодня буду пробовать с прерыванием.
Re: Программирование AVR
Добавлено: Пт окт 23, 2015 06:26:20
Pnjom-Penb
MTSnik писал(а):Я пока начинаю осваивать программирование.
Лучше с самого начала забыть про goto.
И еще - чтобы html не съедал форматирование исходника, используйте теги [сode]...[/сode]
Re: Программирование AVR
Добавлено: Пт окт 23, 2015 09:46:10
Jack_A
Pnjom-Penb писал(а):Лучше с самого начала забыть про goto.
Бедное go to... Правила хорошего тона не рекомендуют использовать
go to <вперед> . А для безусловного зацикливания - чем оно хуже пресловутого while (1) ( меня до сих пор смешит эта конструкция

) . Уверен, что компилятор генерирует на while (1) тот же самый код (=JMP), что и для простого и понятного
go to <начало цикла>
Конечно, это мое личное мнение, тем боле я для МК на С не пишу.
Re: Программирование AVR
Добавлено: Пт окт 23, 2015 11:27:32
Alexeyslav
А на советы даже не обратил внимания... в твоём коде запутаться как в трёх соснах! Не привыкай писать столь непонятный код, да ещё умудряясь сделать его запутанным в 10 строчках.
Действуй логично, последовательно и наглядно. Вынеси столь сложные конструкции как проверка бита порта за пределы основного алгоритма, чтобы они не мешали взгляду и не позволяли путаться в трёх соснах.
Re: Программирование AVR
Добавлено: Пт окт 23, 2015 12:33:34
YS
меня до сих пор смешит эта конструкция
В таком случае используйте for (;;) - кстати, некоторые люди считают такой способ организации бесконечного цикла предпочтительным.
