Arduino

Arduino в Смоленске

Увлечения и развлечения
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino писал(а):
Академик Иосиф писал(а):Появился иной вопрос. У меня в отладчике всё, как надо, а в протеусе не работает. Почему?
"Вычислительная машина делает не то, что вам хочется, а то, что вы ей прикажете" ))
Ты покажи, что именно не работает.
Попытаюсь объяснить.
В основном цикле у меня функция вывода на 7-сегментный индикатор. Настроен таймер, который вызывает прерывание по переполнению. В обработке прерывания идёт счёт количества этих переполнений, проще говоря, секундомер. Настроены соответственно порты на вывод всей этой бодяги на индикатор. В отладчике все биты на порту вывода выставляются правильно, всё работает. В протеусе же на выводах ничего не меняется, на индикаторе тупо светится 0, то есть начальное значение переменной.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а): Попытаюсь объяснить.
В основном цикле у меня функция вывода на 7-сегментный индикатор. Настроен таймер, который вызывает прерывание по переполнению. В обработке прерывания идёт счёт количества этих переполнений, проще говоря, секундомер. Настроены соответственно порты на вывод всей этой бодяги на индикатор. В отладчике все биты на порту вывода выставляются правильно, всё работает. В протеусе же на выводах ничего не меняется, на индикаторе тупо светится 0, то есть начальное значение переменной.
Таймеры в Протеусе работают не все. Это я чудом вспомнил, больше 10 лет назад уже было.
Попробуй для Протеуса вот такое решение, но только как пример! Не используй в реальных проектах. Не забывай, что int для AVR 16-битный, то есть 65535 - максимальное значение. И эта... когда просят показать, что не работает, показывай лучше код. Стесняться не надо, просто так быстрее найдем.

Код: Выделить всё

#define MAX_DLY_CNT 100 //fake timer initial value




void fake_tmr_isr(void)
{
/*
	Your timer interrupt service here
*/
}

int main(void)
{
	unsigned int dly_cnt = MAX_DLY_CNT;

	while(1)
	{
		if(!dly_cnt--)
		{
			dly_cnt = MAX_DLY_CNT;
			fake_tmr_isr();
		}	
	}

	return 0;
}

Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino, благодарю. Я бы показал код, но он дома.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а):neutrino, благодарю. Я бы показал код, но он дома.
Мы подождем.
Видишь - коллеги с красными от ярости глазами и рычанием рвут зубами программу из 3-х строчек? Здесь ни один баг не укроется )))
Аватара пользователя
Aml
Сообщения: 16660
Зарегистрирован: 23 окт 2004, 00:10
Настоящее имя: Сергей Амелин
Откуда: Смоленск, Николаева
Благодарил (а): 1 раз
Поблагодарили: 52 раза

Re: Arduino

Сообщение Aml »

neutrino писал(а): Работе с их периферией, судя по всему.
Предполагаю, что разработать схему, развести и собрать плату, изучить язык и архитектуру контроллера - для новичка перебор. Увязнет и бросит, тем более - в одиночку и дома, без измерительных приборов. Вопрос в том, дойдет ли человек до уровня, при котором IDE из подспорья превратится в помеху. Это и будет признаком обучения )
Жена сейчас собирается учить студентов программировать Arduino на ассемблере. :)
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Aml писал(а): Жена сейчас собирается учить студентов программировать Arduino на ассемблере. :)
Я настойчиво рекомендую для этих целей язык C.
Насилие и глумление над детьми, безусловно, правильная вещь, но помимо понимания принципа вычислений на процессоре, необходим навык функциональной декомпозиции задачи и знание стандартных приемов проектирования. Так они, придя на производство, будут лучше готовы к реальным задачам.
Ассемблер плох еще и тем, что совершенно не задерживается в головах, если на нем не писать постоянно.
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

Пытаюсь победить графический дисплей.
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

Нужно было всего лишь подобрать задержку :facepalm:
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

Код: Выделить всё

unsigned char string1[] = "cъешь еще этих";
	unsigned char string2[] = "мягких французских";
	unsigned char string3[] = "булок, да выпей";
	unsigned char string4[] = "чаю! @#;%:?*()_+";
	unsigned char string5[] = "СЪЕШЬ ЕЩЕ ЭТИХ";
	unsigned char string6[] = "МЯГКИХ ФРАНЦУЗСКИХ";
	unsigned char string7[] = "БУЛОК, ДА ВЫПЕЙ";
	unsigned char string8[] = "ЧАЮ?[]{}\|/`~";
