Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 30.01.2023
Сообщений: 5

Мигание светодиодом на микроконтроллере LPC4320

22.03.2024, 00:18. Показов 925. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброго времени суток читающим, возикла проблема при выполнении стандартной задачи - не могу поморгать светодиодом, подсоединенным к ножке P7_7 микроконтроллера LPC4320FBD144, но в силу моего небольшого опыта программирования микроконтроллеров что то у меня не получается))
Взяв мануал на тысячу с лишним страниц я нашел регистры, вроде как отвечающие за управление ножкой, и у меня получился такой код:
C Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define  GPIO_BASE 0x400F4000
#define DIR7 (GPIO_BASE + 0x201C) //direction registers port 7
#define SET7 (GPIO_BASE + 0x221C) // write:set register for port 7 // read: output bits for port 7
#define CLR7 (GPIO_BASE + 0x229C) // clear port 7
 
volatile unsigned *gpio;
 
int main(void) {
   int i = 0, j = 0;
   gpio[DIR7 / sizeof(unsigned int)] = 1;
 
   for (; i < 10; i++){
      gpio[SET7 / sizeof(unsigned int)] |= 1 << 7;
 
      for(; j < 1000000; j++);
 
      gpio[CLR7 / sizeof(unsigned int)] |= 1 << 7;
 
      for(; j < 1000000; j++);
   }
 
   return 0;
}
Как по мне, так вроде бы выглядит логично, но проблема в том, что код не работает...
Был бы очень признателен, если бы мне все это разжевали как маленькому ребенку
Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2024, 00:18
Ответы с готовыми решениями:

Мигание светодиодом(ми)
и так... начитался я всякой всячины, насмотрелся видео на сайтах и захотелось чего то большего... тут нашел сайт iosyitistromyss.ru там...

Плавное мигание светодиодом
Здравствуйте! Необходимо написать программу, чтобы плавно зажигать светодиод в течение двух секунд, затем сделать так, чтобы на протяжении...

Мигание светодиодом от кнопки чаще
Здравствуйте! Я только знакомлюсь с Ардуино. Стоит задание сделать программу, чтобы светодиод мигал при каждом нажатии кнопки быстрее. ...

4
952 / 390 / 59
Регистрация: 22.09.2023
Сообщений: 1,138
22.03.2024, 03:07
Цитата Сообщение от makson_cheg Посмотреть сообщение
но проблема в том, что код не работает...
В чем именно это выражается? Светодиод не светится вообще или горит "вполнакала"? Предполагаю, что второе.
Цитата Сообщение от makson_cheg Посмотреть сообщение
for(; j < 1000000; j++);
Любой вменяемый компилятор с включенной оптимизацией этот код выкинет, как "не меняющий состояние абстрактной машины" и ваш светодиод будет мигать очень-очень быстро, сливаясь в постоянное неяркое горение. Чтобы он работал так, как вы хотите, надо j объявлять с квалификатором volatile. У тому же после прохода первого цикла у вас j останется равным 1000000 и все последующие циклы будут пропущены. Лучше объявлять такую переменную прямо в цикле: for(int volatile j = 0; j < 1000000; j++);
0
0 / 0 / 0
Регистрация: 30.01.2023
Сообщений: 5
22.03.2024, 09:07  [ТС]
Да, вы правы, я допустил ряд тупых ошибок, я этот код в пути на коленке накидал с телефона))
Фактически, если я изменю j на volatile, и если я нормально напишу циклы задержки, то все равно ничего не поменяется. Светодиод как не горел, так и не будет гореть, и он не горит в полсилы.
Скажу прямо: пытаюсь изменить исходный код прошивки на HackRF. Я пытался это сделать по образу и подобию того, как там управляются светодиоды RX, TX и USB. Грубо говоря, вот код:
C Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// файл hackrf_core.c
/* GPIO Output PinMux */
static struct gpio_t gpio_led[] = {
    GPIO(2, 1),
    GPIO(2, 2),
    GPIO(2, 8),
        GPIO(7, 7), //////////////мой светодиод
#ifdef RAD1O
    GPIO(5, 26),
#endif
};
 
//...
//...
 
