Herz 4 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба Поручили мне повторить этот проект. Он немного устарел уже, но показался вполне выполнимым: комплектующие ещё достать можно и весь процесс расписан очень подробно. И вот, платы собраны. Наступил этап программирования. Поскольку опыт у меня с Ардуино невелик, с самого начала натолкнулся на трудности. Первый шаг. Для того, чтобы записать в МК бутлоадер, предписывается дополнить текстовый файл boards.txt (что находится в папке установки софта Ардуино) следующими строками: ################################################################ # For Arduino IDE v 1.6.3 or later # Tested successfully using Arduino as ISP programmer to burn # bootloader on OWHL. # Cut and paste this entry into your existing boards.txt file # found inside the /hardware/arduino/avr/ directory. # Select the OWHL (8MHz internal clock) entry in the # Arduino IDE menu under Tools>Board> OWHLatmega328.name=OWHL (8 MHz internal clock) OWHLatmega328.upload.tool=arduino:avrdude OWHLatmega328.upload.protocol=arduino OWHLatmega328.upload.maximum_size=30720 OWHLatmega328.upload.speed=57600 OWHLatmega328.bootloader.low_fuses=0xE2 OWHLatmega328.bootloader.high_fuses=0xDA OWHLatmega328.bootloader.extended_fuses=0x05 OWHLatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex OWHLatmega328.bootloader.unlock_bits=0x3F OWHLatmega328.bootloader.lock_bits=0x0F OWHLatmega328.bootloader.tool=arduino:avrdude OWHLatmega328.build.mcu=atmega328p OWHLatmega328.build.f_cpu=8000000L OWHLatmega328.build.core=arduino OWHLatmega328.build.variant=standard ############################################################# И теперь в списке выбираемых плат в отладчике должна, по идее, появиться следующая: “OWHL (8 MHz internal clock)” Но, вот какое дело. У меня инсталлированы сразу три отладчика: Arduino v.1.8.16, Arduino IDE v.2.0.0-beta.10 и Visual Studio с плагином vMicro. И первые две напрочь не видят новой платы в списке. vMicro видит, то есть на изменение файла boards.txt он отреагировал. Больше того, если я вообще убираю этот файл из своей директории, то "Arduino" и "Arduino IDE" никак этого не замечают: в списке выбора плат у них остались все, что и были. И лишь vMicro в соответствующей строке меню теперь пишет: "Find or install a board...", то есть не находит списка, что логично. Складывается впечатление, что первые две программы хранят, на самом деле, свои списки поддерживаемых плат совсем в другом месте. Кто-нибудь в курсе, где именно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба В профиле пользователя. Поиском найдется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба Если искать лень, то FileMon или Resource Monitor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба Но как он должен называться? Так же: boards.txt ? Такого больше нигде не видно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба 38 minutes ago, Herz said: Но как он должен называться? Так же: boards.txt ? Такого больше нигде не видно. Вы же один файл boards.txt нашли. Так вот, попробуйте из него взять какую-нибудь строчку и ее использовать для поиска файлов по содержимому. Может в новых версиях эта информация лежит в файлах с другим именем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба %USERPROFILE%\AppData\Local\Arduino15\packages\... все boards.txt там Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 10 октября, 2021 Опубликовано 10 октября, 2021 · Жалоба Огромное спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Итак, первый скетч был скомпилирован и залит в МК. Этот скетч должен быть настроить часы реального времени на DS3231 через последовательный порт. Вот такой коротенький код: Скрытый текст /* settimeSerial.ino Use this to get your real time clock date and time values synchronized closely. Copyright Luke Miller 2015 To use this program, upload it to your board, then open the serial monitor at 57600 baud. Make sure the serial monitor is set to send a 'newline' when you hit return (see the menu in the lower right of the Arduino serial monitor window) You will be prompted to enter a date and time in the format: YYYY MM DD HH MM SS using 24hr time format. For example, July 8, 2015 at 3:12:30 PM (afternoon) would be entered as: 2015 7 8 15 12 30 Type that in to the serial monitor window, then wait to hit Enter until you reach exactly that time. The new time will be uploaded immediately, and the result will be printed to the serial monitor. If you miss your time, you can enter a new date and time in the same format and try again without needing to reboot. */ #include <Wire.h> #include <SPI.h> // not used here, but needed to prevent a RTClib compile error #include "RTClib.h" // AVR-based Arduinos (Uno, MEGA etc) use the Wire bus for I2C // with the pins located near the Aref pin. // SAM-based Arduinos (Due) refer to the bus attached to those // same pins near Aref as "Wire1", so this little block of code // automagically swaps Wire or Wire1 in as necessary in the // main code below. //#ifdef __AVR__ // #define Wire Wire // For AVR-based Arduinos //#elif defined(ARDUINO_SAM_DUE) // #define Wire Wire1 // for Arduino DUE, Wire1 I2C bus //#endif // Setup an instance of DS1307 naming it rtc // You can leave this unchanged when using a DS3231, since they are // both updated using the same I2C commands and addresses RTC_DS1307 rtc; // Declare variables to hold user input uint16_t myyear; uint8_t mymonth; uint8_t myday; uint8_t myhour; uint8_t myminute; uint8_t mysec; DateTime myTime; DateTime currTime; long millisVal; void setup() { Serial.begin(57600); // adjust your serial monitor baud to 57600 to match while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } Serial.println(F("Hello")); //Wire.begin(); rtc.begin(); // Calls Wire.begin() internally Serial.println(F("Enter a new date and time in the following format")); Serial.println(F("all on one line: ")); Serial.println(F("\tYYYY MM DD HH MM SS")); Serial.println(F("and hit enter when ready to set time")); millisVal = millis(); } void loop() { if (millis() > millisVal + 1000){ millisVal = millis(); // update millisVal currTime = rtc.now(); // read current time from the rtc Serial.print(F("RTC time: ")); char buf[20]; // create a character array to hold the time as a string Serial.println(currTime.toString(buf,21)); // print the time as a string } // When the user has entered a date and time value in the serial // monitor and hit enter, the following section will execute. while (Serial.available() > 0) { // Expect the year first myyear = Serial.parseInt(); // Expect month next mymonth = Serial.parseInt(); // Expect day next myday = Serial.parseInt(); // Expect hour next myhour = Serial.parseInt(); // Expect minute next myminute = Serial.parseInt(); // Expect second next mysec = Serial.parseInt(); // When the enter symbol '\n' comes along, convert the // values to a DateTime object and set the clock if (Serial.read() == '\n'){ myTime = DateTime(myyear,mymonth,myday,myhour,myminute,mysec); Serial.println(F("Setting time")); rtc.adjust(myTime); } } } Но, когда я открываю окно Serial Monitor, то вижу в нём не ожидаемые "Hello" и т.д., а какие-то кракозябры: Цитата �x�x�x�x��x�xx�x��x�x�x�x�xx���x�x��x��xx�x�x�xx��x�x��xx�x�x�x�x��x��x��x�x�x���x��x�x�x��x��xx�x��x��x���x��x�x�xx�x�xxx�x�x���x��x���x��x�x��xx�x��x�x����x��xx�x�x�x�x�x�x��x�x�xx��x�x�x��x�x���x�x��xxx��x�x��xx�x�x�x�x��x�x�x�x���x�x�x��x���x�xx�x�x��x��x���x�x�x��xx�x�x�x�x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x�������x��x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x��������x��x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x������x��xf�f�`�f�f�f���xxp �����������~f�~fxp� �f�f�`~���f���xxp ��� ��������~f�~fx�xf���f�f�`�f�f�f���xxp �����������~f�~fxs� �f�f�`�f�f�f���xxp �����������~f�~fx�怘�f�f�`�f�f�f���xx� �����������~f�~fx|� �f�f�`�f�f�f���xx� �����������~f�~�xxd �f�f�`�f�f�f���xxp ��� ��������~f�~�x�xf���f�f�`�f�f�f���xx� �����������~f�~�x怘�f�f�`~���f���xxp ��� ��������~f�~�x�怘�f�f�`�f�f�f���xx� �����������~f�~�x~l �f�f�`�f�f�f���xx� �����������~f�~�xxf �f�f�`�f�f�f���xx� �����������~f�~�x�xf���f�f�`~���f���xxp �����������~f�~�x怘�f�f�`�f�f�f���xx� �����������~f�~�x�怘�f�f�`�f�f�f���xx� �����������~f�~�x~f �f�f�`�f�f�f���xxx ��� ��������~f�~��f�f�`�f�f�f���xxp �����������~f�~��f�f�`�f�f�f���xx � �����������~f�~`��f�f�`�f�f�f���xx� �����������~f�~x��f�f�`�f�f�f���xxp ��� ��������~f�~���f�f�`�f�f�f���xxp ��� ��������~f�~f��f�f�`�f�f�f���xxp ��� ��������~f�~f��f�f�`�f�f�f���xx� �����������~f�~f`��f�f�`�f�f�f���xxp �����������~f�~fx�� Причём, даже здесь, в виде цитаты, они выглядят иначе, чем в Notepad++: , и иначе, чем в самом окошке Serial Monitor. В чём может быть причина? Битрейт настроен правильно: 57600. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 7 minutes ago, Herz said: В чём может быть причина? Битрейт настроен правильно: 57600. Если сопоставить количество принятых символов и количество переданных, то получается, что со скоростью явно что-то не так. Могу предположить, что мега работает на 1МГц вместо 8. Попробуйте скорость 7200. Ну, или осциллографом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 7200 там не выбрать, а вручную не прописывается. Попробую осциллографом. П.С. Несущая, по осциллографу, 14.8кГц. Что, как бы, соответствует битрейту 14400. Тоже в Мониторе не прописан... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Можно сначала попробовать передавать один символ 0xFF, потом 0xFE, потом 0xFC, и так далее до 0. Т.е. - постепенно увеличивая длительность импульса лог.0 и следя за результатом приёма. На основании чего сделать вывод о реальной скорости UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба То есть, написать такой тестовый скетч? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 59 minutes ago, Herz said: Тоже в Мониторе не прописан... Возьмите нормальный эмулятор терминала. TeraTerm, например, позволяет вбить любое значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Ну я не знаю как у Вас устроена программа. Если есть возможность как-то в программе управлять выдачей в UART определённых символов (например кнопкой), то можно чтобы при нажатии выдавался 0xFF. Один символ 0xFF. При следующем нажатии = один 0xFE и т.д. И смотреть что приходит и приходит ли. И эмулятор терминала лучше такой, который может показывать бинарные коды принимаемых символов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Понятно. Подбирая битрейт при последовательном декодировании на осциллографе, смог добиться похожего на правду: Цитата RTC_time:_2000__01__01_03:22: ... И это битрейт 29.6 кбод. На 28.8 (что могло быть, если частота осциллятора вдруг вдвое меньше должной) - белиберда. Выходит, частота совсем какая-то неадекватная, далеко не 8 МГц. Реально это как-то исправить? Или менять чип? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться