Например TDA7294

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





Текущее время: Вт апр 16, 2024 10:05:28

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


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



Начать новую тему Ответить на тему  [ Сообщений: 76 ]    , 2, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Чт дек 07, 2017 08:32:36 
Держит паяльник хвостом

Карма: 6
Рейтинг сообщений: 149
Зарегистрирован: Чт авг 10, 2017 20:57:51
Сообщений: 993
Рейтинг сообщения: 0
Как представляете себе работа двух кнопок на одном входе?

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


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

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
КРАМ писал(а):
Светодиоды нельзя будет погасить оба
при условии, что сумма падений на них меньше напряжения питания. например при питании 3,6 вольта и суперярких светодиодах они оба будут погашены, если пин МК будет в третьем состоянии...

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

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


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

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

Этот Weak pull-up я так пытаюсь отключить - нифига не правильно, как я понял:

WPUA = 0;


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

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

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

Карма: 6
Рейтинг сообщений: 149
Зарегистрирован: Чт авг 10, 2017 20:57:51
Сообщений: 993
Рейтинг сообщения: 0
Изображение
Ето два варианта - с подтяжкой к + и к земле. Подтяжка нужна, иначе все будет лезть на вход.
И мой вопрос: Какой силой нужно нажимать S2 и S3 дабы на вход появилось 0 (+Vdd) если они там уже есть.

В ету схему включения активна одна кнопка - противоположная на резистора подтяжки. Когда отпускаем активную кнопку на входе ЛЕ появляется потенциал с резистора подтяжки и всякое нажимание на кнопки S2 и S3 не имеет никакого смысла

Логика кода должна быть такая
If (нажата)
;
else //ненажата
;


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

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

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

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


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

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

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

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Прочитал я даташит, прочитал комментарии, пересобрал схему, изменил код. Все равно, я не могу установить ноль на выходе ножке RA3. Я не понимаю, что это за магия и как убрать эти 2,5 с этой ножки. Диоды не горят, вообще. Входы RA0 и RA1 имеют лог. 0 при нажатых кнопок, а диоды не горят, никакие.

Схема:

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


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

#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц

#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = EC        // 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(); // Функция подготовки МК

int main()
{
    Prepare(); // Запуск функции подготовки     
    int K = 4;
    while(1) // Бесконечный цикл работы
    {   
        if(RA0 == 0 && RA1 == 1) // Проверка на нажатые кнопки
        {
            RA3 = 1; // Зажигаем зеленый светодиод
            //srand(K); // Инициализация генератора случайных импульсов
            //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
            //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
            __delay_us(SIGNAL-4); // Определяем задержку
            RA2 = 1; // Подаем на выход лог. единицу
            __delay_us(SIGNAL-2); // Определяем длительность сигнала
            RA2 = 0; // Подаем на выход лог. ноль   
        }
        else
        {
            RA3 = 0; // Зажигаем красный светодиод
            RA2 = 0; // На выход ставил лог. ноль
        }       
    }
    return 0;   
}

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


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

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


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

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

Хорошо, тогда она может быть нормальным человеческим входом для одной кнопки?


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

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


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

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Теперь генерация сигнала есть, горит зеленый светодиод, НО:

1. Зеленый светодиод горит даже тогда, когда кнопка старт не нажата.
2. Красный светодиод не горит, когда не нажата кнопка старта или нажата кнопка стоп.

Код:
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD) - выключено


Схема:

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


Код:

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

#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц

#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = EC        // 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(); // Функция подготовки МК

int main()
{
    Prepare(); // Запуск функции подготовки     
    int K = 4;
    while(1) // Бесконечный цикл работы
    {   
        if((RA0 == 0) && (RA3 == 1)) // Проверка на нажатые кнопки
        {
            RA1 = 0; // Зажигаем зеленый светодиод
            //srand(K); // Инициализация генератора случайных импульсов
            //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
            //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
            __delay_us(SIGNAL-4); // Определяем задержку
            RA2 = 1; // Подаем на выход лог. единицу
            __delay_us(SIGNAL-2); // Определяем длительность сигнала
            RA2 = 0; // Подаем на выход лог. ноль   
        }
        else
        {
            RA1 = 1; // Зажигаем красный светодиод
            RA2 = 0; // На выход ставил лог. ноль
        }       
    }
    return 0;   
}

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


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

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