void pin_setup(void)
{
    /* Configure all GPIO as Input (safe state) */
    gpio_init();
 
    /* Configure SCU Pin Mux as GPIO */
    scu_pinmux(SCU_PINMUX_LED1, SCU_GPIO_NOPULL);
    scu_pinmux(SCU_PINMUX_LED2, SCU_GPIO_NOPULL);
    scu_pinmux(SCU_PINMUX_LED3, SCU_GPIO_NOPULL);
        scu_pinmux(P7_7, SCU_GPIO_NOPULL); //////////////////////// мой светодиод
#ifdef RAD1O
    scu_pinmux(SCU_PINMUX_LED4, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
#endif
 
    /* Configure USB indicators */
#ifdef JAWBREAKER
    scu_pinmux(SCU_PINMUX_USB_LED0, SCU_CONF_FUNCTION3);
    scu_pinmux(SCU_PINMUX_USB_LED1, SCU_CONF_FUNCTION3);
#endif
 
    gpio_output(&gpio_led[0]);
    gpio_output(&gpio_led[1]);
    gpio_output(&gpio_led[2]);
        gpio_output(&gpio_led[3]); /////////////////////////// мой светодиод
#ifdef RAD1O
    gpio_output(&gpio_led[4]);
#endif
 
//...
//...
 
// файл hackrf_usb.c
 
//...
//...
 
int main(void)
{
        int i = 0;
    // Copy M0 image from ROM before SPIFI is disabled
    m0_rom_to_ram();
 
    detect_hardware_platform();
    pin_setup();
    enable_1v8_power();
        for(; i < 50; i++) {
                led_on(LED1);
                delay(700000);
                led_on(LED2);
                delay(700000);
                led_on(LED3);
                delay(700000);
                led_on(LED4);
                delay(700000);
 
                led_off(LED1);
                delay(700000);
                led_off(LED2);
                delay(700000);
                led_off(LED3);
                delay(700000);
                led_off(LED4);
                delay(700000);
        }
где
C Скопировано
1
2
3
4
5
6
7
8
9
void led_on(const led_t led)
{
    gpio_set(&gpio_led[led]);
}
 
void led_off(const led_t led)
{
    gpio_clear(&gpio_led[led]);
}
и
C Скопировано
1
2
3
4
5
6
7
typedef enum {
    LED1 = 0,
    LED2 = 1,
    LED3 = 2,
    LED4 = 3,
    LED5 = 4
} led_t;
Я пытался сделать по подобию того, как мигают эти три светодиода, настройки все вроде одни и те же, но эти три светтотдиода мигают после перезагрузки, а мой не мигает, поэтому решил попробовать достучаться до физ. памяти, но и тут неудача. Что я делаю не так?
0
952 / 390 / 59
Регистрация: 22.09.2023
Сообщений: 1,138
22.03.2024, 10:09
Увы, тут не знаю. Может вы заливаете не новую прошивку, а оригинальную, без ваших изменений?

Добавлено через 11 минут
Дополнено: и зря вы добавили свой светодиод в середину массива. Ведь теперь все обращения к LED4 из остального кода будут дергать ваш светодиод вместо GPIO(5, 26). И даже если вы измените порядок в led_t нет гарантий, что какой-нибудь "мамкин хакер" в остальном коде не обращается к LED4 просто через gpio_led[3] или led_on(3)/led_off(3) (судя по typedef это не плюсы, тут можно вместо enum подставить int не получив от компилятора по рукам).
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 1
11.02.2025, 16:23
Здраствуйте подскажите пожалуйста в какой среде вы редактируете и компилируете проект hackrf one
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2025, 16:23
Помогаю со студенческими работами здесь

Мигание светодиодом на ATMega8515 (Proteus)
Доброго времени дня. Подскажите, как реализовать мигание светодиодом определенное количество раз? Привожу свой код: .include...

Мигание светодиодом при нажатии Enter
Всем привет. Решил написать код, смысл такой: при нажатии клав. Enter, через монитор порта, начинает мигать светодиод на плате, далее еще...

ATmega128. Мигание светодиодом через таймер0
Добрый вечер, столкнулся с тупиком. Суть задания- на лабораторном стенде атмега128 организовать мигание светодиода с частотой 1 гц с...

Мигание светодиодом на PIC. Организация задержки
объясните пожалуйста как сформировать чередующуюся еденицу и нолик длительностью 1(2) секунды, при помощи задержки

Управляем СВЕТОдиодом
Парни! Помогите плиз по коду. Хочется что бы: 1. кнопку нажал, диод загорелся 2. кнопку отжал, диод потух Трудность состоит в том...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер