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

Сделал Первую Программу Tiny2313 Покритикуйте


Мозголом

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

прога на тиньке 2313 пока еще не компилировал выкладываю код

#include <TINY2313.h>

#include <delay.h>

void main(void) {DDRB.4=0xFF;

DDRB.3=0xFF;

DDRB.2=0xFF;

DDRB.1=0xFF;

DDRB.0=0x00;

if (PINB.0) {PORTB.4=0xFF;

delay_ms(2000);

PORTB.4=0x00;

PORTB.3=0xFF;

delay_ms(2000);

PORTB.3=0x00;

PORTB.2=0xFF;

delay_ms(2000);

PORTB.2=0x00;

PORTB.1=0xFF;

delay_ms(2000)}

укажите пожалуйста на мои ошибки недочеты и т.д. прога мигания 4 светодиодов по нажатию и держанию кнопки написана в CVAVR заранее благодарен

МОЗГОЛОМЫ - НАСИЛИЕ НАД НАУКОЙ

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

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

Я в этом не силён но нужно пробовать начинать отвечать)Так что дорогие Гуру если я говорю нге правильно то мне самому будет интерестно узнать как правильно!

Это ты типа хочеш чтоб на портах "B"кромеме "DDRB.0=0x00;" в начале была лог 1 и светодиоды светились?

Честно говоря мне это не поянтно if (PINB.0) Если пин B0.истина тоесть 1 походу то будет выполняться тот код.тогда после if нужно писать else{}, или задавать такое условие if(PINB.0==0){},а вообще зачем задавать условие если "DDRB.0=0x00;"Всё время будет в этом состоянии!Ты же туда кнопку не повесил к примеру.Дальше все норм как мне кажется.

Да и ещё как ты ставиш св.диоды?

Если не правильно ответил не обижайся,а вообще советую на практике пробовать такие штуки.

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

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

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

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

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

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

DDRB.4=0xFF; сведо диод

DDRB.3=0xFF; сведо диод

DDRB.2=0xFF; сведо диод

DDRB.1=0xFF; сведо диод

DDRB.0=0x00; кнопка

нужно закрыть пограму }

if pinb не то

нужно типа if (pinb.0=0) ну примерно :blink:

а по схеме pinb0 => кнопка => резистор => минус (gnd)

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

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

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

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

нужно типа if (pinb.0=0) ну примерно :blink:

Но вот так if (pinb.0==0) :rolleyes:

Так как pinb.0=0 будет означать пину B присвоить значение 0,а if (pinb.0==0) если пин B равен нулю.Ну да и не забудь всё позакрвать ты тут delay_ms(2000) пропустил знак ";"

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

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

как записать сразу в порты например RB сразу все биты? можно так сделать: DDRB=0x10 и чтоб лог.1 была на DDRB.2? если не так, то как правильно?

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

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

переводи в шестнадцатиричное и потом расстявляё с права на лево, по пинам. Ну например число 255 в шестнадцатиричной форме 11111111 то бишь на всех пинах будет 1.

Для аписи всех пинов лог 1. PORTB=0xFF;

а для записи лог. 0 надо PORTB=0x00;

По коду первогопоста:

#include <TINY2313.h>

#include <delay.h>

void main(void) {

DDRB.4=0xFF;

DDRB.3=0xFF;

DDRB.2=0xFF;

DDRB.1=0xFF;

DDRB.0=0x00;

nach:

while (PINB.0) {

PORTB.4=0xFF;

delay_ms(2000);

PORTB.4=0x00;

PORTB.3=0xFF;

delay_ms(2000);

PORTB.3=0x00;

PORTB.2=0xFF;

delay_ms(2000);

PORTB.2=0x00;

PORTB.1=0xFF;

delay_ms(2000); //Не забывай про знак ";"

}

goto nach; //если кнопка не нажата, то пойдём заного проверять.

}//конец главной программы

Я был механик, я есть механик, я буду механик

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

Чет я не понимаю... Когда мы пишем DDRB.2, то влиять мы можем только на ОДИН пин порта В. Либо сделаем его входом (0), либо выходом (1). Какой смысл присваивать одному (!) биту регистра 16-и разрядное число (DDRB.2=0xFF)? Пусть даже компилятор сам запишет младший разряд. В дальнейшем, подобные записи могут привести к трудноуловимым глюкам...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Согласен с Goodefine. Сам хотел это сказать, но т.к. Си не знаю, постеснялся...

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

qqa (пост 6), применение оператора GOTO в Си считается признаком плохого тона.. Может лучше сразу стараться его избегать?..

А вот этот кусок

DDRB.4=0xFF;

DDRB.3=0xFF;

DDRB.2=0xFF;

DDRB.1=0xFF;

DDRB.0=0x00;

короче так записать

DDRB=0x1E;

или так

DDRB=0b00011110;

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

ой прикольно то как)))) и писанины меньше)))) а вот если мигание светодиодами я напишу 2 проги в одну сторону мигать и в другую то какой будет код ну в плане как он будет осуществляться с кнопкой ведь в процессе мигания прога должна каждый раз этот порт опросить!!!

МОЗГОЛОМЫ - НАСИЛИЕ НАД НАУКОЙ

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

Я так думаю, сначала добейся, что бы заработало хотя бы то, что уже ты написал. И только потом усложняй/добавляй/опртимизируй и т.д.

А вообще твоя програмка с самого начала как-то "в лоб" сделана..

Бегущие светики лучше сделать по-другому.

1 вариант. Сдвигать влево или вправо переменную с одним включенным битом (например 0b00000001) и выводить её в порт.

2 вариант. Создать массив из 4 байт М(0b00000001, 0b00000010, 0b00000100, 0b00001000). Созать переменную-указатель n. Делаешь n+1 (вперед) или n-1 (назад), извлекаешь из массива M(n) и выводишь в порт. Ну и предусмотреть границы (чтобы 0<n<3).

Это примерно на словах, реализацию этого в Си не скажу - не знаю.

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

ой прикольно то как)))) и писанины меньше))))

Зацени, тут есчо меньше!))

#include <TINY2313.h>

#include <delay.h>

int i = 0;

void main(void) {

DDRB = 0x1E;

while (1) {

if (PINB.0)

for (i = 0; i < 4; ++i) {

PORTB = 1<<i;

delay_ms(2000);

PORTB = 0x00;

}}}

я бы кнопку на порт A повесил, и зделал бы так if (PORTA == 0x01)

Изменено пользователем DJ Димон

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

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

Только в Tiny2313 нету порта А :lol: Точнее есть, но только два пина (0 и 1), и то, совмещенные с выходами для кварца.

А вообще текст по-идее нормальный. Стандартный, можно сказать. Слегка похоже на мой 1-ый вариант.

Зато вариант с массивом намного гибче. Можно прописать в него и бегущий 1, и бегущий 0, и ещё чего-нить бегущее...

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

В двоичной?

да в двоичной. ошибся чуток :)

Goodefine Я говорил не про DDRB (он отвечает за настройку вывода, вход или выход) а про PORTB

И записав туда 255 мы запишем в порт В 11111111 то бишь на всех выходах установим лог.1.

qqa (пост 6), применение оператора GOTO в Си считается признаком плохого тона.. Может лучше сразу стараться его избегать?..

Можно заменить вот это:

nach:

код....

goto nach;

на while(1){

код...

}

но это применимо в данном случае, иногда без оператора goto ту обойтись.....

Я был механик, я есть механик, я буду механик

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

Для того чтобы установить пин, например порт DDRB 7й разряд:

DDRB.7 = 1;

я бы кнопку на порт A повесил, и зделал бы так if (PORTA == 0x01)

А я бы сделал так:

if (PINA.0)
...

Так меньше операций и писанины;)

Какой смысл присваивать одному (!) биту регистра 16-и разрядное число (DDRB.2=0xFF)?

Может таки 8и разрядное?:)

применение оператора GOTO в Си считается признаком плохого тона

+1

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

ну люди ну помогите пожалста просто меня в больницу ложат компа не будет будет только кпк и мозг - а еще будет время для раздумий - вот я напишу программу мигания верней 2. сама прошивка должна действовать таким образом что нажмешь на кнопку ну мгновенно заработает 1 прога нажмешь еще раз - другая нажмешь 3 раз - опять первая и т.д.

МОЗГОЛОМЫ - НАСИЛИЕ НАД НАУКОЙ

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

int a = 0;
void main(void) {


while (1) {

if (PINB.0) {
delay_ms(50);
if (PINB.0) 
	if (a == 0) a = 1; else a = 0;	
}

if (a == 0) {
//-код первой функции
}
if (a == 1) {
//-код второй функции
}	
}}

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

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

кстати, задержка там стоит 50мс delay_ms(50); на антидребезг контактов, если будет сильно тормозить можно попробовать уменьшить до 25-30мс

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

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

  • 2 недели спустя...

снова возвращаюсь к теме...

хочу прошить программатором ISP 5 проводков (это на ком порт)

вопрос - можно ли мне купить удлинитель сом порта???? а еще у меня нет ком порта а есть лпт - у меня есть его переходник (лпт - ком) можно ли мне его использовать?

какой прогой залить прошивку????

МОЗГОЛОМЫ - НАСИЛИЕ НАД НАУКОЙ

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

ну раз есть ЛПТ то используй 5 проводков для ЛПТ порта, и всё....

Вот тут есть и схема, и софт http://eldigi.ru/site/programmators/2.php

Я был механик, я есть механик, я буду механик

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

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

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

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

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

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

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

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

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

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

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

    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...