#1 2016-12-25 12:43:14

MadHorse
Учасник
Зареєстрований: 2016-10-24
Повідомлень: 7

Помогите начинающему (ATMega328p, Nano v3, Си)

Коллеги
начинаю делать свои первые шаги.
Простая схема (см. приложение)
JC354ygnvWuAECK28
есть код

#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>

#define Port_c PORTC
#define RegC0  PC0

int main(void)
{
    //initial setting port D (connect button)
    DDRD = ~(1 << PD0); //enable input
    PORTD  |= _BV(PD0);
    //initial setting port C (connect led)
    DDRC |= _BV(PC0); //on eixt
    Port_c &= ~ _BV(PC0);  
    while(1)
    {          
        if((PIND & _BV(PD0)) == 1)
        {
            _delay_ms(25); //leveling press button
            Port_c ^= (1<<PC0); //led on/off
        }              
    }
}

При нажати лед должне включиться при последующием выключиться
В виртуальной модели (в протеусе) работает, а в физической, лед просто быстро мерцает. Реакция на кнопку- замирает не надолго или вообще никак. На вид все логично, но..., Помогите разобраться где косяк?

Остання редакція MadHorse (2016-12-25 12:46:07)

Неактивний

#2 2016-12-26 11:08:47

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите начинающему (ATMega328p, Nano v3, Си)

Первые шаги в чем?
Если в Ардуино, то к чему физика? Она ж, как раз, от физики и отвязывает. Вы же пишете на чистом Си.
Но, если определили RegC0, то какого бэна Вы к нему затем напрямую обращаетесь? 
Кнопку Вы жмёте сколько по времени? А цикл за сколько у Вас проскакивает?
Включайте голову в первую очередь.

Неактивний

#3 2017-02-24 21:36:49

MadHorse
Учасник
Зареєстрований: 2016-10-24
Повідомлень: 7

Re: Помогите начинающему (ATMega328p, Nano v3, Си)

Green пише:

Первые шаги в чем?
Если в Ардуино, то к чему физика? Она ж, как раз, от физики и отвязывает. Вы же пишете на чистом Си.
Но, если определили RegC0, то какого бэна Вы к нему затем напрямую обращаетесь? 
Кнопку Вы жмёте сколько по времени? А цикл за сколько у Вас проскакивает?
Включайте голову в первую очередь.

Вы заголовок читали?
Ардуино Нано это не Ардуино?
по сути как разница как определил я переменную или обращаюсь  к пину на прямую, это что влияет на функционал? smile
Написали глупости и по сути ничего не сказав smile

Остання редакція MadHorse (2017-02-24 22:07:56)

Неактивний

#4 2017-02-28 08:18:07

Волшебник
Учасник
Зареєстрований: 2017-02-28
Повідомлень: 8

Re: Помогите начинающему (ATMega328p, Nano v3, Си)

У вас не хватает <детектора фронтов>, вкратце нужно запоминать предыдущее состояние и не реагировать если оно не изменилось.
тут есть правильный код, посмотрите  https://www.arduino.cc/en/Tutorial/Debounce

Неактивний

#5 2017-02-28 10:25:04

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Помогите начинающему (ATMega328p, Nano v3, Си)

MadHorse, реальность очень сильно отличается от идеала: в протеусе нет дребезга контактов, нет наводок от соседних проводников, нет паразитных индуктивностей и емкостей, нет нестабильностей питания и т. д. Это конечно все можно добавить для приближения к реальности, но в вашем случае модель идеальна, а реальность - нет.

По сути. Есть такое понятие как "дребезг контактов", подробно описано везде: дядя гугл дает полный комплект информации по данной теме. Пока не освоите данный вопрос - дальнейшая работа с кнопками у вас будет вызывать тяжело вылавливаемые глюки. Именно освоите, а не возьмете первый попавшийся рабочий пример.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму