Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.11.2007, 11:47
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от EXIS
|
И еще вопрос как разрезать long в CodeVisionAVR побайтно, там для этих целей какие-то операторы типа % используются. Нужно разрезать на байты чтобы послать в USART.
|
Я например делаю это так:
Код:
|
unsigned long int a=0x12345678;
a=a & 0x000000FF //самый младший байт
a=(a››8)& 0x000000FF// следующий байт
a=(a››8)& 0x000000FF// следующий байт
a=(a››8)& 0x000000FF// последний байт |
|
|
|
|
14.11.2007, 12:52
|
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от dimonbest
|
Сообщение от EXIS
|
И еще вопрос как разрезать long в CodeVisionAVR побайтно, там для этих целей какие-то операторы типа % используются. Нужно разрезать на байты чтобы послать в USART.
|
Я например делаю это так:
Код:
|
unsigned long int a=0x12345678;
a=a & 0x000000FF //самый младший байт
a=(a››8)& 0x000000FF// следующий байт
a=(a››8)& 0x000000FF// следующий байт
a=(a››8)& 0x000000FF// последний байт |
|
Я думаю, что Вы так не делаете. Во третей строке кода будет a=0.
Удачи.
|
|
|
|
14.11.2007, 13:24
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от nokazus
|
Я думаю, что Вы так не делаете. Во третей строке кода будет a=0.
Удачи.
|
Я написал идею, а не кусок кода со своей программы...
Код:
|
unsigned long int a=0x12345678;
unsigned char temp;
temp=a & 0x000000FF //самый младший байт
temp=(a››8)& 0x000000FF// следующий байт
temp=(a››8)& 0x000000FF// следующий байт
temp=(a››8)& 0x000000FF// последний байт |
Так работать будет
|
|
|
|
14.11.2007, 14:01
|
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от dimonbest
|
Я написал идею, а не кусок кода со своей программы...
Код:
|
unsigned long int a=0x12345678;
unsigned char temp;
temp=a & 0x000000FF //самый младший байт
temp=(a››8)& 0x000000FF// следующий байт
temp=(a››8)& 0x000000FF// следующий байт
temp=(a››8)& 0x000000FF// последний байт |
Так работать будет
|
Идея хорошая, но и так работать не будет. У Вас в 4, 5 и 6 строках стоит сдвиг на 8, а само "a" не меняется, поэтому в строках 4, 5 и 6 будет одинаковое значение temp.
Удачи.
|
|
|
|
14.11.2007, 15:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от nokazus
|
Идея хорошая, но и так работать не будет.
|
Душишь творчество на корню!
|
|
|
|
14.11.2007, 15:28
|
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от tempora
|
Сообщение от nokazus
|
Идея хорошая, но и так работать не будет.
|
Душишь творчество на корню!
|
Никапельки. Просто хотел сказать, что не стоит спешить. Основные заковыристые ошибки программист (и не только) делает по невнимательности. Найти их очень трудно, т.к. "простой" участок просматриваешь бегло. Поэтому нужно воспитывать в себе внимательность.
2 EXIS
Обратите внимание на режим таймера CTC (сброс при совпадении). Тогда перезагрузку счетчика таймера вручную делать не надо.
Удачи.
|
|
|
|
14.11.2007, 16:09
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от nokazus
|
Никапельки. Просто хотел сказать, что не стоит спешить. Основные заковыристые ошибки программист (и не только) делает по невнимательности. Найти их очень трудно, т.к. "простой" участок просматриваешь бегло. Поэтому нужно воспитывать в себе внимательность.
|
Код:
|
unsigned long int a=0x12345678;
unsigned char temp;
temp=a & 0x000000FF //самый младший байт
temp=(a››8)& 0x000000FF// следующий байт
temp=(a››16)& 0x000000FF// следующий байт
temp=(a››24)& 0x000000FF// последний байт |
Прошу прощения, действительно из-за спешки
|
|
|
|
14.11.2007, 17:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от nokazus
|
Поэтому нужно воспитывать в себе внимательность.
|
То была шутка юмора.
|
|
|
|
14.11.2007, 20:33
|
|
Временная регистрация
Регистрация: 30.08.2005
Адрес: Ротовска йобласть
Сообщений: 84
Сказал спасибо: 2
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
в авр время реакции на прерывание 4 такта плюс сюда добавить время обработки одного прерывания. если на время обработки прерывания запретить это же прерывание, то при больших частотах может быть не правильное значение частоты, если не запретить, стек сорвать можно. от сюда и считайте верхнюю граничную частоту измеряемую
|
|
|
|
15.11.2007, 09:00
|
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от Panda_Y2k
|
в авр время реакции на прерывание 4 такта плюс сюда добавить время обработки одного прерывания. если на время обработки прерывания запретить это же прерывание, то при больших частотах может быть не правильное значение частоты, если не запретить, стек сорвать можно. от сюда и считайте верхнюю граничную частоту измеряемую
|
Я предложил измерять частоту тайиером/счетчиком, а не программно по внешним прерываниям. И тогда максимальная частота равна половине тактовой. Если по каждому фронту уходить в прерывание, то действительно МК нужно принять запрос, среагировать на него, обработать прерывание, выйти. Еще и основной код должен когда-то отрабатываться. Об этом было написано выше в теме.
Что касается
Цитата:
|
если на время обработки прерывания запретить это же прерывание, ... , если не запретить, стек сорвать можно.
|
ИМХО это бред. Экспериментально на AVR такую ситуацию не пробовал. Но точно знаю, что во многих процессорах ядро не станет обрабатывать прерывание, пока обрабатывается прерывание с таким же приоритетом. Например, в MSC-51 есть скрытый регистр, запрещающий реакцию на прерывания (с таким же или низшим приоритетом) на время от начала реакции (занесения в стек адреса возврата) до исполнения команды reti. За счет этого следующее прерывание отрабатывается только после того, как закончится текущее, будет выполнен возврат к основному коду, выполнится один оператор основного кода. Такой алгоритм обработки прерываний наблюдается у многих процессоров Intel. Я не думаю, что в AVR сильно отличается. Поэтому никакого сорванного стека, если висит запрос на прерывание, быть не может. Просто прерывание будет обработано позже, или вообще не будет, если запрос на прерывание (флаг) был снят до окончания обработки текущего прерывания. Стек можно сорвать если неправильно выходить из прерывания и подпрограмм.
Удачи.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Схема на частотомер
|
smg123 |
Измерительное оборудование |
5 |
08.09.2007 02:48 |
Частотомер Ч3-34А
|
Modul-x |
Поиск схем. Делимся схемами |
0 |
24.08.2007 23:00 |
Частотомер ЦД2120.1
|
Slava_shp |
Поиск схем. Делимся схемами |
0 |
10.08.2007 21:18 |
Частотомер
|
KLMZ |
Измерительное оборудование |
4 |
12.01.2007 12:06 |
Часовой пояс GMT +4, время: 01:15.
|
|