В общем разобрался. Проблема в jtag2updi и Serial1, они пишут, что если быстро занимается порт то .... в общем .опа. Вот так работает нормально, без Reset:
Все скетчи, которые Вы alex_r61, написали, попробовал. Никакой реакции платы. В тот момент, когда начинается загрузка ранее всегда по крайней мере однократно моргал синий светодиод. Сейчас вообще молчит. Только постоянно горят красный и зеленый. если наживаю Resert - при нажатой кнопке гаснет красный, отпуска. - снова загорается.
Во время загрузки, когда долго висит на строке
Overriding Baud Rate : 115200
пробовал нажимать Reset - сразу выскакивает следующее
Programmer Type : JTAGMKII_PDI
Description : JTAGv2 to UPDI bridge
M_MCU hardware version: 1
M_MCU firmware version: 6.00
S_MCU hardware version: 1
S_MCU firmware version: 6.00
Serial number: 0a:0b:0c:0d:0e:0f
Vtarget : 5.0 V
Произошла ошибка при загрузке скетча
avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description
avrdude: jtagmkII_reset(): bad response to reset command: RSP_ILLEGAL_MCU_STATE
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: jtagmkII_close(): bad response to sign-off command: RSP_ILLEGAL_MCU_STATE
На второй такой же плате все работает - по последнему скетчу - моргает светодиод (красный) и в мониторе порта пишется "blink1" приблизительно раз в 4 сек (ну, выполняется скетч).
Отключил плату Thinary Nano Every (с порта 13). Подключил старую добрую UNO на порт COM8. В IDE выбрал Arduino UNO. А в выборе порта пишется COM8(Thinary Nano Every). Скетчи в UNO не грузятся
В устройствах скрытые COM'ы удаляли? Была схожая ситуация, пере...сь com-порты. Удалил все скрытые, в реестре очистил содержимое ComDB по всем веткам CurrentControlSetxxx - нормализовалось. Когда удаляете скрытые COM'ы в устройствах windows предлагает удалить драйвера.
У меня та же проблема с заливкой - перестало заливать прошивки. Сделал что посоветовали. Теперь некоторые скетчи заливаются сразу, а некоторые через reset. Ну вроде заливается и ок.
Теперь не могу подружить с дисплеем oled ssd1306 128x64
подключил SCL -> A5, SDA -> A4
Проблема 1:
при компиляции
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: error: 'TWSR' was not declared in this scope
TWSR = 0;
^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: note: suggested alternative: 'TWI0'
TWSR = 0;
^~~~
TWI0
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h: In member function 'uint8_t AvrI2c::read(bool)':
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: error: 'TWINT' was not declared in this scope
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: note: suggested alternative: 'TWI_t'
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~~
TWI_t
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: error: 'TWEN' was not declared in this scope
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: note: suggested alternative: 'TWI0'
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~
TWI0
И т.д.
Проблема 2:
С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)
А библиотека дисплея "обычная" или специально портированная под 4808? - по ошибкам похоже, что либа под обычную ардуину, а для 4808 нужны, видимо, другие имена регистров I2c
С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)
Даже не понимаю с чего начать.
начните с запуска скрипта I2C-scaner -смотрите в примерах к библиотеке Wire. Если дисплей не виден в сканере - искать другие библиотеки экрана бесполезно, проблема на системном уровне
i2c сканер завис на первой итерации цикла где-то в районе error = Wire.endTransmission(); без отладчика грустно
// --------------------------------------
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>
//#define Serial Serial1
void setup()
{ delay(2000);
PORTC.DIR = PORTC.DIR | PIN2_bm;
Serial1.begin(115200);
delay(300);
Serial1.println("Serial 1 ready: \n");
Wire.begin();
}
void loop()
{
byte error, address;
int nDevices;
Serial1.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ )
{
Serial1.println(address, HEX);
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
Serial1.println("beginTransmission");
error = Wire.endTransmission();
Serial1.println("endTransmission");
if (error == 0)
{
Serial1.print("I2C device found at address 0x");
if (address < 16)
Serial1.print("0");
Serial1.print(address, HEX);
Serial1.println(" !");
nDevices++;
}
else if (error == 4)
{ Serial1.print("Unknown error at address 0x");
if (address < 16)
Serial1.print("0");
Serial1.println(address, HEX);
}
}
if (nDevices == 0)
Serial1.println("No I2C devices found\n");
else
Serial1.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
в файле /Thinary-megaavr/variants/nona4808/pins_arduino.h расписаны все порты:
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX pins are NOT connected to anything by default.
SERIAL_PORT_MONITOR Serial
SERIAL_PORT_HARDWARE Serial1
SERIAL_PORT_USBVIRTUAL Serial
--распиновка--
Serial D2(TX0) D3(RX0)
Serial1 TX1 (D1) RX1(D0) (USB)
Serial2 none
То есть работаем с Serial1
2. Заливка прошивки. Пока UART занят, прошивка не заливается и нужно нажимать кратковременно кнопку reset на плате либо удерживать до начала загрузки, а потом вовремя отпустить. А иногда не надо и заливается прошивка норм (это бесит)
3. Все хозяйство от платы лежит C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0
реализация библиотек EEPROM HID SoftwareSerial Wire и SPI под нашу плату
Соответственно, если во внешний библиотеках используется своя реализация этих вещей , то под плату ничего не скомпилируется. Это существенно ограничивает свободу творчества, но повышает уровень зад...орства.
4. Распиновка
По даташиту Microchip TWI у чипа 4808 имеет фичу:
Independent Master and Slave operation
– Combined (same pins) or Dual mode (separate pins)
– Single or multi-master bus operation with full arbitration support
Открываем C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\variants\nona4808\pins_arduino.h
А там вся распиновка
Для Dual mode (separate pins)
SDA это пины D4 и D18(A4)
SCL это пины D5 и D19(A5)
То есть у Thinary board EVERY NANO пины самого чипа Atmega4808 PF2 и PF3 распаяны на A4 и A5 . Это TWIS (Slave) pins.
А TWIM (Master) pins PA2, PA3 распаяны на D4 и D5.
Поэтому при использовании библиотеки Thinary Wire (as Master) подцепляем SDA к PA2 (D4) и SCL к PA3 (D5).
(спасибо ребятам https://www.avrfreaks.net/forum/split-nano-every-use-atmega4808)
На этом месте я вообще запутался, потому что не изучил еще как что должно работать под капотом всех этих библиотек. НО
5. Подключаем дисплей I2C
I2C дисплей типаSSD1306 подключился SDA к D4 и SCL к D5 и с библиотекой U8G2 все заработало!
#include <Arduino.h>
#include <U8x8lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
// Please UNCOMMENT one of the contructor lines below
// U8x8 Contructor List
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);
// End of constructor list
void setup(void)
{
/* U8g2 Project: SSD1306 Test Board */
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(5, 0);
digitalWrite(4, 0);
u8x8.begin();
u8x8.setPowerSave(0);
}
void loop(void)
{
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0,0,"Hello World!");
u8x8.refreshDisplay(); // only required for SSD1606/7
delay(2000);
}
очевидно - подключить GPS ни к тому порту, на котором USB. а к другому. соответвенно и ноги rx tx будут другие. Какие - я не знаю, смотрите описание платы
Сделал распиновку платы (выложил еще на avrfreaks.net , но там глухо). Можете посмотреть что не так или что добавить. Не знаю про управлениями прерываниями, таймеры. Может с ШИМ напутал. потому что в ядре указаны пины как на картинке, а в даташите на микросхему совсем другие.
Приветствую уважаемых форумчан. Прошу помощи с такой же платой, не могу запустить на ней диммер с детектором нуля.Понимаю что проблема в таймерах. Поделитесь библиотекой пожалуйста. В датташит прошу не посылать, я там был, для меня это тёмный лес. Сам скеч прикладываю.
/*
https://raw.githubusercontent.com/Thinary/ThinaryArduino/master/Thinary-...
Ссылка на загрузчик плат
/*
Диммер переменки на Arduino. 6 каналов для полной прожарки
На меге работает
*/
#include <EEPROM.h>
#include <Watchdog.h>
// ***** I2C дисплей *****
#include <LiquidCrystal_I2C.h> // https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#define cols 20
#define rows 4
LiquidCrystal_I2C lcd(0x27, cols, rows);
// подключаем кучу выходов на симисторы
#define dimPin1 4
#define dimPin2 5
#define dimPin3 6
#define zeroPin 2
#define counterPin 3
#include <TimerOne.h>
volatile byte tic, Dimmer1 = 20, Dimmer2 = 50, Dimmer3 = 200; // Переменные для управления нагрузкой
volatile int counterWater = 0; // Переменная для хранения протока
void setup()
{
wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
lcd.begin();
lcd.backlight();
pinMode(dimPin1, OUTPUT);
digitalWrite(dimPin1, 0);
pinMode(dimPin2, OUTPUT);
digitalWrite(dimPin2, 0);
pinMode(dimPin3, OUTPUT);
digitalWrite(dimPin3, 0);
pinMode(zeroPin, INPUT); // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode(counterPin, INPUT); // настраиваем порт на вход для отслеживания изменения состояния протока воды
attachInterrupt(0, detect_up, FALLING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
attachInterrupt(1, counter_Water, CHANGE); // настроить срабатывание прерывания interrupt1 на pin 3 на изменение
Timer1.initialize(40); // Интервал срабатывания таймера в мкс
Timer1.attachInterrupt(timer_interrupt); //будет вызыватся каждый раз при отсчете заданого времени
Timer1.stop();
delay(30000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
Serial1.begin(9600);
wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
}
void loop() {
wdt_reset();
lcd.clear();
lcd.print("It's just a demo");
/*
раскомментировать для ввода числа диммирования чеерез монитор порта
while (Serial1.available()) {
Dimmer11 = Serial1.parseInt();
Serial1.println(Dimmer11);
}
*/
}
void counter_Water() {
counterWater++;
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() { // прерывания таймера срабатывают каждые 40 мкс
tic++; // счетчик
if (tic > Dimmer1) // если настало время включать ток
digitalWrite(dimPin1, 1); // врубить ток
if (tic > Dimmer2) // если настало время включать ток
digitalWrite(dimPin2, 1); // врубить ток
if (tic > Dimmer3) // если настало время включать ток
digitalWrite(dimPin3, 1); // врубить ток
}
void detect_up() { // обработка внешнего прерывания на пересекание нуля снизу
tic = 0; // обнулить счетчик
Timer1.restart(); // перезапустить таймер
attachInterrupt(0, detect_down, RISING); // перенастроить прерывание
}
void detect_down() { // обработка внешнего прерывания на пересекание нуля сверху
tic = 0; // обнулить счетчик
Timer1.stop(); // остановить таймер
digitalWrite(dimPin1, 0); // вырубить ток
digitalWrite(dimPin2, 0); // вырубить ток
digitalWrite(dimPin3, 0); // вырубить ток
attachInterrupt(0, detect_up, FALLING); // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
Ясно. Я уже писал выше что исходя из схемы не видно цепи для автоматизации подачи сигнала Reset как на обычных UNO на 328P(PB).
МК интересный, но с этой платой китайцы что-то перемудрили. Лучше свои делать, огород с USB-TTL и мс переходника в реальных проектах не нужен.
В общем разобрался. Проблема в jtag2updi и Serial1, они пишут, что если быстро занимается порт то .... в общем .опа. Вот так работает нормально, без Reset:
А так можно просто нажать Reset, затем загрузку.
Что-то у меня не получается ничего.
Все скетчи, которые Вы alex_r61, написали, попробовал. Никакой реакции платы. В тот момент, когда начинается загрузка ранее всегда по крайней мере однократно моргал синий светодиод. Сейчас вообще молчит. Только постоянно горят красный и зеленый. если наживаю Resert - при нажатой кнопке гаснет красный, отпуска. - снова загорается.
Во время загрузки, когда долго висит на строке
Overriding Baud Rate : 115200
пробовал нажимать Reset - сразу выскакивает следующее
JTAG ICE mkII sign-on message:
Communications protocol version: 1
M_MCU:
boot-loader FW version: 1
firmware version: 6.00
hardware version: 1
S_MCU:
boot-loader FW version: 1
firmware version: 6.00
hardware version: 1
Serial number: 0a:0b:0c:0d:0e:0f
Device ID: Thinary mkII
AVR Part : ATmega4808
Chip Erase delay : 0 us
PAGEL : P00
BS2 : P00
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 0
StabDelay : 0
CmdexeDelay : 0
SyncLoops : 0
ByteDelay : 0
PollIndex : 0
PollValue : 0x00
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
prodsig 0 0 0 0 no 61 61 0 0 0 0x00 0x00
fuses 0 0 0 0 no 9 0 0 0 0 0x00 0x00
fuse0 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse1 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse2 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse4 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse5 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse6 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse7 0 0 0 0 no 1 0 0 0 0 0x00 0x00
fuse8 0 0 0 0 no 1 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 0 0 0x00 0x00
data 0 0 0 0 no 0 0 0 0 0 0x00 0x00
usersig 0 0 0 0 no 64 64 0 0 0 0x00 0x00
flash 0 0 0 0 no 49152 128 0 0 0 0x00 0x00
eeprom 0 0 0 0 no 256 64 0 0 0 0x00 0x00
Programmer Type : JTAGMKII_PDI
Description : JTAGv2 to UPDI bridge
M_MCU hardware version: 1
M_MCU firmware version: 6.00
S_MCU hardware version: 1
S_MCU firmware version: 6.00
Serial number: 0a:0b:0c:0d:0e:0f
Vtarget : 5.0 V
Произошла ошибка при загрузке скетча
avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description
avrdude: jtagmkII_reset(): bad response to reset command: RSP_ILLEGAL_MCU_STATE
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: jtagmkII_close(): bad response to sign-off command: RSP_ILLEGAL_MCU_STATE
avrdude done. Thank you.
Может я плату загубил?
На второй такой же плате все работает - по последнему скетчу - моргает светодиод (красный) и в мониторе порта пишется "blink1" приблизительно раз в 4 сек (ну, выполняется скетч).
По идее надо кратковременно нажать RESET когда появляется надпись - Перезагрузка платы открытием/закрытием порта COM13 на 1200bps
Теперь еще одна напасть...
Отключил плату Thinary Nano Every (с порта 13). Подключил старую добрую UNO на порт COM8. В IDE выбрал Arduino UNO. А в выборе порта пишется COM8(Thinary Nano Every). Скетчи в UNO не грузятся
https://yadi.sk/d/YPlwoVkUTFHc7A
1-й 2-й мне помогало. возможно придется переставить драйвера.
Драйвера чего возможно придется переставить? Редактирование реестра ничего не дало.
В устройствах скрытые COM'ы удаляли? Была схожая ситуация, пере...сь com-порты. Удалил все скрытые, в реестре очистил содержимое ComDB по всем веткам CurrentControlSetxxx - нормализовалось. Когда удаляете скрытые COM'ы в устройствах windows предлагает удалить драйвера.
Спасибо за тему
У меня та же проблема с заливкой - перестало заливать прошивки. Сделал что посоветовали. Теперь некоторые скетчи заливаются сразу, а некоторые через reset. Ну вроде заливается и ок.
Теперь не могу подружить с дисплеем oled ssd1306 128x64
подключил SCL -> A5, SDA -> A4
Проблема 1:
при компиляции
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: error: 'TWSR' was not declared in this scope
TWSR = 0;
^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:65:5: note: suggested alternative: 'TWI0'
TWSR = 0;
^~~~
TWI0
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h: In member function 'uint8_t AvrI2c::read(bool)':
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: error: 'TWINT' was not declared in this scope
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:19: note: suggested alternative: 'TWI_t'
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~~
TWI_t
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: error: 'TWEN' was not declared in this scope
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~
C:\Users\user\Documents\Arduino\libraries\SSD1306Ascii\src/utility/AvrI2c.h:77:34: note: suggested alternative: 'TWI0'
execCmd((1 << TWINT) | (1 << TWEN) | (last ? 0 : (1 << TWEA)));
^~~~
TWI0
И т.д.
Проблема 2:
С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)
Даже не понимаю с чего начать.
А библиотека дисплея "обычная" или специально портированная под 4808? - по ошибкам похоже, что либа под обычную ардуину, а для 4808 нужны, видимо, другие имена регистров I2c
Когда устанавливаешь плату по ссылке - https://github.com/Thinary/ThinaryArduino библиотеки есть и файл переназначения портов
Вообще поделитесь тогда опытом, кто что использовал для дисплея?
и насколько критично это сообщение?
ПРЕДУПРЕЖДЕНИЕ: библиотека Wire должна запускаться на архитектурах megaavr и может быть несовместима с вашей платой на архитектуре avr.
Вот вывод компилятора с библиотекой SSD1306Ascii
Все подлинковалось из нужных вроде мест библиотеки для платы из папки Thinary от кетайцев
С каким-то вариантом библиотеки скомпилировалось, но дисплей не реагирует (адрес 0x3C)
Даже не понимаю с чего начать.
начните с запуска скрипта I2C-scaner -смотрите в примерах к библиотеке Wire. Если дисплей не виден в сканере - искать другие библиотеки экрана бесполезно, проблема на системном уровне
i2c сканер завис на первой итерации цикла где-то в районе error = Wire.endTransmission(); без отладчика грустно
i2c сканер завис на первой итерации цикла где-то в районе error = Wire.endTransmission(); без отладчика грустно
Код сканера откуда брали? - нужно брать из папки библиотеки для вашей версии платы
Судя по комментам в начале кода - это версия для старых атмелов
для этой версии нет сканера, хотя на вскидку там алгоритм простой: Просто в цикле start и endTransmission.
Что-то с библиотекой китайской wire или twi.
Победил частично. Видимо надо хорошо разбираться в программировании железа, а мне хотелось не вникая.
Суть в следующем.
1. Работа с Serial.
В библиотеки для платы https://github.com/Thinary/ThinaryArduino
в файле /Thinary-megaavr/variants/nona4808/pins_arduino.h расписаны все порты:
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX pins are NOT connected to anything by default.
SERIAL_PORT_MONITOR Serial
SERIAL_PORT_HARDWARE Serial1
SERIAL_PORT_USBVIRTUAL Serial
--распиновка--
Serial D2(TX0) D3(RX0)
Serial1 TX1 (D1) RX1(D0) (USB)
Serial2 none
То есть работаем с Serial1
2. Заливка прошивки. Пока UART занят, прошивка не заливается и нужно нажимать кратковременно кнопку reset на плате либо удерживать до начала загрузки, а потом вовремя отпустить. А иногда не надо и заливается прошивка норм (это бесит)
3. Все хозяйство от платы лежит C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0
реализация библиотек EEPROM HID SoftwareSerial Wire и SPI под нашу плату
Соответственно, если во внешний библиотеках используется своя реализация этих вещей , то под плату ничего не скомпилируется. Это существенно ограничивает свободу творчества, но повышает уровень зад...орства.
4. Распиновка
По даташиту Microchip TWI у чипа 4808 имеет фичу:
Independent Master and Slave operation
– Combined (same pins) or Dual mode (separate pins)
– Single or multi-master bus operation with full arbitration support
Открываем C:\Users\%username%\AppData\Local\Arduino15\packages\thinary\hardware\avr\1.0.0\variants\nona4808\pins_arduino.h
А там вся распиновка
Для Dual mode (separate pins)
SDA это пины D4 и D18(A4)
SCL это пины D5 и D19(A5)
То есть у Thinary board EVERY NANO пины самого чипа Atmega4808 PF2 и PF3 распаяны на A4 и A5 . Это TWIS (Slave) pins.
А TWIM (Master) pins PA2, PA3 распаяны на D4 и D5.
Поэтому при использовании библиотеки Thinary Wire (as Master) подцепляем SDA к PA2 (D4) и SCL к PA3 (D5).
(спасибо ребятам https://www.avrfreaks.net/forum/split-nano-every-use-atmega4808)
На этом месте я вообще запутался, потому что не изучил еще как что должно работать под капотом всех этих библиотек. НО
5. Подключаем дисплей I2C
I2C дисплей типаSSD1306 подключился SDA к D4 и SCL к D5 и с библиотекой U8G2 все заработало!
Хм, а зачем нужен СофтСериал на чипе, у которого аж 4 аппаратных USART интерфейса?(если я правильно прочитал описание на сайте Микрочип)
Сначала вообще не понятно было как хоть какой-то serial запустить. Хоть хард , хоть софт
Теперь более-менее понятно
SERIAL_PORT_MONITOR Serial
SERIAL_PORT_HARDWARE Serial1
SERIAL_PORT_USBVIRTUAL Serial
Подскажите еще, плз.
Подключаю к этой железке модуль GPS к ногам tx и rx. Это у нас судя по всему Serial1
Что-то не выходит каменный цветок. Получается что кабель USB тоже использует этот же Serial1.
Никогда раньше не работал с несколькими Serial
Мне нужно мониторить com-порт чтоб видеть показания модуля GPS ну и чтоб сам модуль обменивался данными с платой.
Как правильно все сделать?
Как правильно все сделать?
очевидно - подключить GPS ни к тому порту, на котором USB. а к другому. соответвенно и ноги rx tx будут другие. Какие - я не знаю, смотрите описание платы
Сделал распиновку платы (выложил еще на avrfreaks.net , но там глухо). Можете посмотреть что не так или что добавить. Не знаю про управлениями прерываниями, таймеры. Может с ШИМ напутал. потому что в ядре указаны пины как на картинке, а в даташите на микросхему совсем другие.
Кто разбирался - пишите. Думаю это будет полезно.
Исходники картинки тут https://github.com/Robotvasya/thinary-nano-every
Приветствую уважаемых форумчан. Прошу помощи с такой же платой, не могу запустить на ней диммер с детектором нуля.Понимаю что проблема в таймерах. Поделитесь библиотекой пожалуйста. В датташит прошу не посылать, я там был, для меня это тёмный лес. Сам скеч прикладываю.
С библиотекой https://github.com/Kees-van-der-Oord/Arduino-Nano-Every-Timer-Controller-B подружить так и не получилось. Потому слёзно прошу помощи.