В точку.neutrino писал(а): Работе с их периферией, судя по всему.
Предполагаю, что разработать схему, развести и собрать плату, изучить язык и архитектуру контроллера - для новичка перебор. Увязнет и бросит, тем более - в одиночку и дома, без измерительных приборов. Вопрос в том, дойдет ли человек до уровня, при котором IDE из подспорья превратится в помеху. Это и будет признаком обучения )
Arduino
Arduino в Смоленске
- Aml
- Сообщения: 16660
- Зарегистрирован: 23 окт 2004, 00:10
- Настоящее имя: Сергей Амелин
- Откуда: Смоленск, Николаева
- Благодарил (а): 1 раз
- Поблагодарили: 52 раза
Re: Arduino
-
- Сообщения: 75
- Зарегистрирован: 19 окт 2012, 15:27
- Настоящее имя: Виктор
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
Есть некоторые простенькие программаторы в запасе(вторые экземпляры), если интересно кому, чтобы не ждать от китайцев, пишите в личку, отдам по цене закупки:
- USB ASP ATMEGA8 ATMEGA128 (120 р.)
- USB программатор флеш-памяти CH341A(250 р. с платой-адаптором SOP8/16 в DIP8)
- Usb SIM-карт ридер 3.579/6.00MHz (150 р.)
- USB - COM конвертор (USB 2.0 в RS232 преобразователь - 150 р.)
- USB программатор смарт-карт PC/SC USB CCID EMV ISO7816 типа SKU232089-30A30
- СОМ Phoenix Interface (или просто «феникс» - 800 р.)
Также панельки-переходники некоторые имеются, но только в единственных экземплярах:
- PLCC44-DIP40(200 р.)
- PLCC32-DIP32(200 р.)
- PLCC20-DIP20(250 р.)
- PLCC28-DIP24(250 р.)
- плата-адаптор SOP8 в DIP8 (50 р.)
Поправил по просьбам трудящихся. Конкретнее в ЛС пишем.
- USB ASP ATMEGA8 ATMEGA128 (120 р.)
- USB программатор флеш-памяти CH341A(250 р. с платой-адаптором SOP8/16 в DIP8)
- Usb SIM-карт ридер 3.579/6.00MHz (150 р.)
- USB - COM конвертор (USB 2.0 в RS232 преобразователь - 150 р.)
- USB программатор смарт-карт PC/SC USB CCID EMV ISO7816 типа SKU232089-30A30
- СОМ Phoenix Interface (или просто «феникс» - 800 р.)
Также панельки-переходники некоторые имеются, но только в единственных экземплярах:
- PLCC44-DIP40(200 р.)
- PLCC32-DIP32(200 р.)
- PLCC20-DIP20(250 р.)
- PLCC28-DIP24(250 р.)
- плата-адаптор SOP8 в DIP8 (50 р.)
Поправил по просьбам трудящихся. Конкретнее в ЛС пишем.
Последний раз редактировалось Виктор К. 16 май 2017, 21:19, всего редактировалось 7 раз.
-
- Сообщения: 9331
- Зарегистрирован: 19 сен 2003, 09:25
- Откуда: планета Хлябь
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Arduino
укажите цены, пожалуйста.Виктор К. писал(а):Есть некоторые простенькие программаторы в запасе(вторые экземпляры), если интересно кому, чтобы не ждать от китайцев, пишите в личку, отдам по цене закупки:
- USB ASP ATMEGA8 ATMEGA128
- Pl2303 USB в RS232 TTL
- USB конвертер CH340G PL2303
- USB программатор CH341A
Также панельки переходные некоторые имеются, но только в единственных экземплярах:
- PLCC44-DIP40
- PLCC32-DIP32
- PLCC20-DIP20
- PLCC28-DIP24
- SOP8-DIP8 150ml
- SOP16-DIP8 300ml
Re: Arduino
Ну почему-же.shin писал(а):Считаю, что ардуино это по определению хрень для выкачивания денег без какого-либо дальнейшего практического применения.
Для быстрого получения результата годится.
Re: Arduino
Полностью согласен.Aml писал(а):В точку.neutrino писал(а): Вопрос в том, дойдет ли человек до уровня, при котором IDE из подспорья превратится в помеху. Это и будет признаком обучения )
Микроконтроллер, для того и микроконтроллер, что-бы использовать его ресурсы по максимуму.
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
Объясните тупарезу, почему этот код не пашет? Что тут не так? Как только убираю цикл for, всё работает. А с ним в программа даже не переходит внутрь основного цикла. Можа я не умею отладчиком пользоваться или ещё что, мож я в си не шарю? Не спрашивайте, почему я не воспользовался основным циклом. Я просто тупо не понимаю, почему не пашет. Никаких ошибок не выдаёт при компиляции.
Код: Выделить всё
int void(main)
{
nastroikaportov();
while(1)
{
for (int i=0;i>=9;i++)
{
num(i); //вывод цыхверки на индикатор
_delay_ms(200);
}
}
}
- John Prick
- Сообщения: 8841
- Зарегистрирован: 12 янв 2006, 19:30
- Благодарил (а): 373 раза
- Поблагодарили: 274 раза
- Контактная информация:
Re: Arduino
Тут ошибка.
Условие выхода из цикла неправильное. Должно быть i <= 9.Код: Выделить всё
for (int i=0;i>=9;i++)
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
и я над этим час вчера сидел?John Prick писал(а):Тут ошибка.Условие выхода из цикла неправильное. Должно быть i <= 9.Код: Выделить всё
for (int i=0;i>=9;i++)
видно не вкурил ещё сишный синтаксис, мне что-то думалось наоборот будет выполняться, пока не станет больше 9
-
- Сообщения: 30077
- Зарегистрирован: 02 окт 2006, 09:23
- Настоящее имя: Виталий
- Откуда: г.Смоленск
- Благодарил (а): 0
- Поблагодарили: 2 раза
- Контактная информация:
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
да не, дурак, согласенFreemanNow писал(а):Академик Иосиф, можно подумать, что на других языках иначе..
- John Prick
- Сообщения: 8841
- Зарегистрирован: 12 янв 2006, 19:30
- Благодарил (а): 373 раза
- Поблагодарили: 274 раза
- Контактная информация:
Re: Arduino
А здесь компилятор не ругается?
Должно быть int main(void) или просто int main(). Т.е. функция называется main, возвращает целое число (int), а в параметрах не принимает ничего (void).Код: Выделить всё
int void(main)
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
John Prick, это я уже щас писал по памяти, не силён я в си пока. Дельфист я, на крайняк бейсик.
- takoy
- Сообщения: 391
- Зарегистрирован: 23 ноя 2007, 22:43
- Благодарил (а): 0
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino
Должно быть void main(). В данном случае функция main - это основной цикл процессора, соответственно не может принимать никаких параметров (тупо не откуда), и возвращать значение тоже не может (опять таки - некуда).Должно быть int main(void) или просто int main(). Т.е. функция называется main, возвращает целое число (int), а в параметрах не принимает ничего (void).
Заправка картриджей, ремонт оргтехники. Ул. Кашена, 8а. Тел. 40-05-80 Тел/факс 32-96-35.
http://att2007.ru
http://att2007.ru
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
Появился иной вопрос. У меня в отладчике всё, как надо, а в протеусе не работает. Почему?
-
- Сообщения: 4424
- Зарегистрирован: 09 июн 2009, 01:03
- Откуда: Смоленск
- Благодарил (а): 13 раз
- Поблагодарили: 81 раз
- Контактная информация:
Re: Arduino
"Вычислительная машина делает не то, что вам хочется, а то, что вы ей прикажете" ))Академик Иосиф писал(а):Появился иной вопрос. У меня в отладчике всё, как надо, а в протеусе не работает. Почему?
Ты покажи, что именно не работает.
- John Prick
- Сообщения: 8841
- Зарегистрирован: 12 янв 2006, 19:30
- Благодарил (а): 373 раза
- Поблагодарили: 274 раза
- Контактная информация:
Re: Arduino
Тут думать не надо. Для С есть вполне определённый стандарт языка, который гласит:takoy писал(а):Должно быть void main(). В данном случае функция main - это основной цикл процессора, соответственно не может принимать никаких параметров (тупо не откуда), и возвращать значение тоже не может (опять таки - некуда).Должно быть int main(void) или просто int main(). Т.е. функция называется main, возвращает целое число (int), а в параметрах не принимает ничего (void).
Т.е. всё вполне однозначно: возвращает int, либо в некоторых реализациях псевдоним int'а. Другое дело, что многие компиляторы позволяют определять main в весьма вольных формах. Но это всё же не означает, что так надо поступать.5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.
<...>
10) Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
char ** argv, and so on
- takoy
- Сообщения: 391
- Зарегистрирован: 23 ноя 2007, 22:43
- Благодарил (а): 0
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino
Это относится только к прикладному ПО, запускаемому под операционной системой. А полностью следовать стандартам здесь смысла нет - системный код по определению непереносим. Скажите мне ну куда вы будете возвращать тип int (да и любой другой) при работе на голом железе??? А компилятор скорее всего создаст локальную переменную типа int, что для мелких контроллеров вполне себе ощутимо. Вообще наиболее правильно в данном случае вот так (для AVR GCC):Т.е. всё вполне однозначно: возвращает int, либо в некоторых реализациях псевдоним int'а. Другое дело, что многие компиляторы позволяют определять main в весьма вольных формах. Но это всё же не означает, что так надо поступать.
Код: Выделить всё
void main(void) __attribute__((noreturn));
void main(void)
{
//...
}
Заправка картриджей, ремонт оргтехники. Ул. Кашена, 8а. Тел. 40-05-80 Тел/факс 32-96-35.
http://att2007.ru
http://att2007.ru
- John Prick
- Сообщения: 8841
- Зарегистрирован: 12 янв 2006, 19:30
- Благодарил (а): 373 раза
- Поблагодарили: 274 раза
- Контактная информация:
Re: Arduino
Нет, это относится к языку Си. Совершенно не важно, на какой платформе будет запускаться программа. Стандартизация языка как раз для этого и сделана. Под каждую платформу свой компилятор, а язык один. В идеале вот просто совсем один и тот же, без каких-либо отклонений.Это относится только к прикладному ПО, запускаемому под операционной системой.
По какому такому определению? Системное ПО в огромном количестве пишется на Си и Си++, и именно в этих языках все нормы и правила призывают к написанию как можно более переносимого кода. А тут вдруг заявляется, что он не переносим...А полностью следовать стандартам здесь смысла нет - системный код по определению непереносим.
Что-то мне подсказывает, что программа для микроконтроллера вообще навечно зациклена и до возврата доходит в эпизодических случаях. Можно хоть слонов возвращать, хоть космические корабли. А потом, это сегодня некуда возвращать, а завтра ардуинка выпустит что-нить новенькое и уже будет куда. Будем все программы переписывать?Скажите мне ну куда вы будете возвращать тип int (да и любой другой) при работе на голом железе???
Пути компиляторов неисповедимы. Но вообще философия Си и Си++ в максимальной эффективности. Если ваш компилятор создаёт какие-то ненужные переменные без крайней необходимости, то он как бы эту философию нарушает.А компилятор скорее всего создаст локальную переменную типа int, что для мелких контроллеров вполне себе ощутимо.
ПС. Что я хочу всем этим сказать? Писать нужно на стандартном языке, по возможности без отклонений. Есть ли в этом смысл, нет ли - это должно волновать в последнюю очередь.
- Dejmos
- Сообщения: 6035
- Зарегистрирован: 30 мар 2007, 15:35
- Настоящее имя: Денис
- Откуда: Singularity
- Благодарил (а): 462 раза
- Поблагодарили: 1319 раз
- Контактная информация:
Re: Arduino
Ну стандартам желательно следовать всегда. А куда возвращать... да хоть в бутлоадер.takoy писал(а): Это относится только к прикладному ПО, запускаемому под операционной системой. А полностью следовать стандартам здесь смысла нет - системный код по определению непереносим. Скажите мне ну куда вы будете возвращать тип int (да и любой другой) при работе на голом железе???
* Руссо программисто, облико аморале *
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
Re: Arduino
Попытаюсь объяснить.neutrino писал(а):"Вычислительная машина делает не то, что вам хочется, а то, что вы ей прикажете" ))Академик Иосиф писал(а):Появился иной вопрос. У меня в отладчике всё, как надо, а в протеусе не работает. Почему?
Ты покажи, что именно не работает.
В основном цикле у меня функция вывода на 7-сегментный индикатор. Настроен таймер, который вызывает прерывание по переполнению. В обработке прерывания идёт счёт количества этих переполнений, проще говоря, секундомер. Настроены соответственно порты на вывод всей этой бодяги на индикатор. В отладчике все биты на порту вывода выставляются правильно, всё работает. В протеусе же на выводах ничего не меняется, на индикаторе тупо светится 0, то есть начальное значение переменной.
-
- Сообщения: 4424
- Зарегистрирован: 09 июн 2009, 01:03
- Откуда: Смоленск
- Благодарил (а): 13 раз
- Поблагодарили: 81 раз
- Контактная информация:
Re: Arduino
Таймеры в Протеусе работают не все. Это я чудом вспомнил, больше 10 лет назад уже было.Академик Иосиф писал(а): Попытаюсь объяснить.
В основном цикле у меня функция вывода на 7-сегментный индикатор. Настроен таймер, который вызывает прерывание по переполнению. В обработке прерывания идёт счёт количества этих переполнений, проще говоря, секундомер. Настроены соответственно порты на вывод всей этой бодяги на индикатор. В отладчике все биты на порту вывода выставляются правильно, всё работает. В протеусе же на выводах ничего не меняется, на индикаторе тупо светится 0, то есть начальное значение переменной.
Попробуй для Протеуса вот такое решение, но только как пример! Не используй в реальных проектах. Не забывай, что 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
-
- Сообщения: 4424
- Зарегистрирован: 09 июн 2009, 01:03
- Откуда: Смоленск
- Благодарил (а): 13 раз
- Поблагодарили: 81 раз
- Контактная информация:
Re: Arduino
Мы подождем.Академик Иосиф писал(а):neutrino, благодарю. Я бы показал код, но он дома.
Видишь - коллеги с красными от ярости глазами и рычанием рвут зубами программу из 3-х строчек? Здесь ни один баг не укроется )))
- Aml
- Сообщения: 16660
- Зарегистрирован: 23 окт 2004, 00:10
- Настоящее имя: Сергей Амелин
- Откуда: Смоленск, Николаева
- Благодарил (а): 1 раз
- Поблагодарили: 52 раза
Re: Arduino
Жена сейчас собирается учить студентов программировать Arduino на ассемблере. :)neutrino писал(а): Работе с их периферией, судя по всему.
Предполагаю, что разработать схему, развести и собрать плату, изучить язык и архитектуру контроллера - для новичка перебор. Увязнет и бросит, тем более - в одиночку и дома, без измерительных приборов. Вопрос в том, дойдет ли человек до уровня, при котором IDE из подспорья превратится в помеху. Это и будет признаком обучения )
-
- Сообщения: 4424
- Зарегистрирован: 09 июн 2009, 01:03
- Откуда: Смоленск
- Благодарил (а): 13 раз
- Поблагодарили: 81 раз
- Контактная информация:
Re: Arduino
Я настойчиво рекомендую для этих целей язык C.Aml писал(а): Жена сейчас собирается учить студентов программировать Arduino на ассемблере. :)
Насилие и глумление над детьми, безусловно, правильная вещь, но помимо понимания принципа вычислений на процессоре, необходим навык функциональной декомпозиции задачи и знание стандартных приемов проектирования. Так они, придя на производство, будут лучше готовы к реальным задачам.
Ассемблер плох еще и тем, что совершенно не задерживается в головах, если на нем не писать постоянно.
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
-
- Сообщения: 23467
- Зарегистрирован: 07 май 2008, 23:38
- Благодарил (а): 0
- Поблагодарили: 0
-
- Сообщения: 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[] = "ЧАЮ?[]{}\|/`~";