Пятница, 19.04.2024, 12:16
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Пропорциональное управление на МК с нуля - Страница 10 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Пропорциональное управление на МК с нуля
uwrteyДата: Воскресенье, 10.03.2013, 00:17 | Сообщение # 136
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ОК, что-то делаю ... wacko

а как сдвинуть влево 16-ти битное число (регистровую пару "Y")?

LSL Y ( как ни будь так можно ? )

так ?

LSL YL ; логический сдвиг влево 16-ти битного числа ( умножить на два )
ROL YH


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 00:59
 
uwrteyДата: Воскресенье, 10.03.2013, 01:19 | Сообщение # 137
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
вот, что то "наделал"

Пошел я спать. Завтра в командировку собираться еще. Тьфу
Прикрепления: 32mega_transmit.asm (7.6 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 01:21
 
ВитГоДата: Воскресенье, 10.03.2013, 11:00 | Сообщение # 138
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (uwrtey)
LSL YL ; логический сдвиг влево 16-ти битного числа ( умножить на два )
ROL YH


это правильный вариант !


Виталий (аka ВитГо)
 
uwrteyДата: Воскресенье, 10.03.2013, 14:36 | Сообщение # 139
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
вот, кое что сделал biggrin ( принцип позаимствовал из передатчика дискретных команд ) wink

надо добавить математику вычисления длины синхроимпульса

П.С. надеюсь МК успеет опросить АЦП пока идет передача синхроимпульса

П.П.С. Этой ночью я улетаю. Прилечу в ночь с 12-го на 13-ое.
Надеюсь AirBus'ы, на которых я полечу, не упадут. wacko
В какое место лучше сесть ? В хвост или в гриву ? smile
Прикрепления: 4716784.asm (13.1 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 20:47
 
ВитГоДата: Воскресенье, 10.03.2013, 23:13 | Сообщение # 140
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
говорят что садится лучше в хвост. :-)

но лучше чтобы просто не падали !

УДАЧИ тебе в коммандировке !


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 18.03.2013, 23:12 | Сообщение # 141
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Спасибо, все я улетел!

Добавлено (11.03.2013, 22:49)
---------------------------------------------
Смотрел, что я наделал?

Добавлено (18.03.2013, 23:12)
---------------------------------------------
нужно написать алгоритм вычисления синхроимульса

опять вставлю схему


длина импульса от 700 до 1724 ( от 1400 до 3448 тиков, при этой частоте )
длина паузы 300 ( 600 тиков при этой частоте )


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 18.03.2013, 23:15
 
ВитГоДата: Понедельник, 18.03.2013, 23:18 | Сообщение # 142
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
и что за алгоритм ты хочешь придумать ?

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 18.03.2013, 23:20 | Сообщение # 143
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
щас подумаю smile

не успеваю за своими мыслями......
 
ВитГоДата: Понедельник, 18.03.2013, 23:22 | Сообщение # 144
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
вот попробуй разобраться..
в то как работает меню - не лезь, там Евгений намудрил малек, а вот в генераторе ппм и способе выдачи и микшировании каналов - вполне можно и нужно разобраться
Прикрепления: 2036994.zip (10.3 Kb)


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 18.03.2013, 23:28 | Сообщение # 145
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
нужно сохранять длительности импульсов. Потом их нужно сложить и результат вычесть из 20 мс.
сейчас соображу как это на асме сделать...

---------------------------------------------
Цитата (ВитГо)
вот попробуй разобраться..
в то как работает меню - не лезь, там Евгений намудрил малек, а вот в генераторе ппм и способе выдачи и микшировании каналов - вполне можно и нужно разобраться


Какое меню? Какой Евгений? Виталий, о чем Ты?

а-а, все, вложение увидел smile

это похоже СИ ?


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 18.03.2013, 23:29
 
ВитГоДата: Понедельник, 18.03.2013, 23:40 | Сообщение # 146
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
да это си..

а архив этот - это первый кодер Евгения Болецкого (ака Focus)
молодец парень, лет в 16, пока все трындели что лучше и как - он взял и написал этот кодер..
примитивный конечно - но зато более менее простой для того чтобы разобраться как все работает..

если в нем разберешься - то точно сможешь написать свой :-)


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 19.03.2013, 00:35 | Сообщение # 147
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ну вот, вроде что-то написал.
Но я пока не предусмотрел наличие дисплея и вывод отладочной информации на него....

мне больше всего понравилось, как я высчитываю длительность синхропаузы.
Вроде должно работать... smile ( есть сомнения в правильности математики) wacko

Цитата (ВитГо)
молодец парень, лет в 16, пока все трындели что лучше и как - он взял и написал этот кодер..

Да, молодец. Чем же я занимался свои 16 лет?!?!.....
Прикрепления: 5498760.asm (15.7 Kb)


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 19.03.2013, 07:46 | Сообщение # 148
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
это что за порнография ?
Код

;канал_0 *********************************************************

transmitt_kanal_0:     ; отправляем канал_0

   LDI ZL, low (OZU)    ; записываем в "Z" адрес метки "OZU" ( адрес 16-ти битный )
   LDI ZH, high(OZU)

    ld YL, Z+     ; прочитаем в "YL" младший байт АЦП по адресу из "Z", увеличим на единицу адрес в "Z"   
    ld YH, Z     ; прочитаем в "YH" старший байт АЦП по адресу из "Z",

; +1000   

   add YL,Low(Constanta_1)    ; значение АЦП+1000
   adc YH,high(Constanta_1)   ;

; *2

   LSL YL      ; логический сдвиг влево 16-ти битного числа ( умножить на два )
   ROL YH      ;