Икран.jpg
Ну что за нах? :-(
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а):
Ну что за нах? :-(
Выполняемый код покажи.
Аватара пользователя
Aml
Сообщения: 16660
Зарегистрирован: 23 окт 2004, 00:10
Настоящее имя: Сергей Амелин
Откуда: Смоленск, Николаева
Благодарил (а): 1 раз
Поблагодарили: 52 раза

Re: Arduino

Сообщение Aml »

Я настойчиво рекомендую для этих целей язык C.
Ну, Си сейчас наши студенты на информатике 1-й и 2-й курс изучают. А потом на 3 курсе при знакомстве с микроконтроллерами сначала чуток Ассемблера для понимания работы с внутренней структурой микроконтроллера и реализации простейших программ. А потом привычный им Си для решения более-менее практических задач с тем же микроконтроллером. И вставки Ассемблера для критических фрагментов, где важна максимальная скорость исполнения кода.
Я про ассемблер к тому, что Ардуино является достаточно гибкой платформой, позволяющей пользователю работать с ней на трех уровнях сложности: стандартном ардуиновском IDE, на чистом Си через типовые программы и на ассемблере (для извращенцев или спецов).
FreemanNow
Сообщения: 30077
Зарегистрирован: 02 окт 2006, 09:23
Настоящее имя: Виталий
Откуда: г.Смоленск
Благодарил (а): 0
Поблагодарили: 2 раза
Контактная информация:

Re: Arduino

Сообщение FreemanNow »

neutrino писал(а):
Академик Иосиф писал(а):
Ну что за нах? :-(
Выполняемый код покажи.
наверняка в цикле выводится массив string1 с неверно заданной длиной ))
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

FreemanNow писал(а): наверняка в цикле выводится массив string1 с неверно заданной длиной ))
Нет, я же проверял. Но код мы теперь увидим не раньше понеделка.
FreemanNow
Сообщения: 30077
Зарегистрирован: 02 окт 2006, 09:23
Настоящее имя: Виталий
Откуда: г.Смоленск
Благодарил (а): 0
Поблагодарили: 2 раза
Контактная информация:

Re: Arduino

Сообщение FreemanNow »

Академик Иосиф, да ты интриган)
Аватара пользователя
John Prick
Сообщения: 8808
Зарегистрирован: 12 янв 2006, 19:30
Благодарил (а): 368 раз
Поблагодарили: 266 раз
Контактная информация:

Re: Arduino

Сообщение John Prick »

И вставки Ассемблера для критических фрагментов, где важна максимальная скорость исполнения кода.
Давно уже от них отказываются. Современные компиляторы могут оптимизировать программы в разы лучше самого программиста, а неумелое применение таких вставок может наоборот только всё ухудшить. Правило 80/20 по-прежнему работает (80% времени исполняется 20% кода). И поиск этих 20% задача непростая. Да и ясности при чтении кода эти вставки не добавляют.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

FreemanNow писал(а):наверняка в цикле выводится массив string1 с неверно заданной длиной ))
Маловероятно.

Код: Выделить всё

   unsigned char string1[] = "cъешь еще этих";     //14
   unsigned char string2[] = "мягких французских"; //18 
   unsigned char string3[] = "булок, да выпей";    //15
   unsigned char string4[] = "чаю! @#;%:?*()_+";   //16
   unsigned char string5[] = "СЪЕШЬ ЕЩЕ ЭТИХ";     //14
   unsigned char string6[] = "МЯГКИХ ФРАНЦУЗСКИХ"; //18
   unsigned char string7[] = "БУЛОК, ДА ВЫПЕЙ";    //15
   unsigned char string8[] = "ЧАЮ?[]{}\|/`~";      //13

Я для удобства указал в комментариях к каждой строке количество символов БЕЗ '\0'.

Теперь смотрим, что выводится после сбоя:

Код: Выделить всё

"cъешь еще "   //10 
"тих."         //4
"мягких фран"  //11
"узских."      //7
Опять-таки, без '\0'.

10+4 = 14 - это sizeof(string1) - 1; 11+7=18 - это sizeof(string2) - 1;
Точка в оригинальном тексте отсутствует, что как бы намекает на то, что она появляется из другой области памяти. Точками часто отображаются непечатаемые символы, но уверенности, что так в данном случае, нет. Скорее всего, молодой человек запутался в значениях счетчиков в цикле вывода строк.