Добавлено after 2 minutes 27 seconds:
P.S.
Обращение к PORTA - это чтение; LATA - запись.

Добавлено after 2 minutes 8 seconds:
P.P.S.
Не вижу записи в ANSELA.


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

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

Какой записи? О.о


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

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


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

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

Стало лучше, а именно:
Зеленый светодиод нормально горит при нажатой кнопке включения и выключается, если нажать кнопку стоп или отжать кнопку включения.

НО:

При нажатой кнопке стоп не горит красный светодиод, он вообще не горит:

Код:


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

// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц

// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс

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

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = EC        // 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(); // Функция подготовки МК

int main()
{
    Prepare(); // Запуск функции подготовки     
    int K = 4;
    while(1) // Бесконечный цикл работы
    {   
        if((START == 0) && (STOP == 1)) // Проверка на нажатые кнопки
        {
            LED = 0; // Зажигаем зеленый светодиод
            //srand(K); // Инициализация генератора случайных импульсов
            //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
            //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
            __delay_us(SIGNAL-4); // Определяем задержку
            GENERATOR = 1; // Подаем на выход лог. единицу
            __delay_us(SIGNAL-2); // Определяем длительность сигнала
            GENERATOR = 0; // Подаем на выход лог. ноль   
        }
        else
        {
            LED = 1; // Зажигаем красный светодиод
            GENERATOR = 0; // На выход ставил лог. ноль
        }       
    }
    return 0;   
}

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


Схема:

Спойлер

Изображение



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

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


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

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


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

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


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

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


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

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


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

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

