Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Нет, для него выбран фиксированный адрес 0x78 (SA0 = 0)
- Реклама
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
[uquote="WiseLord",url="/forum/viewtopic.php?p=3357193#p3357193"]Нет, для него выбран фиксированный адрес 0x78 (SA0 = 0)[/uquote]
значит дело у меня не в адресе. (перемычкой стоит именно 0х78 по умолчанию).
дело в том, что поговаривают о неких "граблях с этим дисплеем".
http://radiokot.ru/articles/77/
проблема в том, что я не смогу сказать достоверно "а применимы ли эти грабли" в данном проекте))
СТАРТ, АДРЕС+0, 0x80, 0xA8, 0x80, 0x3F, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA1, 0x80, 0xC8, 0x80, 0xDA, 0x80, 0x12, 0x80, 0x81, 0x80, 0x7F, 0x80, 0xA4, 0x80, 0xA6, 0x80, 0xD5, 0x80, 0x80, 0x80, 0x8D, 0x80, 0x14, 0x80, 0xAF, СТОП
у нас тоже так? т.е. с этим все ок?
значит дело у меня не в адресе. (перемычкой стоит именно 0х78 по умолчанию).
дело в том, что поговаривают о неких "граблях с этим дисплеем".
http://radiokot.ru/articles/77/
проблема в том, что я не смогу сказать достоверно "а применимы ли эти грабли" в данном проекте))
СТАРТ, АДРЕС+0, 0x80, 0xA8, 0x80, 0x3F, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA1, 0x80, 0xC8, 0x80, 0xDA, 0x80, 0x12, 0x80, 0x81, 0x80, 0x7F, 0x80, 0xA4, 0x80, 0xA6, 0x80, 0xD5, 0x80, 0x80, 0x80, 0x8D, 0x80, 0x14, 0x80, 0xAF, СТОП
у нас тоже так? т.е. с этим все ок?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Нет никакого желания вчитываться в эту абракадабру. Хотите - сравнивайте сами функцию инициализации - у меня она по даташиту сделана (массив initSeq).
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
[uquote="WiseLord",url="/forum/viewtopic.php?p=3355876#p3355876"]В настоящее время основное внимание - на поиск багов в текущем коде.[/uquote]
[uquote="WiseLord",url="/forum/viewtopic.php?p=3357512#p3357512"]Хотите - сравнивайте сами функцию инициализации - у меня она по даташиту сделана (массив initSeq).[/uquote]
восточные братья, видимо, хотят нас поссорить)
я ж все равно не понимаю в коде. следовательно не могу сделать выводы о наличии ошибок.
[uquote="WiseLord",url="/forum/viewtopic.php?p=3357512#p3357512"]Хотите - сравнивайте сами функцию инициализации - у меня она по даташиту сделана (массив initSeq).[/uquote]
восточные братья, видимо, хотят нас поссорить)
я ж все равно не понимаю в коде. следовательно не могу сделать выводы о наличии ошибок.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Никак не мог понять, зачем столько 0x80 в этом коде, и что они могут значить. В дисплее такой команды нет в принципе. В итоге по ссылке увидел совсем другую инициализацию:gavi6 писал(а):поговаривают о неких "граблях с этим дисплеем".
http://radiokot.ru/articles/77/
проблема в том, что я не смогу сказать достоверно "а применимы ли эти грабли" в данном проекте))
СТАРТ, АДРЕС+0, 0x80, 0xA8, 0x80, 0x3F, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA1, 0x80, 0xC8, 0x80, 0xDA, 0x80, 0x12, 0x80, 0x81, 0x80, 0x7F, 0x80, 0xA4, 0x80, 0xA6, 0x80, 0xD5, 0x80, 0x80, 0x80, 0x8D, 0x80, 0x14, 0x80, 0xAF, СТОП
Код: Выделить всё
unsigned char PROGMEM init[18]=
{
0xA8,0x3F,0xD3,0x00,0x40,0xA1,0xC8,0xDA,0x12,
0x81,0x7F,0xA4,0xA6,0xD5,0x80,0x8D,0x14,0xAF,
};В принципе, разобраться в этом не слишком сложно. Можно взять мой ssd1306.h файл и посмотреть, чему соответствуют эти магические числа:
Спойлер
Код: Выделить всё
0xA8, SSD1306_SETMULTIPLEX
0x3F,
0xD3, SSD1306_SETDISPLAYOFFSET
0x00,
0x40, SSD1306_SETSTARTLINE
0xA1, SSD1306_SEGREMAP_ON
0xC8, SSD1306_COMSCANDEC
0xDA, SSD1306_SETCOMPINS
0x12,
0x81, SSD1306_SETCONTRAST
0x7F,
0xA4, SSD1306_ENTDISPLAY_RAM
0xA6, SSD1306_NORMALDISPLAY
0xD5, SSD1306_SETDISPLAYCLOCKDIV
0x80,
0x8D, SSD1306_CHARGEPUMP
0x14,
0xAF, SSD1306_DISPLAY_ONСпойлер
Код: Выделить всё
static const uint8_t initSeq[] PROGMEM = {
SSD1306_DISPLAY_OFF,
SSD1306_SETDISPLAYCLOCKDIV,
0xF0,
SSD1306_SETMULTIPLEX,
0x3F,
SSD1306_SETDISPLAYOFFSET,
0x00,
SSD1306_SETSTARTLINE | 0x00,
SSD1306_MEMORYMODE,
SSD1306_MEMORYMODE_HORISONTAL,
SSD1306_SEGREMAP_ON,
SSD1306_COMSCANDEC,
SSD1306_SETCOMPINS,
0x12,
SSD1306_SETCONTRAST,
0xFF,
SSD1306_SETPRECHARGE,
0x1F,
SSD1306_SETVCOMDETECT,
0x40,
SSD1306_ENTDISPLAY_RAM,
SSD1306_NORMALDISPLAY,
SSD1306_CHARGEPUMP,
0x14,
SSD1306_DISPLAY_ON,
};- Реклама
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
встретил такое:
"В моем варианте адреса на обратной стороне указаны не верно (привет китайцам): 0x78 и 0x7A, в реальности дисплей имеет адрес 0x3c, в этом можно убедиться подключив его к Raspberry Pi и просканировав устройства на шине при помощи команды "i2cdetect". После перепайки перемычки нужно будет определить новый реальный адрес, это может быть 0x3d или другой."
т.е. в строке "#define SSD1306_I2C_ADDR 0x78" - можно подставить другой адрес и пересобрать прошивку через make ?
перебор адресов для дисплея неуместно просить?
проект масштабный.
все равно еще кто нибудь столкнется с такой же проблемой несоответствия адреса.
(может в рамках вспомогательной прошивки: просканировала М32 адреса и сохранила в eprom. потом епром слить и посмотреть какие адреса? заодно и I2C шина протестируется)).
"В моем варианте адреса на обратной стороне указаны не верно (привет китайцам): 0x78 и 0x7A, в реальности дисплей имеет адрес 0x3c, в этом можно убедиться подключив его к Raspberry Pi и просканировав устройства на шине при помощи команды "i2cdetect". После перепайки перемычки нужно будет определить новый реальный адрес, это может быть 0x3d или другой."
т.е. в строке "#define SSD1306_I2C_ADDR 0x78" - можно подставить другой адрес и пересобрать прошивку через make ?
перебор адресов для дисплея неуместно просить?
проект масштабный.
все равно еще кто нибудь столкнется с такой же проблемой несоответствия адреса.
(может в рамках вспомогательной прошивки: просканировала М32 адреса и сохранила в eprom. потом епром слить и посмотреть какие адреса? заодно и I2C шина протестируется)).
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Ещё раз, 0x78 и 0x3C - это одно и то же. Просто первое - 8 бит, весь адрес целиком, используется в даташитах и проекте, второе - 7 старших бит этого же адреса, используется в Arduino и RRi.
В принципе, можно наваять какой-нибудь примитивный сканер адресов.
В принципе, можно наваять какой-нибудь примитивный сканер адресов.
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
[uquote="WiseLord",url="/forum/viewtopic.php?p=3358326#p3358326"]Ещё раз, 0x78 и 0x3C - это одно и то же. Просто первое - 8 бит, весь адрес целиком, используется в даташитах и проекте, второе - 7 старших бит этого же адреса, используется в Arduino и RRi.[/uquote]
о как.
с адресами туго конечно:
-написал продавцу - но он не понимает о чем речь) или делает вид что не понимает)
-в отзывах на дисплей есть информация что адрес был 0х40, но это не значит что он на всех дисплеях такой (да и перебрал я уже с 20 адресов)
-даже не знаю, видимо нужно попытаться сделать адаптацию Atmega32 под Arduino, ведь там есть скетч для поиска I2C адресов. Но еще же нужен загрузчик и пр....
о как.
с адресами туго конечно:
-написал продавцу - но он не понимает о чем речь) или делает вид что не понимает)
-в отзывах на дисплей есть информация что адрес был 0х40, но это не значит что он на всех дисплеях такой (да и перебрал я уже с 20 адресов)
-даже не знаю, видимо нужно попытаться сделать адаптацию Atmega32 под Arduino, ведь там есть скетч для поиска I2C адресов. Но еще же нужен загрузчик и пр....
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Еще раз хочется поблагодарить автора за данный проект. И появилось мысль ,а может прикошачить ещё тачскрин
мне кажется это было бы интересно вообще без кнопок!
мне кажется это было бы интересно вообще без кнопок!
- san-sanych
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вт июл 15, 2014 17:03:13
- Откуда: Могилев, Беларусь
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Управлять усем при помощи тачскрина круто конечно, но не всегда оправдано (например, если усь стоит низко или высоко), да и существующих возможностей предостаточно. Конечно полностью отказываться от "железных" кнопок нельзя, но порой они никак не вписываются в стиль оформления лицевой панели устройства.
Мне на днях на глаза попался сломанный мп3 плеер с сенсорными управлением. Сенсоры в нем подключены к одному чипику, который их опрашивает и передает инфу о нажатиях по и2ц МК. Вот такой бы чипик прикошатить. Тогда лицо уся можно бы было выполнить из цельного листа оргстекла (ну разве только отверстие под вал энкодера просверлить). Да и пара выводов МК освободилась бы.
Все написанное выше - мысли вслух, решающее слово за АВТОРОМ проекта.
Мне на днях на глаза попался сломанный мп3 плеер с сенсорными управлением. Сенсоры в нем подключены к одному чипику, который их опрашивает и передает инфу о нажатиях по и2ц МК. Вот такой бы чипик прикошатить. Тогда лицо уся можно бы было выполнить из цельного листа оргстекла (ну разве только отверстие под вал энкодера просверлить). Да и пара выводов МК освободилась бы.
Все написанное выше - мысли вслух, решающее слово за АВТОРОМ проекта.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Всё это лишнее, и не для ATmega.
Всегда есть пульт, и он гораздо удобнее всех этих кнопок и пультов.
Всегда есть пульт, и он гораздо удобнее всех этих кнопок и пультов.
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
поколдовав с arduino 1.0.1, сидел и просто перебирал скетчи....и вот на таком скетче завелся мой дисплей причем, как я понял, на адресе 0x3C
но картинка на дисплее неправильная (сорь за качество-заменю позже):