;---сохраняем длительность имульса

   LDI xL, low(ozu_kanal_0)   ; записываем в "x" адрес метки "ozu_kanal_0" ( адрес 16-ти битный )
   LDI xH, high(ozu_kanal_0)

   ST x+, YL     ; сохраняем длительность имульса канала_0   
   ST x, YH     ;

;---

; -600   

   SUB YL, Low(Constanta_2)   ; -600 тиков (для паузы)
   SBC YH, high(Constanta_2)   ;

   OUT OCR1AH, YH     ; выводим в регистр сравнения
   OUT OCR1AL, YL      ;   
        

   ldi Temp6, 0     ; в следующий раз отправим паузу ( фаза передачи )

   ldi Temp7, 0     ; только что отправили канал_0

   rjmp_OCR1A_COMP_EXIT    ; выходим из обработчика прерывания

;канал_1 *********************************************************

transmitt_kanal_1:     ; отправляем канал_1

   LDI ZL, low (OZU+2)    ; записываем в "Z" адрес метки "OZU" ( адрес 16-ти битный )
   LDI ZH, high(OZU+2)

    ld YL, Z+     ; прочитаем в "YL" младший байт АЦП по адресу из "Z", увеличим на единицу адрес в "Z"   
    ld YH, Z     ; прочитаем в "YH" старший байт АЦП по адресу из "Z",

; +1000   

   add YL,Low(Constanta_1)    ; значение АЦП+1000
   adc YH,high(Constanta_1)   ;

; *2

   LSL YL      ; логический сдвиг влево 16-ти битного числа ( умножить на два )
   ROL YH      ;

;---сохраняем длительность имульса

   LDI xL, low(ozu_kanal_1)   ; записываем в "x" адрес метки "ozu_kanal_1" ( адрес 16-ти битный )
   LDI xH, high(ozu_kanal_1)

   ST x+, YL     ; сохраняем длительность имульса канала_1   
   ST x, YH     ;

;---

; -600   

   SUB YL, Low(Constanta_2)   ; -600 тиков (для паузы)
   SBC YH, high(Constanta_2)   ;

   OUT OCR1AH, YH     ; выводим в регистр сравнения
   OUT OCR1AL, YL      ;   
        

   ldi Temp6, 0     ; в следующий раз отправим паузу ( фаза передачи )

   ldi Temp7, 1     ; только что отправили канал_1

   rjmp_OCR1A_COMP_EXIT    ; выходим из обработчика прерывания

;канал_2 *********************************************************

transmitt_kanal_2:     ; отправляем канал_2

   LDI ZL, low (OZU+4)    ; записываем в "Z" адрес метки "OZU" ( адрес 16-ти битный )
   LDI ZH, high(OZU+4)

    ld YL, Z+     ; прочитаем в "YL" младший байт АЦП по адресу из "Z", увеличим на единицу адрес в "Z"   
    ld YH, Z     ; прочитаем в "YH" старший байт АЦП по адресу из "Z",

; +1000   

   add YL,Low(Constanta_1)    ; значение АЦП+1000
   adc YH,high(Constanta_1)   ;

; *2

   LSL YL      ; логический сдвиг влево 16-ти битного числа ( умножить на два )
   ROL YH      ;

;---сохраняем длительность имульса

   LDI xL, low(ozu_kanal_2)   ; записываем в "x" адрес метки "ozu_kanal_2" ( адрес 16-ти битный )
   LDI xH, high(ozu_kanal_2)

   ST x+, YL     ; сохраняем длительность имульса канала_2   
   ST x, YH     ;

;---

; -600   

   SUB YL, Low(Constanta_2)   ; -600 тиков (для паузы)
   SBC YH, high(Constanta_2)   ;

   OUT OCR1AH, YH     ; выводим в регистр сравнения
   OUT OCR1AL, YL      ;   
        

   ldi Temp6, 0     ; в следующий раз отправим паузу ( фаза передачи )

   ldi Temp7, 2     ; только что отправили канал_2

   rjmp_OCR1A_COMP_EXIT    ; выходим из обработчика прерывания



почему бы не сделать это при помощи одной подпрограммы и трех ее вызовов ?

далее,
сам алгоритм - сначала читаем ацп (все каналы) а потом выдаем пачку ппм - не верен !!

у тебя всего 3 канала ацп сейчас, а если их будет 8 ?

нужно писать процесс который делает все это параллельно !

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

то есть общая идея такова: к моменту передачи канала - у тебя уже должно быть готовое значение ацп !!
не нужно перед передачей пакета ппм ожидать опроса ацп и тем более всех его каналов..

посмотри пример фокуса !

либо еще один способ: - читать все каналы ацп в момент передачи паузы пачки ппм. она обычно имеет размер более 4 мс - поэтому этого времени точно хватит на спокойное чтение всех каналов ацп


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 19.03.2013, 08:11 | Сообщение # 149
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Цитата (ВитГо)
почему бы не сделать это при помощи одной подпрограммы и трех ее вызовов ?

точно..

Цитата (ВитГо)
фактически нужно при передаче первого канала, задать однократное чтение второго канала ацп..
когда первый канал будет передан - ты можешь взять значение второго канала из ацп для передачи и задать однократное чтение третьего канала ацп.. вот тебе в цикле и одновременное чтение ацп с одновременной передачей

да, это будет лучше...

Цитата (ВитГо)
либо еще один способ: - читать все каналы ацп в момент передачи паузы пачки ппм. она обычно имеет размер более 4 мс - поэтому этого времени точно хватит на спокойное чтение всех каналов ацп

пауза пачки ппм это синхроимпульс? (У меня все каналы АЦП читаются во время передачи синхроимпульса...)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 19.03.2013, 08:19
 
ВитГоДата: Вторник, 19.03.2013, 08:46 | Сообщение # 150
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
гм.. а зачем тогда ожидание в главном цикле ?

Виталий (аka ВитГо)
 
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz