Пятница, 26.04.2024, 14:04
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Пропорциональное управление на МК с нуля - Страница 18 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Пропорциональное управление на МК с нуля
ВитГоДата: Понедельник, 08.04.2013, 21:02 | Сообщение # 256
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (uwrtey)
а почему нельзя просто вот так сделать?
ldi R16 , (1<<COM1A1)|(0<<COM1A0)|(1<<FOC1A)
?
наверно что-то не успевает переключится внутри МК ?

нет, просто сначала нужно включить режим работы вывода..
и только потом его устанавливать !

я это кстати тоже только экспериментальным путем выяснил, на тестовых програмках


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 08.04.2013, 22:11 | Сообщение # 257
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Да уж. Хоть бы в датащите что нибудь про это написали.
Возможно это унаследовано от тех МК в которых бит FOC1A находится в другом регистре ( не в TCCR1A, а в TCCR1C например, как в тини 2313 ) surprised ???


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

Сообщение отредактировал uwrtey - Понедельник, 08.04.2013, 22:50
 
ВитГоДата: Понедельник, 08.04.2013, 22:50 | Сообщение # 258
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
скорее всего они не менялись местами - а ты где то сместил адрес для чтения :-)

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 08.04.2013, 22:52 | Сообщение # 259
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Возможно. ( Я это мог wink ) Я еще разок проверю код... ( а может и не разок smile )

не успеваю за своими мыслями......
 
uwrteyДата: Четверг, 11.04.2013, 18:36 | Сообщение # 260
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
я нашел пока только один косяк ( в расчетах общей длительности каналов ) - думаю, что дело было не в нем. На всякий случай проверю завтра осциллограмму

Добавлено (11.04.2013, 18:36)
---------------------------------------------
Все так-и не помогло... Где то в другом месте косяк...
у меня такое ощущение что проверка флага ADIF как то не корректно работает...
Прикрепления: 3409760.asm (15.6 Kb)


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

Сообщение отредактировал uwrtey - Четверг, 11.04.2013, 20:01
 
ВитГоДата: Четверг, 11.04.2013, 20:48 | Сообщение # 261
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 20
Статус: Offline
то есть сначала запускаем преобразование
ADCSRA|=0x40;
потом ждем установки флага
while ((ADCSRA & 0x10)==0);
потом останавливаем
ADCSRA|=0x10; // Stop
и читаем результат
return ADCW;


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 11.04.2013, 21:34 | Сообщение # 263
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: 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
Репутация: 20
Статус: Offline
значит проверяй порядок действий!

сначала ставишь номер канала для преобразования с типом vref
потом запускаешь преобразование и ждешь
потом выключаешь преобразование
потом читаешь результат

чудес не бывает.. надеюсь ты ноги не перепутал ?


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 11.04.2013, 23:33 | Сообщение # 265
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
С ногами у меня порядок! Это ошибка - осталось только ее обнаружить.. smile

не успеваю за своими мыслями......
 
ВитГоДата: Четверг, 11.04.2013, 23:49 | Сообщение # 266
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 20
Статус: Offline
еще знаешь что мне не нравиться ?

не стоит читать ацп во время передачи синхропаузы !!

лучше во время передачи импульса читай !! потому как синхропауза всего 300 мкс длиться - фиг его знает успевает АЦП или нет !!!

а вот импульс канальный длиться от 1000 до 2000 мкс - это минимум в 3 раза большее время !!!!


Виталий (аka ВитГо)
 
uwrteyДата: Пятница, 12.04.2013, 00:33 | Сообщение # 268
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Цитата (ВитГо)
вот первых проще, во вторых понятнее, во третьих - не соберешь грабли какие нить

согласен.

Цитата (ВитГо)
не стоит читать ацп во время передачи синхропаузы !!

и тут полностью согласен - я думал уже об этом...


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

Сообщение отредактировал uwrtey - Пятница, 12.04.2013, 00:33
 
uwrteyДата: Пятница, 12.04.2013, 11:12 | Сообщение # 269
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Виталий, Твои подсказки на вес золота! исправил оба пункта и все заработало!
booze
Прикрепления: Transmitt_32meg.zip (4.6 Kb)


не успеваю за своими мыслями......
 
uwrteyДата: Пятница, 12.04.2013, 21:04 | Сообщение # 270
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
еще разок отредактировал код на более читаемый и меньший по размеру
теперь значение АЦП не сохраняется в ОЗУ ( теперь это не нужно ) smile

Пора приниматься за приемник...
Прикрепления: new_transmit.zip (4.6 Kb)


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

Сообщение отредактировал uwrtey - Пятница, 12.04.2013, 22:57
 
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Поиск:


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