Jump to content

    

hd44780

Свой
  • Content Count

    1231
  • Joined

  • Last visited

Everything posted by hd44780


  1. Да, кварц 24.576 есть, как запаяю/проверю, отпишусь, что получилось.
  2. SPI доработал - не полегчало :crying: . // Чтение/запись байта SPI static uint8_t SPI_sendByte ( uint8_t data ) { u8 rxbyte; while ( !( SPI_PORT -> SR & SPI_SR_TXE ) ); SPI_PORT -> DR = data; while ( !( SPI_PORT -> SR & SPI_SR_RXNE ) ); rxbyte = SPI_PORT-> DR; while ( (SPI_PORT -> SR & SPI_SR_BSY) != 0); return rxbyte; } // SPI_sendByte Наверное, всё-таки кварц надо пошевелить ...
  3. Ну WAV PCM, MP3 можно сыграть и без микрухи, согласен. А WMA, OGG, FLAC? Про midi я вообще молчу, это не оцифровка, его просто так на простых ЦАПах не сыграешь, нужен специализированный синтезатор. Ладно, это религия, теперь по делу. После соединения GPIO0 и GPIO1 вместе звук пошёл, но как-то странно. Функцию писка я приводил выше, но вылезла такая странность: после цикла for ( i = 0; i < 8; i ++ ) vs1011_writeData ( sine_on [ i ] ); писк включается только первый раз, при повторной подаче этих же команд слышу просто щелчок и всё. Работает только если загнать всю процедуру сброса чипа внутрь того while, т.е. сразу перед подачей команды включения синуса. Правильно это или нет - не знаю. VS1003 работает в том варианте, как написано выше. Пробовал включить проигрывание. Музыка заиграла, но у меня какая-то ещё хрень, видимо, с генератором, секунду-две нормально играет, потом начинает замедленно играть и с какими-то щелчками. Как будто скорости не хватает. От манипуляций с частотой SPI эффекта не заметил. OGG и FLAC вообще не играют. WAV тоже криво. Видимо из-за того же генератора. Может я кварц плохо впаял, пока не знаю. Позже попробую его опять перепаять. Сейчас кварц стоит родной, 12.288 MHz. При инициализации бит SM_CLK_RANGE в MODE ставлю в 0, остальное не меняю. В CLOCK_F пишу 0xE430. Пробовал включать там же SC_ADD - пофигу. Потом попробую пересчитать, хотя не думаю, что здесь ошибка, т.к. другой VS1053 (который на Ф105) с такими же константами работает нормально. Единственное отличие - там кварц 24.576 и включаю бит SM_CLK_RANGE.
  4. Да, GPIO0 и GPIO1 соединить вместе на данный момент проще всего. Они там соседние :) Как проверю - отпишусь.
  5. В течении дня попробую - отпишусь. Пока функция отправки-приёма байта по SPI такая: // Чтение/запись байта SPI static uint8_t SPI_sendByte ( uint8_t data ) { u8 rxbyte; while ( !( SPI_PORT -> SR & SPI_SR_TXE ) ); SPI_PORT -> DR = data; while ( !( SPI_PORT -> SR & SPI_SR_RXNE ) ); rxbyte = SPI_PORT->DR; return rxbyte; } // SPI_sendByte На SPI кроме вс-ки никого больше нет. Попалось на глаза вот это - http://radiokot.ru/forum/viewtopic.php?p=1852790#p1852790 Пишут, что надо все GPIO в землю класть ...
  6. Громкость максимальная - после инициализации специально нули туда загнал. Щелчки еле слышимые есть - но я так и не понял, в какие моменты они появляются. Ещё было следующее - когда стоял кварц 24.576, при постоянной подаче синуса в бесконечном цикле где-то раз в 2 минуты (точный период не засекал) был слышен писк согласно моему циклу. Но буквально по 2 раза - это 2 оборота моего цикла: void vs1011_sinewave_beep (uint8_t count) { // n = const uint8_t sine_on [ 8 ] = { 0x53, 0xEF, 0x6E, 0x04, 0x00, 0x00, 0x00, 0x00 }; const uint8_t sine_off [ 8 ] = { 0x45, 0x78, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00 }; uint8_t i; VS1011_RESET_RES ( ); // nRESET = 0 delay_ms ( 1 ); VS1011_SET_RES ( ); // nRESET = 1 delay_ms ( 500 ); // Ждать, пока DREQ == 0 while ( VS1011_DREQ != SET ); // Test sine - p. 36-37 // vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_TESTS | SM_CLK_RANGE ); vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_TESTS ); while ( count -- ) { for ( i = 0; i < 8; i ++ ) vs1011_writeData ( sine_on [ i ] ); delay_ms ( 100 ); for ( i = 0; i < 8; i ++ ) vs1011_writeData ( sine_off [ i ] ); delay_ms ( 100 ); } // while } // vs1011_sinewave_beep на кварце 12.288 и этого не слышал. SM_CLK_RANGE в коде - это 0x8000 - признак кварца 24.576. с разъёмом и осциллом на его контактах повожусь - позже отпишу, когда появится инфа.
  7. Привет всем. Приобрёл тут китаёзный модуль на VS1053b - http://www.ebay.com/itm/New-Sell-Style-MP3...MMAAOSwjDZYdasE Отличается от тамошней картинки только наличием у меня резюка R5 - там на фото он отсутствует, у меня 100 кил в землю. Это нога 34, GPIO1. Проблема такая: все регистры читаются, пишутся, ID нормальный приходит, всё типа ок, а звука нету - ни синуса, ни декодированного файла. Короче, партизан на допросе. Пытался гнать к него MP3 и WAV (файлы проверенные, F105+VS1053 их играет норм) - тоже тишина, но судя по времени работы функции проигрывания файла - понимает и декодит нормально. Время работы функции совпадает с длительностью звучания файлов - проверено. Файл драйвера (без функции проигрывания, если надо - выложу) приложил, сам он рабочий, переделанный с великолепно работающей связки F105+VS1053 (переделана только работа с ногами проца/SPI). Переделал вроде без ошибок - этот же драйвер понимает и VS1003, который нормально свистит синусами и играет музыку на том же F429 проце (дискаверина). Уже мозг весь об неё сломал, помогите кто может плиз. Или это китаёзы брак пригнали?? Что ещё бросилось в глаза - все GPIO ноги в ДШ (также как и на моей работающей плате с Ф105) притянуты к земле 100к резюками. На этом модуле - резюк только на ноге 34, остальные, похоже, висят в воздухе. Пытался менять кварц (у китайцев стоял 12.288МГц, ставил 24.576, как на моей рабочей плате), подправил соответствующим образом инициализацию - ничего не дало. Поставил обратно родной 12.288. PS. Опыт работы с этими микрухами есть, успешно заводил VS1011e, VS1003 и такой же 1053. Но с тупым молчанием микросхемы сталкиваюсь впервые. :crying: Спасибо. vs1011.zip
  8. Есть для F407/F439 + 16-битный дисп SSD1289/SSD1963. Это I8080. 6800 у меня нет. Скинуть?
  9. Да, именно это Alex A. Mihaylov и имел в виду. Физический интерфейс один, а девайсов (логических) там может быть много. Это называется "USB Composite Device" - составное USB устройство.
  10. По идее должны. На F439 два хоста одновременно пашут идеально. Хост+девайс пока не делал.
  11. STemwin

    Я делал что-то подобное (панельку с часами, значками наподобие виндозного трея) следующим образом: 1. Создаю окно: WM_HWIN hStatusWin; ................................. hStatusWin = WM_CreateWindowAsChild ( 0, 0, 800, 25, WM_GetDesktopWindowEx ( 1 ), WM_CF_SHOW | WM_CF_HASTRANS | WM_CF_MEMDEV | WM_CF_STAYONTOP, _cbStatus, 0 ); 2. В его оконной функции пишу: hWin = pMsg -> hWin; switch ( pMsg->MsgId ) { case WM_CREATE: // Создание окна hTimerTime = WM_CreateTimer ( hWin, ID_TIMER_TIME, 1000, 0 ); ............. break; case WM_DELETE: // Удаление окна WM_DeleteTimer ( hTimerTime ); break; case WM_TIMER: // Таймер обновления окна WM_InvalidateWindow ( hWin ); WM_RestartTimer ( pMsg->Data.v, 0 ); break; case WM_PAINT: // Перерисовка break; hTimerTime - либо глобальная, либо локальная с модификатором static. Идея в следующем - Вы создаёте простое окно, которое сами же и перерисовываете по таймеру в событии WM_PAINT. Работает и под FreeRTOS, и без неё. от этого вообще ничего не зависит.
  12. Да, спасибо, если я решу ток вторым АЦП измерять, это очень пригодится.
  13. вот это ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; полностью решило проблему, в буфере сразу появилась куча периодов. Видимо я загнался, глядя в кучу примеров :rolleyes: . ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; - по-моему не надо, у меня ж регулярная группа каналов. Да, совершенно верно. У меня ещё 2 канала тока есть в схеме - всего 4 канала АЦП. Я их просто пока не опрашивал вообще. Чтобы не усложнять картину. на SPL писал, т.к. подсматривал конфигурацию в старых некубовых примерах от ST. Может и натравлю на них второй АЦП, не знаю как получится. Сейчас ими и буду заниматься. Спасибо всем большое.
  14. Привет всем. Пытаюсь оцифровать этим процом переменку из розетки (т.е. просто сделать вольтметр). Перед тем как попасть в проц, переменка проходит через обычный транс от БП (для развязки), потенциометр для подгонки по диапазон, поднимается на 1.5в вверх, чтобы измерять обе полуволны, а не одну. О том, зачем так сложно, прошу не задумываться, это часть более сложной конструкции. Виртуальная земля и синусоида из розетки цифруются АЦП проца+таймер+DMA. Эта связка отлажена и работает. АЦП запускаю по Timer 2 CC2 event: // ADC1 configuration ------------------------------------------------------ ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; // -> CR1 | 0x00060000 ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; // T2, канал 2 --> CR2 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; // --> ADCx->SQR1 ADC_Init ( ADC1, &ADC_InitStructure ); Настройка таймера TIM2, CCR2: /* TIM2 configuration ------------------------------------------------------*/ // Time Base configuration // TIM2 - APB1, 72MHz // Ft = Fapb1/(PSC+1) = 72E6/(PSC+1) = 72E6/1800=40000 TIM_TimeBaseStructInit ( &TIM_TimeBaseStructure ); TIM_TimeBaseStructure.TIM_Period = 20-1; // -> ARR - До этого значения считает таймер TIM_TimeBaseStructure.TIM_Prescaler = 1800-1; // -> PSC - делитель частоты шины, Ft = 40kHz TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit ( TIM2, &TIM_TimeBaseStructure ); // TIM1 channel1 configuration in PWM mode TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 10; // CCR2 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC2Init ( TIM2, &TIM_OCInitStructure ); DMA не привожу, там проблем вроде не заметил. Проблема только лишь в том, что я планировал получить в буфере не 2 периода частоты 50 Гц, а 20 График из экселя приложил. по моим подсчётам частота запуска АЦП должна быть 40кГц/AAR = 40kHz/2 = 2КГц, но в буфере я вижу 2 периода входной частоты 50 Гц. Буфер - 1000 значений. Почему 2, я понять не могу. 2кГц = 2000 значений в секунду, в буфере 1000 значений за 0.5 сек. Это должно быть 500ms/20ms=25 периодов. Почему у меня их 2? В чём я ошибаюсь? Что самое интересное, что ради экперимента я пытался пихать в ARR и PSC разные числа - по фигу совершенно, там всегда 2 периода! Сижу над этим уже 3 дня, не могу понять :crying: :smile3046: В эррате ничего путного не нашёл. Спасибо. PS. Про странную форму графика с какими-то разрывами я уж молчу.
  15. Mazay, у Вас pull-up на D+ отключаемый или нет? Если нет - сделайте отключаемый. И драйвера CDC тут ни при чём. У меня HID device, соответственно никаких ST-шных дров нет вообще, а симптомы те же. Отключаемый pull-up должен помочь. Правда руки до этого у меня ещё не дошли :( . На него винда всегда корректно реагирует. А переподключение кабеля по сути и реализует то самое переподключение резюка. Никакие PnP сообщения тут, имхо ни при чём. Я эту байду наблюдал и на AVR+ObDev лет этак 8 назад, наблюдаю её и здесь. Винды разные были XP, 2003 сервер, семёрка. Более высоких не пробовал, но думается, один хрен.
  16. С LPC не работал, но у STM-а в ихних примерах поголовно везде была тупая недоработка - они напрочь игнорили событие отключения девайса. Ну кроме разве что вывода на дисплей строки "device disconnected" - так, понты сплошные . Я добавил туда флажок, по которому сделал простую переинициализацию хоста. С тех пор вот уж полтора года всё крутится как часы и с мышами, и с клавами и с флэшками. Но имейте в виду, что при переинициализации хоста необходимо также очищать абсолютно все служебные переменные как драйвера USB ядра, так и драйвера класса. Иначе можете словить кучу разных непредсказуемых глюков. У ST с этим тоже были с этим проблемы. У меня, например, хост понимает флэшки, мышки и клавы. При чередовании этих устройств флэшка не выходила из фазы энумерации. Оказалось, я пропустил одну глоб переменную в драйвере MSC. Забыл её обнулить. Там была тьма-тьмущая разных глобальных переменных, раскиданных по куче разных файлов... замахался, пока всё вылизал. Хотя, может, у NXP примеры почище сделаны, не знаю.
  17. uriy, скорость я пока не тестировал, работаю на STemWin, там один слой работает. Но думаю, что будет также как у Вас, SDRAM у меня тоже на 90MHz.
  18. Всех с НГ и Рождеством Христовым! Тема полностью закрыта. Этот дисп, о котором я писал в первом посте, рабочий на 100%. Его тайминги и все параметры, включая распиновку, полностью идентичны вот этому - http://www.buydisplay.com/default/7-tft-lc...4-gps-tablet-pc Доки там все есть. На другой плате с таким же F439IIT6 (но уже 4-слойка с ручной разводкой) пашет великолепно. Ещё раз убедился, что разводка - великая вещь :) .
  19. Насколько я понимаю - да. но если Вы добавите 5,6,7 или 9 - условия понадобятся. Моё ИМХО - после нагрузки.
  20. Да. Но что из тех функций и когда она вызывает - я не исследовал. Mister_DSP, конечно, Вы правы, но в данном случае мы ограничены функционалом графического шлюза emWin (LCDConf.c) и логикой его работы. А как он работает - повторюсь, я не исследовал. Я работал с FlexColor, он работает гораздо быстрее, а про его недостатки и баги я уже писал выше. Повторяться незачем. Могу только добавить, что при его использовании конструкция получается весьма чувствительной к качеству разводки платы. У меня разводка весьма хреновая и на FlexColor мой SSD1963 частенько подвисал (экран белеет и перестаёт показывать). Это баг самого SSD, но факт остаётся фактом. С тем шлюзом таких багов нет.
  21. Попробуйте переписать функции в LCDConf.c. Я этого не делал, меня и так всё устаивало А сейчас вообще переехал на LTDC..
  22. Сорри, долго не заглядывал сюда. Сравнивать любой FSMC дисп с LTDC (а именно он стоит на 429 дискавери) по определению неверно. совершенно разные технологии. Запись точки в SSD1963 - это 6 команд (запись x1, y1; x2, y2, потом команда засылки данных). Если брать в циклах обмена по FSMC - минимум в 2 раза больше. А для LTDC - просто запись 2-3 байтов в память по прямому адресу .... Хотите скорости - выкиньте FSMC и пользуйтесь LTDC. Но он есть только в F4x9 и выше. 407 такого не умеет. другие либы есть, но в плане окошек они и рядом с emWin не стояли ...
  23. а покажите ошибки, может подскажу чего ...
  24. Ничего переписывать не надо. Находящиеся там функции вызываются из недр библиотеки. Имя файла роли вообще не играет.
  25. Сорри. Там просто функция задержки на указанное кол-во мс. В инициализации SSD надо. Приложил. Можете свою использовать, если такая у Вас есть. System.7z