Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-июл-17 15:34

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3 Все  След.
Автор Сообщение
СообщениеДобавлено: 2019-янв-18 15:55 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
andelie писал(а):
Если у вас на схеме (надо на нее посмотреть) ножка с кнопкой подтянута резистором к плюсу питания, а кнопка замыкается на землю, то сразу после инициализации прерываний вы безвозвратно попадете в обработчик от внешнего прерывания, так как при отпущенной кнопке на соответствующем входе МК будет 1. Проверьте вольтметром или осциллом.

Я не знаю как найти схему, но в документации написано, что "Кнопка пользователя USER_BTN соединяет линию ввода вывода EXTEND13 с GND платы (при установленной перемычке BTN)"
Моргать то я моргал, но вот нормальным способом - через прерывания, не могу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:00 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 118
Alex_Dushechkin писал(а):
andelie писал(а):
"Кнопка пользователя USER_BTN соединяет линию ввода вывода EXTEND13 с GND платы (при установленной перемычке BTN)"

Ну так об этом и говорю: если кнопка нажата, то на входе МК будет однозначно 0, а если отпущена, то, скорее всего, из-за резистора подтяжки, расположенного на плате, - 1. Если внешнего резистора подтяжки нет, то при не подключенном встроенном резисторе подтяжки будет, как повезет.
Вольтметр развеет сомнения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:02 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
andelie писал(а):
Alex_Dushechkin писал(а):
andelie писал(а):
"Кнопка пользователя USER_BTN соединяет линию ввода вывода EXTEND13 с GND платы (при установленной перемычке BTN)"

Ну так об этом и говорю: если кнопка нажата, то на входе МК будет однозначно 0, а если отпущена, то, скорее всего, из-за резистора подтяжки, расположенного на плате, - 1. Если внешнего резистора подтяжки нет, то при не подключенном встроенном резисторе подтяжки будет, как повезет.
Вольтметр развеет сомнения.

Можете тогда скинуть что-нибудь, чтобы можно было разобраться как осуществить переключение кнопкой между светодиодами с помощью таймера?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:27 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1309
Откуда: Тула
Alex_Dushechkin писал(а):
МК "ломается" сразу и постоянно мигает зелёный.

Что значит "ломается"? Какой ещё код, кроме написанного, выполняется на МК?
Как используете USB?

Alex_Dushechkin писал(а):
Про запрет:
Вы имеете в виду написать вот так в обработчике?
Код:
void EXT_INT2_IRQHandler (void)
{
NVIC_DisableIRQ(EXT_INT2_IRQn);
State_B = 1;
}

Так не стоит делать, имхо.
Попробуйте тот код, что написали выше. Как-то он должен работать.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:28 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 118
Если прямо сейчас и по-серьезному, то могу предложить свою книгу:
Благодаров А.В., Владимиров Л.Л. Программирование микроконтроллеров: методическое пособие на основе отечественных микросхем семейства 1986ВЕ9х разработки и производства компании "Миландр", г. Зеленоград, 2016: https://edu.milandr.ru/upload/iblock/cb ... 8be0e8.pdf
Примеры к ней: https://cloud.mail.ru/public/BV1X/iS1hAif1e
Книга и примеры заточены под отладочную плату К1986ВЕ92QI, среду программирования Keil uVision 4.72 (можно и 5.х) и операционную систему реального времени Keil RTX. Но у вас плата чуток другая, примеры придется подточить.
Глава 2 посвящена, как раз, кнопкам и светодиодам.

Если через некоторое время и по-простому, то, может быть, попробую сделать более легкий пример под Keil, но без операционной системы. Это будет не раньше середины следующей недели. Если писать такой пример актуально, то сообщите в этой ветке в понедельник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:33 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
prostoRoman писал(а):
Alex_Dushechkin писал(а):
МК "ломается" сразу и постоянно мигает зелёный.

Что значит "ломается"? Какой ещё код, кроме написанного, выполняется на МК?
Как используете USB?

