Пропорциональное управление на МК с нуля
| |
ВитГо | Дата: Понедельник, 08.04.2013, 21:02 | Сообщение # 256 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) а почему нельзя просто вот так сделать? ldi R16 , (1<<COM1A1)|(0<<COM1A0)|(1<<FOC1A) ? наверно что-то не успевает переключится внутри МК ? нет, просто сначала нужно включить режим работы вывода.. и только потом его устанавливать !
я это кстати тоже только экспериментальным путем выяснил, на тестовых програмках
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 08.04.2013, 22:11 | Сообщение # 257 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Да уж. Хоть бы в датащите что нибудь про это написали. Возможно это унаследовано от тех МК в которых бит FOC1A находится в другом регистре ( не в TCCR1A, а в TCCR1C например, как в тини 2313 ) ???
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 08.04.2013, 22:50 |
|
| |
ВитГо | Дата: Понедельник, 08.04.2013, 22:50 | Сообщение # 258 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| скорее всего они не менялись местами - а ты где то сместил адрес для чтения :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 08.04.2013, 22:52 | Сообщение # 259 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Возможно. ( Я это мог ) Я еще разок проверю код... ( а может и не разок )
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Четверг, 11.04.2013, 18:36 | Сообщение # 260 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| я нашел пока только один косяк ( в расчетах общей длительности каналов ) - думаю, что дело было не в нем. На всякий случай проверю завтра осциллограмму
Добавлено (11.04.2013, 18:36) --------------------------------------------- Все так-и не помогло... Где то в другом месте косяк... у меня такое ощущение что проверка флага ADIF как то не корректно работает...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 11.04.2013, 20:01 |
|
| |
ВитГо | Дата: Четверг, 11.04.2013, 20:48 | Сообщение # 261 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| может быть он не устанавливается а сбрасывается по завершению преобразования ?
ты внимательно смотрел ?
я к сожалению через флаги с АЦП не работал.. я обычно в прерывании читаю значения АЦП
вот как выглядело чтения с флагом на СИ
Код //-------------------------------------------------------------------------------------------------- // Процедура чтения данных выбранного канала ADC // Входной параметр: adc_input - номер канала для чтения // Выходной параметр: считанное значение unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; delay_us(10); ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; // Stop return ADCW; }
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Четверг, 11.04.2013, 20:52 | Сообщение # 262 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| то есть сначала запускаем преобразование ADCSRA|=0x40; потом ждем установки флага while ((ADCSRA & 0x10)==0); потом останавливаем ADCSRA|=0x10; // Stop и читаем результат return ADCW;
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 11.04.2013, 21:34 | Сообщение # 263 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) может быть он не устанавливается а сбрасывается по завершению преобразования ? http://www.atmel.com/Images/doc2503.pdf стр.216 Цитата This bit is set when an ADC conversion completes and the Data Registers are updated. The ADC Conversion Complete Interrupt is executed if the ADIE bit and the I-bit in SREG are set. ADIF is cleared by hardware when executing th e corresponding interrupt handling vector. Alter- natively, ADIF is cleared by writing a logical one to the flag. Beware that if doing a Read-Modify- Write on ADCSRA, a pending interrupt can be dis abled. This also applies if the SBI and CBI instructions are used
А вот Гугл перевод
Цитата Этот бит устанавливается при завершении преобразования АЦП и регистры данных обновляются.
АЦП Полное прерывание выполняется, если ADIE бит и I-бит в SREG установлены.
ADIF сбрасывается аппаратно при выполнении соответствующего вектора прерывания обработки.
В качестве альтернативы, ADIF сбрасывается путем записи логического один флаг.
Помните, что если делать чтение-модификация-запись на ADCSRA, Прерывание может быть отключена.
Это относится также к ВОО и CBI инструкции используются вроде все верно...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Четверг, 11.04.2013, 23:24 | Сообщение # 264 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| значит проверяй порядок действий!
сначала ставишь номер канала для преобразования с типом vref потом запускаешь преобразование и ждешь потом выключаешь преобразование потом читаешь результат
чудес не бывает.. надеюсь ты ноги не перепутал ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 11.04.2013, 23:33 | Сообщение # 265 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| С ногами у меня порядок! Это ошибка - осталось только ее обнаружить..
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Четверг, 11.04.2013, 23:49 | Сообщение # 266 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вот какая то извращенная мысля у тебя
Код ; проверяем номер текущего канала АЦП ******************************************************************
LDS Temp, curr_ch ; читаем номер текущего канала
cpi temp, 2 ; номер текущего канала _2 ? breq currch_2 ;
cpi Temp, 1 ; номер текущего канала _1 ? breq currch_1 ;
currch_0: ; текущий канал_0
LDI Temp, 1 ; в следующий раз номер канала будет 1 STS curr_ch, Temp ; rjmp setting_ADS ;
currch_1: ; текущий канал_1
LDI Temp, 2 ; в следующий раз номер канала будет 2 STS curr_ch, Temp ; rjmp setting_ADS ;
currch_2: ; текущий канал_2
LDI Temp, 0 ; в следующий раз номер канала будет 0 STS curr_ch, Temp ; rjmp setting_ADS ;
почему бы не написать проще
Код LDS Temp, curr_ch ; читаем номер текущего канала INC Temp ; увеличили его на 1
CPI Temp , 3 ; дошли до 3го канала ? brne SAVE_CURR_CH ; если нет то идем на сохранение ldi Temp, 0 ; если дошли - то сбросим на нулевой канал ! SAVE_CURR_CH: STS curr_ch, Temp
вот первых проще, во вторых понятнее, во третьих - не соберешь грабли какие нить
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Четверг, 11.04.2013, 23:56 | Сообщение # 267 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| еще знаешь что мне не нравиться ?
не стоит читать ацп во время передачи синхропаузы !!
лучше во время передачи импульса читай !! потому как синхропауза всего 300 мкс длиться - фиг его знает успевает АЦП или нет !!!
а вот импульс канальный длиться от 1000 до 2000 мкс - это минимум в 3 раза большее время !!!!
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Пятница, 12.04.2013, 00:33 | Сообщение # 268 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) вот первых проще, во вторых понятнее, во третьих - не соберешь грабли какие нить согласен.
Цитата (ВитГо) не стоит читать ацп во время передачи синхропаузы !! и тут полностью согласен - я думал уже об этом...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Пятница, 12.04.2013, 00:33 |
|
| |
uwrtey | Дата: Пятница, 12.04.2013, 11:12 | Сообщение # 269 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Виталий, Твои подсказки на вес золота! исправил оба пункта и все заработало!
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Пятница, 12.04.2013, 21:04 | Сообщение # 270 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| еще разок отредактировал код на более читаемый и меньший по размеру теперь значение АЦП не сохраняется в ОЗУ ( теперь это не нужно )
Пора приниматься за приемник...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Пятница, 12.04.2013, 22:57 |
|
| |
|