#2 Re: Проекты » Намотка нитки/кабеля/ленты с дозатором » 2018-10-05 21:13:17

Ну ТЗ у вас не тривиальное. Я бы рекомендовал начать с малого, а потом уже навешивать доп. функционал

#3 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-21 23:51:28

Прошил скетч, отправляющий данные в сериал. Светодиоды Rx Tx не мигают, если подключиться к Rx Tx 328ого, то данные приходят. Получается, что 16U2 не рабочая? Если бы она программировалась так же просто как и 328 я бы туда тоже какой-то блинк прошивал и смотрел что происходит (зажечь те же Rx Tx светодиоды), а так это надо даташит вкуривать и на С программировать. Еще какие-то идеи будут как сузить круг подозреваемых?

#4 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-21 11:45:22

Прошивал программатором USBTiny, фьюзы тоже прошивал, как рекомендовалось в документации.

#5 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-20 15:51:46

Основной чип, который 328ой, программируется нормально, через программатор только. Как раз блинк в него и прошивал. Контакты от 16U2 до Rx Tx 328ого тоже звонятся нормально.

#6 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-19 14:19:00

Green пише:

Просто человек считает что там железный USB, не зависящий от контроллера.) Как и загрузчик.)

Ну вообще там же действительно железный ЮСБ, но от контроллера он конечно зависит. Но контроллер-то сам живой, т.к. его можно прошить и потом прочитать эту прошивку. Если бы он был не живой или не стартовал, я бы этого не смог сделать, насколько я понимаю?

#7 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-19 14:17:32

Nefreemen пише:

Ну с RESET Андрей не въехал, бывает smile . Вопрос другой, он не понял что DFU нет в микроконтроллере smile . Я тоже наступал на эти грабли с STM32, решив (ну все бывают однажды в роли нуба big_smile ) что это как бы "вечное" и "нерушимое" зашитое "навсегда" производителем smile .

Не понял, куда я не въехал с резетом?
Насчет ДФУ - вы оказались правы, в заведомо рабочей Уне его действительно не было, хотя это был итальянский оригинал, хоть и старый. Может я его когда-то перепрошивал и выбрал прошивку без ДФУ, а может и производитель накосячил, кто знает. Перепрошил прошивку UNO-dfu_and_usbserial_combined.hex и устройство стало появляться после закорачивания резета. Но это на рабочей. На нерабочей хоть и перепрошил в него ДФУ все равно ничего не появляется. Итого я делаю вывод: либо сгорел аппаратный ЮСБ на чипе, либо все же нет контакта по пути от ножек D+ D- контроллера до разъема ЮСБ. Это все возможные варианты или я что-то упустил?

#8 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-18 23:37:01

Вячеслав Азаров пише:

Потому, что чип не может ответить хосту USB, так же как и по UART-у. Пока действует RESET не работает ничего!

Но я же не на совсем его замыкаю, а на несколько секунд. Судя по документации после этого он должен зайти в режим ДФУ.

#9 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-16 21:42:02

Андрей пише:

На заведомо рабочей Уно если закоротить резет и землю на Atmega16U2 никакое ДФУ устройство не создается.

То что оно не создается на проблемной, о которой этот топик, можно понять, а вот на рабочей почему не создается? Корочу Резет к земле - пропадает СОМ порт, убираю перемычку - появляется.

#10 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-16 19:29:13

Но если она программируется, значит центральный процессор работает? Я понимаю что могут быть выжжены какие-то порты GPIO, в том числе USB, но если он прошивку можно записать и считать, то по идее ядро работает?

#11 Re: Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-16 12:58:10

Да гугл читал вчера весь день. Atmega16U2 я перепрошил, как я и написал в первом посте. Правда не таким способом. Этот способ, кстати, у меня не работает. На заведомо рабочей Уно если закоротить резет и землю на Atmega16U2 никакое ДФУ устройство не создается. Вообще ничего не появляется в диспечере устройств (пробовал на Вин10 и Вин8). Я перепрошил с помощью программатора, из чего и сделал вывод о том, что чип жив.

#12 Аппаратные вопросы » Странное поведение Atmega16U2 » 2018-02-16 11:06:08

Андрей
відповідей: 16

Всем привет. Прошу совета. Есть ардуино уно, при подключении к компу не создается СОМ порт. Подключился к Atmega16U2 по ICSP - отвечает, прошил в нее стандартную ардуиновскую прошивку - прошилась, но СОМ порт все равно не создается. Прозвонил контакты D+ D- от разъема до Atmega16U2 - все ок, питание на VCC и UVCC есть. Прозвонил дорожки до конденсатора UCAP - все ок. Куда дальше копать не знаю. Если она шьется программатором, значит кварц подключен правильно. Почему же тогда она может не  создавать виртуальный СОМ порт?

