admin

Видеокурс По Avr-Микроконтроллерам Для Начинающих

2 344 сообщения в этой теме

gogaze    4
11 час назад, gogaze сказал:

разобраться с библиотеками 5110.

По ссылке на первой странице их штук шесть и обсуждениях еще есть ссылки . Там была просьба COKPOWEHEU к модераторам что-то заменить, но было ли заменено - я не знаю. В общем, что есть что - разобраться сложно. Вот поэтому и хочется, так сказать, чтобы авторы поставили точку в вопросе по библиотекам для 5110.

LCD_5110_test.rar  От Alex

lcd5110_27.03.2016.tar.gz От COKPOWEHEU

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

Похоже, в функции Lcd_putd() еще ошибка. Править проект целиком лень так что выложу ее реализацию отдельно. Не то чтобы эта функция была нужна, но раз объявил рабочей, придется соответствовать (особо не тестировал, но вроде работает):

#ifndef DISABLE_DOUBLE
/* Имя                   :  Lcd_putd
 * Описание              :  Эта функция предназначена для печати числа с плавающей запятой
 * Аргумент(ы)           :  data -> число
 *                       :  accuracy -> число знаков после запятой
 */
//lcd_put_double - вывод числа с плавающей точкой. Не рекомендуется, потому что медленно
void Lcd_putd(double data, int accuracy ){
  int32_t val = data*pgm_read_float(&exp_data[accuracy]);
  Lcd_putf(val, accuracy);
}
#endif

Модерам: если можно, киньте ссылку с первого поста еще на этот

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

Не отпускают меня от поддержки этой библиотеки, хотя я не раз говорил что она плохо подходит для законченных проектов. Она чисто демонстрационная / отладочная.

Ну, как бы то ни было, перевел свою версию на github. Но опыта работы с этим сервисом немного так что любые советы приму к сведению.

 

Добавлено в первый пост. Alex.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
18 минут назад, COKPOWEHEU сказал:

Не отпускают меня от поддержки этой библиотеки

Ну так разобраться же хочется! Хочу показать результаты своих опытов. Много я у Вас крови свернул, пока сделал то, что мне понравилось! С другой стороны, как бы я разобрался со всеми этими умножениями, делениями на 100, 1000, округлениями результатов? Да без подробной инструкции? Да без примеров? В общем, результатом полученным доволен. Теперь осталось переделать свой показометр для блока питания - зарядного устройства под Вашу библиотеку со всеми счетчиками ампер-часов, опроса портов АЦП по прерываниям и т.д. 

Результаты на скриншоте, подробности в файле в прикрепленном архиве.
В конце файла объем используемой памяти. Если добавить информационную заставку - добавится еще байт 500.
Результатом (тьфу тьфу тьфу, чтоб не сглазить) доволен. Осталось проверить кое-какие мелочи.

Результат!.jpg

результат.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

COKPOWEHEU    263
4 минуты назад, gogaze сказал:

С другой стороны, как бы я разобрался со всеми этими умножениями, делениями на 100, 1000, округлениями результатов?

Почитали бы про арифметику с фиксированной точкой - разобрались бы самостоятельно.

6 минут назад, gogaze сказал:

Да без подробной инструкции? Да без примеров?

Примеры там есть! ...вроде...

6 минут назад, gogaze сказал:

В конце файла объем используемой памяти. Если добавить информационную заставку - добавится еще байт 500.

А я сразу говорил что эта библиотека занимает много места. Впрочем, если надо можете отключить полную таблицу символов и функции отрисовки графики (в последней версии добавил #define DISABLE_GRAPHICS). Еще, вроде, CONTINIOUS версия занимает поменьше места. И работа с float/double в основной программе тоже довольно тяжелая, даже если упоминается всего 1 раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
23 минуты назад, COKPOWEHEU сказал:

Примеры там есть! ...вроде...

Ну для новичков, типа меня, этого недостаточно. Сколько я Вам надоедал, пока кое-что просек? А кто-то попробовал, не получилось - бросил!

Думаю на досуге сделать типа подробной инструкции для начинающих (если Вы не против)?

26 минут назад, COKPOWEHEU сказал:

А я сразу говорил что эта библиотека занимает много места.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263
4 часа назад, gogaze сказал:

Ну для новичков, типа меня, этого недостаточно.

Потому что надо понимать что делаешь а не тыкаться наобум. Много раз уже обсуждался порядок изучения контроллеров: асм->Си. Мигалки -> таймеры -> прерывания -> RTOS. Это грубое приближение, конечно

4 часа назад, gogaze сказал:

Думаю на досуге сделать типа подробной инструкции для начинающих (если Вы не против)?

главное не допустите ошибок kobzar'а

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
40 минут назад, COKPOWEHEU сказал:

Потому что надо понимать что делаешь а не тыкаться наобум. Много раз уже обсуждался порядок изучения контроллеров: асм->Си. Мигалки -> таймеры -> прерывания -> RTOS. Это грубое приближение, конечно

Это справедливо, если есть желание стать профессиональным программистом, позволяет возраст и время - согласен!  А если же нужно какое-то  одно, конкретное устройство или направление, типа вольтметры-амперметры и т.п.... А жизни осталось???

40 минут назад, COKPOWEHEU сказал:

главное не допустите ошибок kobzar'а

Каких именно? Я же для Вашей библиотеки собираюсь шпаргалку делать!

Ладно, сделаю для себя, а там видно будет.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263
3 часа назад, gogaze сказал:

А жизни осталось???

пары месяцев в свободное время не найдется? Все равно же больше потеряете на методе проб и ошибок

3 часа назад, gogaze сказал:

Каких именно? Я же для Вашей библиотеки собираюсь шпаргалку делать!

Ладно, сделаю для себя, а та

_мне_ шпаргалки для этой библиотеки не нужны, так что пишете вы для себя и других новичков. Ошибки, похоже, это ориентация на "как сделать" вместо "как устроено". То есть инструкция по повторению устройства вместо объяснения алгоритмов. Впрочем, зная вас... мешать пробовать не буду в любом случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
9 часов назад, COKPOWEHEU сказал:

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

От чистого сердца хотел избавить, в первую очередь Вас, от лишних вопросов тех, у кого они возникнут (типа меня). Ну если Вам нравится объяснять каждому.... Приношу свои извинения!

9 часов назад, COKPOWEHEU сказал:

"как сделать" вместо "как устроено". То есть инструкция по повторению устройства вместо объяснения алгоритмов

У меня на этот счет свое суждение. Если человек просит меня научить спаять два проводка - я возьму паяльник, припой, флюс и покажу. По ходу дела расскажу, зачем все это надо. Не буду посылать изучать физику и химию. А когда ему потребуется запаять дырку в оцинкованном ведре или еще что-то необычное - тогда он вынужден будет изучать и химию (чтобы свой флюс сделать) и физику (чтобы мощность паяльника подобрать) и теплотехнику. Утрировано, но смысл понятен. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

Я не отговариваю от шпаргалки, видеоурока или чего-то подобного. Считаете нужным и полезным - пожалуйста. Там более что полезным лично для вас это абсолютно точно будет: пока будете объяснять другим, сами лучше разберетесь, а может и ошибки в библиотеке найдете, тоже неплохо.

Важно чтобы не было существенных ошибок. Ложная информация при обучении ищи хуже отсутствия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
1 час назад, COKPOWEHEU сказал:

Ложная информация при обучении ищи хуже отсутствия.

Из вышесказанного я понял, что Вы все-таки посмотрели уроки и нашли эту "Ложную информацию"? Если так, то хотя бы вкратце расскажите! Или у Вас просто какая-то личная неприязнь к автору уроков?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

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

Если собираетесь расписывать применение именно доработанной версии библиотеки, стоит разобраться как минимум со следующими моментами:

- зачем сделан выбор DIRECT / CONTINIOUS, в какой ситуации применять то, а в какой - другое

- почему по умолчанию отключена работа с числами с плавающей точкой DISABLE_DOUBLE

- что из себя представляют числа с фиксированной точкой, как с ними работать

- как выбирать тип данных

Ну, для начала хватит. Это самые базовые вопросы, без прерываний и прочих особенностей контроллеров.

Вы уверены что сможете про это рассказать так чтобы новички поняли и без искажения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Berg    18

Немного прерву вашу филосовскую беседу :)

Посколько в этой теме было ознакомление с дисплеем nokia5110 поэтому размещу здесь.

Понадобилось мне для наглядности пронумеровать шкалу графика атмосферного давления мелкими цифрами (3 на 5 пикселов). Попиксельно вырисовывать эта затея безумна. Поэтому все это дело автоматизировал. Может пригодится кому.

Закодировал цифры:

static const uint8_t small_number [][5] PROGMEM= // (3 на 5 пикселов)
{
	{7,5,5,5,7}, // 0
	{1,3,1,1,1}, // 1
	{7,1,7,4,7}, // 2
	{7,1,7,1,7}, // 3
	{5,5,7,1,1}, // 4
	{7,4,7,1,7}, // 5
	{7,4,7,5,7}, // 6
	{7,1,1,1,1}, // 7
	{7,5,7,5,7}, // 8
	{7,5,7,1,7} // 9
};

замутил функцию:

void Lcd_small_number(uint8_t x, uint8_t y, long number){ // x,y - координата верхнего левого пикселя числа; number - целое число
	if(number<0){							// если отрицательное число
		number*=-1;							// переведем в положительное
		Lcd_line(x,y+2,x+2,y+2,PIXEL_ON);	// рисуем знак "минус"
		x+=4;								// переместимся на следующее знакоместо
	}
	long temp=number;
	long n1=1;								// коэффициент разрядности
	uint8_t n=0;							// кол-во цифр в числе
	if(number==0){temp=1; n1=10;}
	while(temp){temp/=10; n++; n1*=10;}
	
	for(uint8_t l=0; l<n; l++){
		for(uint8_t i=0; i<5; i++){
			for(uint8_t j=0; j<3; j++){
				Lcd_pixel(x+j,y+i,PIXEL_OFF); // чистим знакоместо
				if(pgm_read_byte(&(small_number[((long)number%n1)/(n1/10)][i])) & (1<<(2-j))){Lcd_pixel(x+j,y+i,PIXEL_ON);}
			}
		}
		x+=4; n1/=10;
	}
}

как пример:

for(uint8_t i=0; i<50; i+=10){Lcd_small_number(53,3+i,760-i);}

uint8_t wrem=152;
long wrem1=-715869;

Lcd_small_number(1,1,wrem);
Lcd_small_number(1,7,wrem1);

не забываем про #include <avr/pgmspace.h>

результат:

small_number.jpg.9963f2666d4d7e98a47e2bc6c634b4f2.jpg

 

small_number.bmp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

@Berg , интересная идея и похвально что сами написали модуль. Если не против, позже добавлю вашу идею в библиотеку, вдруг пригодится кому. Правда, скорее всего, со своей реализацией. Разумеется, не гарантирую что это будет скоро :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Berg    18
1 час назад, COKPOWEHEU сказал:

интересная идея

Согласен. Изначально функция была проще. Ту же шкалу можно было нумеровать статичными цифрами. Потом усовершенствовал.

В моем регионе среднее ат. давление 740PmmHg, у мирового океана к примеру 760, в нагорье >700, а теперь мы можем программно вычислить среднее значение и согласно ему автоматически перенумеруется шкала.

А еще иногда бывает на экране не хватает места, а хочется знать некую техническую информацию хотя бы мизерным шрифтом.

1 час назад, COKPOWEHEU сказал:

Правда, скорее всего, со своей реализацией.

Это правильно. А то когда написал код и сразу вспомнились слова Alex-а, - "бедный микроконтроллер" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

Добавил шрифт 3х5, выбирается по LcdSize(0) и работает со стандартными функциями вывода (lcd_puts и т.п.) ну там по образцу из main'а разобраться несложно. Можете тестировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
2 часа назад, COKPOWEHEU сказал:

