Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Нет, для него выбран фиксированный адрес 0x78 (SA0 = 0)
- Реклама
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
[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, СТОП
у нас тоже так? т.е. с этим все ок?
Нет никакого желания вчитываться в эту абракадабру. Хотите - сравнивайте сами функцию инициализации - у меня она по даташиту сделана (массив initSeq).
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
[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]
восточные братья, видимо, хотят нас поссорить)
я ж все равно не понимаю в коде. следовательно не могу сделать выводы о наличии ошибок.
Никак не мог понять, зачем столько 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,
};- Реклама
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
встретил такое:
"В моем варианте адреса на обратной стороне указаны не верно (привет китайцам): 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 шина протестируется)).
Ещё раз, 0x78 и 0x3C - это одно и то же. Просто первое - 8 бит, весь адрес целиком, используется в даташитах и проекте, второе - 7 старших бит этого же адреса, используется в Arduino и RRi.
В принципе, можно наваять какой-нибудь примитивный сканер адресов.
В принципе, можно наваять какой-нибудь примитивный сканер адресов.
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
[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 адресов. Но еще же нужен загрузчик и пр....
- Сообщения: 18
- Зарегистрирован: Вт янв 05, 2016 11:44:44
Еще раз хочется поблагодарить автора за данный проект. И появилось мысль ,а может прикошачить ещё тачскрин
мне кажется это было бы интересно вообще без кнопок!
мне кажется это было бы интересно вообще без кнопок!
Управлять усем при помощи тачскрина круто конечно, но не всегда оправдано (например, если усь стоит низко или высоко), да и существующих возможностей предостаточно. Конечно полностью отказываться от "железных" кнопок нельзя, но порой они никак не вписываются в стиль оформления лицевой панели устройства.
Мне на днях на глаза попался сломанный мп3 плеер с сенсорными управлением. Сенсоры в нем подключены к одному чипику, который их опрашивает и передает инфу о нажатиях по и2ц МК. Вот такой бы чипик прикошатить. Тогда лицо уся можно бы было выполнить из цельного листа оргстекла (ну разве только отверстие под вал энкодера просверлить). Да и пара выводов МК освободилась бы.
Все написанное выше - мысли вслух, решающее слово за АВТОРОМ проекта.
Мне на днях на глаза попался сломанный мп3 плеер с сенсорными управлением. Сенсоры в нем подключены к одному чипику, который их опрашивает и передает инфу о нажатиях по и2ц МК. Вот такой бы чипик прикошатить. Тогда лицо уся можно бы было выполнить из цельного листа оргстекла (ну разве только отверстие под вал энкодера просверлить). Да и пара выводов МК освободилась бы.
Все написанное выше - мысли вслух, решающее слово за АВТОРОМ проекта.
Всё это лишнее, и не для ATmega.
Всегда есть пульт, и он гораздо удобнее всех этих кнопок и пультов.
Всегда есть пульт, и он гораздо удобнее всех этих кнопок и пультов.
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
поколдовав с 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() {
}но картинка на дисплее неправильная (сорь за качество-заменю позже):

Следом заливаю нашу прошивку - и на экране чернота. (причем остальное все работает)
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, на всякий случай. Пробуйте, может так заведётся.
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
к сожалению не завелось(
видео прикреплю - мож вопросы какие возникнут. хотя сложного там вроде нет ничего.
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
Я только не понял две вещи:
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?
1. Как Вы собираете в Arduino скетч для ATmega32 (я что-то не припомню таких МК в Arduino)?
2. Где в скетче Вы указываете, к каким ножкам Arduino подключается дисплей?
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
[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 - и дисплей заработал.
текст скетча и библиотеки выше. (но они не мои)
То есть, SDA дисплея подключен к PA2, а SCL дисплея подключен к PA4, а какой-то левый скетч, в общем-то, рассчитанный на аппаратный I²C (PC0 и PC1 - библиотека Wire в Arduino), вот просто так взял и заработал? Не верю ни на йоту.
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
[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 раз.
Потому что основной, аппаратный, I²C настроен на 100кГц (DS1307 и многие аудиоконтроллеры не могут работать быстрее). Поэтому для увеличения скорости работы дисплея он подключается по программному I²С, на большей (около 400кГц) скорости.gavi6 писал(а):почему PA2 и PA4 ?
P.S. Кстати, стоит подключиться осциллографом и посмотреть. Возможно, с выбранными сейчас задержками скорость меньше 400кГц, и можно немного подстроиться и увеличить её.
P.P.S. Так и оказалось, дисплей работал где-то на 300кГц. Немножко упростил код и поднял скорость до максимальной по даташиту 400кГц.