#13 Re: Проекты » Контроллер на Arduino для солнечного коллектора HelioSun M1 » 2017-05-18 17:19:46

Очень интересно, смотрю ваше видео по сборке самого коллектора.
Выложить схему и скетч не думали? Просто, ИМХО, повторить по выложенной схеме будет стоить те же деньги, за которые вы его продаете + еще и время, так что кому нужно все равно купят. Зато появится теоретическая возможность доделать/дописать свой функционал. То есть купить все равно будет выгоднее, но так еще одно конкурентное преимущество появится. Да и вообще самоделкины любят опенсорс и не доверяют закрытым решениям.

#14 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-22 22:31:02

Блин, точно.
Я не обратил внимания, что макрос объявлен, но не используется в самом TimeLib.h
Еще раз спасибо за разъяснения.

#15 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-22 14:06:35

Green пише:

Шевелитесь, Андрей, шевелитесь. Спасибо хочу услышать.))

Спасибо! Так и правда работает. Не могу только понять как оно компилилось со скобками без ошибок, когда я просто вставлял TimeLib.h в свой скетч.

#16 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-18 14:09:49

Green пише:

#include <TimeLib.h> где?

В смысле где лежит? В хомах арудино ИДЕ libraries\Time\TimeLib.h

#17 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-18 12:07:03

Давайте я еще раз опишу проблему.
Если я делаю вот так:

#define SECS_PER_MIN  (60UL)
#define minutesToTime_t(M) ( (M) * SECS_PER_MIN) 
void setup() {
  unsigned long t=minutesToTime_t(1);
  Serial.println(t);
}

void loop() {
}

то все компилится ок.
Но я хочу использовать дефайны из внешнего файла библиотеки времени TimeLib.h без необходимости копировать их в основной скетч. Методы этой библиотеки вызываются нормально из чего я делаю вывод, что с ней все ок и она тоже компилится без ошибок. Но если я пытаюсь получить доступ к макросам, которые в ней используются, то получаю ошибку. Чтобы не грузить вас избыточным кодом в первом посте простой скетч, который это демонстрирует.
На всякий вот сам файл TimeLib.h

/*
  time.h - low level time and date functions
*/

/*
  July 3 2011 - fixed elapsedSecsThisWeek macro (thanks Vincent Valdy for this)
              - fixed  daysToTime_t macro (thanks maniacbug)
*/     

#ifndef _Time_h
#ifdef __cplusplus
#define _Time_h

#include <inttypes.h>
#ifndef __AVR__
#include <sys/types.h> // for __time_t_defined, but avr libc lacks sys/types.h
#endif


#if !defined(__time_t_defined) // avoid conflict with newlib or other posix libc
typedef unsigned long time_t;
#endif


