Перейти к содержанию

serg123

Members
  • Постов

    803
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные serg123

  1. lcd-image-converter очень хорошо помагает в работе с изоброжениями и шрифтами, как для цветных так и для монохромных дисплеев. Можно создовать как моноширные так и пропоциональные шрифты.

  2. Насчет термометра RTC, он может врать на +- 3, да и стоять будет все внутри закрытого корпуса с локальными источниками тепла. Так что это не особо хорошая затея.

  3. 1 час назад, asvetp сказал:

    Но я же опрашиваю биты регистра 10Н и, поэтому, надеюсь, что контролируются все 4 блока данных. Установил в битах BLERA[1:0] и BLERB[1:0] значение 01

    К ошибкам он никакого отношения не имеет, он реагирует на качество приема RDS, определилось опытным путем. BLERA[1:0] и BLERB[1:0] Они вроде только считываются?

  4. 10 часов назад, bulat943 сказал:

    И чем SI4703 лучше? 

    В отличии от RDA5807 декодер RDS начинает работать когда уровень RSSI меньше 30, и ошибки видятся во всех 4 блоках данных.

     

    25 минут назад, asvetp сказал:

    А вот мусор при приёме в программе как раз и удаляется. Если RDS принимается ошибками, то программа его не выводит на экран. Декодировать текст я не стал, ибо согласен с bulat943, что не стоит это делать. 

    Ну когдаошибки понятно, но ошибки то видятся только в первых двух блоках, а вдвух информационных что прилитело неизвестно, так что при неочень хорошем сигнале мусор все равно пролезит. Насчет текста, там всетоки названия треков передают всетоки полезная инфа ;), еще можно время с датой выводить, но там необходима еременные сплавающий запятой и  мк с малым обьемом памяти просто непотянет.

  5. Можно попробовать входной LC фильтр убрать. Хотя это странно какой то мусор все равно должен проходить если RDS есть.

    Только что, andrusha152 сказал:

    Скорее всего в магнитолах стоят специализированные декодеры RDS

    Скорее там функция декодирования ошибок есть, мы же все в основном ждем отсутствия ошибок в блоках данных.

  6. 7 часов назад, asvetp сказал:

    Я вставил в программу проверку регистра 10Н

    У меня  при использовании  регистра 10h, удалось снизить чувствительность RSSI где то на 8 для корректного считывания RDS. Строку радио текста не пробовали считывать?

  7. Ясно, ну собственно определение ошибок тут только в двух блоках, а для еще двух надо корректор ошибок делать, но там для меня покрайней мере пока муть, или регистр 10h попробовать использовать но сильно лучше не станет. C SI4703 в этом плане попроще, там ошибки во всех блоках определяются. В общем нужен декодер ошибок.

  8. Есть такое, как уже говорил для приема дальних станций пришлось загонять мк в сон, причем как позже выяснилось помехой был именно i2c, экранирование не помогало, вот и жду теперь фильтры может поможет и от этого.

  9. 13 часов назад, bulat943 сказал:

    А как вы устанавливаете ток потребления RDA5807?

    Регистр 5L ,биты 5 и 4, в английском описании указано как неиспользуются. 0 - 1,8 мА, 1 - 2,1 мА, 2 - 2,5 мА, 3 - 3 мА.

    10 часов назад, Гость vladi сказал:

    Для меня этот фильтр (GFWB3 SE 76-108мгц) выглядит, как поставить диодный мостик после диодного мостика.

    Несовсем так, как уже писал выше данные фильтры ставят чтобы широкополосные усилителе которые идут после антены, не усиливали все подряд, зашумляя этим  нужный сигнал. 

  10. Vlad, такой вапрос какой ток потребления установлен на RDA, всетаки данный фильтр ставят чтоб усилитель внутри приемнека широкополосный не усиливал все подряд заглушая при этом нужный сигнал.

  11. Да есть такое, в общем все началось с экспериментов установки различных токов потребления усилителем rda5807. Самым хорошим оказался режим с током 2.5 мА, удалось поймать мощные станции из города расположенного за 70 км от меня. Но пришлось загнать мк в сон при этом, вот и родилась эта идейка с фильтром.

  12. Может не стоит заморачиваться со светодиодом, показывал он стерео и ладно, к стати на счет улучшения качества приема. В RDA5807 есть встроенный антенный усилитель , так вот  что то подсказывает что он широкополосный и ни кто не ставит входной полосовой фильтр на вход типа GFWB3 76-108 МГц. В общем заказал себе данные фильтры буду пробовать. 

  13. Начал тестить по такой инициализации DMA

    void DMA1_Initialize(void) {   
        
        /* stop and clear DMA 1  */
       // DMA1CON0 = 0;
    
        /* configure DMA 1 */
    
        /* 1. Program the appropriate Source and Destination addresses for the
         * transaction into the DMAxSSA and DMAxDSA registers
         */
        DMA1SSA = (uint24_t) & SrcVarName0[0]; /* source address */
        DMA1DSA = (uint24_t) & SPI1TXB; /* destination address */
    
        /* 2. Select the source memory region that is being addressed by DMAxSSA
         * register, using the SMR<1:0> bits.
         */
        DMA1CON1bits.SMR = 0b00; /* source pointer points to GPR space */
    
        /* 3. Program the SMODE and DMODE bits to select the addressing mode.
         */
        DMA1CON1bits.SMODE = 0b01; /* source is incremented after each transfer completion */
        DMA1CON1bits.DMODE = 0b00; /* destination remains unchanged after each transfer completion */
    
        /* 4. Program the Source size DMAxSSZ and Destination size DMAxDSZ
         * registers with the number of bytes to be transferred. It is recommended
         * for proper operation that the size registers be a multiple of each other.
         */
        DMA1SSZ = 9; /* source transfer size is size of array */
        DMA1DSZ = 1; /*  destination size 1 */
    
    
        /* 5. If the user desires to disable data transfers once the message has
         * completed, then the SSTP and DSTP bits in DMAxCON0 register need to be set
         */
        DMA1CON1bits.SSTP = 1; /* SIRQEN bit is cleared when source counter reloads */
        DMA1CON1bits.DSTP = 0; /* SIRQEN bit is not cleared when Destination Counter reloads */
    
        /* 6. If using hardware triggers for data transfer, setup the hardware
         * trigger interrupt sources for the starting and aborting DMA transfers
         * (DMAxSIRQ and DMAxAIRQ), and set the corresponding interrupt request
         * enable bits (SIRQEN and AIRQEN).
         */
        DMA1SIRQ = 21; /* HW trigger is SPI1TX */
        DMA1AIRQ = 0; /* none */
    
        /* enable hardware source trigger  */
        DMA1CON0bits.DMA1SIRQEN = 0;
        
        //PIE2bits.DMA1SCNTIE = 1; // Enable Source Count 0 Interrupt
       //PIE2bits.DMA1SCNTIE = 0; 
    	//DMA1_SetSCNTIInterruptHandler(DMA1_DefaultInterruptHandler);
    
    
        
        
        //
       PIR2bits.DMA1SCNTIF = 0; // Clear Source Count Interrupt Flag bit
       PIE2bits.DMA1SCNTIE = 0; // Disable Source Count Interrupt
       PIR2bits.DMA1AIF = 0; // Clear abort Interrupt Flag bit
       PIR2bits.DMA1ORIF = 0; // Clear overrun Interrupt Flag bit
       //
       // Can use DMAxDCNTIF to signal when DMA x transfer is complete
       PIR2bits.DMA1DCNTIF = 0; // Clear Destination Count Interrupt Flag bit
       PIE2bits.DMA1DCNTIE = 0; // Disable Destination Count 0 Interrupt
       //
       PIE2bits.DMA1AIE = 0; // Disable abort Interrupt
       PIE2bits.DMA1ORIE = 0; // Disable overrun Interrupt 
     //
        /* 7. Select the priority level for the DMA
         * (see Section 3.1 ?System Arbitration?) and lock the priorities
         * (see Section 3.1.1 ?Priority Lock?)
         * 0 being the highest priority and 4 being the lowest priority.
         */
        m_ARBITER_UNLOCK(); /* unlock Arbiter settings */
        MAINPR = 3;
        ISRPR = 2;
        DMA1PR = 0;
        DMA2PR = 1;
        SCANPR = 4;
        m_ARBITER_LOCK(); /* lock Arbiter settings */
    
        /* 8. Enable the DMA (DMAxCON0bits. EN = 1)
         */
        DMA1CON0bits.EN = 1;
    
        /* 9. If using software control for data transfer, set the DGO bit,
         * else this bit will be set by the hardware trigger.
         */
        DMA1CON0bits.DGO = 1;
        
        /*
         * DMA Transfer is started with 
         *    MA1CON0bits.DMA1SIRQEN = 1;
         */
    
    }

    Старт передачи пакета 

    void SendPktToSlave(void) // Enable DMA1 to send a full data packet according to DMA1SSZ size
    {
     
       PIE2bits.DMA1SCNTIE = 1; // Enable Source Count 0 Interrupt
       DMA1CON0bits.SIRQEN = 1; // Start of Transfer Interrupt Request Enable
       DMA_Busy = 1; 	// признак занятости шины
    }

    И прерывание по завершению передачи пакета

    void __interrupt (irq(IRQ_DMA1SCNT)) DMA1Complete(void) //Enabled 10-Jul-2019
    {
    // ------- DMA 1 DCount = 0 Interrupt (DMA - SPI1 Transfer is complete) ------------------------
    DMA_Busy = 0;
    PIR2bits.DMA1SCNTIF = 0; // Clear Destination Count Interrupt Flag bit
    PIE2bits.DMA1SCNTIE = 0; // Disable Destination Count 0 Interrupt
    }

    Так вот при этом не срабатывает прерывание.

  14. Привет народ, собираю проект с использованием дисплея ILI9341 и PIC18F47k42. Сейчас все работает просто через SPI. Так вот вопрос, никто не использовал похожую связку с использованием DMA? И еще скорее всего у меня проблема в этом можно ли передавать команды просто по SPI, а  данных по DMA не отключая модуль DMA.

×
×
  • Создать...