МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Pavel.d.a » 10 июл 2008, 18:30

Помогите разобраться. В книге написано что большинство операции (инструкции) в avr выполняются за один машинный цикл который равен одному такту. У меня atmega128, ради интереса написал вот такой код:
Код: Выделить всё
void main(void)
{
DDRB=0x20;
     while(1)
      {
        PORTB.5 = 1;           
        PORTB.5 = 0;           
      }
}

установил частоту тактирования мк 16МГц. В proteusе подключил oscilloskope посмотрел период 400 пикосекунд. получилась частота 2.5 МГц. Почему так мало?
Pavel.d.a
 
Сообщения: 15
Зарегистрирован: 16 июн 2008, 13:12

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение blindman » 10 июл 2008, 18:48

1. Большинство, но не все
2. Строка на C в общем транслируется не в одну инструкцию ассемблера
3. На организацию цикла тоже нужно время

PS. 400пс период это 2.5 ГГц
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Pavel.d.a » 10 июл 2008, 19:51

Да, я ошибся нс, а пс. Спасибо за исправление. Замерил поточнее 375 нс что соответствует 2666666.667 герц. Если 16000000/2666666.667 то получается 6, соответственно по 2 такта на каждую операцию(лог.1 лог.0 и цикл). Наверное так.
Pavel.d.a
 
Сообщения: 15
Зарегистрирован: 16 июн 2008, 13:12

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение hudbrog » 10 июл 2008, 20:00

На самом деле:
1) На большинство операций. Операции условного ветвления (оные участвуют в цикле) занимают, если память не изменяет 2 или 3 цикла, в зависимости от условия
2) Проверяется просто - любой компилятор Cшный умеет генерить листинг ассемблерного кода, который он будет дальше компилировать. Вы берте этот листинг, открываете хелп к авр-студии, смотрите хелп по каждой из комманд, там указано сколько тактов на ее выполнение. Если не нравица - оптимизируете рукми )
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Pavel.d.a » 10 июл 2008, 23:26

пример программного шим с дискретностью шим 10% и частоты 1 герц , только одна проблема, максимальная частото для atmega при частоте тактирования 16МГц около 10КГц... моей затеи на таком медленном камне не реализовать. Выложить не получается. (Если кому интересно могу прислать по почте, так как я начинающий была бы интересна критика)

Добавлено спустя 1 минуту 31 секунду:
Я хотел сказать что написал пример, а выложить не получилось :(
Pavel.d.a
 
Сообщения: 15
Зарегистрирован: 16 июн 2008, 13:12

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение alegz » 11 июл 2008, 07:24

а может ктонить доступно объяснить в чем прелесть использовать кварц скажем на 14.7456 МГц ? для чего это) а то чтото не понимаю... вот скажем надо выдержать 1.5мс для сервы ) както нацело неделится....
Аватара пользователя
alegz
 
Сообщения: 63
Зарегистрирован: 01 июн 2008, 08:48
Откуда: Новосибирск
прог. языки: С++, Asm, PHP

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Master » 11 июл 2008, 12:37

Есть такие специальные кварцы для протоколоа RX232 именно при таких не целых частотах наименьшее число ошибок при любой скорости передачи данных.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение alegz » 11 июл 2008, 13:57

и это единственное оправдание в их пользу?)
Аватара пользователя
alegz
 
Сообщения: 63
Зарегистрирован: 01 июн 2008, 08:48
Откуда: Новосибирск
прог. языки: С++, Asm, PHP

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение blindman » 11 июл 2008, 14:03

Какое еще оправдание? Это их назначение
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Ринатик » 22 июл 2008, 15:29

Вопросы к AVR123.
1) Можете подробней описать строку из урока 05а: WHILE (PINB &(1<<n)). Вроде как выражение типа <<n или >>n на Си означает сдвиг чего-то на N позиций?

2) При изучении STEP03 в VMLAB не понял при каком событии происходит вызов процедуры NMI_SERV? Судя по окну "Registers/flags"прерывания отключены. Что означает "TO DO" в комментариях STEP0x VMLAB?

3)К задаче z02 есть задание - сделать индикацию числа горящими светодиодами. Я вместо PORTA++ сделал декремент, т.е. PORTA--. Визуально счет идет горящими светодиодами, но верно ли я сделал?
Ринатик
 
Сообщения: 14
Зарегистрирован: 24 окт 2007, 14:31

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение avr123.nm.ru » 22 июл 2008, 16:29

1 и 3 ДА. а 2 не понял откуда ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Ринатик » 23 июл 2008, 09:11

1)Что означает выражение 1<<n ?

2)В VMLAB в STEP03 после инициализации код такой:

Код: Выделить всё
   MAIN
   LDI WDT, 0FFH  ; Watchdog refresh
   CALL SUB_1     ;
   INC VAR_1
   DEC VAR_2      ; Some doing-nothing stuff
   LD A, VAR_1
   LD PA, A       ; Just transfer the VAR_1 to port
   JP MAIN

SUB_1
   CALL SUB_2
   RET

SUB_2
   NOP
   RET

; NMI service routine: produce 4 pulses in PB0
; --------------------------------------------
;

NMI_SERV
   LD A_SAVE, A      ; Save accumulator
   LDI X, 4          ; Load nr. of pulses
LOOP
   RES 0, PB_COPY
   LD A, PB_COPY     ; Loop to generate the pulses
   LD PB, A          ; Use the SET/RES on copy register
   SET 0, PB_COPY    ; and transfer later
   LD A,  PB_COPY
   LD PB, A
   DEC X
   JRNZ LOOP
   LD A, A_SAVE      ; Restore accumulator
   RETI


программа гоняет в основном в MAIN, а в какой-то момент перескакивает на NMI_SERV. Я не пойму по какому событию возникает этот переход.

3) про TO DO - это вроде то что надо сделать.

Для листингов программ и прочих текстов есть тег [ code ]!
<Digit>
Ринатик
 
Сообщения: 14
Зарегистрирован: 24 окт 2007, 14:31

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение avr123.nm.ru » 23 июл 2008, 10:43

Ринатик писал(а): 1) Что означает выражение 1<<n ?


Сдвиг на n позиций влево - "Си для МК" http://avr123.nm.ru/05.htm

Изображение

Ринатик писал(а): 2) В VMLAB в STEP03 после инициализации код такой:

Эти примеры в VMLAB для микроконтроллера ST6210 от http://www.ST.com
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Ринатик » 23 июл 2008, 14:49

avr123.nm.ru писал(а):
Ринатик писал(а): 1) Что означает выражение 1<<n ?


Сдвиг на n позиций влево

Это я понял. Но это используется для переменной или регистра (или нет?) Получается 1<<n это сдвиг единицы на сколько-то битов (позиций). Я запутался, что означает выражение PINB&(1<<n)? :cry:

avr123.nm.ru писал(а):
Ринатик писал(а): 2) В VMLAB в STEP03 после инициализации код такой:

Эти примеры в VMLAB для микроконтроллера ST6210 от http://www.ST.com

Я знаю откуда это взято. Я их прохожу. Ткните пальцем, кто знает, каким макаром происходит переход на NMI_SERV???
Ринатик
 
Сообщения: 14
Зарегистрирован: 24 окт 2007, 14:31

Re: МикроКонтроллеры начинающим - общие вопросы

Сообщение Myp » 23 июл 2008, 16:25

сдвиг единицы на n позиций влево

например: есть единица "1"
тоесть 00000001
сдвигаем её влево на 5 позиций
получаем 00010000
тоесть 10000
и уже это число можно писать в порт и включать выключать нужную ногу)
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3