Использую micro usb.
Под ломается - я имел в виду, что микроконтроллер перестаёт распознаваться компьютером и постоянно мигает зелёный диод.


Последний раз редактировалось Alex_Dushechkin 2019-янв-18 23:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 16:37 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
Ещё вот хотелось спросить: если забить на прерывания и просто опрашивать кнопку, то все работает но переключение идёт где-то через раз, два. То есть бывает раза три нажимаю на кнопку чтобы переключить на другой диод.
А если зажать кнопку, то переключается постоянно.
Код:
#include "main.h"
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include "MDR32Fx.h"
#include "system_MDR32F9Qx.h"
#include "mstn_clk.h"
/*------------------------------------------------------------------*/
void init_PORTB(void);
void switch_LED(void);

int State_B = 1;
int State_D = 8;
/*------------------------------------------------------------------*/
int main(void)
{
    init_PORTB();
    while(1)
    {   
        switch_LED();
    }
    return EXIT_SUCCESS;
}
/*-----------------------------------------------------------------*/
void init_PORTB(void)
{
    //Настройка порта B - зелёный диод, красный диод, кнопка
    MDR_RST_CLK -> PER_CLOCK |= (1 << 22);
    MDR_PORTB -> OE |= (1 << 8) | (1 << 9) | (0 << 10);
    MDR_PORTB -> FUNC |= (0 << 8*2) | (0 << 9*2) | (2 << 10*2);
    MDR_PORTB -> ANALOG |= (1 << 8) | (1 << 9) | (1 << 10);
    MDR_PORTB -> PULL |= (0 << 8) | (0 << 9) | (0 << 10);
    MDR_PORTB -> PD |= ((0 << 8) | (0 << 9) | (0 << 10)) << 16;
    MDR_PORTB -> PWR |= (1 << 8*2) | (1 << 9*2) | (1 << 10*2);
    MDR_PORTB -> GFEN |= (0 << 8) | (0 << 9) | (1 << 10);
}
/*----------------------------------------------------------------*/
void switch_LED(void)
{
    if (MDR_PORTB -> RXTX & (1<<10))
    {
        switch (State_D)
        {
            case 8:
                MDR_PORTB -> RXTX &= ~(1 << 9);
                Delay(50);
                MDR_PORTB -> RXTX |= (1 << 8); 
                Delay(200);
                MDR_PORTB -> RXTX &= ~(1 << 8);
                Delay(200);
                break;
            case 9:
                MDR_PORTB -> RXTX &= ~(1 << 8);
                Delay(50);
                MDR_PORTB -> RXTX |= (1 << 9);
                Delay(200);
                MDR_PORTB -> RXTX &= ~(1 << 9);
                Delay(200);
                break;
        }
    }
    else
    {
        (State_D == 8)? State_D = 9 : State_D = 8;
        State_B = 1;
    }
}
/*--------------------------------------------------------------*/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 17:33 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 362
Откуда: ПКК "Миландр"
Реакция на кнопку плохая, потому что опрос кнопки происходит редко - между опросами куча задержек.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 17:49 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 362
Откуда: ПКК "Миландр"
Запустил Ваш исходный код, который смотрел с утра, на отладочной плате 1986ВЕ92QI с паком 1.5. LCD дисплей снял, поскольку он висит на используемых выводах.

Сразу при старте попадаю в обработчик EXT_INT2_IRQHandler и в нем вишу. Видимо потому что пин PB10 висит в воздухе и не равен 0.
При подтяжке PB10 к 0 резистором, происходит выход из обработчика и исполняется основной цикл. При отключении подтяжки, снова вишу в прерывании.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 18:03 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 362
Откуда: ПКК "Миландр"
Если отладка подключена к плате по JtagA, то она отваливается потому что, повторяюсь - https://startmilandr.ru/doku.php/prog:d ... D1%81_jtag


Пишите в регистр RXTX обнуляя биты совмещенные с JtagA, если подключены по JtagA:
Код:
// Только так
value = MDR_PORTB -> RXTX;
value = ....
MDR_PORTB -> RXTX = value & 0xFFFFFFE0;

