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

Oleg_IT

Свой
  • Постов

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

  • Посещение

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


  1. Весь код работы с изернетом взял из примера и как рекомендуют здесь, соответственно передачу начинаю когда tcp_check_send() == true.

     

    Величину tcp_max_dsize не превышаю, функция выдаёт 1460, использую 1032 байта.

     

    Увеличение памяти не помогает. Наверно это предел.

  2. LPC2478, 12МГц. M = 17, N = 0. Есть простая программа, переработанный пример, по таймеру запускается АЦП, заполняется массив 512 двух байтовых слова и скидывается этот массив по изернет в компьютер. Библиотеку работы с изернет взял в инсталлированном Keil (TCP_ARM_L.lib). Когда частота оцифровки не большая, до 60 кГц программа работает стабильно, поднимаю частоту выше, до 100 кГц, начинаются сбои передачи, программа из библиотеки выходит по ошибке ERR_MEM_LOCK или ERR_MEM_FREE, таймер и АЦП продолжают работать. Сам я никакие динамические массивы не использую, только статика.

    По осциллографу видно, что запас по времени есть и не маленький, на пин вывожу 1 когда буфер заполнен, а снимаю 1, когда приходит сообщение TCP_EVT_ACK, период стабильной отправки заполненного массива равен 10,9 мс, время от начала передачи до прихода сообщение TCP_EVT_ACK - 240 мкс. При этом сигнала на АЦП нет. При подаче синуса, любой частоты передача прекращается. Стабильность передачи возобновляется только при периоде 16,4 мс.

    Частота таймера для передачи по изернет 10 мс, минимум рекомендованного.

    Не понятна зависимость наличия сигнала и периода стабильной передачи. Как заставить программу работать на частоте оцифровке 100 кГц?

    Правильно я понимаю, если в функцию tcp_callback пришло сообщение TCP_EVT_ACK, то данные отправлены и все буфера освобождены?

  3. Просьба помочь в выборе процессора.

    Основные требования: два канала АЦП (от 10 бит), частота оцифровки на оба канала не менее 100 кГц, Изернет, и главное требование, как можно меньше габариты. Всё что нахожу слишком большое, от 100 ног.

     

  4. Так как Вы описали инициализацию работает, но выигрыш во времени не впечатлил, Atmega48, 10МГц, с запуском АЦП в обработчике внешнего прерывания от начала входного импульса на INT0 до начала прерывания АЦП 66,8 мкс, а тоже время с автоматическим запуском составляет 46,4 мкс.

     

    По поводу |= или =. В данном случае это эквивалентно, т.к. регистры по умолчанию равны 0. Но |= всё таки правильнее, это нужно, что бы не повреждать те биты которые нужны для других целей.

  5. Есть такой код

    #include <stdint.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    //#include "PortDefine.h"
    #include "avrlibdefs.h"
    #include "avrlibtypes.h"
    
    //#define USE_INT0
    
    union {
    uint16_t ADC_Data;
    uint8_t ADC_Bute[2];
    } Data;
    
    #ifdef USE_INT0
    ISR (INT0_vect)
    {
    ADCSRA |= (1 << ADSC);
    }
    #endif // USE_INT0
    
    ISR (ADC_vect)
    {
    PORTD |= 1;
    Data.ADC_Data = (unsigned short)inb(ADCL) | (unsigned short)(inb(ADCH) << 8);
    PORTD &=~ 1;
    }
    
    int main( void )
    {
    // ADC
    ADMUX |= (1 << REFS0) | (1 << MUX0) | (1 << MUX2); // ADC5, AVCC
    ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE);
    ADCSRB |= (1 << ADTS1);
    DDRC = 0;
    PORTC = 0;
    
    
    #ifdef USE_INT0
    EICRA |= (1 << ISC01) | (1 << ISC00);
    EIMSK |= (1 << INT0);
    #endif // USE_INT0
    
    
    DDRD = 0x03;
    PORTD = 4;
    
    sei();
    
    ADCSRA |= (1 << ADSC);
    while (1)
    {
    	PORTD ^= 2;
    }
    return 0;
    }

    По идеи он должен запускать оцифровку по внешнему сигналу, но этого не происходит.

    Если я открываю строку //#define USE_INT0 всё работает правильно, но при этом теряется время.

    Строку инициализации EICRA убирал из под ифа, не помогает.

    Может я чего в инициализации упускаю.

  6. Кто работал с платой csr8670 помогите, пока жду лицензию хочется начать уже работать, время поджимает.

    Не могу найти драйвер для конвертера USB<->SPI для Windows 7, есть только Winows 8.

    Среда разработки под этот чип BlueLabPro-2.71.exe? Установщик требует Cygwin, он обязателен, с Cygwin64 тоже будет работать?

  7. LPC2478. Работает один канал с синхронизацией по таймеру через MAT0.1. Сейчас возникла необходимость подключить ещё два канала АЦП. По мануалу получается, что это, оцифровка n каналов, возможно при аппаратном сканировании, но тогда синхронизация по таймеру не доступна. Возможно осуществить последовательное оцифровывание n каналов с синхронизацией по таймеру и как это сделать?

     

  8. Вопрос с адаптацией программатора AS3M решен на компьютере с Windows XP.

    После установки драйвера версии 5.29, программа CP210xSetIDs корректно распознала программатор, и значение PID было успешно изменено на 0xEA60. После этих действий программатор заработал на Windows 7.

    Проблема была в том, что я пропустил важную рекомендацию "...тогда можно запустить Windows через кнопку F8 и выбрать режим ”Disable Driver Signing” mode..."

  9. Спасибо за подробный ответ. Я специально поднимаю тему именно здесь, может у кого будут такие же проблемы.

     

    Хотелось бы ещё уточнить, почему не ставится драйвер по инструкции ASISP_drivers_installation_win7_32-bit_64-bit.pdf. Как я писал в предыдущем своём сообщении окна с выбором файла slabvcp.inf, страница 2 инструкции, нет. Автоматически при первом включении система нужный драйвер не находит, компьютер подключён к интернету.

     

     

  10. Перешёл Windows XP на Windows 7 64 бит. Программатор AS3M, пытаюсь поставить для него драйвер, со странички http://www.as-kit.com/AS-tools.soft/asisp_soft.html запускал всё что там есть, Windows упорно не видит драйверов, есть только неопознанное устройство "Ar...". В программе CP210xSetIDs список пустой. Как всё-таки поставить драйвер?

  11. в какой то момент времени стоимость может вырасти в разы, как и срок производства.

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

  12. попасть в прерывание, снять флаг, обработать что-то выйти?

    Делаю для нулевого таймера (всё беру из примеров) T0IR = 1; VICVectAddr = 0; Или ещё что-то нужно? Обнулял конкретный номер прерывания VICVectAddrX = 0;, прерывание возникает только один раз.

     

    __irq void Timer0 (void) {
        T0IR = 1;
        T0EMR |= (1 << 1);     // MAT0.1  P1[29]
    //   VICVectAddr4 = 0;
        VICVectAddr = 0;
    }

     

    Примерчик бы рабочий

  13. Да, и кстати зачем Вам вложенные прерывания?
    Не нужны они мне. Почти весь код беру из примеров, наверное пока не до конца со всем разобрался. Вот потому и прошу правильные примеры.
  14. С примером завтра может получится
    Может получится с примером?

     

    Простым изменением битов EMx, в данном случае - первого бита T0EMR.
    Спасибо, снять уровень получилось.

     

    У меня какая-то общая проблема с прерываниями, включил прерывание от нулевого таймера и они всё забивают.

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