Спасибо, модуль купил, даташит запросил, у меня один вопрос остался, подскажите, мне нужно ставить 1К резисторы по сигнальным шинам, чтобы не спалить ЕСП32 или и так сойдет? ) Этот преобразователь, он увеличивает напряжение для "1" на выходе для 5В логики? это не испортит ЕСП32?
да пойдет. У меня на красной плате vs1053 тоже слот есть под сд. Я вчера промучался весь день как раз таки со стабильностью чтения этой самой карты. Карту настроил а экран спалил. (первый был как у вас, сгорел в карадио32 тоже из-за соплей и питалова).
В этом проекте экран не включился ни разу. Хотя с адафрутовскм тестом для или9341 работал.
Звук (радиостанция) первый раз запустилась и лепетала чет там по немецки (автор - немец), потом начались траблы с резетом (его надо вешать или на 2 диода или на отдельный выход). После этого красная (красная, Карл!) плата vs1053 заткнулась напрочь даже в карадио. Думал спалил нахрен и ее. Но тест любимый, "хеллокалка", зацокал, а потом и карадио заиграло. Пришлось менять частоту инициализации (до 20кГц). Было правда при этом уже 2 часа ночи, а с утра на работу....
Еще после нажатия в морде кнопки "настройки по умолчанию" напрочь отпал вайфай, а в остальном.... прект прикольный. (вай фай в итоге работает только на IDF проектах, там гдето есть область флэшки в которую эти самые параметры вайфая записываются и теперь как то надо к ним поиметь доступ из дурины - мож кто подскажет как? еразе в даунлоад тул не помогает, перепрошивка в идф тоже)
Доброго время суток. Разобрался я со скоростями установил 28800 на esp, vs и все заработало. а заикания звука - было плохое питание.)
Еще небольшая проблемка с дисплеем, в строке где отображается название песни текст который не влез в строку накладывается в начале строки. дисплей у меня oled SH1106 128x64, 1.3". Подскажите как исправить этот глюк?
Вчера внимательно изучал свои красный и синий модуль и нашел несколько отличий красной VS1053 от синей.
Во-первых, разные кварцы (в красном 12,288 МГц, в синем 12,2 МГц)
Во-вторых, свободные GPIO чипа красного модуля не все заземлены, а 33,34,36 выводы отдельно каждый своим резистором подтянут к земле, 9,10,11,12 выводы соединены между собой и все.
(По факту, в синем модуле только 33 вывод через 100 кОм на землю, а остальные в воздухе. Я их все соединял с 33-м, мне не помогало )
В-третьих, MISO и SCLK с красного модуля вообще не приходят на чип, а приходят они на SD карту.
MISO и SCLK чипа притянуты к +3,3В через 10 кОм.
И при этом красный модуль работает.
Может быть и на синем модуле отключить MISO и SCLK от ESP и подтянуть их к +3,3В?
Вчера внимательно изучал свои красный и синий модуль и нашел несколько отличий красной VS1053 от синей.
Во-первых, разные кварцы (в красном 12,288 МГц, в синем 12,2 МГц)
Во-вторых, свободные GPIO чипа красного модуля не все заземлены, а 33,34,36 выводы отдельно каждый своим резистором подтянут к земле, 9,10,11,12 выводы соединены между собой и все.
(По факту, в синем модуле только 33 вывод через 100 кОм на землю, а остальные в воздухе. Я их все соединял с 33-м, мне не помогало )
В-третьих, MISO и SCLK с красного модуля вообще не приходят на чип, а приходят они на SD карту.
MISO и SCLK чипа притянуты к +3,3В через 10 кОм.
И при этом красный модуль работает.
Может быть и на синем модуле отключить MISO и SCLK от ESP и подтянуть их к +3,3В?
Вмонтировал свое КаРадио на ESP8266 в корпус от абонетского громкоговорителя "Тембр-303". Трансформатор выкинул, оставил только динамик и штатный переменный резистор.
Использовал в качестве усилителя мощности усилитель на TDA7297, 2х15 Вт, питание 12 В., такой (просто только такой был в наличии):
Поскольку в громкоговорителе один динамик, звук подключил с одного канала.
Подскажите как грамотно аппаратно смешать стерео в моно? Где смешивать, на входе или на выходе с усилка? Знания в электронике у меня только начальные))), поэтому прошу ногами не пинать))). Мне тут на форуме один человек давал совет, но его совет касался абонентского громкоговорителя в полном комплекте, т.е. с трансформатором, а я его удалил из корпуса.
А может ничего не надо смешивать? Если использовать звук с одного канала, то какой канал правильней использовать, левый или правый? (может стандарт какой на это есть).
Раньше для моно был левый, теперь радиостанции этому не следуют, так что надо смешать. Смешивать проще некуда - возмите 2 резистора (я не помню, скольк там в радио, 470 Ом вроде - это не пойдёт, надо больше к, и примерно половину его с каждого из каналов. Просто Вы же громкость будете регулировать не как в радиоточке, Вам надо регулятор включить до усилка.
И да, раз Вы взяли 2хканальный усилок, да ещё по мощности превышающий динамик раз в 5, то подключайте один канал, вход второго на землю и не используйте. Все резистроны на входе, переменник - центральный - вход, остальные земля и смеситель (2 резистора с каждого канала), выход - напрямую на динамик. Но я бы не заморачивался, а взял рекомендованный для VSки, не раз, усилок, и питание общее, и 5В хватит раскачать динамик на достаточный Вам уровень.
Спасибо, на выходных попробую. Сейчас не могу сказать, что за сопротивление динамика, но не сказал бы что усилитель выдает чрезмерную выходную мощность, конечно больше чем надо, но особого перегруза нет, зато запас по громкости очень большой. В отличие от усилителя на PAM8403 звук более сочный и практически без помех. В большинстве случаев и один канал комфортно можно слушать, но иногда явно часть информации с соседнего канала теряется или еле слышна.
Вчера частично получилось сделать вывод даты и времени на LCD 2004. Работает не совсем нормально. В какое-то время отображались названия станций, потом появились зависания и даже перезагрузки ардуино мини про. Секунды отображаются дискретно как им вздумается, дата устанавливается четко. Часовой пояс не выставляется. Вобщем, что получилось, можно увидеть на коротком видео:
259 строчка это совсем не по феншую, уберите ее совсем либо сделайте хотя бы 100
Менял это значение в пределах от 1-1000. Разница есть, конечно, но все равно не работает как надо.
Еще заметил разницу в поведении между OLED-ом и LCD. Может это как-то поможет выявить причину неисправности? После включения питания и появления строки даты и времени (до синхронизации) на OLED секунды считаются 01,02,03 ...., а потом происходит синхронизация и время продолжает считаться как надо. В LCD же при включении питания время и дата также устанавливаются как и на OLED экране "по умолчанию", но при этом секунды стоят на месте 00,00,00,.... Пока не произойдет синхронизация. После синхронизации дата и время, за исключением временной зоны, устанавливаются верно, но секунды при этом не отсчитываются. То есть время замерло и стоит на месте. Если перейти на другой канал, то время вновь будет отображаться верно, но статически.
Pilnikov, у вас видно, что 30 нога идет к мисо. У меня разъем припаян сверху и не видно. НО не звонится никак мисо на 30 ногу, а 30 нога только к +3,3В подтянута через 10 кОм. Хотя пробовал отсоединить сигналы MISO и SCLK, без них радио не поет. вечером сфоткаю свою красную плату.
Может и на синей надо притянуть мисо к плюсу, чтобы заработала? у вас синяя есть? у меня на синей не притянута.
if ((ici=strstr(line,"SYS.DATE#:")) != NULL) //проверяем что приняли строчку с датой и временем
{
char lstr[30]; //объявляем буфер в 30 символов под эту самую дату и время
if (*(ici+11) != '2')//// invalid date. try again later //дата кривая, требуем повторно считать ее
{
askDraw = true; //Требуется повторная загрузка данных
return; // выскакиваем
}
strcpy(lstr,ici+11); //копируем дату и время в буфер
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)
int year,month,day,hour,minute,second; //объявляем переменные под год месяц день недели и.т.д
sscanf(lstr,"%04d-%02d-%02dT%02d:%02d:%02d",&(year),&(month),&(day),&(hour),&(minute),&(second)); //переносим (разбираем) строчку с датой на отдельные кусочки (день месяц год и.т.д)
dt->tm_year = year; dt->tm_mon = month-1; dt->tm_mday = day; //заменяем кусочки структуры dt значениями из нашей принятой и разобранной строки с датой и временем
dt->tm_hour = hour; dt->tm_min = minute;dt->tm_sec =second;
dt->tm_year -= 1900;
timestamp = mktime(dt); //записываем в timestamp(штамп/оттиск времени в формате UNIX time (количество секунд с 1970 года) значение времени сформированное в структуре dt
syncTime = true; // Говорим что время поправлено
}
перед 257 строчкой вставьте
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)
Pilnikov, у вас видно, что 30 нога идет к мисо. У меня разъем припаян сверху и не видно. НО не звонится никак мисо на 30 ногу, а 30 нога только к +3,3В подтянута через 10 кОм. Хотя пробовал отсоединить сигналы MISO и SCLK, без них радио не поет. вечером сфоткаю свою красную плату.
Может и на синей надо притянуть мисо к плюсу, чтобы заработала? у вас синяя есть? у меня на синей не притянута.
Нету у мну синей :( У мну две красных :)
А выяснить можно перепаяв чип - тогда точно можно будет понять кто виноват чип или плата.
Подтяжка вряд ли - не хеллокало бы.
Вот если бы у вас есп32 была - можно было бы быстро проверить версию с частотой инициализации. Я 20 кГц делал крайний раз - мне помогло
Еще народ гдето писал про "старую" и "новую" версии чипов - гляньте чего там на микрухе написано "мелким шрифтом" ;)
Если Serial.print(F("sys.date\r")); вставляю в void draw(), то время идет, секунды, синхронизируются часы, но немного "поддергивается" экран, похоже, что в такт с секундами. Временная зона (TZO) при этом не меняется и секунды до синхронизации не считают.
В скетче для OLED используются таймеры. В этот скетч я их не вставлял. Это никак на отбражение времени не влияет?
Если Serial.print(F("sys.date\r")); вставляю в void draw(), то время идет, секунды, синхронизируются часы, но немного "поддергивается" экран, похоже, что в такт с секундами. Временная зона (TZO) при этом не меняется и секунды до синхронизации не считают.
В скетче для OLED используются таймеры. В этот скетч я их не вставлял. Это никак на отбражение времени не влияет?
Serial.print(F("sys.date\r")); - выводит текущую дату в сериал.
TZO это 3600 * на вашу таймзону (для москвы 2) прибавлять надо к timestamp (пример dt = gmtime(×tamp + 3600 * 2) для москвы)
Либо так
dt->tm_hour = hour + смещение в часах для вашей таймзоны;
Спасибо, модуль купил, даташит запросил, у меня один вопрос остался, подскажите, мне нужно ставить 1К резисторы по сигнальным шинам, чтобы не спалить ЕСП32 или и так сойдет? ) Этот преобразователь, он увеличивает напряжение для "1" на выходе для 5В логики? это не испортит ЕСП32?
В качестве идеи: интересно бы было кнопки управления перенести на тач. экрана. Нет таких вариантов?
В качестве идеи: интересно бы было кнопки управления перенести на тач. экрана. Нет таких вариантов?
https://github.com/schreibfaul1/ESP32-MiniWebRadio
Я правда экранчик спалил (печалька, второй уже), пока паузу взял (пока посылка идет), но проект довольно интересный.
Я правда экранчик спалил (печалька, второй уже), пока паузу взял (пока посылка идет), но проект довольно интересный.
Интересный проект. Вы уже пробовали с ним работать?
Пробовал - экранчик сжег. Надо паять все на макетке, а не проводками на соплях. И питалово....
Пробовал - экранчик сжег. Надо паять все на макетке, а не проводками на соплях. И питалово....
Такой экран https://ru.aliexpress.com/item/240x320-2-8-SPI-TFT-LCD-Touch-Panel-Serial-Port-Module-with-PCB-ILI9341-5V-3/32824451184.html?spm=2114.13010708.0.0.15c433ed74LiWd
с SD слотом подойдет? Просто есть у меня такой в наличии :) Я так понял файлы с папки Content_on_SD_Card надо на SD карту закидывать
да пойдет. У меня на красной плате vs1053 тоже слот есть под сд. Я вчера промучался весь день как раз таки со стабильностью чтения этой самой карты. Карту настроил а экран спалил. (первый был как у вас, сгорел в карадио32 тоже из-за соплей и питалова).
В этом проекте экран не включился ни разу. Хотя с адафрутовскм тестом для или9341 работал.
Звук (радиостанция) первый раз запустилась и лепетала чет там по немецки (автор - немец), потом начались траблы с резетом (его надо вешать или на 2 диода или на отдельный выход). После этого красная (красная, Карл!) плата vs1053 заткнулась напрочь даже в карадио. Думал спалил нахрен и ее. Но тест любимый, "хеллокалка", зацокал, а потом и карадио заиграло. Пришлось менять частоту инициализации (до 20кГц). Было правда при этом уже 2 часа ночи, а с утра на работу....
Еще после нажатия в морде кнопки "настройки по умолчанию" напрочь отпал вайфай, а в остальном.... прект прикольный. (вай фай в итоге работает только на IDF проектах, там гдето есть область флэшки в которую эти самые параметры вайфая записываются и теперь как то надо к ним поиметь доступ из дурины - мож кто подскажет как? еразе в даунлоад тул не помогает, перепрошивка в идф тоже)
в ардунино очень легко затираются параметры вайфая и калибровочные данные. всего одна команда:
немного подробностей - https://github.com/esp8266/Arduino/issues/1494
Доброго время суток. Разобрался я со скоростями установил 28800 на esp, vs и все заработало. а заикания звука - было плохое питание.)
Еще небольшая проблемка с дисплеем, в строке где отображается название песни текст который не влез в строку накладывается в начале строки. дисплей у меня oled SH1106 128x64, 1.3". Подскажите как исправить этот глюк?
там по идее должен быть скроллинг длинных строк. смотрите чего творится внутри функции
конкретно смотреть длину обрабатываемой строки
У карадио есть клиент для Андроида. Вроде здесь еще не выкладывали
https://www.dropbox.com/s/l9m40tmheq8sjdf/karadio1.1%20%282%29.apk?dl=0
Вчера внимательно изучал свои красный и синий модуль и нашел несколько отличий красной VS1053 от синей.
Во-первых, разные кварцы (в красном 12,288 МГц, в синем 12,2 МГц)
Во-вторых, свободные GPIO чипа красного модуля не все заземлены, а 33,34,36 выводы отдельно каждый своим резистором подтянут к земле, 9,10,11,12 выводы соединены между собой и все.
(По факту, в синем модуле только 33 вывод через 100 кОм на землю, а остальные в воздухе. Я их все соединял с 33-м, мне не помогало )
В-третьих, MISO и SCLK с красного модуля вообще не приходят на чип, а приходят они на SD карту.
MISO и SCLK чипа притянуты к +3,3В через 10 кОм.
И при этом красный модуль работает.
Может быть и на синем модуле отключить MISO и SCLK от ESP и подтянуть их к +3,3В?
Вчера внимательно изучал свои красный и синий модуль и нашел несколько отличий красной VS1053 от синей.
Во-первых, разные кварцы (в красном 12,288 МГц, в синем 12,2 МГц)
Во-вторых, свободные GPIO чипа красного модуля не все заземлены, а 33,34,36 выводы отдельно каждый своим резистором подтянут к земле, 9,10,11,12 выводы соединены между собой и все.
(По факту, в синем модуле только 33 вывод через 100 кОм на землю, а остальные в воздухе. Я их все соединял с 33-м, мне не помогало )
В-третьих, MISO и SCLK с красного модуля вообще не приходят на чип, а приходят они на SD карту.
MISO и SCLK чипа притянуты к +3,3В через 10 кОм.
И при этом красный модуль работает.
Может быть и на синем модуле отключить MISO и SCLK от ESP и подтянуть их к +3,3В?
В синий ставил кварц на 12,288 МГц, не помогло.
Всем снова привет!
Вмонтировал свое КаРадио на ESP8266 в корпус от абонетского громкоговорителя "Тембр-303". Трансформатор выкинул, оставил только динамик и штатный переменный резистор.
Моё видео о процессе сборки: https://youtu.be/j0_WtcEQ5zo
Использовал в качестве усилителя мощности усилитель на TDA7297, 2х15 Вт, питание 12 В., такой (просто только такой был в наличии):
Поскольку в громкоговорителе один динамик, звук подключил с одного канала.
Подскажите как грамотно аппаратно смешать стерео в моно? Где смешивать, на входе или на выходе с усилка? Знания в электронике у меня только начальные))), поэтому прошу ногами не пинать))). Мне тут на форуме один человек давал совет, но его совет касался абонентского громкоговорителя в полном комплекте, т.е. с трансформатором, а я его удалил из корпуса.
А может ничего не надо смешивать? Если использовать звук с одного канала, то какой канал правильней использовать, левый или правый? (может стандарт какой на это есть).
Раньше для моно был левый, теперь радиостанции этому не следуют, так что надо смешать. Смешивать проще некуда - возмите 2 резистора (я не помню, скольк там в радио, 470 Ом вроде - это не пойдёт, надо больше к, и примерно половину его с каждого из каналов. Просто Вы же громкость будете регулировать не как в радиоточке, Вам надо регулятор включить до усилка.
И да, раз Вы взяли 2хканальный усилок, да ещё по мощности превышающий динамик раз в 5, то подключайте один канал, вход второго на землю и не используйте. Все резистроны на входе, переменник - центральный - вход, остальные земля и смеситель (2 резистора с каждого канала), выход - напрямую на динамик. Но я бы не заморачивался, а взял рекомендованный для VSки, не раз, усилок, и питание общее, и 5В хватит раскачать динамик на достаточный Вам уровень.
Спасибо, на выходных попробую. Сейчас не могу сказать, что за сопротивление динамика, но не сказал бы что усилитель выдает чрезмерную выходную мощность, конечно больше чем надо, но особого перегруза нет, зато запас по громкости очень большой. В отличие от усилителя на PAM8403 звук более сочный и практически без помех. В большинстве случаев и один канал комфортно можно слушать, но иногда явно часть информации с соседнего канала теряется или еле слышна.
TDA7297 перевести в мостовую схему включения, сигнал смешать резисторами
Спасибо! Очень наглядно.
Вчера частично получилось сделать вывод даты и времени на LCD 2004. Работает не совсем нормально. В какое-то время отображались названия станций, потом появились зависания и даже перезагрузки ардуино мини про. Секунды отображаются дискретно как им вздумается, дата устанавливается четко. Часовой пояс не выставляется. Вобщем, что получилось, можно увидеть на коротком видео:
https://yadi.sk/i/aqU1CfCW3W73JA
Сам скетч выглядит так:
#include <LiquidCrystalRus.h>// LiquidCrystalRus-master #define version 1.0 #include <EEPROM.h> #define TZO 4 #undef SERIAL_RX_BUFFER_SIZE #define SERIAL_RX_BUFFER_SIZE 128 //#include "u8glibConf.h" #include <EEPROM.h> #include <time.h> #include <avr/pgmspace.h> // constants const int BAUD = 9600; // any standard serial value: 300 - 115200 const int EEaddr = 0; // EEPROM address for storing WPM const int EEaddr1 = 2; // EEPROM address for LCD address const int EEaddrIp = 10; // EEPROM address for the IP struct tm *dt; time_t timestamp = 0; bool syncTime = false; bool askDraw = false; bool itAskTime = true; unsigned loopTime = 0; unsigned loopDate = 0; const byte ContrastPin = 8; // D8 low activates the Contrast adjustment // Character array pointers char msg[] = {" Wi-Fi РАДИО на LCD"}; // char msg1[] = {"***** TOSHIBA *****"}; // char blank[] = {" "}; // изменил с 16 на 20 char strsec[30]; // char data[] = {(strsec,"%02d-%02d-%04d %02d:%02d:%02d",dt->tm_mday,(dt->tm_mon)+1,dt->tm_year+1900, dt->tm_hour, dt->tm_min,dt->tm_sec)}; //char strsec[]; // Karadio specific data #define BUFLEN 200 #define LINES 4 //изменил с 2 на 4 char line[BUFLEN]; // receive buffer char station[BUFLEN]; //received station char title[BUFLEN]; // received title char nameset[BUFLEN]; char* lline[LINES] ; // array of ptr of n lines int iline[LINES] ; //array of index for scrolling byte tline[LINES] ; char* ici; unsigned index = 0; unsigned loopcount = 0; unsigned scrl = 0; int x = 20; //Width изменил значение с 16 на 20 char temp; // initialize the library with the numbers of the interface pins //LiquidCrystal_1602_RUS lcd(12, 11, 5, 4, 3, 2); // pins for RS, E, DB4, DB5, DB6, DB7 LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); //////////////////////////////////////// // Clear all buffers and indexes void clearAll() { title[0] = 0; station[0]=0; for (int i=0;i<LINES;i++) { lline[i] = NULL;iline[i] = 0;tline[i] = 0; lcd.setCursor(0, i); lcd.print(blank); } } //////////////////////////////////////// void cleartitle() { title[0] = 0; for (int i = 1 ;i<LINES;i++) // clear lines { lline[i] = NULL; iline[i] = 0; tline[i] = 0; lcd.setCursor(0, i); lcd.print(blank); } draw(); } //////////////////////////////////////// void eepromReadStr(int addr, char* str) { byte rd; do { rd = EEPROM.read(addr++); *str = rd; // Serial.println(str[0],20); // str++; } while (( rd != 0)&&( rd != 0xFF)); *str = 0; } //////////////////////////////////////// void eepromWriteStr(int addr, char* str) { byte rd; do { EEPROM.write( addr++,*str); rd = *str; str++; } while (( rd != 0)&&( rd != 0xFF)); EEPROM.write( addr,0); } //////////////////////////////////////// // parse the karadio received line and do the job void parse(char* line) { int mul; // removeUtf8((byte*)line); // Serial.println(line); ////// Meta title if ((ici=strstr(line,"META#: ")) != NULL) { cleartitle(); strcpy(title,ici+7); lline[1] = title; draw(); } else ////// ICY0 station name if ((ici=strstr(line,"ICY0#: ")) != NULL) { int len; clearAll(); if (strlen(ici+7) == 0) strcpy (station,nameset); else strcpy(station,ici+7); lline[0] = station; draw(); } else ////// STOPPED if ((ici=strstr(line,"STOPPED")) != NULL) { cleartitle(); strcpy(title,"STOPPED"); lline[1] = title; draw(); } /////// Station Ip else if ((ici=strstr(line,"Station Ip: ")) != NULL) { char oip[20]; //Serial.println(line); eepromReadStr(EEaddrIp, oip); if ( strcmp(oip,ici+12) != 0) eepromWriteStr(EEaddrIp,ici+12 ); } /////Date Time ##SYS.DATE#: 2017-04-12T21:07:59+01:00 if ((ici=strstr(line,"SYS.DATE#:")) != NULL) { char lstr[30]; if (*(ici+11) != '2')//// invalid date. try again later { askDraw = true; return; } strcpy(lstr,ici+11); dt = gmtime(×tamp); int year,month,day,hour,minute,second; sscanf(lstr,"%04d-%02d-%02dT%02d:%02d:%02d",&(year),&(month),&(day),&(hour),&(minute),&(second)); dt->tm_year = year; dt->tm_mon = month-1; dt->tm_mday = day; dt->tm_hour = hour; dt->tm_min = minute;dt->tm_sec =second; dt->tm_year -= 1900; timestamp = mktime(dt); syncTime = true; } } //////////////////////////////////////// //Setup all things, check for contrast adjust and show initial page. void setup(void) { char oip[20]; Serial.begin(BAUD); while (!Serial) { ;} // set up the LCD's number of columns and rows: lcd.begin(20, 4); // pinMode(13, OUTPUT); // led Serial.println(F("Free RAM available:")) ; Serial.print(freeRam()); lcd.clear(); lcd.noAutoscroll() ; lcd.print(msg); lcd.setCursor(0, 2); // lcd.print(msg1); delay(5000); clearAll(); eepromReadStr(EEaddrIp, oip); lline[0] = (char*)"IP адрес:"; // lline[1] = oip; // изм с 2 на 3 draw(); delay(1000); } //////////////////////////////////////// // receive the esp8266 stream void serial() { char temp; Serial.print(F("sys.date\r")); // Synchronise with current date & time-пильников while ((temp=Serial.read()) != -1) { switch (temp) { case '\n' : if (index == 0) break; case '\r' : line[index] = 0; // end of string index = 0; parse(line); break; default : // put the received char in line if (index>BUFLEN-1) break; // small memory so small buffer line[index++] = temp; } } } //////////////////////////////////////// void askTime() { if (itAskTime) // { Serial.print(F("sys.date\r")) ; itAskTime = false; } } // draw all lines void draw() { char strsec[30]; dt=gmtime(×tamp); lcd.clear(); for (int i = 0 ;i < LINES;i++) { serial(); lcd.setCursor(1, i); if ((lline[i] != NULL)) lcd.print(lline[i]+iline[i]); // delay(1); lcd.setCursor(0, 3); // lcd.print(" 15.05.2018г 16:33"); // sprintf(strsec,"%02d-%02d-%04d %02d:%02d:%02d",dt->tm_mday,(dt->tm_mon)+1,dt->tm_year+1900, dt->tm_hour, dt->tm_min,dt->tm_sec); sprintf(strsec,"%02d/%02d/%04d %02d:%02d:%02d",dt->tm_mday,(dt->tm_mon)+1,dt->tm_year+1900, dt->tm_hour, dt->tm_min,dt->tm_sec); lcd.print (strsec); delay(1000); } } //////////////////////////////////////// // scroll each line void scroll() { unsigned len; for (int i = 0;i < LINES;i++) { if (tline[i]>0) { if (tline[i] == 4) iline[i]= 0; tline[i]--; } else { len = strlen(lline[i]+(iline[i])); if (len > x) iline[i]++; else {tline[i] = 6;} } } draw(); } //////////////////////////////////////// void loop(void) { serial(); if (loopcount++ == 0xffff) { loopcount = 0; if (++scrl%6 == 0) digitalWrite(13, HIGH); scroll(); digitalWrite(13, LOW); } // ntp control and first info demand if (loopDate>=5) { loopDate = 0; if (itAskTime) { if (!syncTime) // time to ntp. Don't do that in interrupt. { Serial.print(F("\rsys.tzo(\"")) ;Serial.print(TZO); Serial.print(F("\")\r")); Serial.print(F("cli.info\r")); // Synchronise the current state itAskTime = false; } else askTime(); } } } /////////////////////////////////////////259 строчка это совсем не по феншую, уберите ее совсем либо сделайте хотя бы 100
Вот отличия красной платы от синей, что я нашел:
Фотку нашел. shurik12330 прозванивайте тщательней. про miso там по дорожке видно что к 30 выводу идет
И sck звонится на 29 ногу - дорожка там уходит под слот SD
to Владимир 2018
Выложи еще свой руссифицированный скетч для экрана 0.96
259 строчка это совсем не по феншую, уберите ее совсем либо сделайте хотя бы 100
Менял это значение в пределах от 1-1000. Разница есть, конечно, но все равно не работает как надо.
Еще заметил разницу в поведении между OLED-ом и LCD. Может это как-то поможет выявить причину неисправности? После включения питания и появления строки даты и времени (до синхронизации) на OLED секунды считаются 01,02,03 ...., а потом происходит синхронизация и время продолжает считаться как надо. В LCD же при включении питания время и дата также устанавливаются как и на OLED экране "по умолчанию", но при этом секунды стоят на месте 00,00,00,.... Пока не произойдет синхронизация. После синхронизации дата и время, за исключением временной зоны, устанавливаются верно, но секунды при этом не отсчитываются. То есть время замерло и стоит на месте. Если перейти на другой канал, то время вновь будет отображаться верно, но статически.
to Владимир 2018
Выложи еще свой руссифицированный скетч для экрана 0.96
В последней редакции с заменой местоположения даты и месяца.
#define oled096 // your timezone offset #define TZO 2 #undef SERIAL_RX_BUFFER_SIZE #define SERIAL_RX_BUFFER_SIZE 128 #include "u8glibConf.h" #include <EEPROM.h> #include <time.h> #include <avr/pgmspace.h> #define PIN_PLAYING 12 #define BAUD 9600 // any standard serial value: 300 - 115200 // nams <--> num of line #define STATIONNAME 0 #define STATION1 1 #define STATION2 2 #define IP 3 #define GENRE 2 #define TITLE1 3 #define TITLE2 4 #define VOLUME 5 // constants const int EEaddr = 0; // EEPROM address for storing WPM const int EEaddr1 = 2; // EEPROM address for LCD address const int EEaddrIp = 10; // EEPROM address for the IP const byte ContrastPin = 8; // D8 low activates the Contrast adjustment // Character array pointers char msg2[] = {"OLED_I2C_RUS_4 V1.5"}; // //#else // char msg2[] = {"lcd V1.5"}; // //#endif char msg1[] = {"(c) Спасибо народу!"}; // char msg[] = {" Karadio"}; // Karadio specific data #define BUFLEN 180 #define LINES 6 char line[BUFLEN]; // receive buffer char station[BUFLEN]; //received station char title[BUFLEN]; // received title char nameset[BUFLEN/2]; // the local name of the station char nameNum[5]; // the number of the station char genre[BUFLEN/2]; // the local name of the station char* lline[LINES] ; // array of ptr of n lines uint8_t iline[LINES] ; //array of index for scrolling uint8_t tline[LINES] ; int16_t volume; unsigned index = 0; unsigned loopScroll = 0; unsigned loopDate = 0; char oip[20]; uint16_t y ; //Height of a line uint16_t yy; //Height of screen uint16_t x ; //Width uint16_t z ; // an internal offset for y byte NOKIAcontrast; // LCD initialization contrast values B0 thru BF struct tm *dt; time_t timestamp = 0; bool syncTime = false; bool askDraw = false; bool itAskTime = true; unsigned loopTime = 0; //////////////////////////////////////// void u8g_prepare(void) { if (u8g.getWidth() == 84) u8g.setFont(u8g_font_5x8); //u8g.setFont(u8g_font_04b_03br); else u8g.setFont(u8g_font_6x13); // u8g.setFont(u8g_font_6x10); u8g.setFont(u8g_font_04b_03br); u8g.setFontRefHeightExtendedText(); u8g.setDefaultForegroundColor(); u8g.setFontPosTop(); } //////////////////////////////////////// //Setup all things, check for contrast adjust and show initial page. void setup2() { clearAll(); lline[0] = (char*)msg; lline[1] = (char*)msg1; lline[2] = (char*)msg2; nameNum[0]=0; eepromReadStr(EEaddrIp, oip); lline[3] = (char*)"IP:"; lline[4] = oip; draw(0); digitalWrite(PIN_PLAYING, LOW); } void setTimer2() { cli();//stop interrupts TCCR2A = 0;// set entire TCCR2A register to 0 TCCR2B = 0;// same for TCCR2B TCNT2 = 0;//initialize counter value to 0 // set compare match register for 1khz increments OCR2A = F_CPU/1000/64 -1;// (must be <256) // turn on CTC mode TCCR2A |= (1 << WGM21); // Set CS21 bit for 64 prescaler TCCR2B |= (1 << CS22) ; // enable timer compare interrupt TIMSK2 |= (1 << OCIE2A); sei();//allow interrupts } void setTimer1() { //set timer1 interrupt at 4Hz cli();//stop interrupts TCCR1A = 0;// set entire TCCR1A register to 0 TCCR1B = 0;// same for TCCR1B TCNT1 = 0;//initialize counter value to 0 // set compare match register for 4hz increments // OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (must be <65536) OCR1A = F_CPU/4096 -1;// = (16*10^6) / (2*1024) - 1 (must be <65536) // turn on CTC mode TCCR1B |= (1 << WGM12); // Set CS10 and CS12 bits for 1024 prescaler TCCR1B |= (1 << CS12) | (1 << CS10); // enable timer compare interrupt TIMSK1 |= (1 << OCIE1A); sei();//allow interrupts } ISR(TIMER2_COMPA_vect) { cli();//stop interrupts serial(); sei();//allow interrupts } ISR(TIMER1_COMPA_vect) {//timer1 interrupt 4Hz if (loopTime%4 ==0) // 1hz { timestamp++; // time update loopDate++; if (!syncTime) itAskTime=true; // first synchro if not done askDraw = true; } loopScroll++; if ((++loopTime%7200) == 0) itAskTime=true; // refresh ntp time every 30Mn } void setup(void) { char msg3[] = {"Wi-Fi RADIO"}; Serial.begin(BAUD); while (!Serial) ; // pinMode(PIN_LED, OUTPUT); pinMode(PIN_PLAYING, OUTPUT); pinMode(ContrastPin, INPUT); digitalWrite(ContrastPin, HIGH); // activate internal pullup resistor digitalWrite(PIN_PLAYING, LOW); #ifdef IR irrecv.enableIRIn(); // Start the IR receiver irStr[0] = 0; #endif ReStart: // Come back here if LCD contract is changed // Read the EEPROM to determine if display is using a custom contrast value NOKIAcontrast = EEPROM.read(EEaddr1); // Set the Nokia LCD Contrast to default or reset if EEPROM is corrupt or set to new value if (NOKIAcontrast < 0xB0 || NOKIAcontrast > 0xCF) NOKIAcontrast = 0xB8; u8g.setContrast(2*(NOKIAcontrast-0x80)); u8g_prepare(); y = u8g.getFontLineSpacing(); yy = u8g.getHeight(); x = u8g.getWidth(); z = 0; clearAll(); for (int i = 0;i<5;i++) { u8g.firstPage(); do { // if (!(i%2)) u8g.drawFrame(0,0,x/2-1,yy/2-1); // else u8g.drawFrame(0,0,x-1,yy-1); u8g.drawStr(u8g.getWidth()/2 - (u8g.getStrWidth(msg3)/2), u8g.getHeight()/3, msg3); } while( u8g.nextPage() ); delay(500); if (i%2)u8g.setScale2x2(); else u8g.undoScale(); } lline[0] = (char*)msg; lline[1] = (char*)msg1; // lline[2] =(char*) msg2; nameNum[0]=0; eepromReadStr(EEaddrIp, oip); lline[3] = (char*)"IP:"; lline[4] = oip; draw(0); delay(2000); if (!digitalRead(ContrastPin)) { NOKIAcontrast+=1; if (NOKIAcontrast > 0xCF) NOKIAcontrast = 0xB0; EEPROM.write(EEaddr1,NOKIAcontrast) ; itoa(NOKIAcontrast,title,16); lline[2] = title; goto ReStart; } setTimer2(); setTimer1(); lline[2] = (char*)msg2; draw(0); } //////////////////////////////////////// // Clear all buffers and indexes void clearAll() { title[0] = 0; station[0]=0; for (int i=1;i<LINES;i++) {lline[i] = NULL;iline[i] = 0;tline[i] = 0;} } //////////////////////////////////////// void cleartitle() { title[0] = 0; for (int i = 3;i<LINES;i++) // clear lines { lline[i] = NULL; iline[i] = 0; tline[i] = 0; } } //////////////////////////////////////// void removeUtf8(byte *characters) { int index = 0; while (characters[index]) { if ((characters[index] >= 0xc2)&&(characters[index] <= 0xc3)) // only 0 to FF ascii char { // Serial.println((characters[index])); characters[index+1] = ((characters[index]<<6)&0xFF) | (characters[index+1] & 0x3F); int sind = index+1; while (characters[sind]) { characters[sind-1] = characters[sind];sind++;} characters[sind-1] = 0; } index++; } } //////////////////////////////////////// void eepromReadStr(int addr, char* str) { byte rd; do { rd = EEPROM.read(addr++); *str = rd; // Serial.println(str[0],16); str++; } while (( rd != 0)&&( rd != 0xFF)); *str = 0; } //////////////////////////////////////// void eepromWriteStr(int addr, char* str) { byte rd; do { EEPROM.write( addr++,*str); rd = *str; str++; } while (( rd != 0)&&( rd != 0xFF)); EEPROM.write( addr,0); } //////////////////////////////////////// void separator(char* from) { byte len; char* interp; len = strlen(from); while (from[strlen(from)-1] == ' ') from[strlen(from)-1] = 0; // avoid blank at end while ((from[0] == ' ') ){ strcpy( from,from+1); } interp=strstr_PF(from,PSTR(" - ")); if (from == nameset) {lline[0] = nameset;lline[1] = NULL;lline[2] = NULL;return;} if (interp != NULL) { from[interp-from]= 0; lline[(from==station)?1:3] = from; lline[(from==station)?2:4] = interp+3; } else { lline[(from==station)?1:3] = from; } } //////////////////////////////////////// // parse the karadio received line and do the job void parse(char* line) { char* ici; removeUtf8((byte*)line); ////// reset of the esp if ((ici=strstr_PF(line,PSTR("VS Version"))) != NULL) setup2(); else ////// Meta title if ((ici=strstr_PF(line,PSTR("META#: "))) != NULL) { cleartitle(); strcpy(title,ici+7); separator(title); askDraw = true; } else ////// ICY4 Description if ((ici=strstr_PF(line,PSTR("ICY4#: "))) != NULL) { // cleartitle(); strcpy(genre,ici+7); lline[2] = genre; askDraw = true; } else ////// ICY0 station name if ((ici=strstr_PF(line,PSTR("ICY0#: "))) != NULL) { int len; clearAll(); if (strlen(ici+7) == 0) strcpy (station,nameset); else strcpy(station,ici+7); separator(station); askDraw = true; } else ////// STOPPED if ((ici=strstr_PF(line,PSTR("STOPPED"))) != NULL) { digitalWrite(PIN_PLAYING, LOW); cleartitle(); strcpy_P(title,PSTR("STOPPED")); separator(title); askDraw = true; } /////// Station Ip else if ((ici=strstr_PF(line,PSTR("Station Ip: "))) != NULL) { eepromReadStr(EEaddrIp, oip); if ( strcmp(oip,ici+12) != 0) eepromWriteStr(EEaddrIp,ici+12 ); } else //////Nameset if ((ici=strstr_PF(line,PSTR("MESET#: "))) != NULL) { int len; strcpy(nameset,ici+8); ici = strstr(nameset," "); strncpy(nameNum,nameset,ici-nameset+1); nameNum[ici - nameset+1] = 0; strcpy(nameset,nameset+strlen(nameNum)); separator(nameset); } else //////Playing if ((ici=strstr_PF(line,PSTR("YING#"))) != NULL) { digitalWrite(PIN_PLAYING, HIGH); if (strcmp_P(title,PSTR("STOPPED")) == 0) { title[0] = 0; separator(title); askDraw = true; } } else //////Volume if ((ici=strstr(line,"VOL#:")) != NULL) { volume = atoi(ici+6); askDraw = true;; } else //////Date Time ##SYS.DATE#: 2017-04-12T21:07:59+01:00 if ((ici=strstr(line,"SYS.DATE#:")) != NULL) { char lstr[30]; if (*(ici+11) != '2')//// invalid date. try again later { askDraw = true; return; } strcpy(lstr,ici+11); dt = gmtime(×tamp); int year,month,day,hour,minute,second; sscanf(lstr,"%04d-%02d-%02dT%02d:%02d:%02d",&(year),&(month),&(day),&(hour),&(minute),&(second)); dt->tm_year = year; dt->tm_mon = month-1; dt->tm_mday = day; dt->tm_hour = hour; dt->tm_min = minute;dt->tm_sec =second; dt->tm_year -= 1900; timestamp = mktime(dt); syncTime = true; } } //////////////////////////////////////// // receive the esp8266 stream void serial() { char temp; //Serial.print(F("sys.date\r")); // Synchronise with current date & time// от Пильникова для синхронизации времени while ((temp=Serial.read()) != -1) { switch (temp) { case '\n' : if (index == 0) break; case '\r' : line[index] = 0; // end of string index = 0; parse(line); break; default : // put the received char in line line[index++] = temp; if (index>BUFLEN-1) //break; // small memory so small buffer { Serial.println(F("overflow")); line[index] = 0; parse(line); index = 0; } } } } //////////////////////////////////////// // draw all lines void draw(int xx) { char strsec[30]; dt=gmtime(×tamp); if (x==84) sprintf(strsec,"%02d-%02d %02d:%02d:%02d",(dt->tm_mon)+1,dt->tm_mday, dt->tm_hour, dt->tm_min,dt->tm_sec); else // sprintf(strsec,"%02d-%02d-%04d %02d:%02d:%02d",(dt->tm_mon)+1,dt->tm_mday,dt->tm_year+1900, dt->tm_hour, dt->tm_min,dt->tm_sec); sprintf(strsec,"%02d-%02d-%04d %02d:%02d:%02d",dt->tm_mday,(dt->tm_mon)+1,dt->tm_year+1900, dt->tm_hour, dt->tm_min,dt->tm_sec); // замена даты и месяца местами u8g.firstPage(); do { u8g.drawHLine(0,(4*y) - (y/2)-5,x); u8g.drawBox(0,0,x-1,y); for (int i = 0;i < LINES;i++) { if (i == 0)u8g.setColorIndex(0); else u8g.setColorIndex(1); if (i >=3) z = y/2 -3; else z = -1; if ((lline[i] != NULL)) { if (i == 0) { if (nameNum[0] ==0) u8g.drawStr(1,0,lline[i]+iline[i]); else { u8g.drawStr(1,0,nameNum); u8g.drawStr(u8g.getStrPixelWidth(nameNum)-2,0,lline[i]+iline[i]); } } else u8g.drawStr(0,y*i+z,lline[i]+iline[i]); } if (i == VOLUME) { u8g.drawFrame(0,y*i+z+(y/2)-1,x-1,3); u8g.drawHLine(0,y*i+z+(y/2),((uint16_t)(x*volume)/255)); } } //time // if ((lline[4] == NULL)||(x==84)) u8g.drawStr(x/2-(u8g.getStrWidth(strsec)/2),yy-y,strsec); } while( u8g.nextPage() ); } //////////////////////////////////////// // scroll each line void scroll() { unsigned len; for (int i = 0;i < LINES;i++) { if (tline[i]>0) { if (tline[i] == 4) iline[i]= 0; tline[i]--; } else { len = u8g.getStrWidth(lline[i]+iline[i]); if (i == 0) len += u8g.getStrWidth(nameNum) ; if (len > x) {iline[i]++;askDraw = true;} else tline[i] = 6; } } } #ifdef IR void nbStation(char nb) { if (strlen(irStr)>=3) irStr[0] = 0; uint8_t id = strlen(irStr); irStr[id] = nb; irStr[id+1] = 0; } void translateIR() // takes action based on IR code received // KEYES Remote IR codes (NEC P01) // and Ocean Digital remote (NEC P07) { #ifdef IRLib2 if (irrecv.getResults()) { results.decode(); #else if ((irrecv.decode(&results))) { #endif // Uncomment the following line to see the code of your remote control and report to the case the value #ifdef IRLib2 // Serial.print(F("Protocol:"));Serial.print(results.protocolNum);Serial.print(F(" value:"));Serial.println(results.value,HEX); #else // Serial.print(F("Protocol:"));Serial.print(results.decode_type);Serial.print(F(" value:"));Serial.println(results.value,HEX); #endif // Serial.print(F(" value:"));Serial.println(results.value,HEX); switch(results.value) { case 0xFF629D: case 0x10EF48B7: /*(" FORWARD");*/ irStr[0] = 0;Serial.print(F("cli.next\r")); break; case 0xFF22DD: case 0x10EFA857: case 0x10EF42BD: /*(" LEFT");*/ irStr[0] = 0;Serial.print(F("cli.vol-\r")); break; case 0xFF02FD: case 0x10EF7887: /*(" -OK-");*/ { // state?Serial.print(F("cli.start\r")):Serial.print(F("cli.stop\r")); if (strlen(irStr) >0) { Serial.print(F("cli.play(\""));Serial.print(irStr);Serial.print(F("\")\r")); irStr[0] = 0; } else { state?Serial.print(F("cli.start\r")):Serial.print(F("cli.stop\r")); /* if (state) Serial.print("cli.start\r"); else Serial.print("cli.stop\r"); */ } state = !state; irStr[0] = 0; break; } case 0xFFC23D: case 0x10EF28D7: case 0x10EF827D: /*(" RIGHT");*/ irStr[0] = 0;Serial.print(F("cli.vol+\r")); break; // volume + case 0xFFA857: case 0x10EFC837: /*(" REVERSE");*/ irStr[0] = 0;Serial.print(F("cli.prev\r")); break; case 0xFF6897: case 0x10EF807F: /*(" 1");*/ nbStation('1'); break; case 0xFF9867: case 0x10EF40BF: /*(" 2");*/ nbStation('2'); break; case 0xFFB04F: case 0x10EFC03F: /*(" 3");*/ nbStation('3'); break; case 0xFF30CF: case 0x10EF20DF: /*(" 4");*/ nbStation('4'); break; case 0xFF18E7: case 0x10EFA05F: /*(" 5");*/ nbStation('5'); break; case 0xFF7A85: case 0x10EF609F: /*(" 6");*/ nbStation('6'); break; case 0xFF10EF: case 0x10EFE01F: /*(" 7");*/ nbStation('7'); break; case 0xFF38C7: case 0x10EF10EF: /*(" 8");*/ nbStation('8'); break; case 0xFF5AA5: case 0x10EF906F: /*(" 9");*/ nbStation('9'); break; case 0xFF42BD: case 0x10EFE817: /*(" *");*/ irStr[0] = 0;Serial.print(F("cli.stop\r")); break; case 0xFF4AB5: case 0x10EF00FF: /*(" 0");*/ nbStation('0'); break; case 0xFF52AD: case 0x10EFB847: /*(" #");*/ irStr[0] = 0;Serial.print(F("cli.start\r")); break; case 0xFFFFFFFF: /*(" REPEAT");*/break; default:; /*Serial.println(" other button ");*/ }// End Case ; #ifdef IRLib2 irrecv.enableIRIn(); //Restart receiver #else irrecv.resume(); // receive the next value #endif } } //END translateIR #endif void askTime() { if (itAskTime) // time to ntp. Don't do that in interrupt. { Serial.print(F("sys.date\r")) ; itAskTime = false; } } //////////////////////////////////////// void loop(void) { #ifdef IR translateIR(); #endif // scrolling control and draw control if (loopScroll >=1 ) // 500ms { // digitalWrite(PIN_LED, !digitalRead(PIN_LED)); // blink led loopScroll = 0; if (askDraw) // something to display { askDraw = false; draw(0); } // else scroll(); } // ntp control and first info demand if (loopDate>=5) { loopDate = 0; if (itAskTime) { if (!syncTime) // time to ntp. Don't do that in interrupt. { Serial.print(F("\rsys.tzo(\"")) ;Serial.print(TZO); Serial.print(F("\")\r")); Serial.print(F("cli.info\r")); // Synchronise the current state itAskTime = false; } else askTime(); } } }Pilnikov, у вас видно, что 30 нога идет к мисо. У меня разъем припаян сверху и не видно. НО не звонится никак мисо на 30 ногу, а 30 нога только к +3,3В подтянута через 10 кОм. Хотя пробовал отсоединить сигналы MISO и SCLK, без них радио не поет. вечером сфоткаю свою красную плату.
Может и на синей надо притянуть мисо к плюсу, чтобы заработала? у вас синяя есть? у меня на синей не притянута.
if ((ici=strstr(line,"SYS.DATE#:")) != NULL) //проверяем что приняли строчку с датой и временем { char lstr[30]; //объявляем буфер в 30 символов под эту самую дату и время if (*(ici+11) != '2')//// invalid date. try again later //дата кривая, требуем повторно считать ее { askDraw = true; //Требуется повторная загрузка данных return; // выскакиваем } strcpy(lstr,ici+11); //копируем дату и время в буфер dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине) int year,month,day,hour,minute,second; //объявляем переменные под год месяц день недели и.т.д sscanf(lstr,"%04d-%02d-%02dT%02d:%02d:%02d",&(year),&(month),&(day),&(hour),&(minute),&(second)); //переносим (разбираем) строчку с датой на отдельные кусочки (день месяц год и.т.д) dt->tm_year = year; dt->tm_mon = month-1; dt->tm_mday = day; //заменяем кусочки структуры dt значениями из нашей принятой и разобранной строки с датой и временем dt->tm_hour = hour; dt->tm_min = minute;dt->tm_sec =second; dt->tm_year -= 1900; timestamp = mktime(dt); //записываем в timestamp(штамп/оттиск времени в формате UNIX time (количество секунд с 1970 года) значение времени сформированное в структуре dt syncTime = true; // Говорим что время поправлено }перед 257 строчкой вставьте
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)Pilnikov, у вас видно, что 30 нога идет к мисо. У меня разъем припаян сверху и не видно. НО не звонится никак мисо на 30 ногу, а 30 нога только к +3,3В подтянута через 10 кОм. Хотя пробовал отсоединить сигналы MISO и SCLK, без них радио не поет. вечером сфоткаю свою красную плату.
Может и на синей надо притянуть мисо к плюсу, чтобы заработала? у вас синяя есть? у меня на синей не притянута.
Нету у мну синей :( У мну две красных :)
А выяснить можно перепаяв чип - тогда точно можно будет понять кто виноват чип или плата.
Подтяжка вряд ли - не хеллокало бы.
Вот если бы у вас есп32 была - можно было бы быстро проверить версию с частотой инициализации. Я 20 кГц делал крайний раз - мне помогло
Еще народ гдето писал про "старую" и "новую" версии чипов - гляньте чего там на микрухе написано "мелким шрифтом" ;)
В последней редакции с заменой местоположения даты и месяца.
Изображение сдвинуто влево на несколько пикселей :(
В последней редакции с заменой местоположения даты и месяца.
Изображение сдвинуто влево на несколько пикселей :(
Пробуйте подобрать "правильный" экран через sys.lcd("xxx")
Пробуйте подобрать "правильный" экран через sys.lcd("xxx")
С "родным" скетчем изображение попадает в экран
В последней редакции с заменой местоположения даты и месяца.
Изображение сдвинуто влево на несколько пикселей :(
А можно фото?
Пробуйте подобрать "правильный" экран через sys.lcd("xxx")
С "родным" скетчем изображение попадает в экран
Я перепутал - это же Аддон там надо подбирать "правильный" экран в u8glibConf.h
А можно фото?
Кинь еще свой u8glibConf.h
To Pilnikov:
Ничего не помогло.
Если Serial.print(F("sys.date\r")); вставляю в void draw(), то время идет, секунды, синхронизируются часы, но немного "поддергивается" экран, похоже, что в такт с секундами. Временная зона (TZO) при этом не меняется и секунды до синхронизации не считают.
В скетче для OLED используются таймеры. В этот скетч я их не вставлял. Это никак на отбражение времени не влияет?
А можно фото?
Кинь еще свой u8glibConf.h
Да, его нужно в ту же папку, кидаю:
To Pilnikov:
Ничего не помогло.
Если Serial.print(F("sys.date\r")); вставляю в void draw(), то время идет, секунды, синхронизируются часы, но немного "поддергивается" экран, похоже, что в такт с секундами. Временная зона (TZO) при этом не меняется и секунды до синхронизации не считают.
В скетче для OLED используются таймеры. В этот скетч я их не вставлял. Это никак на отбражение времени не влияет?
Serial.print(F("sys.date\r")); - выводит текущую дату в сериал.
TZO это 3600 * на вашу таймзону (для москвы 2) прибавлять надо к timestamp (пример dt = gmtime(×tamp + 3600 * 2) для москвы)
Либо так
Да, его нужно в ту же папку, кидаю:
Не помогло
То Владимир 2018
перед 257 строчкой вставьте
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)вы это делали?
еще так попробуйте
Нету у мну синей :( У мну две красных :)
А выяснить можно перепаяв чип - тогда точно можно будет понять кто виноват чип или плата.
Вот если бы у вас есп32 была - можно было бы быстро проверить версию с частотой инициализации. Я 20 кГц делал крайний раз - мне помогло
Еще народ гдето писал про "старую" и "новую" версии чипов - гляньте чего там на микрухе написано "мелким шрифтом" ;)
чип перепаять я не осилю) вечером посмотрю надписи на чипе, но точно VS1053B.
ESP32 буду заказывать. какую лучше - голый модуль или нодемцу?
То Владимир 2018
перед 257 строчкой вставьте
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)вы это делали?
еще так попробуйте
Делал, вставлял перед 257 строкой. Потом подобную запись выше закоментировал - и так пробовал. Попробую еще с dt=now();
Да, его нужно в ту же папку, кидаю:
Не помогло
У меня экран OLED 0,96", SDD 1306, 128x64,IIC,I2C
То Владимир 2018
перед 257 строчкой вставьте
dt = gmtime(×tamp); //Записываем в структуру dt (содержащую элементы час минута секунда год) текущее время в контроллере (в дурине)вы это делали?
еще так попробуйте
Делал, вставлял перед 257 строкой. Потом подобную запись выше закоментировал - и так пробовал. Попробую еще с dt=now();
dt = now() не получится
чип перепаять я не осилю) вечером посмотрю надписи на чипе, но точно VS1053B.
ESP32 буду заказывать. какую лучше - голый модуль или нодемцу?
лучше мцу
а надпись надо смотреть ниже VS1053B - там цифири волшебные они и есть "определение возраста"
У nadim в описании
https://a.d-cd.net/d23e5b5s-960.jpg
Либо так
Для тайм зоны это помогло, спасибо.
А можно как нибудь сделать быстрее скроллинг?
Либо так
Для тайм зоны это помогло, спасибо.
У вас в радио таймзону нужно поправить тогда и тут не нужно будет ее корректировать
Скроллинг привязан к timer1 (4 Hz 250ms) - перенастраивайте таймер или отвязывайтесь от него - будет быстрее
У меня экран OLED 0,96", SDD 1306, 128x64,IIC,I2C
У меня такой OLED 1,3'', SSH 1106, 128x64,IIC,I2C
У меня экран OLED 0,96", SDD 1306, 128x64,IIC,I2C
У меня такой OLED 1,3'', SSH 1106, 128x64,IIC,I2C
Попробуй так:
В u8glibConf.h закомментируй 96, 97, 98 строки и раскомментируй 99, 100, 101.
И в скетче замени первую строку
#define oled096
на
#define oled130