Академик Иосиф
, если ты хочешь быстрой квалифицированной помощи, не стесняйся сразу показывать код. Здесь не Главный, и тем более - не Политика )))), народ адекватный, интересующийся и готовый помочь без насмешек (я на это очень надеюсь). Иначе скорость разработки станет неудовлетворительной, увязнешь.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Aml писал(а): Ну, Си сейчас наши студенты на информатике 1-й и 2-й курс изучают. А потом на 3 курсе при знакомстве с микроконтроллерами сначала чуток Ассемблера для понимания работы с внутренней структурой микроконтроллера и реализации простейших программ. А потом привычный им Си для решения более-менее практических задач с тем же микроконтроллером. И вставки Ассемблера для критических фрагментов, где важна максимальная скорость исполнения кода.
Я про ассемблер к тому, что Ардуино является достаточно гибкой платформой, позволяющей пользователю работать с ней на трех уровнях сложности: стандартном ардуиновском IDE, на чистом Си через типовые программы и на ассемблере (для извращенцев или спецов).
Хорошо, только давайте им азы теории конечный автоматов, а то они, бывает, совсем не врубаются, что же такое программа вообще ) А настоящим извращениям, попади они к нам, научим быстро ))
Новенький, кстати, очень даже хорош )
barmoglot
Сообщения: 30428
Зарегистрирован: 17 мар 2009, 18:43
Благодарил (а): 0
Поблагодарили: 0
Контактная информация:

Re: Arduino

Сообщение barmoglot »

neutrino, реализовать умный дом сможешь?
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

barmoglot писал(а):neutrino, реализовать умный дом сможешь?
Интересная штука. В теории, мне кажется, это не слишком то и сложно.
FreemanNow
Сообщения: 30077
Зарегистрирован: 02 окт 2006, 09:23
Настоящее имя: Виталий
Откуда: г.Смоленск
Благодарил (а): 0
Поблагодарили: 2 раза
Контактная информация:

Re: Arduino

Сообщение FreemanNow »

Академик Иосиф, умный дом для бармаглота это не просто сложно, это непостижимо))
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

barmoglot писал(а):neutrino, реализовать умный дом сможешь?
К сожалению, нет. Я не занимаюсь крупными системами. Если только отдельный датчик или манипулятор, но их уже много готовых, нет смысла изобретать велосипед.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а):
barmoglot писал(а):neutrino, реализовать умный дом сможешь?
Интересная штука. В теории, мне кажется, это не слишком то и сложно.
Это очень обманчивое впечатление. Даже поддержание постоянной температуры воздуха в помещении - непростая задача в теории.
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino писал(а): Это очень обманчивое впечатление. Даже поддержание постоянной температуры воздуха в помещении - непростая задача в теории.
Ну почему? Жарко - открыл окно. Холодно - включил топку. И так пока не будет ровно +22. :nez-nayu:
FreemanNow
Сообщения: 30077
Зарегистрирован: 02 окт 2006, 09:23
Настоящее имя: Виталий
Откуда: г.Смоленск
Благодарил (а): 0
Поблагодарили: 2 раза
Контактная информация:

Re: Arduino

Сообщение FreemanNow »

Академик Иосиф, а еще при этом экономить энергию и следить за влажностью и кислородом )
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а): Ну почему? Жарко - открыл окно. Холодно - включил топку. И так пока не будет ровно +22. :nez-nayu:
Что ж, попробуем рассуждать. На примере нагрева воздуха для начала.
Ты выключаешь топку когда воздух ровно +22, она остывает, продолжая отдавать тепло воздуху, когда остынет полностью, температура станет 24, а то и 25. Что будешь делать?
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino писал(а): Что ж, попробуем рассуждать. На примере нагрева воздуха для начала.
Ты выключаешь топку когда воздух ровно +22, она остывает, продолжая отдавать тепло воздуху, когда остынет полностью, температура станет 24, а то и 25. Что будешь делать?
Вряд ли. Живу ж с котлом, и штоб по инерции нагрело на 2-3 градуса сверху, такого не было никогда и ни разу.
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а): Вряд ли. Живу ж с котлом, и штоб по инерции нагрело на 2-3 градуса сверху, такого не было никогда и ни разу.
Это частный случай. Ты же не будешь, получив задание спроектировать умный дом, предлагать всем переехать к тебе или чаще проветривать?

Есть условие задачи. Нужно решение.
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino писал(а): Это частный случай. Ты же не будешь, получив задание спроектировать умный дом, предлагать всем переехать к тебе или чаще проветривать?

Есть условие задачи. Нужно решение.
Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то. :ne_ne_ne:
neutrino
Сообщения: 4424
Зарегистрирован: 09 июн 2009, 01:03
Откуда: Смоленск
Благодарил (а): 13 раз
Поблагодарили: 81 раз
Контактная информация:

Re: Arduino

Сообщение neutrino »

Академик Иосиф писал(а): Если кладовку какую топить, то может. Целую квартиру, и уж тем более дом - не по физике как-то. :ne_ne_ne:
Зависит от соотношения мощности нагревателя и объема помещения.

Эффект обычный, техническое решение существует, вопрос сформулирован недвусмысленно. Не виляй, ты же не в Политике )))
Академик Иосиф
Сообщения: 23467
Зарегистрирован: 07 май 2008, 23:38
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino

Сообщение Академик Иосиф »

neutrino писал(а): Выполняемый код покажи.
Главная:

Код: Выделить всё

int main()
{
	unsigned char string1[] = "cъешь еще этих";
	unsigned char string2[] = "мягких французских";
	unsigned char string3[] = "булок, да выпей";
	unsigned char string4[] = "чаю! @#;%:?*()_+";
	unsigned char string5[] = "СЪЕШЬ ЕЩЕ ЭТИХ";
	unsigned char string6[] = "МЯГКИХ ФРАНЦУЗСКИХ";
	unsigned char string7[] = "БУЛОК, ДА ВЫПЕЙ";
	unsigned char string8[] = "ЧАЮ?[]{}\|/`~";


	LCD12864_Init();
	_delay_ms(1);
	LCD12864_Clr();
	_delay_ms(1);
	
	LCD12864_String(0,0,string1,sizeof(string1)-1);
	LCD12864_String(1,0,string2,sizeof(string2)-1);
	LCD12864_String(2,0,string3,sizeof(string3)-1);
	LCD12864_String(3,0,string4,sizeof(string4)-1);
	LCD12864_String(4,0,string5,sizeof(string5)-1);
	LCD12864_String(5,0,string6,sizeof(string6)-1);
	LCD12864_String(6,0,string7,sizeof(string7)-1);
	LCD12864_String(7,0,string8,sizeof(string8)-1);
	while(1);
}
Вывод строки:

Код: Выделить всё

void LCD12864_String(unsigned char x0,unsigned char y0,char* buffer, unsigned char count)
{
	unsigned char x=x0;
	unsigned char y=y0;
	if((x>8)||(y>127)) return;
	LCD12864_GotoXY(x,y);
	for(unsigned char i=0;i<count;i++)
	{
		LCD12864_Char(x,y+6*i,buffer[i]); // игрэком задаётся интервал меж символами
	}
}
Вывод символа, который используется в выводе строки:

Код: Выделить всё

void LCD12864_Char(unsigned char x0, unsigned char y0, unsigned char code)
{
	unsigned char x=x0;//0..8 - задаем строку где буква выводится
	unsigned char y=y0;
	if(code<0x80)
		code-=0x20;//установка начала стандартных символов
	else
		code-=0x60;//установка начала русских символов					

	if(CS==0)
	{
		CMD_PORT |= (1<<RST)|(1<<CS2);
		CMD_PORT &= ~(1<<CS1);
	}
	else
	{
		CMD_PORT |= (1<<RST)|(1<<CS1);
		CMD_PORT &= ~(1<<CS2);
	}
	if(x>63 || y>127) return;
	for(unsigned int i=0;i<5;i++) // здесь задаётся ширина символа
	{
		LCD12864_GotoXY(x,y);
		if(i<=4)
		{
			if(MODE==0) LCD12864_Data(symbol[code][i]);  // МОДЕ - если 0, то чёрные символы на белом фоне, если 1 - наоборот
			else LCD12864_Data(~symbol[code][i]);
		}
		
		y+=1;
	}	
}
Сами символы берутся из отдельного файла, и я ещё не вникал, как они это делают.
Ответить Пред. темаСлед. тема