Этот чип почти тоже самое что обычные atmega328, но есть несколько интересных отличий. Atmega328PB Atmega328
2 Serial 1 Serial
2 SPI 1 SPI
2 I²C/TWI 1 I²C/TWI
27 Digital IO 23 Digital IO
3 16Bit Timer 1 16Bit Timer
9 PWM Channel 6 PWM Channel
Новые фичи:
-Механизм обнаружения сбоев синхронизации (если отвалится кварц, то МК не остановится) / Clock Failure Detection
-контроллер сенсорного интерфейса / QTouch Peripheral Touch Controller, PTC
-модулятор выходов таймеров (умеет складывать сигналы от двух таймеров) / Output Compare Modulator
-Уникальный серийный номер
-аппаратный выход аналогового компаратора
Отличия в распиновке: -главное отличие в том, что на 3 и 6 ноге мк где в обычной меге земля и питание теперь два новых пина порта E. Ещё два пина этого же порта подсажено к аналоговым входам ADC6 ADC7.
Плохие новости:
-МК не производят в дип-корпусе.
-Убрали поддержку Full Swing Oscillator, по факту это выливается в то, что
кварцы с частотой выше 16Мгц с этим МК не работают (вернее завестись может быть сможет, но вместо тактовой частоты будет стоять свистопляска) Хорошая новость: мега328PB разгоняется, у меня стабильно работала на 32Мгц при тактировании от внешнего кварцевого генератора. Совместимость с ArduinoIDE: если шить как обычный мега328 avrdude будет ругаться на сигнатуру. Что-б корректно работать есть варианты аддонов. Я использую этот. Другие пока не пробывал.
Boards: пока на Али не продают дешевых плат, но наш коллега sadman41 нашёл магазин, где на обычных нанах припаян чип 328PB.
Ещё можно самостоятельно сделать вот такой переходник, в который можно класть МК и закреплять без пайки, мой вариант на картинке:
Описание как сделать такой переходник в теме на изиэлектроникс.
Я себе сделал самопальную Уно-подобную платку для 328PB со всеми разведёнными выводами.
Из того, что представляет интерес на данный момент -как заюзать QTouch из ArduinoIDE. Я заглядывал в библиотеку атмеля, там понакручено -чёрт ногу сломит. В даташите ни слова про то, как работать и программировать эту штуку напрямую. Пока могу осторожно предположить , что весь процесс там сводится к digitalWrite и analogRead :)
Если у вас есть что-то интересное по этому МК, то добавляйте информацию.
Любителям усыплять микроконтроллеры должно понравиться это: ATmega328PB has one additional USART with start-of-frame detection, which can wake up the MCU from all sleep modes - when a start bit is detected.
ua6em, что то типа такого? У меня лежит в закладочках. Хочется иметь, но не знаю зачем)
Что бы в частотометре реализовать такую точность нужны алгоритмы обратного счёта с интерполяцией, типа как в частотометре Леонид Иваныча , иначе точность разбазариться впустую из-за потерь на примитивных принципах счёта.
PS: Частотометр с чисто аппаратным "delay" реализован в версии генератора для stm32. После того, как я узнал способности таймеров в stm32 , таймеры на AVR выглядят очень уж примитивно, ничего на них не хочется делать :)
ua6em, что то типа такого? У меня лежит в закладочках. Хочется иметь, но не знаю зачем)
Что бы в частотометре реализовать такую точность нужны алгоритмы обратного счёта с интерполяцией, типа как в частотометре Леонид Иваныча , иначе точность разбазариться впустую из-за потерь на примитивных принципах счёта.
PS: Частотометр с чисто аппаратным "delay" реализован в версии генератора для stm32. После того, как я узнал способности таймеров в stm32 , таймеры на AVR выглядят очень уж примитивно, ничего на них не хочется делать :)
из недорогих - да, но я присмотрел себе немного подороже, за 8 с небольшим тыр )))
Green, ну да. PIC рулит. Только "без ничего" -это будет прямой счёт с потерями точности в начале и конце измеряемого участка. Для обратного уже нужен обвес. На коте кстати был хороший проект с обратным счётом. Повторил бы сам, но мне частотометр не нужен :)
Любителям усыплять микроконтроллеры должно понравиться это: ATmega328PB has one additional USART with start-of-frame detection, which can wake up the MCU from all sleep modes - when a start bit is detected.
А никому не пришло в голову поискать эту переферию в старом добром 328P? Может она там давно, а сейчас токо декларировали. Чем черт не шутит. Такое уже бывало.
sadman41, я пока не изучал тему серийного номера. А как читаешь? Там же что-бы прочесть эту область нужно сделать адресный ремап специальными командами на ассемблере. И потом с адреса 0x00 вместо флеша начнёт читаться закрытая область МК,в которой сигнатура и серийник. Иначе прочтётся флеш. И проверить то сложно. Как вариант можно выгрузив выводящий серийник "HEX" из одного МК в другой. Что б гарантированно точная копия. Если покажут разные цифры -скорее всего сработало)
PS вспомнил, что в GCC есть макрос специальный, может им можно: boot_signature_byte_get(addr)
PS2: по поводу поискать периферию -можно скомпилить тот проверочный скетч для PB и влить его в обычную мегу. Если на 0,1,2 ногах будет сигнал -случилось чудо. Но его не случиться, думаю давно бы народ раскусил, если б в меге328 было что-то неизвестное.
Итак, есть две новости: одна хорошая, другая загадочная.
Хорошая - плата от Thinary Electronic (зелёная, в формате Nano, упомянута в посте #2) сделана неплохо, по качеству близка к роботдину. Только вот на AMS1117-5.0 сэкономили - совсем он мелкий. Вопреки опасениям dimax'а PE0 не сидит на GND, а PE1 на VCC. Прозвонка показала, что "GND" соединён с выводом МК #5, с #3 - нет. Соответсвенно "+5V" соединён с #4, с #6 - нет.
Загадочная - avrdude говорит, что МК имеет сигнатуру 0x1e950f. И шьёт плату как обычный 328P со старым бутлодером.
Плагин от Pololu плату не увидел, пока я ему не подправил скорость со 115200 на 57600. После этого avrdude увидел плату, но шить отказался - сигнатура, мол, не подходит, растудыть её в качель. Но, сначала, я даже подумал, когда словил STK500 Error, что загрузчика в МК нет,
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: Expected signature for ATmega328PB is 1E 95 16
Double check chip, or use -F to override this check.
Однако, операция взятия Signature и MCU ID (из этого поста) показывает, что:
SysInfo for Arduino version 1.07
F_CPU = 16000000
Frequency = 16 MHz
MCU ID = 50 51 31 37 42 51 69 10 3C 22
CPU_IDE = ATmega328P
Flash Memory = 32767 bytes
Free RAM memory = 1091 bytes
Signature = 1E 95 16
Fuses (Low/High/Ext/Lock) = FF DA FD CF
Processor = ATmega328PB
Flash memory size = 32 kB
avrdude говорит, что МК имеет сигнатуру 0x1e950f. И шьёт плату как обычный 328P со старым
Любопытно, да. Могу предположить, что бутлоадер этой платы специально модифицированный, и не передаёт дудке реальную сигнатуру. Бутлоадер в MK LGT8F328 проделывает такой же фокус.
Любопытно, да. Могу предположить, что бутлоадер этой платы специально модифицированный, и не передаёт дудке реальную сигнатуру. Бутлоадер в MK LGT8F328 проделывает такой же фокус.
Стоит пытаться заменить бутлоадер USBASP-ом (под рукой нет его) на Minicore / Pololu / etc?
Эксперимент проведён. USBASP-ом насильно вкрыжен бутлоадер из комплекта Pololu (Optiboot, см. инструкцию). В процессе обновления avrdude обругался:
avrdude: set SCK frequency to 1500000 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9516 (probably m328pb)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: set SCK frequency to 1500000 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "C:\Users\sadman\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex"
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against C:\Users\sadman\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:
avrdude: load data flash data from input file C:\Users\sadman\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:
avrdude: input file C:\Users\sadman\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0xCF"
avrdude: writing lock (1 bytes):
Writing | ***failed;
################################################## | 100% 0.05s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0xCF:
avrdude: load data lock data from input file 0xCF:
avrdude: input file 0xCF contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.02s
avrdude: verifying ...
avrdude: WARNING: invalid value for unused bits in fuse "lock", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0x0f instead of 0xcf (double check with your datasheet first).
avrdude: 1 bytes of lock verified
avrdude done. Thank you.
Стоит пытаться заменить бутлоадер USBASP-ом (под рукой нет его) на Minicore / Pololu / etc?
Думаю да. Вдвое большая скорость заливки, и вчетверо меньший объём отъедаемой флэшпамяти определённо стоят этого :) PS: правда с конкретно моим аддоном в boards.txt тоже скорость 57600. Но я вписал 115200, и работает на этой скорости. Возможно там вариант бутлоадера с Auto-Baudrate.
Для затравки небольшое упражнение с доп.таймерами. Код построен на базе нагло притыренного у dimax генератора частоты.
Скетч содержит две части:
1) Независимую хардварную генерацию меандра тремя таймерами (T1, T3, T4) - на D9, D0, D1;
2) Независимую хардварную генерацию меандра двумя таймерами (T3, T4) и модулированную (OCM1C2 feature) - на D0, D1 и D2;
Частоты рассчитаны на визуальное восприятие, так что можно подвесить три светодиода.
#define TIMER_ONE (0x01)
#define TIMER_THREE (0x03)
#define TIMER_FOUR (0x04)
#define OCM1C2_ENABLED true
const uint8_t timerOneOutPin = 9;
const uint8_t timerThreeOutPin = 0;
const uint8_t timerFourOutPin = 1;
const uint8_t ocmOutPin = 2;
void calcValues(const uint32_t _frequency, uint16_t& _OCRxA, uint8_t& _TCCRxB) {
uint16_t divider = 0x01;
uint32_t newOCRxA = (F_CPU / 0x02 / _frequency / divider);
uint8_t shifts[] = {0x03, 0x03, 0x02, 0x02};
for (uint8_t i = 0x00; 0x04 > i; i++) {
if (newOCRxA > 65536) {
divider <<= shifts[i];
newOCRxA = F_CPU / 0x02 / _frequency / divider;
} else {
_TCCRxB = (i + 0x01); _OCRxA = newOCRxA - 0x01;
return;
}
}
}
uint8_t setFrequency(const uint8_t _timerNo, const uint32_t _frequency, const uint8_t _ocmEnable = false) {
if (_frequency > (F_CPU / 0x02)) {
return false;
}
if (_frequency == 0x00) {
// (1 << COM1A1) => set COM1A1, COM3A1, or COM4A1, because all of that macros points to the same bit of the TCCRxA registers
uint8_t TCCRxA = (1 << COM1A1);
// (1 << FOC1A) => set FOC1A, FOC3A, or FOC4A, because all of that macros points to the same bit of the TCCRxC registers
uint8_t TCCRxC = (1 << FOC1A);
switch (_timerNo) {
case TIMER_ONE: TCCR1A = TCCRxA; TCCR1C = TCCRxC; break;
case TIMER_THREE: TCCR3A = TCCRxA; TCCR3C = TCCRxC; break;
case TIMER_FOUR: TCCR4A = TCCRxA; TCCR4C = TCCRxC; break;
}
} else {
uint16_t OCRxA = 0x00;
uint8_t TCCRxA, TCCRxB = 0x00;
calcValues(_frequency, OCRxA, TCCRxB);
// (1 << COM1A0) => set COM1A0, COM3A0, or COM4A0, because all of that macros points to the same bit of the TCCRxA registers
TCCRxA = (1 << COM1A0);
// (1 << WGM12) => set WGM12, WGM32, or WGM42, because all of that macros points to the same bit of the TCCRxB registers
TCCRxB |= (1 << WGM12);
switch (_timerNo) {
case TIMER_ONE: TCCR1A = TCCRxA; TCCR1B = TCCRxB; OCR1A = OCRxA; break;
case TIMER_THREE: TCCR3A = TCCRxA | (!!_ocmEnable << COM3B0); TCCR3B = TCCRxB; OCR3A = OCRxA; break;
case TIMER_FOUR: TCCR4A = TCCRxA | (!!_ocmEnable << COM4B0); TCCR4B = TCCRxB; OCR4A = OCRxA; break;
}
}
return true;
}
void setup() {
TCCR1A = 0x00; TCCR1B = 0x00;
TCCR3A = 0x00; TCCR3B = 0x00;
TCCR4A = 0x00; TCCR4B = 0x00;
pinMode(timerOneOutPin, OUTPUT);
pinMode(timerThreeOutPin, OUTPUT);
pinMode(timerFourOutPin, OUTPUT);
pinMode(ocmOutPin, OUTPUT);
// Independent frequency generation on D9, D0, D1
setFrequency(TIMER_ONE, 5); // Timer #1 - 5 Hz
setFrequency(TIMER_THREE, 1); // Timer #3 - 1 Hz
setFrequency(TIMER_FOUR, 10); // Timer #4 - 10 Hz
delay(10000);
// Stop crazy blinking
setFrequency(TIMER_ONE, 0); // Timer #1 - 0 Hz
setFrequency(TIMER_THREE, 0); // Timer #3 - 0 Hz
setFrequency(TIMER_FOUR, 0); // Timer #4 - 0 Hz
delay(2000);
// Independent frequency generation on D0, D1 and modulated frequency generation on D2
setFrequency(TIMER_THREE, 1, OCM1C2_ENABLED); // Timer #3 - 1 Hz
setFrequency(TIMER_FOUR, 10, OCM1C2_ENABLED); // Timer #4 - 10 Hz
delay(10000);
// Take rest
setFrequency(TIMER_THREE, 0); // Timer #3 - 0 Hz
setFrequency(TIMER_FOUR, 0); // Timer #4 - 0 Hz
}
void loop() {}
OCM что-то не заводится, пишут что с ним есть какая-то проблема.
UPD: Проблема оказалась в недопонимании datasheet.
Похоже одна платка пришла битая!
Собрал Sinaprog + avrdude, фьюзы читаю, фьюзы нормальные.
Кому нужен такой пакет, скину... Ардуино выходит дохлая, надо пробовать зацепить через сторониий USB-TTL переходник...
Зачем это надо? Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится. В SinaProg загрузка через этот же программатор проходит на ура. Убеждаемся, что камень исправный )))
Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится.
Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится.
А бутлоадер-то через IDE+ICSP шьётся?
шьёт как-то так, см. строка 63 и строка 75, с чего это там FF если считываю фьюзы и там 3F )))
C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdude -CC:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf -C+C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf -v -patmega328pb -carduino -PCOM6 -b19200 -B 5 -e -Ulock:w:0xFF:m -Uefuse:w:0xF4:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf"
Additional configuration file is "C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf"
avrdude: warning at C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf:1: part m328pb overwrites previous definition C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf:8802.
Using Port : COM6
Using Programmer : arduino
Overriding Baud Rate : 19200
Setting bit clk period : 5.0
AVR Part : ATmega328PB
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Arduino
Description : Arduino
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9516 (probably m328pb)
avrdude: erasing chip
avrdude: reading input file "0xFF"
avrdude: writing lock (1 bytes):
Writing | ***failed;
################################################## | 100% 0.09s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0xFF:
avrdude: load data lock data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: WARNING: invalid value for unused bits in fuse "lock", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0x3f instead of 0xff (double check with your datasheet first).
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xF4"
avrdude: writing efuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xF4:
avrdude: load data efuse data from input file 0xF4:
avrdude: input file 0xF4 contains 1 bytes
avrdude: reading on-chip efuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDE"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDE:
avrdude: load data hfuse data from input file 0xDE:
avrdude: input file 0xDE contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:
C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdude -CC:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf -C+C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf -v -patmega328pb -carduino -PCOM6 -b19200 -B 0.5 -Uflash:w:C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:i -Ulock:w:0xCF:m
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude done. Thank you.
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf"
Additional configuration file is "C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf"
avrdude: warning at C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/extra_avrdude.conf:1: part m328pb overwrites previous definition C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf:8802.
Using Port : COM6
Using Programmer : arduino
Overriding Baud Rate : 19200
Setting bit clk period : 0.5
AVR Part : ATmega328PB
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Arduino
Description : Arduino
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9516 (probably m328pb)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex"
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:
avrdude: load data flash data from input file C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:
avrdude: input file C:\Documents and Settings\user\Local Settings\Application Data\Arduino15\packages\pololu-a-star\hardware\avr\4.0.2/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0xCF"
avrdude: writing lock (1 bytes):
Writing | ***failed;
################################################## | 100% 0.11s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0xCF:
avrdude: load data lock data from input file 0xCF:
avrdude: input file 0xCF contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: WARNING: invalid value for unused bits in fuse "lock", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0x0f instead of 0xcf (double check with your datasheet first).
avrdude: 1 bytes of lock verified
avrdude done. Thank you.
Докладываю! Битва за спасение девайса закончилась 1-0 в мою пользу.
Неисправность - обрыв резистора в 1 ком с CH340 на Чип (нижний), там их два (RX-TX)
И вдогонку! Попробовал другой аддон, можно использовать кварц до 20 мегагерц, по сути загрузчик видимо
тоже на основе оптибута, занимает столько же места как и на пололулу, только скорость при программировании на шине 57600.
Не знаю, я такими извращениями не занимаюсь - мне хватает заливки и через UART.
это разговор не об извращениях а о кривоватости аддона pololu, не находишь?
Кстати попытался в твой проверочный скетч добавить синхронное отображение на индикацию сетодиодом на 13 пину, чё то не взлетело, добавишь, чтобы диоды не лепить, к примеру 10 секунд с одного таймера и так по кругу
Нашёл еще один косяк, не компилируется проверочный скетч для 4-го таймера для аддона от pololu, для другого аддона всё компилирется, проверил 4-й таймер - всё работает, по остальным сейчас пройдусь, отпишусь
Проверил все таймера, всё работает. Почему не компилировался для 4-го таймера подсказать сможет только ЕвгенийП или Ворота, их детище, я только поддержку вавгада и этого чипа добавил )))
А никто не пробывал загрузчик из MiniCore. Вроде пишут * All variants (A, P, PA and PB).Сам не пробовал из-за отсутствия 328PB.
я попробовал, загрузчик кстати для этого чипа можно привязать на второй уарт, проверочный скетч для таймеров (пробовал 4-й на котором споткнулся pololu) работает!!!
Там много настроек становится доступно, надо разбираться, что это такое и зачем
Не знаю, я такими извращениями не занимаюсь - мне хватает заливки и через UART.
это разговор не об извращениях а о кривоватости аддона pololu, не находишь?
Кстати попытался в твой проверочный скетч добавить синхронное отображение на индикацию сетодиодом на 13 пину, чё то не взлетело, добавишь, чтобы диоды не лепить, к примеру 10 секунд с одного таймера и так по кругу
визуальную индикацию работы таймеров, светодиод для этого на плате уже есть - LED на пине 13, в идеале 1 короткая вспышка - 0 таймер, две - 1-й и так далее, по кругу на всех доступных таймерах
Этот чип почти тоже самое что обычные atmega328, но есть несколько интересных отличий.
Atmega328PB Atmega328
2 Serial 1 Serial
2 SPI 1 SPI
2 I²C/TWI 1 I²C/TWI
27 Digital IO 23 Digital IO
3 16Bit Timer 1 16Bit Timer
9 PWM Channel 6 PWM Channel
Новые фичи:
-Механизм обнаружения сбоев синхронизации (если отвалится кварц, то МК не остановится) / Clock Failure Detection
-контроллер сенсорного интерфейса / QTouch Peripheral Touch Controller, PTC
-модулятор выходов таймеров (умеет складывать сигналы от двух таймеров) / Output Compare Modulator
-Уникальный серийный номер
-аппаратный выход аналогового компаратора
Отличия в распиновке: -главное отличие в том, что на 3 и 6 ноге мк где в обычной меге земля и питание теперь два новых пина порта E. Ещё два пина этого же порта подсажено к аналоговым входам ADC6 ADC7.
Плохие новости:
-МК не производят в дип-корпусе.
-Убрали поддержку Full Swing Oscillator, по факту это выливается в то, что
кварцы с частотой выше 16Мгц с этим МК не работают (вернее завестись может быть сможет, но вместо тактовой частоты будет стоять свистопляска)
Хорошая новость: мега328PB разгоняется, у меня стабильно работала на 32Мгц при тактировании от внешнего кварцевого генератора.
Совместимость с ArduinoIDE: если шить как обычный мега328 avrdude будет ругаться на сигнатуру. Что-б корректно работать есть варианты аддонов. Я использую этот. Другие пока не пробывал.
Boards: пока на Али не продают дешевых плат, но наш коллега sadman41 нашёл магазин, где на обычных нанах припаян чип 328PB.
Ещё можно самостоятельно сделать вот такой переходник, в который можно класть МК и закреплять без пайки, мой вариант на картинке:
Описание как сделать такой переходник в теме на изиэлектроникс.
Я себе сделал самопальную Уно-подобную платку для 328PB со всеми разведёнными выводами.
За исходный вариант взял плату буратино с сайта simple-devices.ru Мой вариант существенно изменён. Скачать мой вариант в спринте.
Из того, что представляет интерес на данный момент -как заюзать QTouch из ArduinoIDE. Я заглядывал в библиотеку атмеля, там понакручено -чёрт ногу сломит. В даташите ни слова про то, как работать и программировать эту штуку напрямую. Пока могу осторожно предположить , что весь процесс там сводится к digitalWrite и analogRead :)
Если у вас есть что-то интересное по этому МК, то добавляйте информацию.
Любителям усыплять микроконтроллеры должно понравиться это: ATmega328PB has one additional USART with start-of-frame detection, which can wake up the MCU from all sleep modes - when a start bit is detected.
AT15007: Differences between ATmega328/P and ATmega328PB
подпишусь
не подпишусь, хватает пока LGT8F328P.
DIMAX! Когда ожидать скетч частотомера без delay(), исключительно на таймерах?
Я тут OCXO присмотрел с 0,1ppm )))
ua6em, что то типа такого? У меня лежит в закладочках. Хочется иметь, но не знаю зачем)
Что бы в частотометре реализовать такую точность нужны алгоритмы обратного счёта с интерполяцией, типа как в частотометре Леонид Иваныча , иначе точность разбазариться впустую из-за потерь на примитивных принципах счёта.
PS: Частотометр с чисто аппаратным "delay" реализован в версии генератора для stm32. После того, как я узнал способности таймеров в stm32 , таймеры на AVR выглядят очень уж примитивно, ничего на них не хочется делать :)
ua6em, что то типа такого? У меня лежит в закладочках. Хочется иметь, но не знаю зачем)
Что бы в частотометре реализовать такую точность нужны алгоритмы обратного счёта с интерполяцией, типа как в частотометре Леонид Иваныча , иначе точность разбазариться впустую из-за потерь на примитивных принципах счёта.
PS: Частотометр с чисто аппаратным "delay" реализован в версии генератора для stm32. После того, как я узнал способности таймеров в stm32 , таймеры на AVR выглядят очень уж примитивно, ничего на них не хочется делать :)
из недорогих - да, но я присмотрел себе немного подороже, за 8 с небольшим тыр )))
что то типа такого?
До 50 мгц делается на древнейшем PICе, типа 628. Вообще без ничего.)
Green, ну да. PIC рулит. Только "без ничего" -это будет прямой счёт с потерями точности в начале и конце измеряемого участка. Для обратного уже нужен обвес. На коте кстати был хороший проект с обратным счётом. Повторил бы сам, но мне частотометр не нужен :)
Да, конечно. Но даже в таком виде, КМК, увеличив ворота можно добиться желаемого результата малой кровью, не?
Green, ну да.
Интересно бы было что нибудь по теме топика пообсуждать :)
Интересно бы было что нибудь по теме топика пообсуждать :)
я платки только заказал )))
что то типа такого?
До 50 мгц делается на древнейшем PICе, типа 628. Вообще без ничего.)
PicProg+ у меня есть, осталось найти компьютер под WIN98 )))
Вот хороший аддон https://github.com/MCUdude/MiniCore
Вот хороший аддон https://github.com/MCUdude/MiniCore
Проверочный скетч под аддон компилируется
Библиотека
Любителям усыплять микроконтроллеры должно понравиться это: ATmega328PB has one additional USART with start-of-frame detection, which can wake up the MCU from all sleep modes - when a start bit is detected.
AT15007: Differences between ATmega328/P and ATmega328PB
интересно девки пляшут, на 3-ем и 4-ом таймере можно использовать модулятор -
OCM1C2 - Output Compare Modulator
А никому не пришло в голову поискать эту переферию в старом добром 328P? Может она там давно, а сейчас токо декларировали. Чем черт не шутит. Такое уже бывало.
Я из 328P достаю ID. На моих экземплярах не повторяются номера и от внешних воздействий не зависят.
sadman41, я пока не изучал тему серийного номера. А как читаешь? Там же что-бы прочесть эту область нужно сделать адресный ремап специальными командами на ассемблере. И потом с адреса 0x00 вместо флеша начнёт читаться закрытая область МК,в которой сигнатура и серийник. Иначе прочтётся флеш. И проверить то сложно. Как вариант можно выгрузив выводящий серийник "HEX" из одного МК в другой. Что б гарантированно точная копия. Если покажут разные цифры -скорее всего сработало)
PS вспомнил, что в GCC есть макрос специальный, может им можно: boot_signature_byte_get(addr)
PS2: по поводу поискать периферию -можно скомпилить тот проверочный скетч для PB и влить его в обычную мегу. Если на 0,1,2 ногах будет сигнал -случилось чудо. Но его не случиться, думаю давно бы народ раскусил, если б в меге328 было что-то неизвестное.
PS вспомнил, что в GCC есть макрос специальный, может им можно: boot_signature_byte_get(addr)
Так и делаю: http://arduino.ru/forum/programmirovanie/sysinfo-arduino?page=1#comment-330125
Прочёл две обычные 328 и две 328PB
ATMEGA328(1) MCU ID = 55 35 38 30 39 31 FF 01 09 0E
ATMEGA328(2) MCU ID = 59 32 33 35 37 32 FF 0B 03 14
ATMEGA328PB(1) MCU ID = 50 51 34 39 42 38 69 0E 13 1C
ATMEGA328PB(2) MCU ID = 50 51 34 39 42 38 69 0E 13 12
Понятно, *PB из одной партии, а те из разных. Выводы делать рано. Для чистоты эксперемента нужно хотя бы пару обычных мег328 из одной партии :)
У меня целый десяток есть из одной партии
MCU ID = 59 36 30 32 31 37 FF 12 07 08
Итак, есть две новости: одна хорошая, другая загадочная.
Хорошая - плата от Thinary Electronic (зелёная, в формате Nano, упомянута в посте #2) сделана неплохо, по качеству близка к роботдину. Только вот на AMS1117-5.0 сэкономили - совсем он мелкий. Вопреки опасениям dimax'а PE0 не сидит на GND, а PE1 на VCC. Прозвонка показала, что "GND" соединён с выводом МК #5, с #3 - нет. Соответсвенно "+5V" соединён с #4, с #6 - нет.
Загадочная - avrdude говорит, что МК имеет сигнатуру 0x1e950f. И шьёт плату как обычный 328P со старым бутлодером.
Плагин от Pololu плату не увидел, пока я ему не подправил скорость со 115200 на 57600. После этого avrdude увидел плату, но шить отказался - сигнатура, мол, не подходит, растудыть её в качель. Но, сначала, я даже подумал, когда словил STK500 Error, что загрузчика в МК нет,
Однако, операция взятия Signature и MCU ID (из этого поста) показывает, что:
Номер же схож с теми, что публиковал dimax.
А никто не пробывал загрузчик из MiniCore. Вроде пишут * All variants (A, P, PA and PB).Сам не пробовал из-за отсутствия 328PB.
Так, и что делать и кто виноват?
avrdude говорит, что МК имеет сигнатуру 0x1e950f. И шьёт плату как обычный 328P со старым
Любопытно, да. Могу предположить, что бутлоадер этой платы специально модифицированный, и не передаёт дудке реальную сигнатуру. Бутлоадер в MK LGT8F328 проделывает такой же фокус.
Любопытно, да. Могу предположить, что бутлоадер этой платы специально модифицированный, и не передаёт дудке реальную сигнатуру. Бутлоадер в MK LGT8F328 проделывает такой же фокус.
Стоит пытаться заменить бутлоадер USBASP-ом (под рукой нет его) на Minicore / Pololu / etc?
вчера вечером сел помучать эту платку, ситуация один в один, сигнатуру вечером могу скинуть.
Эксперимент проведён. USBASP-ом насильно вкрыжен бутлоадер из комплекта Pololu (Optiboot, см. инструкцию). В процессе обновления avrdude обругался:
Но, в итоге, пока всё неплохо, блинк залился:
Затем сделал самое простое, что пришло в голову:
Присел осциллографом на D11 и увидел повторяющийся пакет. Так что можно сказать - плата работает и там действительно ATMega328PB.
Стоит пытаться заменить бутлоадер USBASP-ом (под рукой нет его) на Minicore / Pololu / etc?
Думаю да. Вдвое большая скорость заливки, и вчетверо меньший объём отъедаемой флэшпамяти определённо стоят этого :) PS: правда с конкретно моим аддоном в boards.txt тоже скорость 57600. Но я вписал 115200, и работает на этой скорости. Возможно там вариант бутлоадера с Auto-Baudrate.
Для затравки небольшое упражнение с доп.таймерами. Код построен на базе нагло притыренного у dimax генератора частоты.
Скетч содержит две части:
1) Независимую хардварную генерацию меандра тремя таймерами (T1, T3, T4) - на D9, D0, D1;
2) Независимую хардварную генерацию меандра двумя таймерами (T3, T4) и модулированную (OCM1C2 feature) - на D0, D1 и D2;
Частоты рассчитаны на визуальное восприятие, так что можно подвесить три светодиода.
OCM что-то не заводится, пишут что с ним есть какая-то проблема.
UPD: Проблема оказалась в недопонимании datasheet.
sadman41, почему OCM не заводится? В #19 есть ссылка на мой проверочный скетч, там в том числе и OCM, там же скриншот работы OCM
sadman41, почему OCM не заводится? В #19 есть ссылка на мой проверочный скетч, там в том числе и OCM, там же скриншот работы OCM
Да, действительно - так работает. Что-то я недокрутил...
UPD: немного разобрался, добавил функционал в примерчик.
dimax интересовался - зачем OCM. Так модулированным генератором удобно мигалки типа полицейских делать ;)
Получил две платы, одна не шьётся, увы (((
VID 1A86 PID 7523, как на нано от рободина
#29
Ок!
Платки конечно какие-то недоплаты )))
Попробую ту, что совсем не видится перешить через ISP
Зы но пока не до этого, увлёкся openssl, под 1.1.1d firefox работает тока 68 кстати
Похоже одна платка пришла битая!
Собрал Sinaprog + avrdude, фьюзы читаю, фьюзы нормальные.
Кому нужен такой пакет, скину... Ардуино выходит дохлая, надо пробовать зацепить через сторониий USB-TTL переходник...
Пакет SinaProg понимающий этот чип.
Зачем это надо? Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится. В SinaProg загрузка через этот же программатор проходит на ура. Убеждаемся, что камень исправный )))
Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится.
А бутлоадер-то через IDE+ICSP шьётся?
Дело в том, что с использованием функции IDE загрузить через программатор, используя в качестве программатора arduino as isp загрузить скетч не получится.
А бутлоадер-то через IDE+ICSP шьётся?
шьёт как-то так, см. строка 63 и строка 75, с чего это там FF если считываю фьюзы и там 3F )))
На странице 384 даташита лок биты тоже 3F как бы
Докладываю! Битва за спасение девайса закончилась 1-0 в мою пользу.
Неисправность - обрыв резистора в 1 ком с CH340 на Чип (нижний), там их два (RX-TX)
И вдогонку! Попробовал другой аддон, можно использовать кварц до 20 мегагерц, по сути загрузчик видимо
тоже на основе оптибута, занимает столько же места как и на пололулу, только скорость при программировании на шине 57600.
ua6em, кварц выше 16МГц использовать невозможно, я писал про это.
шьёт как-то так, см. строка 63 и строка 75, с чего это там FF если считываю фьюзы и там 3F )))
Ну, у меня тоже ругалось так же, но бутлоадер заменился и дальше всё, как по маслу.
шьёт как-то так, см. строка 63 и строка 75, с чего это там FF если считываю фьюзы и там 3F )))
Ну, у меня тоже ругалось так же, но бутлоадер заменился и дальше всё, как по маслу.
а вот прошивку залить через ISP?
У меня через iSP с аддоном от pololu прошивка категорически не шьётся, с двумя другими аддонами - на ура
Не знаю, я такими извращениями не занимаюсь - мне хватает заливки и через UART.
Не знаю, я такими извращениями не занимаюсь - мне хватает заливки и через UART.
это разговор не об извращениях а о кривоватости аддона pololu, не находишь?
Кстати попытался в твой проверочный скетч добавить синхронное отображение на индикацию сетодиодом на 13 пину, чё то не взлетело, добавишь, чтобы диоды не лепить, к примеру 10 секунд с одного таймера и так по кругу
Нашёл еще один косяк, не компилируется проверочный скетч для 4-го таймера для аддона от pololu, для другого аддона всё компилирется, проверил 4-й таймер - всё работает, по остальным сейчас пройдусь, отпишусь
Проверил все таймера, всё работает. Почему не компилировался для 4-го таймера подсказать сможет только ЕвгенийП или Ворота, их детище, я только поддержку вавгада и этого чипа добавил )))
А никто не пробывал загрузчик из MiniCore. Вроде пишут * All variants (A, P, PA and PB).Сам не пробовал из-за отсутствия 328PB.
я попробовал, загрузчик кстати для этого чипа можно привязать на второй уарт, проверочный скетч для таймеров (пробовал 4-й на котором споткнулся pololu) работает!!!
Там много настроек становится доступно, надо разбираться, что это такое и зачем
Похоже это самый удачный аддон
Третий раз делаю подписку на эту тему, но кто-то удаляет пост, зачем ?. Соответственно уведомления не приходят.
Третий раз делаю подписку на эту тему, но кто-то удаляет пост, зачем ?. Соответственно уведомления не приходят.
Если пост пустой - я удаляю, не разбираясь, для подписки он или руки не туда дрогнули. На этом форуме это стандартная практика.
Не знаю, я такими извращениями не занимаюсь - мне хватает заливки и через UART.
это разговор не об извращениях а о кривоватости аддона pololu, не находишь?
Кстати попытался в твой проверочный скетч добавить синхронное отображение на индикацию сетодиодом на 13 пину, чё то не взлетело, добавишь, чтобы диоды не лепить, к примеру 10 секунд с одного таймера и так по кругу
Индикацию чего?
Индикацию чего?
визуальную индикацию работы таймеров, светодиод для этого на плате уже есть - LED на пине 13, в идеале 1 короткая вспышка - 0 таймер, две - 1-й и так далее, по кругу на всех доступных таймерах