Можете тестировать

Ну можем тестировать! А ссылка то где?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

В первом посте ссылка на github. Она там для того и расположена чтобы не приходилось дергать модеров ради каждого изменения, ну и изменения туда добавлять должно быть проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
57 минут назад, COKPOWEHEU сказал:

В первом посте ссылка на github.

О как!!! Тогда ясно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
В 25.02.2018 в 19:57, COKPOWEHEU сказал:

В первом посте ссылка на github.

Я не совсем понял этот сервис. При размещении новой версии предыдущие затираются? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263

как-то можно посмотреть историю изменений, что-то откатить. Но самому делать такое не приходилось. Гуглите, экспериментируйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4

@Berg  @COKPOWEHEU   Попробовал новы шрифт, очень понравилось!!! В железе, наверное, еще красивей будет.Спасибо, очень пригодится!

Код того, что я выводил.

Скрытый текст

/*
 * n5110-master.c
 *
 * Created: 28.02.2018 13:30:23
 * Author : ADMIN
 */ 
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "n5110.h"

int main(void)
{
    Lcd_init();
    Lcd_clear();
    
    LcdGotoXY(0,1);
    LcdSize(2);
    Lcd_puts("Очень");
    
    LcdGotoXY(0,2);
    LcdSize(1);
    Lcd_puts("Прикольный");
    
    LcdGotoXY(5,3);
    LcdSize(1);
    Lcd_puts("шрифт!!!");
    
    LcdGotoXY(0,4);
    LcdSize(0);
    Lcd3x5shift(1); Lcd_puts("1234567890");

    LcdGotoXY(7,5);
    LcdSize(0);
    Lcd3x5shift(2); Lcd_puts("1234567890");
    
    while(1)
    {
        Lcd_update();
    }
    return 0;
}

Хочу услышать ваше мнение о размере. Program Memory Usage     :    2332 bytes   28,5 % Full
                                                                                 Data Memory Usage         :    547 bytes   53,4 % Full

P.S. Мысли вслух. А я бы основного начинателя @Berg  упомянул в шапке библиотеки.

2018-02-28_160602.jpg

Изменено пользователем gogaze
Код под спойлер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    263
11 час назад, gogaze сказал:

P.S. Мысли вслух. А я бы основного начинателя @Berg  упомянул в шапке библиотеки.

А надо было ему коммит писать :P. Я его код не использовал, только задачу, "мелкий шрифт 3х5".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
gogaze    4
4 часа назад, COKPOWEHEU сказал:

А надо было ему коммит писать :P. Я его код не использовал, только задачу, "мелкий шрифт 3х5".

Ну это не мое дело. Я же написал  - "Мысли вслух".

 

 

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

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Автор: qwer qwer
      Требуется разработать блок управления сплит-системой с функцией обучения по ИК каналу через RS-485 интерфейс на базе МК STM32. Есть ТЗ и список команд управления. Разработка в 2 этапа: 1-разработка принципиальной электрической схемы с указанием элементов на основе структурной из ТЗ (можно в карандаше), 2-написание ПО для МК STM32 в соответствии с ТЗ и списком команд. Оплата поэтапно. Кому интересно - уточняйте детали и оценивайте стоимость работы.
      Блок управления по ИК каналу Описание.docx
      Команды MODBUS.xlsx
    • Автор: Kudich
      Всех приветствую!
      Сам я программирую на стандартной среде ардуинки, и в одном проекте потребовалось увеличить частоту ШИМ на портах 5,6,9,10,11,13 Arduino Micro. На этой ардуино стоит Atmega32u4, есть тут знатоки avr? Как повысить частоту на этих пинах?
    • Автор: Evg69
      добрый день. Вернулся к микроконтроллерам после длительного перерыва. Сижу туплю и даже гугл не помог.
      Два вопроса по Atmel Studio 7. Режим отладки. Симуляция.
      1. Как включить окно в котором можно посмотреть что контроллер выплевывает
      в UART? Не содержимое регистра, а типа терминала.
      2. Как подсунуть студии файлик с содержимым EEPROM?