Следом заливаю нашу прошивку - и на экране чернота. (причем остальное все работает)
Код: Выделить всё
// Arduino дисплей OLED LCD Display I2C 0.96 IIC Serial 128X64 TEST_1. // Скачать sketch.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> // Скачанная библиотека для дисплея.
#include <Adafruit_SSD1306.h> // Скачанная библиотека для дисплея. https://yadi.sk/d/9F_uW1wIZUDna
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup(){// У дисплея нету строк и колонок, только Pixel / пиксели по горизонтали и вертикали, условно! назовем курсор / колонка.
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 0.96" 128X64 OLED LCD Display)I2C АДРЕС.
display.clearDisplay(); // Clear the buffer. / Очистить буфер.
display.setTextColor(WHITE); // Цвет текста.
display.setTextSize(1); // Размер текста (1).
display.setCursor(0,0); // Устанавливаем курсор в колонку 0, строку 0. на самом деле это строка №1, т.к. нумерация начинается с 0.
display.println("Hello world! 11111111"); // Печатаем 1 строку.
display.setCursor(0,10); // Устанавливаем курсор в колонку 0, строку 1.(строка №2 ).
display.println("Dmitry OSIPOV 2222222"); // Печатаем 2 строку.
display.setTextSize(5); // Меняем размер текста (5).
display.setCursor(0,20); // Устанавливаем курсор в колонку 0, строку 2.(строка №3 ).
display.println("Size"); // Печатаем 3 строку.
display.display(); // Чтобы сделать символы видимыми на дисплее !.
}
void loop() {
}но картинка на дисплее неправильная (сорь за качество-заменю позже):

Следом заливаю нашу прошивку - и на экране чернота. (причем остальное все работает)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
3C -> 011.1100.w -> 0111.1000 -> 78. Такой адрес выходит. Что странно, так ка на адресном входе у Вас там вроде быль ноль
P.S. Всё норм, это адрес для нуля. Для едиинцы на SA0 было бы 7A.
P.P.S. Немного доработал программный I²C для дисплея (не сказать, что там был баг, но новый вариант чуть правильнее с точки зрения протокола). Ну и добавил автодетект между адресами 0x78/0x7A, на всякий случай. Пробуйте, может так заведётся.
P.S. Всё норм, это адрес для нуля. Для едиинцы на SA0 было бы 7A.
P.P.S. Немного доработал программный I²C для дисплея (не сказать, что там был баг, но новый вариант чуть правильнее с точки зрения протокола). Ну и добавил автодетект между адресами 0x78/0x7A, на всякий случай. Пробуйте, может так заведётся.
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
к сожалению не завелось(
видео прикреплю - мож вопросы какие возникнут. хотя сложного там вроде нет ничего.
https://youtu.be/VXvcHeVbm_E
фотки со скетча (качество получше):


п.с. (может чем поможет данная информация):
-прошиваю тестовый скетч я не через arduino.exe
-в arduino.exe я только компилирую тестовый скетч, а потом забираю .hex (из Temp папки, в которую arduino.exe скомпилировала скетч ) и уже его заливаю через avrdude в М32.
библиотеки для arduino на которых завелся дисплей:
https://yadi.sk/d/Zz52H0Wy3Uco7q
видео прикреплю - мож вопросы какие возникнут. хотя сложного там вроде нет ничего.
https://youtu.be/VXvcHeVbm_E
фотки со скетча (качество получше):


п.с. (может чем поможет данная информация):
-прошиваю тестовый скетч я не через arduino.exe
-в arduino.exe я только компилирую тестовый скетч, а потом забираю .hex (из Temp папки, в которую arduino.exe скомпилировала скетч ) и уже его заливаю через avrdude в М32.
библиотеки для arduino на которых завелся дисплей:
https://yadi.sk/d/Zz52H0Wy3Uco7q
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Я только не понял две вещи:
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359213#p3359213"]Я только не понял две вещи:
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?[/uquote]
1. вот по этому гайду делал:
https://www.youtube.com/watch?v=9ob4v0efLZY
Добавлено after 2 minutes 33 seconds:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359213#p3359213"]Я только не понял две вещи:
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?[/uquote]
не знаю)) просто нашел скетч, библиотеки, загрузил в ардуино (брал тут в описании под видео: https://www.youtube.com/watch?v=niA3aPu3-dQ ), скомпилировал в .hex - и дисплей заработал.
текст скетча и библиотеки выше. (но они не мои)
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?[/uquote]
1. вот по этому гайду делал:
https://www.youtube.com/watch?v=9ob4v0efLZY
Добавлено after 2 minutes 33 seconds:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359213#p3359213"]Я только не понял две вещи:
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?[/uquote]
не знаю)) просто нашел скетч, библиотеки, загрузил в ардуино (брал тут в описании под видео: https://www.youtube.com/watch?v=niA3aPu3-dQ ), скомпилировал в .hex - и дисплей заработал.
текст скетча и библиотеки выше. (но они не мои)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
То есть, SDA дисплея подключен к PA2, а SCL дисплея подключен к PA4, а какой-то левый скетч, в общем-то, рассчитанный на аппаратный I²C (PC0 и PC1 - библиотека Wire в Arduino), вот просто так взял и заработал? Не верю ни на йоту.
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359232#p3359232"]То есть, SDA дисплея подключен к PA2, а SCL дисплея подключен к PA4.[/uquote]
хм...
почему PA2 и PA4 ?
По схеме же PC0 и PC1, к ним и подключался (бегу на PA2, PA4 проверять):

Добавлено after 3 minutes:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359232#p3359232"]а какой-то левый скетч, в общем-то, рассчитанный на аппаратный I²C (PC0 и PC1 - библиотека Wire в Arduino), вот просто так взял и заработал? Не верю ни на йоту.[/uquote]
так и есть. я просто сидел и перебирал все скетчи которые, которые нашел в инете и которые смогли скомпилироваться. и один из них подошел.
Добавлено after 7 minutes 21 second:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
посыпаю голову пеплом.
МОИ ГЛУБОЧАЙШИЕ ИЗВИНЕНИЯ АВТОРУ.
на PA2, PA4 все заработало.

п.с.
на всех схемах с Atmega32 (на гитхабе), и даже в проекте Протеуса - выводы SDA и SCL висят на PC0 и PC1 !!!
видимо это и явилось причиной моего косяка с подключением)
хм...
почему PA2 и PA4 ?
По схеме же PC0 и PC1, к ним и подключался (бегу на PA2, PA4 проверять):

Добавлено after 3 minutes:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3359232#p3359232"]а какой-то левый скетч, в общем-то, рассчитанный на аппаратный I²C (PC0 и PC1 - библиотека Wire в Arduino), вот просто так взял и заработал? Не верю ни на йоту.[/uquote]
так и есть. я просто сидел и перебирал все скетчи которые, которые нашел в инете и которые смогли скомпилироваться. и один из них подошел.
Добавлено after 7 minutes 21 second:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
посыпаю голову пеплом.
МОИ ГЛУБОЧАЙШИЕ ИЗВИНЕНИЯ АВТОРУ.
на PA2, PA4 все заработало.

п.с.
на всех схемах с Atmega32 (на гитхабе), и даже в проекте Протеуса - выводы SDA и SCL висят на PC0 и PC1 !!!
видимо это и явилось причиной моего косяка с подключением)
Последний раз редактировалось gavi6 Сб апр 21, 2018 11:36:35, всего редактировалось 1 раз.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Потому что основной, аппаратный, I²C настроен на 100кГц (DS1307 и многие аудиоконтроллеры не могут работать быстрее). Поэтому для увеличения скорости работы дисплея он подключается по программному I²С, на большей (около 400кГц) скорости.gavi6 писал(а):почему PA2 и PA4 ?
P.S. Кстати, стоит подключиться осциллографом и посмотреть. Возможно, с выбранными сейчас задержками скорость меньше 400кГц, и можно немного подстроиться и увеличить её.
P.P.S. Так и оказалось, дисплей работал где-то на 300кГц. Немножко упростил код и поднял скорость до максимальной по даташиту 400кГц.