// This ugly hack allows us to define C++ overloaded functions, when included
// from within an extern "C", as newlib's sys/stat.h does.  Actually it is
// intended to include "time.h" from the C library (on ARM, but AVR does not
// have that file at all).  On Mac and Windows, the compiler will find this
// "Time.h" instead of the C library "time.h", so we may cause other weird
// and unpredictable effects by conflicting with the C library header "time.h",
// but at least this hack lets us define C++ functions as intended.  Hopefully
// nothing too terrible will result from overriding the C library header?!
extern "C++" {
typedef enum {timeNotSet, timeNeedsSync, timeSet
}  timeStatus_t ;

typedef enum {
    dowInvalid, dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday
} timeDayOfWeek_t;

typedef enum {
    tmSecond, tmMinute, tmHour, tmWday, tmDay,tmMonth, tmYear, tmNbrFields
} tmByteFields;	   

typedef struct  { 
  uint8_t Second; 
  uint8_t Minute; 
  uint8_t Hour; 
  uint8_t Wday;   // day of week, sunday is day 1
  uint8_t Day;
  uint8_t Month; 
  uint8_t Year;   // offset from 1970; 
} 	tmElements_t, TimeElements, *tmElementsPtr_t;

//convenience macros to convert to and from tm years 
#define  tmYearToCalendar(Y) ((Y) + 1970)  // full four digit year 
#define  CalendarYrToTm(Y)   ((Y) - 1970)
#define  tmYearToY2k(Y)      ((Y) - 30)    // offset is from 2000
#define  y2kYearToTm(Y)      ((Y) + 30)   

typedef time_t(*getExternalTime)();
//typedef void  (*setExternalTime)(const time_t); // not used in this version


/*==============================================================================*/
/* Useful Constants */
#define SECS_PER_MIN  ((time_t)(60UL))
#define SECS_PER_HOUR ((time_t)(3600UL))
#define SECS_PER_DAY  ((time_t)(SECS_PER_HOUR * 24UL))
#define DAYS_PER_WEEK ((time_t)(7UL))
#define SECS_PER_WEEK ((time_t)(SECS_PER_DAY * DAYS_PER_WEEK))
#define SECS_PER_YEAR ((time_t)(SECS_PER_WEEK * 52UL))
#define SECS_YR_2000  ((time_t)(946684800UL)) // the time at the start of y2k
 
/* Useful Macros for getting elapsed time */
#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN)  
#define numberOfMinutes(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN) 
#define numberOfHours(_time_) (( _time_% SECS_PER_DAY) / SECS_PER_HOUR)
#define dayOfWeek(_time_)  ((( _time_ / SECS_PER_DAY + 4)  % DAYS_PER_WEEK)+1) // 1 = Sunday
#define elapsedDays(_time_) ( _time_ / SECS_PER_DAY)  // this is number of days since Jan 1 1970
#define elapsedSecsToday(_time_)  (_time_ % SECS_PER_DAY)   // the number of seconds since last midnight 
// The following macros are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971
// Always set the correct time before settting alarms
#define previousMidnight(_time_) (( _time_ / SECS_PER_DAY) * SECS_PER_DAY)  // time at the start of the given day
#define nextMidnight(_time_) ( previousMidnight(_time_)  + SECS_PER_DAY )   // time at the end of the given day 
#define elapsedSecsThisWeek(_time_)  (elapsedSecsToday(_time_) +  ((dayOfWeek(_time_)-1) * SECS_PER_DAY) )   // note that week starts on day 1
#define previousSunday(_time_)  (_time_ - elapsedSecsThisWeek(_time_))      // time at the start of the week for the given time
#define nextSunday(_time_) ( previousSunday(_time_)+SECS_PER_WEEK)          // time at the end of the week for the given time


/* Useful Macros for converting elapsed time to a time_t */
#define minutesToTime_t((M)) ( (M) * SECS_PER_MIN) 
#define hoursToTime_t   ((H)) ( (H) * SECS_PER_HOUR)  
#define daysToTime_t    ((D)) ( (D) * SECS_PER_DAY) // fixed on Jul 22 2011
#define weeksToTime_t   ((W)) ( (W) * SECS_PER_WEEK)   

/*============================================================================*/
/*  time and date functions   */
int     hour();            // the hour now 
int     hour(time_t t);    // the hour for the given time
int     hourFormat12();    // the hour now in 12 hour format
int     hourFormat12(time_t t); // the hour for the given time in 12 hour format
uint8_t isAM();            // returns true if time now is AM
uint8_t isAM(time_t t);    // returns true the given time is AM
uint8_t isPM();            // returns true if time now is PM
uint8_t isPM(time_t t);    // returns true the given time is PM
int     minute();          // the minute now 
int     minute(time_t t);  // the minute for the given time
int     second();          // the second now 
int     second(time_t t);  // the second for the given time
int     day();             // the day now 
int     day(time_t t);     // the day for the given time
int     weekday();         // the weekday now (Sunday is day 1) 
int     weekday(time_t t); // the weekday for the given time 
int     month();           // the month now  (Jan is month 1)
int     month(time_t t);   // the month for the given time
int     year();            // the full four digit year: (2009, 2010 etc) 
int     year(time_t t);    // the year for the given time

time_t now();              // return the current time as seconds since Jan 1 1970 
void    setTime(time_t t);
void    setTime(int hr,int min,int sec,int day, int month, int yr);
void    adjustTime(long adjustment);

/* date strings */ 
#define dt_MAX_STRING_LEN 9 // length of longest date string (excluding terminating null)
char* monthStr(uint8_t month);
char* dayStr(uint8_t day);
char* monthShortStr(uint8_t month);
char* dayShortStr(uint8_t day);
	
/* time sync functions	*/
timeStatus_t timeStatus(); // indicates if time has been set and recently synchronized
void    setSyncProvider( getExternalTime getTimeFunction); // identify the external time provider
void    setSyncInterval(time_t interval); // set the number of seconds between re-sync

/* low level functions to convert to and from system time                     */
void breakTime(time_t time, tmElements_t &tm);  // break time_t into elements
time_t makeTime(tmElements_t &tm);  // convert time elements into time_t

} // extern "C++"
#endif // __cplusplus
#endif /* _Time_h */

