Перейти к содержанию
С Днём Победы! ×

Программа На Си


Рекомендуемые сообщения

Доброго времени суток уважаемые форумчане! Не пинайте слишком сильно. Вот в 37лет решил освоить МК и язык Си .Научился мигать светодиодом ,включать от кнопки .узнал что такое порты и как их конфигуировать.

Хочу написать программу ,чтобы при нажатии кнопки светодиод моргал ровно 5 раз и потом гаснул.При отключении кнопки светодиоды не горят. при вкл.опять моргали бы 5 раз и так бесконечно

Вот прога:

#define F_CPU 1000000UL
#include<avr/io.h>
#include<util/delay.h>

int main(void){

DDRD=0xFF;
DDRC=0x00;
PORTC|=_BV(PC0)

int i;

for(i=1;i<=5;i++)
while(1){
if((PINC&(1<<PD0))==0)
{PORTD=0x00;
_delay_ms(250);
PORTD=0xFF;}
else
  {PORTD=0x00:}
}
}

Но почему то светодиод моргает бесконечно ? Если убираю while(1) то мигает ровно 5 раз но не работает от кнопки Помогите пожалуйста !!!!!

Изменено пользователем Alex
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

код программы вставляйте с тегом [ code ][ /code ] (кнопка "Код" на панели редактора сообщений )

а что должно произойти если кнопку отжали,а СД не успел мигнуть 5 раз? потухнуть или до мигать до пяти?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ты как-то вложенность циклов перепутал.

Лучше начинай делать программу с блок-схемы алгоритма её работы.

Микроконтроллер не останавливается когда дойдет до конца программы - у него такого понятия попросту не существует, и пока не переведешь в спящий режим он будет выполнять команды по очереди... Но что он будет выполнять когда программа закончится? А закончится только заполненная область памяти, а дальше будут сплошные $FFFF, это будет соответствовать какой-то команде и он будет что-то делать пока не вернется снова в "обитаемую" часть программы, но что он за это время сделает - предсказать трудно да и не нужно, просто нельзя допускать такой ситуации, поэтому основная часть программы - это бесконечный цикл.

Внутри цикла, надо проверять нажатие кнопки, и если она НЕ НАЖАТА - переход на начало цикла, ИНАЧЕ выполнить алгоритм мигания 5 раз, ну это уже банальный цикл в 5 итераций.

У тебя кстати еще одна задержка отсутствует. Надо засветить светодиод, подождать, погасить светодиод и СНОВА подождать. иначе, в погашенном состоянии светодиод будет считанные микросекунды.

Если надо, внутри цикла снова делать проверки - если кнопка ОТЖАТА - переход на начало программы, с таким условием схема перестанет мигать.

После 5 миганий крутимся на месте пока кнопка НЕ ОТЖАТА, если она будет нажата в этот момент это приведет к повторному срабатыванию схемы и цикл не закончится никогда. Если же на этот момент кнопка и так будет отжата - программа пойдет дальше и тут же попадет на начало алгоритма ожидая нажатие кнопки.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Alexeyslav, зря распинаешься. Допустим коэффициент восприятия равен Θ. При Θ -> 0, даже при потоке информации равном бесконечности, если помножить на коэффициент восприятия, в данном случае получим стремящимся к 0 целых и столько же десятых.

Поэтому ответ на данный вопрос следует начинать с вопроса: какой бюджет?

Ссылка на комментарий
Поделиться на другие сайты

Не зря. Зря только, что ответ ны этот пост не от топикстартера.

Изменено пользователем marinovsoft
Ссылка на комментарий
Поделиться на другие сайты

код программы вставляйте с тегом [ code ][ /code ] (кнопка "Код" на панели редактора сообщений )

а что должно произойти если кнопку отжали,а СД не успел мигнуть 5 раз? потухнуть или до мигать до пяти?

потухнуть

Ты как-то вложенность циклов перепутал.

Лучше начинай делать программу с блок-схемы алгоритма её работы.

Микроконтроллер не останавливается когда дойдет до конца программы - у него такого понятия попросту не существует, и пока не переведешь в спящий режим он будет выполнять команды по очереди... Но что он будет выполнять когда программа закончится? А закончится только заполненная область памяти, а дальше будут сплошные $FFFF, это будет соответствовать какой-то команде и он будет что-то делать пока не вернется снова в "обитаемую" часть программы, но что он за это время сделает - предсказать трудно да и не нужно, просто нельзя допускать такой ситуации, поэтому основная часть программы - это бесконечный цикл.

Внутри цикла, надо проверять нажатие кнопки, и если она НЕ НАЖАТА - переход на начало цикла, ИНАЧЕ выполнить алгоритм мигания 5 раз, ну это уже банальный цикл в 5 итераций.

У тебя кстати еще одна задержка отсутствует. Надо засветить светодиод, подождать, погасить светодиод и СНОВА подождать. иначе, в погашенном состоянии светодиод будет считанные микросекунды.

Если надо, внутри цикла снова делать проверки - если кнопка ОТЖАТА - переход на начало программы, с таким условием схема перестанет мигать.

После 5 миганий крутимся на месте пока кнопка НЕ ОТЖАТА, если она будет нажата в этот момент это приведет к повторному срабатыванию схемы и цикл не закончится никогда. Если же на этот момент кнопка и так будет отжата - программа пойдет дальше и тут же попадет на начало алгоритма ожидая нажатие кнопки.

как это реализовать программно ? помогите , направте на путь истинный. Очень хочу разобраться !!!!!!!

Ссылка на комментарий
Поделиться на другие сайты

Так я все уже написал, рисуйте блок-схему, а потом по блок-схеме каждый кубик раскрывайте в виде строчек программы. Чего уж тут сложного.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

while(1)
    {
      if((PINC&(1<<PD0))==0)
       {
         inc i++;
         if(i<6)
           {
            PORTD=0x00;
            _delay_ms(250);
            PORTD=0xFF;
            _delay_ms(250);      
            }
          if(i>6) i=6;
       }
     else
       {
        PORTD=0x00;
        i=0; 
       }
    }

это работает в протеусе как надо!Только avr studio не съело inc i++; написал просто i++ все скомпилировалось но с одним предупреждением

Ссылка на комментарий
Поделиться на другие сайты

Я думаю правильней написать "INC i" а "i++" есть не сто иное как синоним, только в отличие от первой записи его можно использовать в выражении.

Переход на определенные метки осуществляется при помощи GOTO, или какой там аналог в Си...

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Есть в си и метки и goto, но применение их крайне нежелательно

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

пример будьте любезны...

есть жалкое подобие в виде break и continue - передача управления на оператор следующий за циклом на один уровень вверх

Изменено пользователем IMXO
Ссылка на комментарий
Поделиться на другие сайты

 while(1)
  {
 	for(int i=0;i<100;i++)
   	{
........
   goto exit;
........
   	}
   }
   exit: printf("Быстрый выход из вложенных циклов");

Но еще раз повторю - использование goto и меток это моветон.

Изменено пользователем IIIytNIK

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @x-revers , благодарю, конечно, но к Вашим ссылкам у меня нет доступа.
    • Пойдёт конечно. Можно "кг", он мягче, только свежий, а не со сгнившей резиной.
    • Значит должен быть. Тот, что указан в даташите
    • Вот пример профессиональной стабильной схемы (достаточно мощной) с сервисного мануала автомобильного усилителя топового усилителя фирмы Audison LRx1.400. О качестве и авторитете этой фирмы надеюсь рассказывать не надо. Запаса прочности и надежности выше крыши. Обратите внимание на включение управления силовыми транзисторами. Выход можно сделать пол любое требуемое напряжение. Сервисный мануал есть в свободном доступе. Удачи.    
    • Предыдущее прошу удалить. Спасибо! С праздником всех! "Вся электроника - наука о контактах" - не знаю кто автор. Собрал в кучу нагрузку и начал над ней издеваться. Подключил всё вот по такой схеме: Вместо выключателя два проводка - чтоб искрило. Синхронизация осциллографа по переднему фронту тока (синий канал), однократный режим и стал снимать картинки: Несколько осциллограмм, в том числе первая и последняя, отображают "правильный" процесс: замкнулись контакты, бросок тока - заряд конденсаторов, затухающие колебания в контуре "последовательная индуктивность + ёмкость после конденсатора", плавное возрастание тока до установленной величины - работа схем подачи напряжения на LM431 и регулировки тока. Но если есть искрение при подключении источника к нагрузке, то благодаря наличию индуктивности могут появиться импульсы тока и напряжения, выходящие за рамки допустимых. Набросал схему в симуляторе Диаграмма 1 - есть индуктивность и конденсаторы. Диаграмма 2 - Индуктивность нулевая. Диаграмма 3 - есть индуктивность нет шунтирующей ёмкости сток-исток. Итого. Индуктивность на входе снижает скорость возрастания тока но приводит к появлению выбросов тока и напряжения. Отсутствие конденсаторов, шунтирующих исток-сток транзисторов может приводить к возбуждению на высокой частоте. Короткие броски тока в момент включения - ток заряда емкостей. Индуктивность на входе лучше не устанавливать. Лучше одеть на провода ферритовые бусинки. Схема регулировки работает отлично. При длительной работе установленный ток стабилен во всём диапазоне. Ну и проверка на прочность. Транзисторы AP60T03 (30V 45A). Ток 4,2А (установленное ограничение), напряжение плавно поднимаю от 4В, подключение так-же искрящими проводками. При напряжении 27В и очередном искрении ток стал нулевым. Что выгорело буду смотреть позже. Поверхностные измерения показали, что один транзистор в обрыве; так же в обрыве два китайских резистора 1Вт 0,33Ом, причём без видимых повреждений. Продолжение будет.
    • Хорошего времени суток всем  .  Конденсаторы на кварц я установил сразу, изначально. Могу конечно сейчас посмотреть осциллографом на генерацию на кварце. Фото : IMG_7653.HEIC IMG_7654.HEIC IMG_7655.HEIC IMG_7656.HEIC Да изначально собирал на контроллере ATmega8  и на ней все заработало сразу . Потом решил проверить на новой  ATmega328р , результата пока нет , выше уже написал.  
    • Может здесь чего найдëте. Вот ещë вариант. А кто-то решил проблему вытащив батарейку биоса.
×
×
  • Создать...