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

Язык СИ для микроконтроллеров


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

как часто бывает что в протеусе прошивка пашет а в реале нет? пример да идеотизма примитивный имеем 1 кнопку 1 светодиод .

if(PINB.0 == 1) PORTB.1 = 1;

нажали кнопку, 1 пришла светодиод загарелся и всё хоть 10 раз её теперь нажимай всё равно будит гореть светодеод и в протеусе именно так, но на практике на макетке, пока удерживаешь 1 на кнопке светодиод горит, стоит подать 0 он потухнет но ведь в коде не слова о том что бы светодиод потух.

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

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

пример да идеотизма примитивный имеем 1 кнопку 1 светодиод .

if(PINB.0 == 1) PORTB.1 = 1;

очередной пример , полного незнания архитектуры МК, не желания читать даташиты и незнания элементарной схемотехники...

объяснять ЫдеотизЫм кода, даже не вижу смысла... здесь это уже сотню раз разжевывали, что просили от МК то и получили... очередное RMW

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

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

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

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

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

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

я просил если на на ножке PINB.0 появится единица то в PORTB.1 падать единицу , где в этой строчке хоть упоминания того что если на PINB.0 0 то и в PORTB.1 он запишет 0...

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

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

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

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

На данном этапе вы сами не понимаете того,что пишете на С-ях. MPASM вам в руки, ну или AVRASM :)

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

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

knopka.rar

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

но на него нет банально времени
Интересно, как Вы собираетесь приобретать знания без учёбы и практики ? Хочу всё знать, но не хочу учиться ? Так не бывает. Люди этот драгоценный опыт накапливают годами. Для программирования МК знать язык - очень мало. Нужно ещё знать архитектуру МК и хорошо владеть знаниями цифровой электроники. Никто Вам этого тут разжовывать не будет.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Не нужно тут давать нам глупых советов. Закройте лучше Вы этот форум, выключите компьютер и идите гайки крутить ключами. Возможно, это у Вас лучше получится делать.

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

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

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

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

Вам следующим же постом дали совет. Вы его проанализировали ? Если проблема не в этом, то хотя бы отвергните с доказательством, а дальше уже будет видно.

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

ах если бы я знал что такое RMW последних поста 4 не было бы, гугл подсказал что нужно поменять порты и вставить немного задержек, да помогло, будьте добры в следующий раз не говорить в три голоса иди учи асемблер и "ты сам не знаешь что пишешь" за один линк на Read Modify Write Problem я был бы уже благодарен и дальше сам нашел дорогу...

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

Foli, вы за сишными конструкциями не видите реальной картины, от этого все проблемы. Не понимаете как в конечном счете ассемблируется ваш код. Если бы вы глянули в дизасме ваш код, то всё сразу было бы видно...

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

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

Продублирую здесь свой вопрос:

Вопрос по С в атмел студио 6 для авр 8-бит

для описания векторов прерываний подключается библиотека avr/interrupt.h, а сама функция обработчика задается как isr(имя вектора). При компиляции ошибок никаких нет, но эта функция не компилируется. Насколько я понял есть 3 варианта описания обработчка: через isr(),interrupt() и signal(). Работает почему то только последний вариант. Что я делаю не так?

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

Решил осваивать МК, но при создании первой же программы наступил на грабли.

Хочу задать моргание светиками по нажатию кнопки, а МК сразу начинает цикл моргания. МК атмега16 вот исходник:

#define F_CPU 1000000UL

#include <avr/io.h> //объявления для всех avr

#include <avr/iom16.h>//объявления atmega 16

#include <util/delay.h>// gfeps

int main() //главная обязательная функция

{

DDRD = 0b11111111; //конфигурируем пины порта D как выходы

DDRA = 0b00000000; //пины А на вход

while(1==1) //бесконечный цикл на выполнение условия пока оно верно

{

if (PORTA == 0b00000000) //пока на выводах А НЛУ

{

PORTD = 0b11111101; //подать напряжение 5В на все пины порта D

_delay_ms(200); //ждем 0.2 сек

PORTD = 0b00000010; //установить на всех пинах порта D 0В

_delay_ms(200); //ждем 0.2 сек

}

} //конец тела бесконечного цикла

} //конец глобальной функции

Пните, пожалуйста в нужном направлении.

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

if (PORTA == 0b00000000) - опрос кнопки ? Она у Вас что, подключена на весь порт ?

Как- то так. Пробовал вариации, ничего не помогает. Изменено пользователем serenbkii
Ссылка на комментарий
Поделиться на другие сайты

Спасибо за помощь. Реализовал задумку вот таким кодом:

#define F_CPU 1000000UL //устанавливаем частоту камня

#include <avr/io.h> //объявления для всех avr

#include <avr/iom16.h>//объявления atmega 16

#include <util/delay.h>// gfeps

int main() //главная обязательная функция

{

DDRD = 0b11111111; //конфигурируем пины порта D как выходы

DDRC = 0b00000000; //конфигурируем пины порта С как входы

while (1 == 1) //бесконечный цикл

{

if (PINC == 0b00000000) //если на всех пинах входа С НЛУ, то:

{

PORTD = 0b00000001; //зажигаем светодиод на D0 пине

_delay_ms(200); //ждем 0,2 сек

PORTD = 0b00000000; // гасим диод на D1 пине

_delay_ms(200); // ждем 0,2 сек

}//конец первого условия функции

if (PINC == 0b00000001) //если на всех пинах входа C НЛУ, а на C0 ВЛУ, то

{

PORTD = 0b00000011; //зажигаем диоды на пинах D1, D0

_delay_ms(200); //ждем 0,2 сек

PORTD = 0b00000000; //гисим диоды на D1 и D0 пинах

_delay_ms(200); //ждем 0,2 сек

}//конец второго условия функции

}//конец функции бесконечного повтора

} //конец глобальной функции

но как мне работать только с одной ногой С0? Неудобно указывать состояние всех ног входа. Нужно управление по одной ноге, дабы можно было независимо от этой функции оперировать другими входами и выходами.

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

обычно делают по маске if(PORTC & (1<<PC0) ==0){/*код*/}, некоторые Си-подобные языки понимают и побитовое обращение PORTC.0 или как-то так, но первое универсальнее.

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

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

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

что значит не компилится, какую ошибку выдает?

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

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

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

#include <avr/io.h>
int main(){ //на void main() компилятор ругается, хотя возвращать значение явно некуда
DDRC=0x00; //конфигурируем на вход
DDRB=0xFF; //конфигурируем на выход
PORTC=(1<<PC0); //конфигурируем PC0 как Hi-Z - вход
while(1){ //бесконечный цикл
 if(PINC & (1<<PC0)==0){ //та самая проверка
  PORTB+=1; //мигать одним битом лень, бедем мигать всем портом сразу, на самом деле не важно
  _delay_ms(1000); //задержка
 }
}
return 0; //это идет в комплекте с int main()
}

Вполне компилируется, проверено avr-gcc 4.7.2. Правильность самой программы проверить не удалось, какая-то фигня с протеусом

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

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

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...