Пропорциональное управление на МК с нуля
| |
uwrtey | Дата: Воскресенье, 10.03.2013, 00:17 | Сообщение # 136 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ОК, что-то делаю ...
а как сдвинуть влево 16-ти битное число (регистровую пару "Y")?
LSL Y ( как ни будь так можно ? )
так ?
LSL YL ; логический сдвиг влево 16-ти битного числа ( умножить на два ) ROL YH
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 00:59 |
|
| |
uwrtey | Дата: Воскресенье, 10.03.2013, 01:19 | Сообщение # 137 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот, что то "наделал"
Пошел я спать. Завтра в командировку собираться еще. Тьфу
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 01:21 |
|
| |
ВитГо | Дата: Воскресенье, 10.03.2013, 11:00 | Сообщение # 138 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) LSL YL ; логический сдвиг влево 16-ти битного числа ( умножить на два ) ROL YH
это правильный вариант !
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Воскресенье, 10.03.2013, 14:36 | Сообщение # 139 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот, кое что сделал ( принцип позаимствовал из передатчика дискретных команд )
надо добавить математику вычисления длины синхроимпульса
П.С. надеюсь МК успеет опросить АЦП пока идет передача синхроимпульса
П.П.С. Этой ночью я улетаю. Прилечу в ночь с 12-го на 13-ое. Надеюсь AirBus'ы, на которых я полечу, не упадут. В какое место лучше сесть ? В хвост или в гриву ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 10.03.2013, 20:47 |
|
| |
ВитГо | Дата: Воскресенье, 10.03.2013, 23:13 | Сообщение # 140 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| говорят что садится лучше в хвост. :-)
но лучше чтобы просто не падали !
УДАЧИ тебе в коммандировке !
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 18.03.2013, 23:12 | Сообщение # 141 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: 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
Статус: Offline
| и что за алгоритм ты хочешь придумать ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 18.03.2013, 23:20 | Сообщение # 143 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| щас подумаю
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Понедельник, 18.03.2013, 23:22 | Сообщение # 144 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вот попробуй разобраться.. в то как работает меню - не лезь, там Евгений намудрил малек, а вот в генераторе ппм и способе выдачи и микшировании каналов - вполне можно и нужно разобраться
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 18.03.2013, 23:28 | Сообщение # 145 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| нужно сохранять длительности импульсов. Потом их нужно сложить и результат вычесть из 20 мс. сейчас соображу как это на асме сделать...
--------------------------------------------- Цитата (ВитГо) вот попробуй разобраться.. в то как работает меню - не лезь, там Евгений намудрил малек, а вот в генераторе ппм и способе выдачи и микшировании каналов - вполне можно и нужно разобраться
Какое меню? Какой Евгений? Виталий, о чем Ты?
а-а, все, вложение увидел
это похоже СИ ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 18.03.2013, 23:29 |
|
| |
ВитГо | Дата: Понедельник, 18.03.2013, 23:40 | Сообщение # 146 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| да это си..
а архив этот - это первый кодер Евгения Болецкого (ака Focus) молодец парень, лет в 16, пока все трындели что лучше и как - он взял и написал этот кодер.. примитивный конечно - но зато более менее простой для того чтобы разобраться как все работает..
если в нем разберешься - то точно сможешь написать свой :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 19.03.2013, 00:35 | Сообщение # 147 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ну вот, вроде что-то написал. Но я пока не предусмотрел наличие дисплея и вывод отладочной информации на него....
мне больше всего понравилось, как я высчитываю длительность синхропаузы. Вроде должно работать... ( есть сомнения в правильности математики)
Цитата (ВитГо) молодец парень, лет в 16, пока все трындели что лучше и как - он взял и написал этот кодер.. Да, молодец. Чем же я занимался свои 16 лет?!?!.....
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Вторник, 19.03.2013, 07:46 | Сообщение # 148 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: Offline
| Цитата (ВитГо) почему бы не сделать это при помощи одной подпрограммы и трех ее вызовов ? точно..
Цитата (ВитГо) фактически нужно при передаче первого канала, задать однократное чтение второго канала ацп.. когда первый канал будет передан - ты можешь взять значение второго канала из ацп для передачи и задать однократное чтение третьего канала ацп.. вот тебе в цикле и одновременное чтение ацп с одновременной передачей да, это будет лучше...
Цитата (ВитГо) либо еще один способ: - читать все каналы ацп в момент передачи паузы пачки ппм. она обычно имеет размер более 4 мс - поэтому этого времени точно хватит на спокойное чтение всех каналов ацп пауза пачки ппм это синхроимпульс? (У меня все каналы АЦП читаются во время передачи синхроимпульса...)
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 19.03.2013, 08:19 |
|
| |
ВитГо | Дата: Вторник, 19.03.2013, 08:46 | Сообщение # 150 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| гм.. а зачем тогда ожидание в главном цикле ?
Виталий (аka ВитГо)
|
|
| |
|