|
|
  |
Микроконтроллеры для начинающих, AVR, PIC, FUJITSU |
|
|
|
Jul 23 2016, 21:14
|
Группа: Новичок
Сообщений: 3
Регистрация: 17-07-16
Пользователь №: 92 585

|
Доброй ночи прошу не пинать только учусь не могу понять как считать логарифм помогите разобраться . #include <util/delay.h> #include "lcd_lib.h" #include <math.h> #include <stdio.h>
// объявляем глобальные переменные char lcd_buffer[16]; float val;
int main() { LCDinit(); while(1) {
val=log10(5); sprintf(lcd_buffer, "otvet%i", val); LCDclr(); LCDGotoXY(0,0); LCDstring(lcd_buffer, 16); _delay_ms(300); } }
|
|
|
|
|
Jul 29 2016, 21:40
|
Группа: Новичок
Сообщений: 3
Регистрация: 17-07-16
Пользователь №: 92 585

|
sprintf(lcd_buffer, "otvet%f", val); Даже если так пишу выводит знак вопроса и все , помогите разобраться как вывести корректно .
|
|
|
|
|
Aug 1 2016, 06:25
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Больше самостоятельности! LCDstring("1234567890123456", 16); - работает? sprintf (lcd_buf, "1234567890123456"); LCDstring(lcd_buf, 16); - работает? (кстати, почитайте про sprintf - буфер нужен чуть больше: в конец ещё нолик пишется) int a = 10; sprintf (lcd_buf, "%d", a); LCDstring(lcd_buf, 16); - работает? float b = 12.34; sprintf (lcd_buf, "%f",  ; LCDstring(lcd_buf, 16); - работает? И только потом смотреть на логарифмы... Ну и код этого самого LCDstring() вместе со всем, что оно вызывает, надо смотреть.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 10 2016, 17:43
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата(sovas @ Jul 30 2016, 00:40)  sprintf(lcd_buffer, "otvet%f", val); Даже если так пишу выводит знак вопроса и все , помогите разобраться как вывести корректно . Нужно убедится (включить в настройках компилятора) что sprintf умеет глотать float. Ну и модификатор, что-нибудь вроде: sprintf(lcd_buffer, "otvet% 9.3f", val);
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Mar 10 2017, 09:36
|
Группа: Участник
Сообщений: 14
Регистрация: 29-01-16
Пользователь №: 90 250

|
Здравствуйте. Я только начинаю вникать в AVR.
Есть атмега644, стоит в простенькой самодельной отладочной плате,. Сейчас к атмеге этой подключен только один светодиод, заставляем его моргать. В качестве программатора-отладчика используется JTAG ICE MK2, в качестве среды разработки - Atmel Studio 6.1.
Сделана простейшая программа, которая на секунду включает светодиод, потом секунду держит его отключенным и так далее.
Проблема в том, что временной интервал в 1 секунду выдерживается только когда в проекте частоту F_CPU указываю 1000000. Если указываю 8000000, - то 1 секунда превращается в 8 секунд. Когда ставлю частоту 16000000 - то получается 16 секунд интервал. Для задания временного интервала используется библиотека util/delay.h.
Но ведь эта библиотека должна обеспечивать всегда одинаковую, указанную ей задержку, а не увеличивать её пропорционально частоте МК, верно? В чём тут проблема может быть?
Я залазил в этот h-файл библиотеки delay, ставил там свою частоту нужную, вместо 1000000 - но это ничего не изменило.
_____________________________________________
Вторая проблема - программатор-отладчик мой при внутрисхемной отладке по шагам доходя до строки с упоминанием delay - из текста программы переходит в библиотеку и всё, дальше отладку можно только прервать, обратно из библиотеки он уже не выходит никак. Подскажиет что я делаю не так?
код программы:
#define F_CPU 16000000 #include <avr/io.h> #include <util/delay.h>
void preset() { DDRD = 0b11111111; // 0xFF }
int main(void) { preset(); while(1) {PORTD = 0b11111111; _delay_ms(1000); PORTD = 0b00000000; _delay_ms(1000); } }
|
|
|
|
|
Mar 10 2017, 10:22
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Частота задается программированием фьюзов В #define F_CPU 16000000 ваша задача поместить РЕАЛЬНОЕ значение частьты. Сейчас ваша мега работает на частоте 1МГц и поэтому задержка сходится только когда вы не врете компилятору и делаете F_CPU 1000000 Цитата Я залазил в этот h-файл библиотеки delay, Никогда не лазьте в библиотеки и ничего там не правьте! Программировать фьюзы тут
При неправильной установке тактирования контроллер перестанет выходить на связь с программтором. Будьте осторожны!(восстановить потом можно, но это потребует дополнительного шаманства с аппаратной частью, что для новичка может быть сложно)
--------------------
The truth is out there...
|
|
|
|
|
Mar 14 2017, 02:35
|
Группа: Участник
Сообщений: 14
Регистрация: 29-01-16
Пользователь №: 90 250

|
Цитата(sigmaN @ Mar 10 2017, 17:22)  Частота задается программированием фьюзов В #define F_CPU 16000000 ваша задача поместить РЕАЛЬНОЕ значение частьты. Сейчас ваша мега работает на частоте 1МГц и поэтому задержка сходится только когда вы не врете компилятору и делаете F_CPU 1000000 Спасибо! Всё кратко, чётко и ясно. А то сколько смотрел видео по AVR, сколько статей находил - нигде эту, казалось бы, простую инфу, не встречал: все сразу учат как мигать светодиодом, будто это основное, что нужно уметь в работе с МК) Цитата(sigmaN @ Mar 10 2017, 17:22)  Программировать фьюзы тут
При неправильной установке тактирования контроллер перестанет выходить на связь с программтором. Будьте осторожны!(восстановить потом можно, но это потребует дополнительного шаманства с аппаратной частью, что для новичка может быть сложно) Да, я находил это окно. На Вашем скриншоте всё подробно описано, а в моей студии 6.1 в строке SUT_CKSEL сейчас написано "INTRCOSC_6CK_65MS". Я так понимаю что чтобы использовать собственный RC, нужно чтобы это волшебное слово начиналось с букв "INT", - таких строк, начинающихся с "INT", всего в списке 6, и частота указана только в трёх из них, и везде одинаковая, - 128 килогерц. Как при этом выставить свою частоту - непонятно. Разве что без Atmel Studio 6.1, используя сторонний программатор для этого. Цитата(Lagman @ Mar 10 2017, 17:25)  Да, я был в этой теме, делал всё, как там, но результата не было, т.к. не в курсе был что нужно корректировать фьюзы для смены частоты.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|