Код ошибки:

"C:\Users\Home\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\Home\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/include" "-IC:\Users\Home\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/lwip/include" "-IC:\Users\Home\AppData\Local\Temp\build27c3b10ae9e4832c957ff9f5660570ad.tmp/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11  -ffunction-sections -fdata-sections -w -x c++ -E -CC -DF_CPU=80000000L -DLWIP_OPEN_SRC   -DARDUINO=10611 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 -DARDUINO_BOARD="ESP8266_NODEMCU"  -DESP8266 "-IC:\Users\Home\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266" "-IC:\Users\Home\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\nodemcu" "-IC:\Users\Home\Documents\Arduino\libraries\Time" "C:\Users\\AppData\Local\Temp\build27c3b10ae9e4832c957ff9f5660570ad.tmp\sketch\sketch_feb18a.ino.cpp" -o "C:\Users\Home\AppData\Local\Temp\build27c3b10ae9e4832c957ff9f5660570ad.tmp\preproc\ctags_target_for_gcc_minus_e.cpp"
In file included from C:\Users\Home\AppData\Local\Temp\arduino_modified_sketch_214122\sketch_feb18a.ino:1:0:

C:\Users\Home\Documents\Arduino\libraries\Time/TimeLib.h:92:25: error: "(" may not appear in macro parameter list

#define minutesToTime_t((M)) ( (M) * SECS_PER_MIN)

                         ^

Используем библиотеку Time версии 1.5 из папки: C:\Users\Home\Documents\Arduino\libraries\Time
exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).

#18 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-17 22:48:01

Так говорю ж - результат тот же. Что с тем вариантом что у меня, что с тем, что вы предложили.

#19 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-17 11:14:13

Green пише:

Что пробовал?

Заменил на вот так (то есть убрал пробел) в TimeLib.h

Green пише:

Должно быть так

#define minutesToTime_t((M)) ( (M) * SECS_PER_MIN) 

#20 Re: Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-16 17:52:12

В смысле пробел убрать? Пробовал - результат тот же. Да и сам TimeLib.h успешно компилится, если не вызывать его макросы

#21 Программирование Arduino » Вопрос к знаоткам С++ по макросам » 2017-02-15 22:48:42

Андрей
відповідей: 19

Всем привет.
Гуру С++, объясните пожалуйста почему не компилится скетч.
Вот код:

#include <TimeLib.h>
void setup() {
  unsigned long t=minutesToTime_t(1);
  Serial.println(t);
}

void loop() {
}

в TimeLib.h есть такой макрос:

/* Useful Macros for converting elapsed time to a time_t */
#define minutesToTime_t ((M)) ( (M) * SECS_PER_MIN)   

вот его я и вызываю в своем скетче, но он не компилится, выдает ошибку:
TimeLib.h:92:27: error: 'M' was not declared in this scope
#define minutesToTime_t ((M)) ( (M) * SECS_PER_MIN) 
то есть он видит, что есть такой макрос, но почему-то не хочет его исполнять, а расценивает его как функцию, как я понимаю? Или макрос можно использовать только в том же файле в котором он объявлен?

#22 Re: Аппаратные вопросы » Управление андроид планшетом из arduino » 2017-02-11 00:40:33

push сообщения? Если вы новичек, попробуйте проект bkynk.cc там все предельно просто и доступно плюс приложение на андроид из которого будете рулить своей ардуиной. Единственный минус - дока на английском, но даже базового английского хватит для понимания.

#23 Re: Программирование Arduino » ПОМОГИТЕ!!! Выдает ошибку » 2016-12-11 10:16:20

Он не находит библиотеку LiquidCrystal_I2C, очевидно она у тебя не установлена

#24 Re: Аппаратные вопросы » Ардуино не отображается как УСБ девайс » 2016-11-19 13:10:40

Если брали в arduino-ua.com, советовал бы поменять по гарантии и не париться. Если заказывали из Китая - попробуйте перепрошить бутлоадер. Виртуальный COM-порт создается? Какой чип на ней стоит для связи по USB?

#25 Re: Проекты » Serial Monitor Pro » 2016-10-13 18:26:33

Интересный проект. Хорошо бы иметь возможность переключения вывода - символы/16-ричный система/бинарная.

Підвал форуму