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

e-serg

Участник
  • Постов

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

  • Посещение

Весь контент e-serg


  1. Ну ну, там вполне измеряемый и вычисляемый джиттер, трамвайная остановка, это в прерывании ноги переключать. Пятна на солнце призывать не надо, в системе не всегда один голый микроконтроллер.
  2. Вариант, проверен на stm32f107 такт таймера 1мкс. у таймера используются два канала сравнения, два канала DMA, две таблицы в памяти. по сравнению одного канала таймера, DMA транзакция из таблицы в GPIOx->BSRR устанавливаю или сбрасываю нужные пины выбранного порта. по сравнению другого канала, DMA burst из второй таблицы выбирается следующие два значения для каналов сравнения таймера. каналы срабатывают одновременно.
  3. Без охлаждение никак, а необходимость радиатора, вентилятора :) другой вопрос. Очень важное не сказали, размеры. В какие габариты хотите уложиться?
  4. 1. Limits: "File size: Upto 4G-1 bytes. (by FAT specs.)" 2. f_sync Используете?
  5. Это если hex. Сам вопрос странный, может человеку base64 поможет. что под ASCII подразумевается?
  6. Как раз побаловался STM8S903, вот что вышло: inline void ADC_Init() { /***************************************************/ ADC1->CR1 = 0; ADC1->CSR = 0 | 1 * (3 << 0) /**CH [3:0] **/ | 1 * ADC1_CSR_EOCIE | 0 * ADC1_CSR_AWDIE; ADC1->CR1 = 0 | 1 * ADC1_CR1_ADON | 0 * ADC1_CR1_CONT | 1 * (7 << 4); /** SPSEL[6:4] **/ ADC1->CR2 = 0 | 1 * ADC1_CR2_SCAN | 1 * ADC1_CR2_ALIGN /** 0: Left alignment, 1: Right alignment **/ | 0 * (0) /** EXTSEL[5:4] 00: Internal TIM1 TRGO, 01: External interrupt on ADC_ETR **/ | 1 * ADC1_CR2_EXTTRIG; ADC1->CR3 = 0 | 0 * ADC1_CR3_OVR | 0 * ADC1_CR3_DBUF; ADC1->CR1 = 0 | 1 * ADC1_CR1_ADON | 0 * ADC1_CR1_CONT | 1 * (7 << 4); /** SPSEL[6:4] **/ } extern volatile uint8_t rc[2]; INTERRUPT_HANDLER(ADC1_IRQHandler, 22) { uint8_t reg = ADC1->CSR; ADC1->CSR = 0 | 1 * (3 << 0) /**CH [3:0] **/ | 1 * ADC1_CSR_EOCIE | 0 * ADC1_CSR_AWDIE; rc[0] = ADC1->DB0RL >> 2; rc[0] |= ADC1->DB0RH << 6; rc[1] = ADC1->DB1RL >> 2; rc[1] |= ADC1->DB1RH << 6; } в регистре ADC1->CR1 пишу константу В прерывании для сброса флага загружаю константу, иначе проблемы сейчас проверил установил CONT и выключил EXTTRIG -> работает. 8000000 / 18 / 14 / 4 = 7936,5 тактовая HSI/2, частота прерываний ~7,39kHz похоже тоже 15 тактов, В даташите не сказано про защитный интервал между каналами, может это оно и есть?
  7. Пробовал на stm32f107 два таймера, захват на каждом, есть сомнение в синхронности. Для вашего варианта можно посмотреть в сторону DMA. По событиям от TIM8, запускать чтение(запись) регистров TIM2 или TIM5.
  8. делал похожее на таймере STM32F107 TIM_ETR внешний клок, TIM_CH захват события и запуск последовательности сама последовательность проигрывается TIM -> DMA -> GPIO, TIM -> DMA -> TIM джиттер убрал регистром, тактируемым внешним клоком. STM загружает и клокает модуляторы(DDS), запускает АЦП. работает :)
  9. Делал вывод последовательности с помощью RAM(uint32) -> DMA -> GPIO(BSRR), процессор STM32F107 пишу 1MHz, работает. запрос DMA формирует таймер. Вашу задачу надо проверить, где-то на грани фола возможно получится.
  10. Если идет речь о преднамеренном взломе, CRC не годится, ни как.
  11. к этой фразе более 20 лет, этот ключик "-j", у gnu make существует, новым его не назвать.
  12. Ключик -j очень старый, лет 10 назад он уже был старым. PS. 1989г, make, ключ -j уже имеется.
  13. DMA ничего не знает про программное FIFO, это автомат, раскладывает байты как приказали, вызывает прерывания, если настроили. По USART обратить на флаг IDLE На практике, у STM32F10x DMA работают вполне адекватно, описание в даташите "несколько странное". в одном из устройств интенсивно использую 5 каналов DMA, причем транзакции по некоторым запускаются синхронно, все нормально.
  14. ;******************************************************************************* *** ;******************************************************************************* *** ; код TEA128Y ; меняються регистры r4, ..., r25 ;******************************************************************************* *** #ifndef TEA128_INC_ #define TEA128_INC_ .DSEG d_TEA128_DATA: .BYTE 16 d_TEA128_KEY: .BYTE 16 ;******************************************************************************* *** .CSEG .def d0=r4 .def d1=r5 .def d2=r6 .def d3=r7 .def c0=r8 .def c1=r9 .def c2=r10 .def c3=r11 .def b0=r12 .def b1=r13 .def b2=r14 .def b3=r15 .def Tea_cnta=r16 .def Tea_cntb=r17 .def s0=r18 .def s1=r19 .def s2=r20 .def s3=r21 .def a0=r22 .def a1=r23 .def a2=r24 .def a3=r25 ;******************************************************************************* *** ;Обмен с памятью, загрузка костант .MACRO MLDI32 ;r3,r2,r1,r0, lab data ldi @0, @4 ldi @1, @5 ldi @2, @6 ldi @3, @7 .ENDMACRO .MACRO MLDD32 ;r3,r2,r1,r0, lab data ldd @3, Y+@4+0 ldd @2, Y+@4+1 ldd @1, Y+@4+2 ldd @0, Y+@4+3 .ENDMACRO .MACRO MLDS32 ;r3,r2,r1,r0, lab data lds @3, @4+0 lds @2, @4+1 lds @1, @4+2 lds @0, @4+3 .ENDMACRO .MACRO MSTD32 ;r3,r2,r1,r0, lab data std Y+@4+3, @0 std Y+@4+2, @1 std Y+@4+1, @2 std Y+@4+0, @3 .ENDMACRO .MACRO MSTS32 ;r3,r2,r1,r0, lab data sts @4+3, @0 sts @4+2, @1 sts @4+1, @2 sts @4+0, @3 .ENDMACRO .MACRO MSUBI32 ;r3,r2,r1,r0, data subi @3, @7 sbci @2, @6 sbci @1, @5 sbci @0, @4 .ENDMACRO .MACRO MCLR32 ;r3,r2,r1,r0 clr @0 clr @1 clr @2 clr @3 .ENDMACRO .MACRO MADD32 add @3, @7 adc @2, @6 adc @1, @5 adc @0, @4 .ENDMACRO .MACRO MSUB32 sub @3, @7 sbc @2, @6 sbc @1, @5 sbc @0, @4 .ENDMACRO .MACRO MLSL32 lsl @3 rol @2 rol @1 rol @0 .ENDMACRO .MACRO MLSR32 lsr @0 ror @1 ror @2 ror @3 .ENDMACRO .MACRO MEOR32 eor @3, @7 eor @2, @6 eor @1, @5 eor @0, @4 .ENDMACRO .MACRO FMEMCPY ldi ZL, low(@1 << 1) ldi ZH, high(@1 << 1) ldi XL, low(@0) ldi XH, high(@0) ldi r16, @2 call STX_LPM_LOOP .ENDMACRO ;******************************************************************************* *** ;******************************************************************************* *** ; кодирование ;******************************************************************************* *** ;******************************************************************************* *** Tea128_enc: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MCLR32 s3, s2, s1, s0 ;sum Tea128_enc_while: MSUBI32 s3, s2, s1, s0, 0x61, 0xc8, 0x86, 0x47 ; sum += delta ;******************************************************************************* *** rcall lfunc_y MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** rcall lfunc_z MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** dec Tea_cnta breq Tea128_enc_end rjmp Tea128_enc_while Tea128_enc_end: ret ;******************************************************************************* *** ;******************************************************************************* *** ; декодирование ;******************************************************************************* *** Tea128_dec: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MLDI32 s3, s2, s1, s0, 0xC6, 0xEF, 0x37, 0x20 ;sum Tea128_dec_while: ;******************************************************************************* *** rcall lfunc_z MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** rcall lfunc_y MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** MSUBI32 s3, s2, s1, s0, 0x9E, 0x37, 0x79, 0xB9 ; sum -= delta dec Tea_cnta breq Tea128_dec_end rjmp Tea128_dec_while Tea128_dec_end: ret ;******************************************************************************* *** lfunc: movw d0,a0 movw d2,a2 ldi Tea_cntb,4 lshift4: MLSL32 d3, d2, d1, d0 dec Tea_cntb brne lshift4 MADD32 d3, d2, d1, d0, b3, b2, b1, b0 ;воспользуюсь b0...3 movw b0,a0 movw b2,a2 ldi Tea_cntb,5 rshift5: MLSR32 b3, b2, b1, b0 dec Tea_cntb brne rshift5 MADD32 b3, b2, b1, b0, c3, c2, c1, c0 MEOR32 d3, d2, d1, d0, b3, b2, b1, b0 MADD32 a3, a2, a1, a0, s3, s2, s1, s0 MEOR32 d3, d2, d1, d0, a3, a2, a1, a0 ret ;******************************************************************************* *** lfunc_y: MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z MLDS32 b3, b2, b1, b0, d_TEA128_KEY+0 ; Загрузил k[0] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+4 ; Загрузил k[1] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y ret ;******************************************************************************* *** lfunc_z: MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y MLDS32 b3, b2, b1, b0, d_TEA128_KEY+8 ; Загрузил k[2] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+12 ; Загрузил k[3] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z ret ;******************************************************************************* *** d_TEA128_KEY_DB: .db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff TEA128_KEY_INIT: ; ldi YL, low(d_TEA128_DATA) ; ldi YH, high(d_TEA128_DATA) ; sts d_TEA128_DATA_L, YL ; sts d_TEA128_DATA_H, YH FMEMCPY d_TEA128_KEY, d_TEA128_KEY_DB, 16 ret #endif /* TEA128_INC_ */ вот математика на asm, давно делал :) RTEA может выйти и покороче.
  15. весь tea128 на asm(avr8) в 338 байт укладывается. есть где поэкономить для боотлоадера. только раскодировать уже 276 байт
  16. поскольку тема поднялась, уточню. именно тот заказ оплачивать не стал, последующие заказы выполнены в срок, никакой самодеятельности больше не появлялось. про смену изготовителя подумал, но в целом PS-Electro устраивает, их сервис по доставке нравиться. было только одно досадное недоразумение.
  17. можно глянуть тут исходники, они на ассемблере, зато сама программа в реальном времени сканирует клавиатурную матрицу 4х4, с помощью динамической индикации работает со светодиодной матрицей 4х4х2 двухцветные диоды, читает таблетку 1-wire, сама прикидывается подчинееным 1-wire устройством, все одновременно без паразитных подмаргиваний индикации при работе 1-wire интерфейсов. http://electronix.ru/forum/index.php?showt...st&p=672770
  18. да это скорее для обмена опытом. по порядку, передаю файлы гербера по слоям. слой BOARD прямоугольник. 153x33 если еще точнее 33x153мм вертикально все нарисовано. никаких дополнительных вырезов. группа в общем контуре набрана из 2х разных плат. заказываю 5шт. получаю счет 3 по 5. спрашиваю -> почему нарезали на части? ответ -> так Вам будет дешевле запрос -> хочу так как нарисовал ответ -> тогда получай счет на 16 штук вместо 5 например Вы нарисуете узенькую плату с трансформатором в центре, заводу покажется что это две платы с краевыми разъемами и также порежут?! PS. не понравилось самостоятельное разделение без предупреждения.
  19. Делаю заказ, "прототип", размер 153x33мм. 5шт. формат данных GERBER. в результате получаю счет на три разные платы. попытка выяснить, ответ -> ради экономии моих денег плату разрежут на три части, и посчитали как три проекта. потребовал оставить как есть. ответ -> пересчитают, выставят новый счет. жду... переспрашиваю, получаю опять счет три платы по пять штук. еще переспросил. получил счет на одну но 16штук. и что не так с размерами 153x33mm. Как заранее учитывать эти ваши особенности?
  20. там может быть влияние топологии, как токи по земле вокруг С3, С12 идут усиление 1 нет влияния, больше каналы начинают друг на друга влиять. вообще неплохо бы на рисунок самой платы посмотреть. вопрос про проникновение каналов уже поднимался.
  21. Допустим так сделать примерно так uint8_t data[4096]; int flash_write(uint32_t addr, uint8_t *data, int size); //некая функция typedef struct{ uint8_t VER_ID; int (*flash_write)(uint32_t, uint8_t*, int); }FS; // в этой структуре перечислим const FS __attribute__((section(".boot_func"))) fs = {0, &flash_write}; // разместим например по адресу 0x100UL с помощью линкера const FS *fs2 = (FS *)0x100UL; // 0x100UL - адрес куда разместили структуру. fs.flash_write(250, data, 196); // варианты вызова одной функции. fs2->flash_write(250, data, 196); flash_write(250, data, 196); например одни и те же функции обработки данных в загрузчике и приложении. тоже шифрование, зачем по два экземпляра кода.
  22. можно оттолкнуться от такого. 1квт отдельный приоритет, выключение при незначительной перегрузке. 2квт нагрузки могут быть включены только две одновременно. заводим два счетчика, они перебираю потребителей, если нагреватель активен, удержание на кванты времени соответственно приоритету нагрузки. если при выборе нагрузке потребления не увеличивается, выбирать следующую. счетчики при переборе нагрузок отмечают активность их активность. при переборе счетчиком нагрузок одна должна быть выключена, измерен скачек потребления, или его отсутствие. включена следующая и опять измерить потребление. счетчики зависимы, у них должно быть запрещены состояния 1-1, 2-2, ... и тд. счетчикам запрещено менять состояние одновременно, чтоб не мешать друг другу определения активности нагрузки. при перегрузке 2 квт один из счетчиков останавливается, нагрузкой не управляет. при следующей перегрузке остановим второй счетчик. ждем пока чайник не вскипит или духовка не отключится.
  23. схема не должна работать. никакого пикового детектора нет. сигнал на выходе будет только за счет емкостного делителя. D1 считать очень малой емкостью, смотреть даташит. ЗЫ чтоб посмотреть на чуть большую реальность загрузи в симуляторе выход сопротивлением.
  24. STM8S еще дешевле, но судя по даташитам Unique ID не во всей серии. :(
×
×
  • Создать...