// Так нельзя
MDR_PORTB -> RXTX |= ...
MDR_PORTB -> RXTX ^= ...


Если в схемотехнике платы использовано подключение по JtagB, то изложенное здесь не актуально. Но актуально для порта D.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-18 23:07 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
За пример спасибо, так понятнее. Поясните, почему вы пишете про Jtag, если у меня подключение идёт через MicroUSB, а разъём Jtag я не трогаю?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-19 10:11 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 62
Alex_Dushechkin писал(а):
почему вы пишете про Jtag, если у меня подключение идёт через MicroUSB, а разъём Jtag я не трогаю?

В вашем случае, скорее всего, программирование и загрузка программы в МК осуществляются через UART, при помощи микросхемы USB-UART конвертера на микросхеме типа СР2102. Тогда JTAG и правда не при чем.
Или другой вариант: отладка и программирование контроллера осуществляется через выводы JTAG/SWD, совмещённые с выводами GPIO. На плате же установлен конвертер этих интерфейсов в USB для связи с компьютером (JTAG-адаптер). В этом случае эти выводы нельзя использовать в качестве GPIO. Такой подход используется в отладочных платах ST Discovery, ST Nucleo.
Смотрите схему вашей платы. В ней все ответы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-19 11:33 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
Professor Chaos писал(а):
Alex_Dushechkin писал(а):
почему вы пишете про Jtag, если у меня подключение идёт через MicroUSB, а разъём Jtag я не трогаю?

В вашем случае, скорее всего, программирование и загрузка программы в МК осуществляются через UART, при помощи микросхемы USB-UART конвертера на микросхеме типа СР2102. Тогда JTAG и правда не при чем.
Или другой вариант: отладка и программирование контроллера осуществляется через выводы JTAG/SWD, совмещённые с выводами GPIO. На плате же установлен конвертер этих интерфейсов в USB для связи с компьютером (JTAG-адаптер). В этом случае эти выводы нельзя использовать в качестве GPIO. Такой подход используется в отладочных платах ST Discovery, ST Nucleo.
Смотрите схему вашей платы. В ней все ответы.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-19 14:28 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
Причём без разницы на тот код, если бы заработал даже этот простенький, то было бы уже здорово)
Открыть
Код:
#include "main.h"
#include <stdlib.h>
#include "MDR32Fx.h"

uint32_t flag = 1;
void EXT_INT2_IRQHandler(void)
{
    flag = 0;
}
int main(int argc, char *argv[])
{
    MDR_RST_CLK -> PER_CLOCK |= (1 << 22);
    MDR_PORTB -> OE |= (1 << 8) | (1 << 9) | (0 << 10);
    MDR_PORTB -> FUNC |= (0 << 8*2) | (0 << 9*2) | (2 << 10*2);
    MDR_PORTB -> ANALOG |= (1 << 8) | (1 << 9) | (1 << 10);
    MDR_PORTB -> PULL |= (0 << 8) | (0 << 9) | (1 << 10);
    MDR_PORTB -> PD |= (0 << 8) | (0 << 9) | (1 << 10) << 16;
    MDR_PORTB -> PWR |= (1 << 8*2) | (1 << 9*2) | (1 << 10*2);
    MDR_PORTB -> GFEN |= (0 << 8) | (0 << 9) | (1 << 10);
    NVIC_EnableIRQ(EXT_INT2_IRQn);
    NVIC_SetPriority (EXT_INT2_IRQn, 0);
    while(1)
    {
        if (flag)
        {
            MDR_PORTB -> RXTX = 0x100;
        }
        else
        {
            MDR_PORTB -> RXTX = 0;
        }
       
    }
    return EXIT_SUCCESS;
}
Закрыть


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-19 19:39 
Не в сети

Зарегистрирован: 2019-янв-17 21:29
Сообщения: 21
Попробовал различные примеры, понял что у меня ломает МК каждый код, где есть функции с IRQHandler. Может в настройках какая проблема?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3 Все  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 2


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB