Перейти к содержанию

Примеры Простых Проектов (Без Написания Кода).


Lihouzov

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

Хочу представить простые проекты, при создании которых не требуется писать код.

1. Буду пользоваться программой: http://horizontautom...ex.php?id=setup

2. Примеры проектов буду дублировать здесь: http://horizontautomatics.ru/Examples

3. Если у вас есть идея простого проекта, пишите.

Проект "Задержка свечения светодиода". При нажатии на кнопку загорается светодиод, через определенное время тухнет.

Схема:

avr_wait_1.jpg

Конфигурация:

avr_wait_2.jpg

Сборка проекта:

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

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

что значит не надо писАть код??? то что вы графически нарисовали все равно в код преобразуется программой

Не знаеш как? Спроси у Google'а !!!

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

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

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

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

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

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

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

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

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

Я, чесно сказать, даже не знаю много ли единомыщлеников вы найдете, судя по веткам из форума все хотят овладеть именно языками програмирования, попробуйте написать вот в эту ветку

http://forum.cxem.ne...howtopic=127708

или сюда

http://forum.cxem.ne...howtopic=145340

:D :D :D извините, даже не заметил что по первой ссылке ваша тема))

да что же это такой и про сфетофор тоже ваша тема)))

я в растеряности

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

Не знаеш как? Спроси у Google'а !!!

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

собсна...нахрена они нужны эти простые проекты??

какой от них толк?

Даже учиться то смысла...в графическом виде, мало....

Что то не работает? А питание подключил?

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

Лучше бы что-нибудь более оригинальное приводили в пример, чем мигалки диодами. Хотя бы традиционные часы.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Порт тоже вряд ли сгорит, скорее диод.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

личное мое мнение, всяких мигалоу часов и таймеров с температурными фигнюшками полным полно на всех нормальных ресурсах, давайте что нибудь новое придумаем

эти мигалки уже никому не нужны имхо

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

Цель таких примеров - не применение на практике а сравнение с традиционными средствами разработки и тут в неоригинальности ничего плохого нет.

Кстати, на счет примера ТСа, вот вариант на Си размером 146 байт:

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

#define TIME 10 //задержка (сек)

void delay_s(unsigned int time){
while(time--)_delay_ms(1000);
}

int main(){
DDRB=(1<<PB0); //настройка PB0 на выход
PORTB=(1<<PB0 | 1<<PB1);//настройка PB1 на вход с подтяжкой, PB0 - на лог.1

while(1){ //бесконечный цикл, чтобы можно было нажимать на кнопку не один раз
 while((PINB & (1<<PB1)))_delay_ms(100); //ждем, пока кнопка не будет нажата
//задержка - какое-никакое подавление дребезга, хотя и занимает порядочно флеша.
 while(!(PINB & (1<<PB1)))_delay_ms(100); //ждем, пока кнопка не будет отпущена
 PORTB &=~(1<<PB0); //включаем диод (подачей лог.0)
 delay_s(TIME); //ждем TIME секунд
 PORTB |= (1<<PB0); //выключаем диод (подачей лог.1)
}
return 0;
}

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Пример проекта "Управления нагрузкой по времени / постоянно".

Идею проекта взял отсюда: http://forum.cxem.ne...howtopic=147338

Здравствуйте, необходимо устройство которое при нажатии на кнопку включало бы нагрузку на 3 минуты, а при еще одном нажатии во время первого режима ( 3 минуты ) Оставляло бы ее включенной до тех пор пока не нажать кнопку (+ светодиод для контроля этого режима) третий раз.

Схема устройства:

avr_wait2_1.jpg

Программа:

avr_wait2_2.jpg

Создание программы:

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

Цель таких примеров - не применение на практике а сравнение с традиционными средствами разработки и тут в неоригинальности ничего плохого нет.

Кстати, на счет примера ТСа, вот вариант на Си размером 146 байт:

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

#define TIME 10 //задержка (сек)

void delay_s(unsigned int time){
while(time--)_delay_ms(1000);
}

int main(){
DDRB=(1<<PB0); //настройка PB0 на выход
PORTB=(1<<PB0 | 1<<PB1);//настройка PB1 на вход с подтяжкой, PB0 - на лог.1

while(1){ //бесконечный цикл, чтобы можно было нажимать на кнопку не один раз
while((PINB & (1<<PB1)))_delay_ms(100); //ждем, пока кнопка не будет нажата
//задержка - какое-никакое подавление дребезга, хотя и занимает порядочно флеша.
while(!(PINB & (1<<PB1)))_delay_ms(100); //ждем, пока кнопка не будет отпущена
PORTB &=~(1<<PB0); //включаем диод (подачей лог.0)
delay_s(TIME); //ждем TIME секунд
PORTB |= (1<<PB0); //выключаем диод (подачей лог.1)
}
return 0;
}

Код напоминает быдло-код :)

С таким подходом ничего кроме мигания не реализовать в основном цикле.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

Покажите же мастер-класс, гуру.

Но на мой взгляд это простейший код, реализующий заданную функциональность.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Пример проекта "Управления нагрузкой по времени / постоянно".

Идею проекта взял отсюда: http://forum.cxem.ne...howtopic=147338

Программа:

avr_wait2_2.jpg

Подобное может сотворить только тот, кто хорошо шарит в логике и в цифровой электронике.

А те, кто хорошо в этом шарит, ИМХО, с лёгкостью могут освоить программирование, если уже не освоили.

Код напоминает быдло-код :)

С таким подходом ничего кроме мигания не реализовать в основном цикле.

Задача выполнена. Что ещё нужно ? :)

Ты (да и я тоже) не представляешь, во что разворачиваются созданные той программой проекты :) Подобные "быдло-коды" просто идеальны рядом с ними :)

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

Покажите же мастер-класс, гуру.

Но на мой взгляд это простейший код, реализующий заданную функциональность.

Я не гуру, но писать программы нравится. Я-бы сделал немного иначе , что дало бы возможным выполнять в основном цикле еще "что то" в будущем.

Например так:

#include <avr/io.h>
#include <util/delay.h>
#define TIME 10 //задержка (сек)
void delay_s(unsigned int time){
while(time--)_delay_ms(1000);
}
int main(){
DDRB=(1<<PB0); //настройка PB0 на выход
PORTB=(1<<PB0 | 1<<PB1);//настройка PB1 на вход с подтяжкой, PB0 - на лог.1
while(1){ //бесконечный цикл, чтобы можно было нажимать на кнопку не один раз

if(!(PINB & (1<<PB1)))
{
_delay_ms(100); //ждем, пока кнопка не будет нажата
//задержка - какое-никакое подавление дребезга, хотя и занимает порядочно флеша.
if(!(PINB & (1<<PB1)))
{
_delay_ms(100); //ждем, пока кнопка не будет отпущена
PORTB &=~(1<<PB0); //включаем диод (подачей лог.0)
delay_s(TIME); //ждем TIME секунд
PORTB |= (1<<PB0); //выключаем диод (подачей лог.1)
}
}
}
return 0;
}

Но чтобы что то выполнять в будущем быстро - надо еще модифицировать блок:

PORTB &=~(1<<PB0); //включаем диод (подачей лог.0)
delay_s(TIME); //ждем TIME секунд
PORTB |= (1<<PB0); //выключаем диод (подачей лог.1)

К примеру код можно модифицировать так:

#include <avr/io.h>
#include <util/delay.h>
#define TIME 10 //задержка (сек)
volatile unsigned long int timer=0;
int main(){
DDRB=(1<<PB0); //настройка PB0 на выход
PORTB=(1<<PB0 | 1<<PB1);//настройка PB1 на вход с подтяжкой, PB0 - на лог.1
while(1){ //бесконечный цикл, чтобы можно было нажимать на кнопку не один раз
if(!(PINB & (1<<PB1)))
{
timer=0;
}
if(timer>TIME*10)
{
PORTB |= (1<<PB0); //выключаем диод (подачей лог.1)
}
else
{
PORTB &=~(1<<PB0); //включаем диод (подачей лог.0)
}
if(timer<(TIME*10+3))timer++;
_delay_ms(100);
}
return 0;
}

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Если уж реализовывать "по-человечески", стоит выделить хотя бы один аппаратный таймер для отсчета времени..

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

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

Таймеры достаточно универсальны, но, при желании можно обкрутить платформо-зависимую часть #ifdef'ами и прочими макросами. Но кому придет в голову хранить такой простой код с целью переноса на другой контроллер, представляю с трудом.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Спасибо всем за проявленный интерес.

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

А если в проекте необходимо 15 таймеров? Какая либо схема автоматики.

Пример проекта "Индикатор уровня".

Данный проект построен на микроконтроллере ATtiny13a, данный контроллер управляет линейным индикатором.

Упрощенная схема устройства:

avr_indc1_1.jpg

Программа проекта:

avr_indc1_2.jpg

Создание проекта:

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

А если в проекте необходимо 15 таймеров? Какая либо схема автоматики.

Создать прерывание по переполнению таймера нужное количество раз в секунду, и в этом прерывании делать что надо .

К примеру, можно управлять 15 выходами , или завести 15 программных счетчиков и тоже делать что надо :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

А если в проекте необходимо 15 таймеров? Какая либо схема автоматики.

Как-то так (обработку переполнения не делал, это всего лишь принцип действия)

volatile unsigned int time=0;
ISR(TIMER_vect){
time++;
}
int main(){
unsigned int t1=0,t2=0;
...
while(1){
 if(time>t1){t1=time+100; /*...*/} //вызывается раз в 100 тактов таймера
 if(time>t2){t2=time+200; /*...*/} //вызывается раз в 200 тактов таймера
}
return 0;
}

Что насчет классического устройства на контроллере - часов? Вот моя версия, написанная где-то за час, с учетом поисков настроек в документации.

post-58864-0-01225300-1424972978_thumb.jpg

firmware.txt

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

  • 2 месяца спустя...

Возникла необходимость в создании генератора для драйвера шагового двигателя.

Входными параметрами для генератора являются:

1. направление вращения. (логический сигнал)

2. задающий скорость вращения, генератор (1..200 Гц)

За основу схемы возьму ATtiny13a. Микроконтроллер будет формировать сигналы управления, в зависимости от уровня сигнала на его аналоговом входе.

0 в - вращается с максимальной скоростью вправо;

2,5 в - двигатель стоит:

5 в - вращается с максимальной скоростью влево;

Для реализации данной логики, я добавил новый блок, управляемый генератор:

http://horizontautomatics.ru/FBD/index.php?help=timer_BLINK_upr

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

1. направление вращения. (логический сигнал)

2. задающий скорость вращения, генератор (1..200 Гц)

И тут, сразу же :
в зависимости от уровня сигнала на его аналоговом входе.
Это как понять ? :)
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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