Прерывания

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

Re: Прерывания

Сообщение andrewproffi (Андрей) » 19 май 2017, 08:52

ничего не узнал :(
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе

Re: Прерывания

Сообщение mim (mim) » 19 май 2017, 10:18

andrewproffi писал(а):ничего не узнал :(

:o Читать и думать, смотреть все примеры и разбираться, почему так и не иначе...

Я знаю что все кто торопится они слепы...
Цитирую "На графике видно, что периодичность сигнала исчезла, значит, в работе прерывания происходят сбои. Но, почему? Что же произошло?Ведь оставалось еще 8,6 мкс, а увеличили паузу мы всего на 2 мкс.
Происходит это по двум причинам, из-за того что так написано прерывание в ФК (но мы попытаемся это исправить) и из-за работы компилятора который сохраняет (а затем восстанавливает) очень большой стек при уходе на подпрограмму (вот здесь мы ничего не сможем сделать, но в дальнейшем мы это попытаемся обойти, но только на AVR).
Таким образом, эти причины нужно всегда учитывать.
"

Читать и думать, смотреть все примеры и разбираться, почему так и не иначе...

Код: выделить все
0000007c <__vector_3>:

  7c:   1f 92          push   r1
  7e:   0f 92          push   r0
  80:   0f b6          in   r0, 0x3f   ; 63
  82:   0f 92          push   r0
  84:   11 24          eor   r1, r1
  86:   b8 9a          sbi   0x17, 0   ; 23
  88:   c0 9a          sbi   0x18, 0   ; 24
  8a:   b8 9a          sbi   0x17, 0   ; 23
  8c:   c0 98          cbi   0x18, 0   ; 24
  8e:   0f 90          pop   r0
  90:   0f be          out   0x3f, r0   ; 63
  92:   0f 90          pop   r0
  94:   1f 90          pop   r1
  96:   18 95          reti

Это то что будет выполняться в прерывании - тепрь берем умную книжку и делаем подсчет времени выполнения каждой команды ассемблера... суммируем и получаем минимальный период прерывания... чем больше переменных в прерывании тем больше период -> меньше частота...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Прерывания

Сообщение andrewproffi (Андрей) » 19 май 2017, 11:17

ну а вообще чего я сюда полез: реально ли сделать два независимых генератора, на два выхода МК, один из которых дает 20кгц и хотябы 10 шагов регулировки скважности от 0 до 100%, а второй генерирует частоту от 20 до 60кгц?
я хотел попробовать сделать его на прерывании, но если в подпрограмму прерывания засунуть пару условий IF и увеличение переменной, то уже частота прерываний будет в районе 100кгц...
подскажите, можно ли выполнить такую задачу?
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Прерывания

Сообщение mim (mim) » 19 май 2017, 12:24

andrewproffi писал(а):реально ли сделать два независимых генератора
на 20кгц и 10 шагов скважности
второй генерирует частоту от 20 до 60кгц

Ты упорно не хочешь читать то где это проанализировали... тебе тупо хочется ответ...
Почему бы тебе самому не подсчитать сколько времени будет выполнять вот этот кусок кода...
if.jpg

Код: выделить все
00000104 <__vector_3>:
   {
 104:   1f 92          push   r1
 106:   0f 92          push   r0
 108:   0f b6          in   r0, 0x3f   ; 63
 10a:   0f 92          push   r0
 10c:   11 24          eor   r1, r1
 10e:   2f 93          push   r18
 110:   3f 93          push   r19
 112:   4f 93          push   r20
 114:   5f 93          push   r21
 116:   6f 93          push   r22
 118:   7f 93          push   r23
 11a:   8f 93          push   r24
 11c:   9f 93          push   r25
 11e:   af 93          push   r26
 120:   bf 93          push   r27
 122:   ef 93          push   r30
 124:   ff 93          push   r31
      FCM_mim();
 126:   90 df          rcall   .-224       ; 0x48 <FCM_mim>
 48:   80 91 60 00    lds   r24, 0x0060
  4c:   90 e0          ldi   r25, 0x00   ; 0
  4e:   88 23          and   r24, r24
  50:   09 f4          brne   .+2         ; 0x54 <FCM_mim+0xc>
  52:   91 e0          ldi   r25, 0x01   ; 1
  54:   90 93 60 00    sts   0x0060, r25
  58:   80 91 60 00    lds   r24, 0x0060
  5c:   88 23          and   r24, r24
  5e:   39 f0          breq   .+14        ; 0x6e <FCM_mim+0x26>
  60:   b8 9a          sbi   0x17, 0   ; 23
  62:   c0 9a          sbi   0x18, 0   ; 24
  64:   90 91 62 00    lds   r25, 0x0062
  68:   87 ec          ldi   r24, 0xC7   ; 199
  6a:   89 1b          sub   r24, r25
  6c:   04 c0          rjmp   .+8         ; 0x76 <FCM_mim+0x2e>
  6e:   b8 9a          sbi   0x17, 0   ; 23
  70:   c0 98          cbi   0x18, 0   ; 24
  72:   80 91 62 00    lds   r24, 0x0062
  76:   83 bd          out   0x23, r24   ; 35
  78:   08 95          ret
    }
 128:   ff 91          pop   r31
 12a:   ef 91          pop   r30
 12c:   bf 91          pop   r27
 12e:   af 91          pop   r26
 130:   9f 91          pop   r25
 132:   8f 91          pop   r24
 134:   7f 91          pop   r23
 136:   6f 91          pop   r22
 138:   5f 91          pop   r21
 13a:   4f 91          pop   r20
 13c:   3f 91          pop   r19
 13e:   2f 91          pop   r18
 140:   0f 90          pop   r0
 142:   0f be          out   0x3f, r0   ; 63
 144:   0f 90          pop   r0
 146:   1f 90          pop   r1
 148:   18 95          reti

andrewproffi писал(а):подскажите, можно ли выполнить такую задачу?
Нет... кроме того одно прерывание будет влиять на другое...
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Прерывания

Сообщение andrewproffi (Андрей) » 19 май 2017, 12:50

Я читаю, и эта информация будет полезна, я просто спросил: реально ли это сделать.
в приведенном коде примерно 55 ассемблерных операций, что для кварца 16Мгц займет примерно 3.5мкс времени.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Прерывания

Сообщение mim (mim) » 19 май 2017, 13:10

Ты конечно же учел что команды могут выполняться 1,2 и 3 цикла?
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Прерывания

Сообщение andrewproffi (Андрей) » 19 май 2017, 13:28

я это понимаю, в данном расчете не учитывал. Спасибо.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Пред.

Вернуться в ПЕСОЧНИЦА

Кто сейчас на форуме

Пользователь просматривает форум: Yandex [Bot]