Спойлер
Код:
17:            // Подключение нужных библиотек
18:            #include <stdio.h>
19:            #include <stdlib.h>
20:            #include <xc.h>
21:           
22:            // Параметры микроконтроллера
23:            #define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
24:           
25:            // Параметры сигнала
26:            #define SIGNAL 30 // Длительность сигнала в мкс
27:            #define DELMIN 100 // Максимальная задержка в мкс
28:            #define DELMAX 400000 // Максимальная задержка в мкс
29:           
30:            // Обознаение выводов и кнопок
31:            #define START RA0 // Кнопка запуска работы МК
32:            #define STOP RA3 // Кнопкка остановки работы МК
33:            #define LED RA1 // Вывод на светодиоды
34:            #define GREEN 0 // Сигнал для зеленого светодиода
35:            #define RED 1 // Сигнал для красного светодиода
36:            #define GENERATOR RA2 // Выход генератора
37:           
38:            // PIC10F322 Configuration Bit Settings
39:           
40:            // 'C' source line config statements
41:           
42:            // CONFIG
43:            #pragma config FOSC = EC        // Oscillator Selection bits (EC: CLKIN function enabled)
44:            #pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
45:            #pragma config WDTE = OFF        // Watchdog Timer Enable (WDT enabled)
46:            #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
47:            #pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
48:            #pragma config CP = ON          // Code Protection bit (Program memory code protection is enabled)
49:            #pragma config LVP = OFF         // Low-Voltage Programming Enable (Low-voltage programming enabled)
50:            #pragma config LPBOR = ON       // Brown-out Reset Selection bits (BOR enabled)
51:            #pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
52:            #pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
53:           
54:            // #pragma config statements should precede project file includes.
55:            // Use project enums instead of #define for ON and OFF.
56:           
57:            void Prepare(); // Функция подготовки МК
58:           
59:            int main()
60:            {
61:                Prepare(); // Запуск функции подготовки     
01E7  21DC     CALL 0x1DC
62:                int K = 4;
01E8  3004     MOVLW 0x4
01E9  00C2     MOVWF K
01EA  3000     MOVLW 0x0
01EB  00C3     MOVWF 0x43
63:                LED = RED;
01EC  1485     BSF PORTA, 0x1
64:                while(1) // Бесконечный цикл работы
65:                {   
66:                    if((START == 0) && (STOP == 1)) // Проверка на нажатые кнопки
01ED  29FB     GOTO 0x1FB
01EE  1D85     BTFSS PORTA, 0x3
01EF  29FA     GOTO 0x1FA
01FB  1C05     BTFSS PORTA, 0x0
01FC  29EE     GOTO 0x1EE
67:                    {
68:                        //LED = GREEN; // Зажигаем зеленый светодиод
69:                        //srand(K); // Инициализация генератора случайных импульсов
70:                        //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
71:                        //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
72:                        __delay_us(SIGNAL-4); // Определяем задержку
01F0  3022     MOVLW 0x22
01F1  00C1     MOVWF 0x41
01F2  0BC1     DECFSZ 0x41, F
01F3  29F2     GOTO 0x1F2
01F4  0000     NOP
73:                        GENERATOR = 1; // Подаем на выход лог. единицу
01F5  1505     BSF PORTA, 0x2
74:                        __delay_us(SIGNAL-2); // Определяем длительность сигнала
01F6  3025     MOVLW 0x25
01F7  00C1     MOVWF 0x41
01F8  0BC1     DECFSZ 0x41, F
01F9  29F8     GOTO 0x1F8
75:                        GENERATOR = 0; // Подаем на выход лог. ноль   
01FA  1105     BCF PORTA, 0x2
76:                    }
77:                    else
01FD  29FA     GOTO 0x1FA
78:                    {
79:                        //LED = RED; // Зажигаем красный светодиод
80:                        GENERATOR = 0; // На выход ставил лог. ноль
81:                    }       
82:                }
83:                return 0;   
84:            }
85:           
86:            // Функция подготовки
87:            void Prepare()
88:            {
89:                TRISA = 0b1001; // Направление работы ножек порта А (вход)
01DC  3009     MOVLW 0x9
01DD  0086     MOVWF TRISA
90:                PORTA = 0b0000; // очищаем порт А
01DE  0185     CLRF PORTA
91:                OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
01DF  3070     MOVLW 0x70
01E0  0090     MOVWF OSCCON
92:                WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
01E1  30F0     MOVLW 0xF0
01E2  00C0     MOVWF __pcstackBANK0
01E3  0840     MOVF __pcstackBANK0, W
01E4  0589     ANDWF WPUA, F
93:                ANSELA = 0; // Отключение аналоговой части
01E5  0188     CLRF ANSELA
94:            }
01E6  0008     RETURN


А вот так работает, но не при нажатых клавишах, а на нажатие работает, хотя я этого не делал:

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

// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц

// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс

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

// PIC10F322 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = EC        // 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(); // Функция подготовки МК

int main()
{
    Prepare(); // Запуск функции подготовки     
    int K = 4;
    while(1) // Бесконечный цикл работы
    {   
        if(BUTTON == 1) // Проверка на нажатые кнопки
        {
            LED = GREEN; // Зажигаем зеленый светодиод
            //srand(K); // Инициализация генератора случайных импульсов
            //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
            //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
            __delay_us(SIGNAL-4); // Определяем задержку
            GENERATOR = 1; // Подаем на выход лог. единицу
            __delay_us(SIGNAL-2); // Определяем длительность сигнала
            GENERATOR = 0; // Подаем на выход лог. ноль   
        }
        else
        {
            LED = RED; // Зажигаем красный светодиод
            GENERATOR = 0; // На выход ставил лог. ноль
        }   
    }
    return 0;   
}

// Функция подготовки
void Prepare()
{
    TRISA = 0b1001; // Направление работы ножек порта А (вход)
    PORTA = 0b0000; // очищаем порт А
    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; // Отключение аналоговой части
}


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


Последний раз редактировалось SpeedFighter Пт дек 08, 2017 19:14:41, всего редактировалось 1 раз.

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

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


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

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


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

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


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