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

Видеокурс по AVR-микроконтроллерам для начинающих


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

Как мы уже выяснили ранее - рассуждения верны однако не имеют отношения к работе с либой ЛЦД экрана:)

Это уже тонкости работы со строками в Си :)

коплю на мечту - Днепр К750

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

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

Судя по вызываемой функции Lcd_prints, она выводит именно строку, определяя её конец по нулевому байту. Т.к. размер в неё не передаётся.

И посылать в неё массив символов без нулевого байта в конце - первый путь к глюку.

Как уже выше написали, достаточно не писать явно размер, компилятор сам его определит. Причём он сам подставит нолик в конце.

И слова:

не имеют отношения к работе с либой ЛЦД экрана
- заблуждение. Как раз, отношение имеют и самые прямые. Либа работает именно со строками !
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Они разве оставляют ноль в начале? Мне казалось, это просто преобразование числа в строку. То есть itoa(1)="1\0", где \0 - код конца строки (не перевод строки, как \n). А sprintf(1)="01\0", "001\0", "0001\0" и т.д. в зависимости от формата. Вызов функций я намерено написал схематично, пусть ученики самостоятельно поизучают.

Я не могу разобраться в этом. Можно пример кода??

Вот отрывки из моего кода:

unsigned char s = 0;

unsigned char m = 0;

unsigned char h = 0;

{

s++;

if(s>59)

{

s=0;

m++;

}

if(m>59)

{

m=0;

h++;

}

if(h>23)

h=0;

TCNT1 = 0; //обнуляем таймер

}

Lcd_clear();

Lcd_printf(4,2,FONT_1X,s, 0);

Lcd_printf(2,2,FONT_1X,m, 0);

Lcd_printf(0,2,FONT_1X,h, 0);

Lcd_update();

_delay_ms(200);

}

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

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

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

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

В чём КОНКРЕТНО не можете разобраться ? Что КОНКРЕТНО не понятно ? Пример какого кода нужно ? Что этот код должен делать и куда Вы его собрались вставлять ?

Что блин за вопросы - "мне ничего не понятно, помогите..." ?

ЗЫ: Ну почему постоянно приходится выдавливать из всех информацию ... :wall:

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

Нужно вывести часы на дисплей в формате 00:00. Получается только 0:0, 1:12, 1:2 итп. Не знаю как вывести число с 0 в начале. Я уже спрашивал на предыдущей странице...

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

Я уже спрашивал на предыдущей странице...
Ну Вам на предыдущей же странице и ответили:

Курим формат входа sprintf, это самое простое. Более правильное - написать свой преобразователь числа в строку, но тут надо прикладывать мозг.

Вполне нормальный ответ, заставляющий хоть немного полазить в гугле и подумать....

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

ps

моя так и не дописанная книга по введению в программирование МК лежит уже лет 7...

ps

А Вы книгу пишете там?? Интересно же почитать умных мыслей...

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

Нужно вывести часы на дисплей в формате 00:00. Получается только 0:0, 1:12, 1:2 итп.

Слегка подрихтовал sprintf, чтобы можно было часы выводить. Получается 00:01:02 Память ест! И часы так не делают :bye:

sprintf_00.rar

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

Как будто так сложно написать свой int2str. С ведущим нулем это даже проще, чем без него. Вот лобовой вариант, можно оптимизировать по памяти или по скорости работы.

char res[9];
res[0]=hour/10+'0'; res[1]=hour%10+'0';
res[2]=':';
res[3]=min/10+'0'; res[4]=min%10+'0';
res[5]=':';
res[6]=sec/10+'0'; res[7]=sec%10+'0';
res[8]=0;

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

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

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

Можно все написать :mellow: никто не спорит. Я всего лишь предложил, один из кучи вариантов... :spiteful: Ах да, ну и по практике, Вы же знаете что я могу предложить только несуразную чушь... Ниче не сделаешь :unsure: такой уж я есть.

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

Здравствуйте, почему ацп может выводить 200 независимо от измеряемого напряжения (7 урок)?

post-189232-0-11113200-1429648214_thumb.jpg

post-189232-0-75559100-1429648226_thumb.jpg

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

дисплей сообщает что ваша мега8 имеет статус "груз 200" )

если в МК крутится именно этот код, то должно выводить 1023

В Протеусе жми - Проект - Конфигурация шин питания VCC/VDD выстави Напряжение: 5

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

Можно ли напрямую работать с переменными в eeprom и каким образом? Хочу избавиться от выделения кучи переменных для, казалось бы, временного хранения данных... jmz6jy6r5.gif

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

si4karuk, напрямую с eeprom работать нельзя. Это же не ОЗУ.

Для записи и чтения eeprom, необходимо проводить некие манипуляции, плюс для записи нужно ждать её окончания.

для, казалось бы, временного хранения данных...
ОЗУ уже не хватает чтоли ?
Ссылка на комментарий
Поделиться на другие сайты

Образно говоря - временые. Простые переменные char, а их у меня целая гора. Я подумал, если не пользоваться ими вообще, а сразу работать с данними в самом eeprom&

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

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

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

Тогда уж смотрите в сторону СТМ32 - там режим DMA может опрашивать каналы и сразу писать в память данные и работате на аппаратном уровне

коплю на мечту - Днепр К750

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

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

И ещё. На сколько мне известно, у STM'ов вообще нет eeprom'а. Возможно, я ошибаюсь.

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

Доброго времени суток! Такой вопросик из 8 урока датчик LM335 после 24 градусов вываливается в -571. Что может быть?

код:

int main(void)

{

press();

while(1)

{

Lcd_clear();

Lcd_printf(5,0,FONT_1X,(readadc(0)*0.02935),1);//v

Lcd_printf(5,1,FONT_1X,((readadc(1)*2.56*(3/2.56))/1023),1);//a

Lcd_printf(5,2,FONT_1X,(((readadc(2)*2.56*(3.73/2.56))*100)/1023)-273.15,0);//gr

Lcd_update();

_delay_ms(200);

}

}

post-190464-0-41155200-1429732439_thumb.png

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

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

- правильны ли входные данные? Тупо вывод измеренного значения по UART, на дисплей или в отладчике.

- правильно ли идет вычисление?

- правильно ли организован вывод?

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

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

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

Явно что-то с переполнением переменных из-за их типа. Ибо подобное :

((readadc(2)*2.56*(3.73/2.56))*100)/1023)-273.15

явный костыль, который тяжело отследить.

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

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

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

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

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

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

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

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

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

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

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

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

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