Ви не увійшли.
Цікавий проект. Було б добре, якби ви виклали фото і схему.
Ну ТЗ у вас не тривиальное. Я бы рекомендовал начать с малого, а потом уже навешивать доп. функционал
Прошил скетч, отправляющий данные в сериал. Светодиоды Rx Tx не мигают, если подключиться к Rx Tx 328ого, то данные приходят. Получается, что 16U2 не рабочая? Если бы она программировалась так же просто как и 328 я бы туда тоже какой-то блинк прошивал и смотрел что происходит (зажечь те же Rx Tx светодиоды), а так это надо даташит вкуривать и на С программировать. Еще какие-то идеи будут как сузить круг подозреваемых?
Прошивал программатором USBTiny, фьюзы тоже прошивал, как рекомендовалось в документации.
Основной чип, который 328ой, программируется нормально, через программатор только. Как раз блинк в него и прошивал. Контакты от 16U2 до Rx Tx 328ого тоже звонятся нормально.
Просто человек считает что там железный USB, не зависящий от контроллера.) Как и загрузчик.)
Ну вообще там же действительно железный ЮСБ, но от контроллера он конечно зависит. Но контроллер-то сам живой, т.к. его можно прошить и потом прочитать эту прошивку. Если бы он был не живой или не стартовал, я бы этого не смог сделать, насколько я понимаю?
Ну с RESET Андрей не въехал, бывает . Вопрос другой, он не понял что DFU нет в микроконтроллере . Я тоже наступал на эти грабли с STM32, решив (ну все бывают однажды в роли нуба ) что это как бы "вечное" и "нерушимое" зашитое "навсегда" производителем .
Не понял, куда я не въехал с резетом?
Насчет ДФУ - вы оказались правы, в заведомо рабочей Уне его действительно не было, хотя это был итальянский оригинал, хоть и старый. Может я его когда-то перепрошивал и выбрал прошивку без ДФУ, а может и производитель накосячил, кто знает. Перепрошил прошивку UNO-dfu_and_usbserial_combined.hex и устройство стало появляться после закорачивания резета. Но это на рабочей. На нерабочей хоть и перепрошил в него ДФУ все равно ничего не появляется. Итого я делаю вывод: либо сгорел аппаратный ЮСБ на чипе, либо все же нет контакта по пути от ножек D+ D- контроллера до разъема ЮСБ. Это все возможные варианты или я что-то упустил?
Потому, что чип не может ответить хосту USB, так же как и по UART-у. Пока действует RESET не работает ничего!
Но я же не на совсем его замыкаю, а на несколько секунд. Судя по документации после этого он должен зайти в режим ДФУ.
На заведомо рабочей Уно если закоротить резет и землю на Atmega16U2 никакое ДФУ устройство не создается.
То что оно не создается на проблемной, о которой этот топик, можно понять, а вот на рабочей почему не создается? Корочу Резет к земле - пропадает СОМ порт, убираю перемычку - появляется.
Но если она программируется, значит центральный процессор работает? Я понимаю что могут быть выжжены какие-то порты GPIO, в том числе USB, но если он прошивку можно записать и считать, то по идее ядро работает?
Да гугл читал вчера весь день. Atmega16U2 я перепрошил, как я и написал в первом посте. Правда не таким способом. Этот способ, кстати, у меня не работает. На заведомо рабочей Уно если закоротить резет и землю на Atmega16U2 никакое ДФУ устройство не создается. Вообще ничего не появляется в диспечере устройств (пробовал на Вин10 и Вин8). Я перепрошил с помощью программатора, из чего и сделал вывод о том, что чип жив.
Всем привет. Прошу совета. Есть ардуино уно, при подключении к компу не создается СОМ порт. Подключился к Atmega16U2 по ICSP - отвечает, прошил в нее стандартную ардуиновскую прошивку - прошилась, но СОМ порт все равно не создается. Прозвонил контакты D+ D- от разъема до Atmega16U2 - все ок, питание на VCC и UVCC есть. Прозвонил дорожки до конденсатора UCAP - все ок. Куда дальше копать не знаю. Если она шьется программатором, значит кварц подключен правильно. Почему же тогда она может не создавать виртуальный СОМ порт?
Очень интересно, смотрю ваше видео по сборке самого коллектора.
Выложить схему и скетч не думали? Просто, ИМХО, повторить по выложенной схеме будет стоить те же деньги, за которые вы его продаете + еще и время, так что кому нужно все равно купят. Зато появится теоретическая возможность доделать/дописать свой функционал. То есть купить все равно будет выгоднее, но так еще одно конкурентное преимущество появится. Да и вообще самоделкины любят опенсорс и не доверяют закрытым решениям.
Блин, точно.
Я не обратил внимания, что макрос объявлен, но не используется в самом TimeLib.h
Еще раз спасибо за разъяснения.
Шевелитесь, Андрей, шевелитесь. Спасибо хочу услышать.))
Спасибо! Так и правда работает. Не могу только понять как оно компилилось со скобками без ошибок, когда я просто вставлял TimeLib.h в свой скетч.
#include <TimeLib.h> где?
В смысле где лежит? В хомах арудино ИДЕ libraries\Time\TimeLib.h
Давайте я еще раз опишу проблему.
Если я делаю вот так:
#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).
Так говорю ж - результат тот же. Что с тем вариантом что у меня, что с тем, что вы предложили.
Что пробовал?
Заменил на вот так (то есть убрал пробел) в TimeLib.h
Должно быть так
#define minutesToTime_t((M)) ( (M) * SECS_PER_MIN)
В смысле пробел убрать? Пробовал - результат тот же. Да и сам TimeLib.h успешно компилится, если не вызывать его макросы
Всем привет.
Гуру С++, объясните пожалуйста почему не компилится скетч.
Вот код:
#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)
то есть он видит, что есть такой макрос, но почему-то не хочет его исполнять, а расценивает его как функцию, как я понимаю? Или макрос можно использовать только в том же файле в котором он объявлен?
push сообщения? Если вы новичек, попробуйте проект bkynk.cc там все предельно просто и доступно плюс приложение на андроид из которого будете рулить своей ардуиной. Единственный минус - дока на английском, но даже базового английского хватит для понимания.
Он не находит библиотеку LiquidCrystal_I2C, очевидно она у тебя не установлена
Если брали в arduino-ua.com, советовал бы поменять по гарантии и не париться. Если заказывали из Китая - попробуйте перепрошить бутлоадер. Виртуальный COM-порт создается? Какой чип на ней стоит для связи по USB?
Интересный проект. Хорошо бы иметь возможность переключения вывода - символы/16-ричный система/бинарная.