Пропорциональное управление на МК с нуля
| |
ВитГо | Дата: Суббота, 09.03.2013, 00:42 | Сообщение # 121 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну в принципе это уже тебе решать.. в принципе каждое значение АЦП это 2 байта, так что зная адрес начала таблицы значений АЦП не сложно вычислить адрес нужного значения..
сейчас тебе нужно просто сделать генерацию ppm сигнала можно даже сделать так: 1. считываем значение текущего канала АЦП и выдаем его в OCR регистр для генерации импульса 2. запускаем следующее преобразование следующего канала АЦП 3. переход к пункту 1 если не все каналы передали 4. если все каналы переданы, то запускаем преобразование самого первого канала АЦП и передаем пока паузу между пачками ppm 5. переходим к пункту 1
ну или во время передачи паузы между пачками ppm считать все каналы АЦП (времени хватит!) и тогда уже выдавать каналы беря значения АЦП из памяти..
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 01:24 | Сообщение # 122 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот заготовка, засыпаю уже.... попробую на работе украсть немного времени
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 07:54 | Сообщение # 123 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| нее, не так.
для передачи тебе нужно поднять T1 ! и уже в прерывании T1 решать какой канал передавать ! а не в главном цикле...
а главный цикл у тебя будет занят выводом данных на дисплей например :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 08:04 | Сообщение # 124 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Я думал что запишу данные в озу. А в главном цикле проверяю все ли каналы АЦП я опросил.. Я не решаю в главном цикле что передавать.. или что? что то я недопонял похоже что то...
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 10:15 | Сообщение # 125 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот как то так, а потом в главном цикле нужно запустить Т1 ... наверно.. че то я сам теперь не уверен
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 09.03.2013, 11:37 |
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 12:00 | Сообщение # 126 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вот смотри, главный цикл Код loop_wait: ; цикл опроса каналов АЦП
cpi Temp5, 3 ; прочитали все три канала ? brne loop_wait ; если нет, то циклимся
;***************************************************************************************************** ; прерывание по АЦП ;*****************************************************************************************************
то есть когда temp5 станет равен 5 - то попадем в прерывание и получим сброс :-(
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 12:02 | Сообщение # 127 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| может быть поменять логику программы ?
в главном цикле делать ацп преобразования с ожиданием флага готовности (без прерываний!!) и сохранять результаты в ОЗУ
а в прерывании по совпадению CTC OCR1A toggle делать генерацию ppm
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 12:10 | Сообщение # 128 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата то есть когда temp5 станет равен 5 - то попадем в прерывание и получим сброс :-( дак он ни когда на станет равен 5. у меня всего три канала 0, 1 и 2
АЦП - однократное. Сначала читаем три канала АЦП и записываем в ОЗУ
потом ... настраиваем таймер и ... и что то еще делаем пока не придумал..
Цитата может быть поменять логику программы ? может быть... очень даже может быть.
надо как то синхронизировать... что то я с мыслями не могу собраться... ( я на работе сейчас... )
о-о, а еще можно настроить режим CTC и в прерывание по таймеру менять настройку АЦП ( АЦП сделать по этому же таймера )
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 09.03.2013, 13:04 |
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 15:12 | Сообщение # 129 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) дак он ни когда на станет равен 5. у меня всего три канала 0, 1 и 2
ну это я описался, конечно 3
Цитата (uwrtey) надо как то синхронизировать... что то я с мыслями не могу собраться... ( я на работе сейчас... )
нужно не над синхронизацией думать, а над созданием как бы изолированных автоматов (конечных автоматов). которые будут работать независимо друг от друга..
первый процесс считывает данные с ацп и записывает в память
второй процесс выдает данные ацп в формате ppm (читает из памяти и выдает ! и ему по большей части все равно что он выдает, об этом пусть первый процесс думает)
третий процесс - организует интерфейс с пользователем (дисплей, меню, таймеры полета и т.д.)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 16:01 | Сообщение # 130 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| угу. попробую еще после работы покумекать.
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 16:32 | Сообщение # 131 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| черновик пока сюда положу
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 22:23 | Сообщение # 132 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата ; если прочитали все каналы АЦП, то инитим таймер
такой подход не совсем верен !
запускай таймер передачи сразу !! в значения каналов запиши какие нить начальные значения...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 09.03.2013, 22:40 | Сообщение # 133 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| есть вопрос
можно ли чтение ADC*
IN temp, ADCL ; читаем значение канала АЦП и сохраняем их в оперативке по порядку ST Z+, temp ; IN temp, ADCH ; ST Z+, temp ;
сделать со старшего байта ?
IN temp, ADCH ; читаем значение канала АЦП и сохраняем их в оперативке по порядку ST Z+, temp ; IN temp, ADCL ; ST Z+, temp ;Добавлено (09.03.2013, 22:40) ---------------------------------------------
Цитата (ВитГо) запускай таймер передачи сразу !! в значения каналов запиши какие нить начальные значения...
я не могу в голове выстроить последовательность
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 22:59 | Сообщение # 134 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) можно ли чтение ADC*
IN temp, ADCL ; читаем значение канала АЦП и сохраняем их в оперативке по порядку ST Z+, temp ; IN temp, ADCH ; ST Z+, temp ;
сделать со старшего байта ?
IN temp, ADCH ; читаем значение канала АЦП и сохраняем их в оперативке по порядку ST Z+, temp ; IN temp, ADCL ; ST Z+, temp ;
как там у классиков ? - можно, но деньги вперед ! :-)
в чтении 16ти битного значения с таймера участвует буферный регистр..
а вот с АЦП не знаю.. я бы читал все таки одним способом: младший старший, а записывать в память уже можно в любом порядке
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Суббота, 09.03.2013, 23:00 | Сообщение # 135 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) я не могу в голове выстроить последовательность
ОК, тогда сначала напиши передачу в формате PPM через прерывания... значения бери из памяти...
Виталий (аka ВитГо)
|
|
| |
|