Например TDA7294

Форум РадиоКот • Просмотр темы - Формирование случайной импульсной последовательности
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 20:49:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 76 ]    , , 3,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 19:12:01 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Что за FOSC = EC???
Вы от внешнего тактирования работаете?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 19:45:09 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 19:46:52 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Тогда зачем вы выбрали внешнее тактирование (вместо внутреннего)?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 19:49:31 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
#pragma config FOSC = INTOSC
Так нужно?

Я плохо английский знаю, поэтому я этот бит оставил таким, каким мне конфигуратор предложил.

Но это не изменяет ситуацию, кнопки все равно работают не так, как я описал в программе.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 19:57:55 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
По вашей схеме: нажатая кнопка - "0".
По программе: Если на всех входах "1" (кнопки отпущены) - проход программы с зацикливанием на "BCF PORTA, 0x2" (без возврата в начало программы).


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 20:08:35 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
А почему так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 20:17:35 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Ещё раз: Я не знаю Си, но по факту, у вас:
Код:
01ED  29FB     GOTO 0x1FB
01EE  1D85     BTFSS PORTA, 0x3 ; Если на входе 1, перейти на 01FB
01EF  29FA     GOTO 0x1FA
01FB  1C05     BTFSS PORTA, 0x0 ; Если на входе 1, перейти на 01FD (задержка)
01FC  29EE     GOTO 0x1EE


Добавлено after 2 minutes 55 seconds:
P.S.
Попробуйте задать вопрос в теме "Программирование pic на СИ".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 21:00:09 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
В общем, я сделал так:
1. Поменял сопротивления резисторов R1 на R2, а R2 на R1.
2. Изменил сопротивление кнопки в разомкнутом состоянии на 500 МОм.

Теперь кнопки работают так, как должны.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 21:11:38 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Я говорил по вашей схеме от Пт дек 08, 2017 18:25:00 .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 21:19:16 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Вот я тогда хотел ещё спросить. Функции srand и rand дико едят память микроконтроллера.
Где можно прочитать про то, как сделать функцию с ассемблерной вставкой, в которую я впихну генерацию псевдослучайную генерацию по заданному диапазону?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пт дек 08, 2017 21:43:01 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Если устроит генератор ПСП и разберётесь с кодом - у меня можете "содрать".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Сб дек 09, 2017 20:59:29 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
В общем, переделал я.
ГСЧ - конгруэнтный линейный метод.
С прерываниями я не разобрался, поэтому, увы, пришлось оставить часть кода неизменной.

Хотел бы только узнать некоторые детали:

1. Как просто можно получить случайное целое число для начального значения, как описано в этом сообщении:

Первое число лично я получаю следующим образом: сразу после подачи питания (определяю по флагам), еще до того момента, когда Си очистит память статических переменных, подсчитываю CRC16 всей памяти, что доступна, ну или заметного её куска. И уже эту CRC использую в качестве стартового для srand. Так как после подачи питания RAM имеет случайное состояние, получается почти настоящая случайность. Во всяком случае получше srand(rand()), что вы предложили.


2. Чему равно 512 Words of Flash Program Memory в байтах?

3. Правильно ли я прикинул алгоритм быстродействия функции задерки (по disassembly listing):

а) Посчитал число строк в функции задержки без учета цикла задержки
б) Посчитал среднее число тактов для всех инструкций без учета цикла задержки
в) Заплакал
г) Посчиитал п. а) и п. б) для инструкций внутри цикла, прибавил ещё примерно 8 тактов (суммарно) за __delau_us(x) и сам цикл фор.
д) Посчитал время выполнение одной операции в микросекунду
е) Составил уравнение: (180 + 80*N)*0.0625 = макс/мин задержка в мкс
Получилось, что N примерно равно 18 и 79998 для мин. и макс. задержки.

В протосе, при моделировании, не нарушаются заданные условия (как показалось).

Вот код:

Спойлер
Код:
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
#define BOUNCE 15 // Время в мс для обработки дребезга
#define CORRMIN 18 // Число итераций в цикле для задержки в 100 мкс
#define CORRMAX 79998 // Число итераций в цикле для задержки в 400000 мкс
// CORR - Correction factor

// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс

// Обознаение выводов и кнопок
#define START RA2 // Кнопка ПУСК МК
#define STOP RA3 // Кнопка СТОП МК
#define LED RA0 // Вывод на светодиоды
#define GREEN 1 // Сигнал для зеленого светодиода
#define RED 0 // Сигнал для красного светодиода
#define GENERATOR RA1 // Выход генератора

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = INTOSC        // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF        // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON          // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF         // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON       // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.


void Prepare(); // Функция подготовки МК
void CheckButton(); // Функция опроса кнопок
void RandomDelay(); // Функция генерирования случайной задержки

int g_bStat = 0; // Переменная для запоминания режима МК (вкл/выкл)
/*
 * g_Random[5] хранит следующие значения:
 * 0 - Начальное значение конгруэнтный метода
 * 1 - Текунщее значение конгруэнтный метода
 * 2 - Коэффициент 'a' конгруэнтный метода
 * 3 - Коэффициент 'b' конгруэнтный медода
 */
int g_Random[4];


int main() // Главная функция
{
    // Объявление параметров конгруэнтного метода
    g_Random[0] = 1;
    g_Random[2] = 3;
    g_Random[3] = 5;
    Prepare(); // Запуск функции подготовки     
    while(1) // Бесконечный цикл работы
    {
        CheckButton(); // Опрос кнопок
        if(g_bStat) // Проверка режима
        {
            LED = GREEN; // Включение зеленого светодиода (вкл МК)
            RandomDelay(); // Запуск функции случайной задержки
            GENERATOR = 1; // Выставляем лог. 1 на выход генератора
            __delay_us(SIGNAL); // Задерживаем лог. 1 на выходе
            GENERATOR = 0; // Обнуляем выход генератора
        }
        else
        {
            LED = RED; // Включение красного светодиода (выкл МК)
        }
    }
    return 0;   
}

// Функция подготовки
void Prepare()
{
    TRISA = 0b1100; // Направление работы ножек порта А (вход)
    PORTA = 0b0000; // Очистка порта A
    OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
    WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
    ANSELA = 0; // Отключение аналоговой части
}

// Функция опроса клавиш
void CheckButton()
{
    if(!START && STOP && !g_bStat) // Проверка на нажатие клавиши старт
    {
        __delay_ms(BOUNCE); // Обработка дребезка
        if(!START && STOP) // Обработка дребезка
        {
            g_bStat = 1; // Установка режима МК (вкл)
           
        }
        else
        {
            g_bStat = 0; // Установка режима МК (выкл)
        }
    }
    else if(START && !STOP && g_bStat) // Проверка на нажатие клавиши стоп
    {
        __delay_ms(BOUNCE); // Обработка дребезка
        if(START && !STOP) // Обработка дребезка
        {
            g_bStat = 0; // Установка режима МК (выкл)
        }
    }
    else if(!START && !STOP && g_bStat) // Защита от дурака
    {
        __delay_ms(BOUNCE); // Обработка дребезка
        if(!START && !STOP) // Обработка дребезка
        {
            g_bStat = 0; // Установка режима МК (выкл)
        }
    }
}

void RandomDelay()
{
    /*if(g_Random[2] % 2 == 0)
    {
        g_Random[1] = (c*g_Random[1] + d)%DELMAX;
        g_Random[2]++;
        if(g_Random[1] < 100)
        {
            g_Random[1] = (c*g_Random[1] + d)%DELMAX;
        }
        for(int i = 0; i <= g_Random[1] - 100; i++)
        {
            __delay_us(1);
        }             
    }
    else
    {
        g_Random[1] = (a*g_Random[1] + b)%DELMAX;
        g_Random[2]++;
        if(g_Random[1] < 100)
        {
            g_Random[1] = (c*g_Random[1] + d)%DELMAX;
        }
        for(int i = 0; i <= g_Random[1] - 100; i++)
        {
            __delay_us(1);
        }
    }*/
   
    /* Конгруэнтный метод - простой спобо для генерации случайных чисел,
     * имеет следующий алгоритм:
     * Ki = (Ki-1*a + b) mod c, имеет максимальный период = c.
     */
    g_Random[1] = (g_Random[2]*g_Random[1] + g_Random[3])%CORRMAX;
    if(g_Random[1] < CORRMIN) // Задержка долна быть большее 100 мкс;
    {
        g_Random[1] = (g_Random[2]*g_Random[1] + g_Random[3])%CORRMAX;
    }
    for(int i = 0; i <= g_Random[1]; i++) // Цикл задержек в 1 мкс
    {
        __delay_us(1);
    }       
}


Вот схема:

СпойлерИзображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 07:24:19 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
SpeedFighter писал(а):
1. Как просто можно получить случайное целое число для начального значения, как описано в этом сообщении
а как написано в этом сообщении - это сложно или по другим причинам не подходит?
SpeedFighter писал(а):
2. Чему равно 512 Words of Flash Program Memory в байтах?
на сколько я могу понять смысл слова word, то 512 words = 1024 bytes
SpeedFighter писал(а):
3. Правильно ли я прикинул алгоритм быстродействия функции задерки
я бы плакал через строку...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 07:54:13 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
SpeedFighter писал(а):
1. Как просто можно получить случайное целое число для начального значения, как описано в этом сообщении
а как написано в этом сообщении - это сложно или по другим причинам не подходит?


Сложно в понимании, да и примеров я не нашел годных.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 08:50:56 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
SpeedFighter, Признайтесь, кто вас учил тормозить работу контроллера программными задержками?
У вас же есть таймер и вы можете работать по прерываниям....
По уму, обработка "дребезга" делается по системному таймеру не мешая работать другим подпрограммам.
Не понимаю как можно писать программу под конкретный контроллер, не зная его ресурсов.....
:dont_know:
----------
/Если изучали построение схем на "логике" с общим тактированием - это может быть лучшей подсказкой для написания программы/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 09:27:06 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Я же говорю, я первый раз в жизни сел и начал кодить для МК.

Я читал про прерывания и тупо не понимаю, куда для моего мк их пихать нужно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 19:01:42 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
SpeedFighter, Признайтесь, кто вас учил тормозить работу контроллера программными задержками?



Судя по идиотскими стилю, кто-то из "птенцов гнезда" Пастера.
А на С там перешли единицы , тима носов с лабкита (который до сих пор не знает что kit это не большое млекопитающее а набор инструментов ).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 19:59:25 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
SpeedFighter, Признайтесь, кто вас учил тормозить работу контроллера программными задержками?



Судя по идиотскими стилю, кто-то из "птенцов гнезда" Пастера.
А на С там перешли единицы , тима носов с лабкита (который до сих пор не знает что kit это не большое млекопитающее а набор инструментов ).


Я не понимаю, о чем ты, но:

1. Если я не знаю и не понимаю одного метода - сделал так, как смог.
2. Я первый раз в своей жизни писал код для МК!! До этого я даже близко не понимал, как и чего куда пихать нужно.
3. Я не умел читать нормально даташит.

А лабкид - да, использовал, так как на этом сайте раньше других нашел способ установки банальной лог. единицы на выход МК. Откуда я могу знать о качестве информации, если я никогда до этого её не нюхал?!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 10, 2017 20:03:08 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21790
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Я читал про прерывания и тупо не понимаю, куда для моего мк их пихать нужно.

Обработка дребезга.
Вам же сказали выше.
Берете TMR0 и делаете на нем прерывания с интервалом примерно 10...30 мс. И в обработчике этого прерывания читаете кнопки. Вот и вся защита.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пн дек 11, 2017 04:03:07 
Друг Кота
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12
Сообщений: 4119
Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Получил миской по аватаре (5)
Я немного по-другому делаю: Так сложилось что, обычно, системный таймер всегда настраиваю на 1mS и, для дискретных мембранных кнопок, я выставляю время срабатывания 5mS и время отпускания 50mS.
По программе - на каждую кнопку один счётчик + два бита ("кнопка нажата" и "факт нажатия"; последний - для передачи в подпрограмму обработки нажатия кнопок).


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 76 ]    , , 3,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y