Программирование AVR
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Программирование AVR
Может, я чего не так понимаю... но в табличке дано N от 2 до 19 и формула обратной связи, где указаны как минимум ДВА отвода а не один. т.е. мало того что табличка рассчитана до 19 бит, так еще и с двумя-четыремя отводами. А нужен всего-навсего ОДИН и для 32(33) бит. Где эти данные взять в той таблице? Нету-с... для 20 и более бит там есть ссылка на теорию, изучать которую нет никакого желания.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Программирование AVR
Нет, мы, наверное, с вами разные таблицы смотрим
http://www.newwaveinstruments.com/resou ... r_lfsr.htm
Внизу есть Tables of M-Sequence Feedback Taps
И там до 32-х бит.
Да, у 32-х битного начинается с 4-х отводов: http://www.newwaveinstruments.com/resou ... stages.txt
Но я склонен верить тому, что с меньшим количеством просто не получится М-последовательности. Если вы можете это опровергнуть и подтвердить — вэлкам.
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
Когда-то давным-давно сохранил такие данные для ГСЧ на регистре с одним отводом:
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
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
В табличке по ссылке нет этих данных. ... Какому-нибудь прожженому математику...
Ну, ХЗ. В таблице приведено: количество бит, оптимальный полином, период. Или вам не это надо? Насчет прожженного математика - у нас это было на четвертом курсе. И не скажу, что я был самый прилежный студент, однако для понимания, что это, смутных воспоминаний хватает.
Например, по ссылке видно что, чтобы получить нормальный генератор с периодом 65535 (третья колонка), надо взять шестнадцатиразрядный сдвиговый регистр (первая колонка), сделать отводы от 16, 14, 13, 11 битов (степени при x), и, заXORив их, подать на вход регистра. С выхода будем снимать ПСП.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Программирование AVR
Аппаратно зоXOR-ить 4 бита - без проблем, а программно это лишние операции. Тем и хорош ГСЧ на регистре с одним отводом.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Программирование AVR
Alexeyslav писал(а):а программно это лишние операции
По одной команде на каждый отвод. Это разве много?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Программирование AVR
Тем и хорош ГСЧ на регистре с одним отводом.
И это единственное его преимущество. Наилучшие статистические свойства последовательности получаются именно при указанных полиномах. А с одним отводом будет тоскливо.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Программирование AVR
Уважаемые форумчане, подскажите как дописать код программы для тини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 Заранее благодарен.
#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
Ну тут всё просто, используй операторы и/или(&/|) 
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Программирование AVR
Довольно сложный для восприятия код. Я бы завёл три логические переменные с говорящими за себя именами, куда сначала скопировал бы состояние кнопок, а уже потом более наглядным образом реализовывал бы логику. Она оказалась бы достаточно очевидной.
В таком лесу из трёх сосен не мудрено и заблудится.
В таком лесу из трёх сосен не мудрено и заблудится.
Re: Программирование AVR
Спасибо за ответы. Я пока начинаю осваивать программирование.
Вчера новые "три сосны" состряпал. В протеусе вроде работает.
#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;
}}}}
Сегодня буду пробовать с прерыванием.
Вчера новые "три сосны" состряпал. В протеусе вроде работает.
#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
Лучше с самого начала забыть про goto.MTSnik писал(а):Я пока начинаю осваивать программирование.
И еще - чтобы html не съедал форматирование исходника, используйте теги [сode]...[/сode]
Re: Программирование AVR
Pnjom-Penb писал(а):Лучше с самого начала забыть про goto.
Бедное go to... Правила хорошего тона не рекомендуют использовать go to <вперед> . А для безусловного зацикливания - чем оно хуже пресловутого while (1) ( меня до сих пор смешит эта конструкция
Конечно, это мое личное мнение, тем боле я для МК на С не пишу.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Программирование AVR
А на советы даже не обратил внимания... в твоём коде запутаться как в трёх соснах! Не привыкай писать столь непонятный код, да ещё умудряясь сделать его запутанным в 10 строчках.
Действуй логично, последовательно и наглядно. Вынеси столь сложные конструкции как проверка бита порта за пределы основного алгоритма, чтобы они не мешали взгляду и не позволяли путаться в трёх соснах.
Действуй логично, последовательно и наглядно. Вынеси столь сложные конструкции как проверка бита порта за пределы основного алгоритма, чтобы они не мешали взгляду и не позволяли путаться в трёх соснах.
Re: Программирование AVR
меня до сих пор смешит эта конструкция
В таком случае используйте for (;;) - кстати, некоторые люди считают такой способ организации бесконечного цикла предпочтительным.
Разница между теорией и практикой на практике гораздо больше, чем в теории.