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

Не загорается светодиод при нажатии на кнопку

01.11.2019, 14:07. Показов 1706. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Устройство - будущая клавиатура. Происходит опрос строк, при замыкании кнопки, на пине 4 порта С должен быть лог0, после чего должен загореться светодиод Застопорился и ни фига не работает. 3-й день сижу и не могу понять в чем дело. Подскажите пожалуйста, что я делаю не так. В архиве проект протеуса, исходник и прошивка мк. Спасибо
Вложения
Тип файла: rar KB.rar (18.4 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2019, 14:07
Ответы с готовыми решениями:

В каждом знакоместе при нажатии на кнопку двигается средний сегмент, один гаснет второй загорается (PIC16F917)
Помогите пожалуйста! нужна прога чтобы отладить её в MPLAB. Задача:В каждом знакоместе при нажатии на кнопку двигается средний сегмент,...

При нажатии на кнопку светодиод загораеться и горит
есть 1 потенциометр,1 кнопка и 1 светодиод .Нужно следуещее при нажатии на кнопку светодиод загораеться и горит ( время которое горит ...

Asus K50ID - При нажатии на кнопку питания ничего не происходит, при этом светодиод на заряднике мигает
Добрый день! Есть ноут Asus K50ID (материнка k40ID), у которого КЗ (при нажатии на кнопку питания ничего не происходит, при этом...

10
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
01.11.2019, 15:00
Цитата Сообщение от Марафет Посмотреть сообщение
В архиве проект протеуса, исходник и прошивка мк.
...возможно, потороплюсь, но позволю себе прокомментировать свое видение общения на форуме. Если у вас есть конкретный вопрос - выкладывайте картинки прямо на форум, исходники - тоже. Не все конечно, а то, что конкретно у вас на получается. Ковыряться "в архивах" желания нет. И допустим, у меня нет Протеуса даже (не говоря о каком-то IDE, который очевидно, вы используете у себя), чтобы запустить вашу "проблему".
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,932
01.11.2019, 15:37
_delay_ms(100) ;
Плохая идея. При добавлении основного кода задержки поплывут, да и самому коду мешать будут.
while (!PINC4)
Это условие всегда ложно. Потому что PINC4 это константа, равная 4. Берете от нее логическое НЕ, получаете 0.

Добавлено через 2 минуты
P.S. С Voland_'ом, конечно, согласен. Если схема важна - делаете скриншот, обрезаете лишнее и выкладываете сюда картинкой.
Если есть код (потому что если нет - что вы здесь делаете?), выкладываете на форум, обрамив соответствующими тегами [CLANG][/CLANG] [CPP][/CPP] [ASM][/ASM]
0
 Аватар для Марафет
4 / 4 / 0
Регистрация: 26.10.2015
Сообщений: 55
01.11.2019, 16:06  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
Если у вас есть конкретный вопрос - выкладывайте картинки прямо на форум, исходники - тоже
Ок, не вопрос
Код на С++
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
#define F_CPU 1000000UL
 
#include <avr/io.h>
#include <util/delay.h>
 
 
int main(void)
{
    
    //PORTC = 0xFF;
    DDRB |= (1<<7);
    DDRC = 0b00000000;
    PORTC = 0b01110000;
    DDRD = 0b00000000;
    PORTD = 0b00000001;
    while (1) 
    {
        
        DDRC ^= (1 << 0);
        PORTC ^= (0 << 0);
        _delay_ms(100) ;
        DDRC ^= (1 << 0);
        PORTC ^= (0 << 0);
        
        DDRC ^= (1 << 1);
        PORTC ^= (0 << 1);
        _delay_ms(100) ;
        DDRC ^= (1 << 1);
        PORTC ^= (0 << 1);
        
        DDRC ^= (1 << 2);
        PORTC ^= (0 << 2);
        _delay_ms(100) ;
        DDRC ^= (1 << 2);
        PORTC ^= (0 << 2);
        
        DDRC ^= (1 << 3);
        PORTC ^= (0 << 3);
        _delay_ms(100) ;
        DDRC ^= (1 << 3);
        PORTC ^= (0 << 3);;
        _delay_ms(100) ;
        
        while (!PINC4) //При таком выражении (!PINC0) - в тело цикла заходит
        {
            
            DDRC |= (1 << 7);
            PORTC |= (1 << 7);
            _delay_ms(100) ;
            DDRC ^= (1 << 7);
            PORTC ^= (1 << 7);
        
        }
        
        
    
    }
}

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это условие всегда ложно. Потому что PINC4 это константа, равная 4. Берете от нее логическое НЕ, получаете 0.
Как это она может быть равна четырем? Это же номер бита... Я это понимаю так. До тех пор, пока на 4-й пин порта С нет лог1, выполняем условие.
Миниатюры
Не загорается светодиод при нажатии на кнопку  
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
01.11.2019, 16:14
Цитата Сообщение от Марафет Посмотреть сообщение
пока на 4-й пин порта С нет лог1, выполняем условие
чтобы прочитать весь порт, вам нужен регистр PINC, а дефайны, по именам PINC1...PINC7 - на мой взгляд, просто ошибка. То есть условие должно быть типа
C
1
PINC & (1<<PIN4)
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,932
01.11.2019, 16:48
Цитата Сообщение от Марафет Посмотреть сообщение
Это же номер бита...
То-то и оно что номер, а не сам бит. В Си нет доступа к отдельным битам переменной (что бы там ни думали разработчики cvavr).
Цитата Сообщение от Voland_ Посмотреть сообщение
То есть условие должно быть типа
C
1
PINC & (1<<PIN4)
Я обычно не заморачиваюсь с этими макроконстантами, перекладывающими из пустого в порожнее:
C
1
if( PINC & (1<<4) )
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
01.11.2019, 19:44
Цитата Сообщение от Марафет Посмотреть сообщение
PORTC ^= (0 << 0);
что это? зачем это?
а тем более
Цитата Сообщение от Марафет Посмотреть сообщение
PORTC ^= (0 << 1);
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
02.11.2019, 18:10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В Си нет доступа к отдельным битам переменной (что бы там ни думали разработчики cvavr).
наверное, я понял, что Вы имеете ввиду )). Но, вообщето в Си есть структуры из битовых полей, которые таки имеют "доступ к отдельным битам". В комбинации с union'ами они дают интересные возможности в этом плане .
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,932
03.11.2019, 00:09
Цитата Сообщение от Voland_ Посмотреть сообщение
наверное, я понял, что Вы имеете ввиду ))
Тут и угадывать нечего: if( PINC.1 ) в cvavr работает, а в Си - нет.
Цитата Сообщение от Voland_ Посмотреть сообщение
Но, вообщето в Си есть структуры из битовых полей, которые таки имеют "доступ к отдельным битам".
В теории да, на практике это менее эффективно, чем через булевские операции, я проверял когда-то.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
03.11.2019, 14:47
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В теории да, на практике это менее эффективно, чем через булевские операции, я проверял когда-то.
Это зависит от возможностей компилятора. Но в AVR есть инструкции CBR, SBR, пишущие атомарно в биты регистров (для флагов тоже есть, не помню - есть ли для памяти). И есть атомарные по битам (SBRC, SBRS). Соответственно, компилятор может об этом знать и очень эффективно использовать. Я знаю, что битовые инструкции красиво сворачивает GCC, в CVAVR они нативно поддерживаются "битовым доступом", возможно, четко изображая атомарный доступ (что ни разу не очевидно в конструкции "PORTB |= 1". Потому что при переходе на другую платформу вполне возможно придется оборачивать эти конструкции системной секцией, чтобы обеспечить атомарность.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,932
03.11.2019, 18:23
Цитата Сообщение от Voland_ Посмотреть сообщение
Это зависит от возможностей компилятора.
Об этом я и говорю: для битовых масок avr-gcc догадался использовать соответствующие команды, а для битовых полей - нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2019, 18:23
Помогаю со студенческими работами здесь

При нажатии на кнопку питания на ноутбуке загорается индикатор включения на 5 секунд и тухнет
Сам ноутбук не включается вообще. Ни куллер, ничего. Втыкаю зарядку - индикатор зарядки идёт. Пробовал вытаскивать батарею - все равно....

Не загорается светодиод
Светодиод с потреблением 2.2 вольта. Загорается только если замкнуть подстроечник или выставить на нем ноль и подать в место 3 минимум 6...

Поменял клавиатуру на ноутбуке и светодиод на Caps Lock не загорается
Поменял клавиатуру, все кнопки работают. Но светодиод, на клавише Caps Lock, не загорается при нажатии , хотя при включении\выключении...

Зависает компьютер, курсор не двигается, Capslock при нажатии не загорается
Добрый день. Суть проблемы: Начал зависать компьютер(намертво, курсор не двигается, клавиатура тоже не работает), думал проблема в...

При нажатии кнопки запуска мигает светодиод и всё.
При нажатии кнопки запуска мигает светодиод и всё. Снял крышку - при нажатии дергается вентилятор на процессоре. Потом - тишина. Метод...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru