Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ФОРМИРОВАНИЕ ВРЕМЕННЫХ ИНТЕРВАЛОВ В АВР, ВРЕМЕННЫЕ ИНТЕРВАЛЫ,T0, ATTINY13 
:(
    Опции темы
pettimm
Дата 27.11.2013, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1



Подскажите пожалуйста, где ошибка
в подсчете временного интервала, используем прерывание по совпадению Т0  
фюзы выставлены так: 
Low:    0        1               1                0          1          0         
;          Spien;  EESAVE;  WDTON;  CKDIV8;  SUT1;  SUT0;   
0               1
CKSEL1; CKSEL1

;High:       1        1            1                         1              0
;           SPMEN;  DWEN;  BODLEVEL1;   BODLEVEL0;  RST

отсюда задающая частота проца= 4,8МГЦ/8=600 000Гц
При выборе тактовой частоты То выбран предделитель на 64  значит =600 000/64= 9375 Гц
значит период тактирования=1/9375=106,666666 мкс
при числе в регистре совпадения = 2  и если таймер тактируется от начала импульса, то и на единицу значение счетного регистра таймера увеличится в начале первого импульса , а значит за время 106 мкс
увеличение будет на 2
но осцилографом я вижу импульсы длиной 400 мкс, где я ощибаюсь в подсчете времени? Спасибо.

Код


PEREVIRKA_PAUS:
                     
                 CBI PORTB,5; PEREMKNETSJA V PERERUVANNI
                 RCALL pausa_kontrol
                 

                         SBI PORTB,5
         RCALL pausa_kontrol
                        RJMP PEREVIRKA_PAUS

pausa_kontrol:
                 LDI TEMP,0b00000011    out TCCR0B,TEMP  ; PUSK T0 \CK/64=600 000/64 =9375 
                  ;1/9375= 106,66 MKC
                 LDI temp,0b00000101 OUT ocr0a,temp ;REGISTR ;SOVPADENIJA A 
                 LDI temp,0b00000100 out TIMSK0,temp     ;PRERUVANIE T0_SOVP_A   
                                           SEI
PERERUVANNJA_T0A:          WDR
                                         IN TEMP,TIFR0
                     SBRS TEMP,OCF0A; FLAG
                        RJMP PERERUVANNJA_T0A
                                  
                                  LDI TEMP,0b0000000
                    out TCCR0B,TEMP
                    out TCNT0,TEMP
                    
                       RET


PM MAIL   Вверх
kolobok0
  Дата 4.12.2013, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(pettimm @ 27.11.2013,  17:20)
... где ошибка...частота проца= 4,8МГЦ/8=600 000Гц..То выбран предделитель на 64  значит =600 000/64= 9375 Гц
значит период тактирования=1/9375=106,666666 мкс
при числе в регистре совпадения = 2...я вижу импульсы длиной 400 мкс, где я ощибаюсь..?..
Код

...
                 LDI TEMP,0b00000011    out TCCR0B,TEMP  ; PUSK T0 \CK/64=600 000/64 =9375 
                  ;1/9375= 106,66 MKC
                 LDI temp,0b00000101 OUT ocr0a,temp ;REGISTR ;SOVPADENIJA A 
                 LDI temp,0b00000100 out TIMSK0,temp     ;PRERUVANIE T0_SOVP_A   
                                           SEI
...

Сразу скажу - регистры так не надо писать, в ввиде нулей и единиц.
Лучше использовать готовые преддефайны поставляемого вместе с компилятором на данный МК.
Тогда запись будет вида(как пример)

Код

  ldi   temp,(1 << CKSEL1) | (1 << CKSEL0)


так наглядней. и не ошибётесь.


Регистр TCCR0A выставлено всё по умолчанию т.е. усе нули.
Смотрим расшифровку режимов работы таймера
Регистры
WGM02(TCCR0B) = 0
WGM01(TCCR0A) = 0
WGM00(TCCR0A) = 0
Что соответствует режиму 0 (Normal). Обратите внимание в таблице на колонку "TOP" (вершина счёта). В строке данного режима стоит фиксированное значение 0xFF 

оно?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.