admin

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

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

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

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

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

LCD_5110_test.rar  От Alex

lcd5110_27.03.2016.tar.gz От COKPOWEHEU

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

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


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

Похоже, в функции 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    261

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

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

 

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

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

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


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

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

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

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

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

результат.rar

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

Посколько в этой теме было ознакомление с дисплеем 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    261

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

 

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


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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
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    261
11 час назад, gogaze сказал:

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

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

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


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

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

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

 

 

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

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


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

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

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

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

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

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

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

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

Загрузка...

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

    • Автор: Alexey104
      Всем привет!
      Возникла следующая проблема:
       
      Есть две ардуины 'Mega2560'. По несчастливому стечению обстоятельств данные платы попали в руки одному чуваку, который, вернув их, заявил, что они перестали работать после того, как он "чисто ради интереса" поковырял на обеих некоторые фьюзы. Есть у меня такой китайский usbasp v2 программатор:
      Подключив данный девайс к ICSP-пинам первой платы, удалось без проблем восстановить на ней загрузчик через стандартную Arduino-IDE, после чего работоспособность платы полностью восстановилась. Но вот при попытке сделать то же самое со второй платой, получаю это:
      Такое же сообщение получаю при попытке зашить загрузчик в неподключенную к программатору ардуину, то есть программатор вообще не видит МК. Плата прекрасно работала до того, как вышеупомянутый товарищ покрутил настройки фьюзов.
       
      Что я пытался предпринять:
      Замыкал пины JP3 программатора, отвечающие за понижение скорости, подключал к ардуине 5V от внешнего источника при прошивке загрузчика, - не помогло.
       
      Поиском пользоваться умею, аналогичную тему тут находил, но там проблема была в том, что парень неверно подключал программатор к контроллеру. В моём же случае всё подключено верно, повторюсь, что загрузчик первой платы этим же программатором был восстановлен успешно.
      Буду рад любым советам касательно того, как восстановить работоспособность платы.
       
       
       
    • Автор: Сергей Скопинцев
      Нужно разработать циклическую программу сбора информации от 10 измерительных источников. Период повторения цикла - одна секунда
      Источники:
       М - тензопреобразователь давления. Мостовая схема питается постоянным напряжением, выходной сигнал от 0 до 100 милливольт
       Т, ТМ, ТА- три канала измерения изменения напряжения в диапазоне от 400 до 600 милливольт (тоже нужен мост?)
       ЛМ - анализатор максимума напряжения (от 0 до 5 Вольт) по 10 точкам более-менее распределённых в измерительном цикле. Найденный максимум потом должен участвовать в анализе, постепенно уменьшаясь на 20% каждый цикл
       ВЛ - измерить напряжение на Малой емкости (50 пФ) с помощью емкостного делителя по алгоритму:
                         Снять Землю со средней точки емкостного делителя, подать на емкостной делитель положительный Импульс
                         Замерить нужное нам напряжение в средней точке делителя
                         Снять положительный Импульс с делителя, посадить на землю среднюю точку делителя
      - остальные каналы К7...К10  служебные
      Разрядность данных - 16 двоичных.

      Результаты писать на MicroSD текстовым файлом, на первом месте в строке текущее время в секундах, остальные каналы разделены пробелами
      Порядок каналов:
      Т - М -ТМ - Вл - ЛМ -...
      Коэффициенты усиления по каждому информационному каналу должен иметь возможность изменить оператор по формуле y = Ax + B
      Прибор автономный, питается от + 5 Вольт.
       
    • Автор: Ru_s
      Здравствуйте. Подскажите пожалуйста, возможно ли на attiny13 реализовать такую штуку. Мне в процессе работы программы нужно поменять режим работы таймера/счетчика с fast PWM на обычный счёт, отсчитать длительный промежуток времени и опять вернутся в режим ШИМ. Т.е. я подаю на ногу сигнал ШИМ и когда он в максимальном значении, я его отключаю, и тупо подаю на ногу высокий лог. уровень. В это время Т/С по идее свободен, и мне надо посчитать время работы выхода на максимальном лог. уровне, при достижении какого-то значения времени нужно перевести т/с обратно в ШИМ. Возможно ли это? И как приблизительно это реализовать
    • Автор: Kiraspbkiev Kira
      День Добрый. Есть два вопроса от новичка: 1) Правильная ли схема сделанная мною? 2) если схема верна то как правильно подключить к atmega328p-mu usb на чипе cp2102-grm?
      На схеме колодка JP1 это AVR ISP а JP2 это UART
      С проектированием столкнулся в первый раз, цель узнать что то новое и сделать своими руками:)