CUBE

Асинхронный режим Timer2 на ATmega8 от кварцевого резонатора 32768Гц RTC

18 сообщений в этой теме

CUBE    1

Не могу запустить асинхронный режим. 

Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 

Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 

Компилятор Atmel Studio 7

Шью через Sind Prog 2.1.1 + USBasp 2.0

Вот код: 

.macro outi 
 ldi r16, @1 
 out @0, r16 
.endm 
.org $000 
rjmp reset 
.org $001 
reti 
.org $002 
reti 
.org $003 
reti 
.org $004 
rjmp timer2_ovf 
.org $005 
reti 
.org $006 
reti 
.org $007 
reti 
.org $008 
reti 
.org $009 
reti 
.org $00A 
reti 
.org $00B 
reti 
.org $00C 
reti 
.org $00D 
reti 
.org $00E 
reti 
.org $00F 
reti 
.org $011 
reti 
.org $012 
reti 
.ORG INT_VECTORS_SIZE 
 
reset: 
.equ portout=portd 
.equ ddrout=ddrd 
.def led=r17 
.def mask=r18 
.def counter=r19 
 outi spl,low(ramend) 
 outi sph,high(ramend) 
 
 outi ddrout, 0xff 
 
 outi tccr2, 0b00000111 
 outi timsk, 1«toie2 
 
  
 
  
 ldi led,1«5 
 ldi mask,1«5 
 sei 
cycle: 
cpi counter, 10 
breq offtim 
 rjmp cycle 
 
timer2_ovf: 
inc counter 
 out portout, led 
 eor led, mask 
reti 
  
offtim: 
outi timsk, 0«toie2 
rjmp asinxron 
 
asinxron: 
 outi assr, 0b00001000 
back: 
 in r16, assr 
 cpi r16, 0b00001000 
 brne back 
 
  outi tccr2, 0b00000101 
  outi tcnt2, 0 
  outi ocr2, 0 
  outi timsk, 1«toie2 
 
 
m1: 
rjmp m1

DSC_0073.thumb.JPG.030623a7fd4921c758295f752b815068.JPG

DSC_0072.thumb.JPG.dc17cd2be78d3acd941dc10a24aa4900.JPG

Верх меги на фото слева. 

Изменено пользователем CUBE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конденсаторы на выводы кварца подключили?

Изменено пользователем Геннадий

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1

http://easyelectronics.ru/avr-uchebnyj-kurs-asinxronnyj-rezhim-tajmera.html

В этой статье читал что при подключении для асинхронного режима к TOSC1 и 2 они не нужны.

P.s. Завтра на всякий случай куплю и с ними попробую. И кварц другой возьму 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ruhi    34
13 часа назад, CUBE сказал:

После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц

я бы сначала убедился что процессор "видит" эти асинхронные такты на заданной ноге! То есть надо включить порт на input и куда то вывести значение ноги без всяких таймеров и убедится что процессор видит нули и единицы (меандр) на этой ноге.

Когда работа железа проверена таким образом можно смело разбираться с настройками более сложной (чем порт ввода вывода) периферии процессора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При переключении в асинхронный режим линии порта PB6, PB7 отключаются от системы ввода/вывода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1
7 часов назад, ruhi сказал:

я бы сначала убедился что процессор "видит" эти асинхронные такты на заданной ноге! То есть надо включить порт на input и куда то вывести значение ноги без всяких таймеров и убедится что процессор видит нули и единицы (меандр) на этой ноге.

Так я делаю ещё проще. Не в порт завожу и отслеживаю, а смотрю саму ногу светодиодом. Ножка в асинхронном не тикает, в любом другом за мило дело.

7 часов назад, Геннадий сказал:

При переключении в асинхронный режим линии порта PB6, PB7 отключаются от системы ввода/вывода.

Тааак. Знаю про это. Они мне и не нужны.Вывод на PD5 делаю.

Сегодня выполнил следующие потуги:

  • Попробовал другой резонатор
  • Добавил конденсаторы на 22 pF (хоть они там и не нужны)
  • Пробовал использовать режим по сравнению с ocr2, а не по переполнению
  • Добавил запрет глобальных прерываний, при инициализации асинхронного режима и последующее включение непосредственно перед

Пока результата нет. И с сожалению идей как ещё попробовать тоже

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ruhi    34
4 часа назад, CUBE сказал:

Добавил конденсаторы на 22 pF (хоть они там и не нужны)

а при чем здесь конденсаторы тогда? если входной сигнал на ноге есть надо с настройками таймера разбираться - почему он на этот сигнал не реагирует!

нога то правильно выбрана для таймера - он там вроде только с одной определенной асинхронные такты может принимать? и выдавать тоже на определенную но другую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
hasl    61

1. конденсаторы нужны т.к. замечено что не на всех МК запускался генератор

2. Зачем ассемблер, думаете это  круто, нет - это глупость, не щнаете как толком работать с железлм и лезите в программирование с этого входа.

Самая большая проблема, ограничиваете себя в примерах

3. если уж так хотите ASM, напишите код инициализации на СИ и посмотрите как скомпрометируется код ASM

4. RTC генератор можно проверить простым шарканьем по входам пальцем, счетчик при этом должен щелкать, правда если не обладаете высоким статичным зарядом

5. Чтобы проверить саму настройку счетчика достаточно просто переключить источник тактирования

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Berg    18
...
  outi tccr2, 0b00000101 
  outi tcnt2, 0 
  outi ocr2, 0 
  outi timsk, 1«toie2 
  outi tifr, 0
...

А так? И глобальный запрет прерываний необходим перед изменением assr, с последующим разрешением.

Изменено пользователем Berg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1
11 час назад, hasl сказал:

2. Зачем ассемблер, думаете это  круто, нет - это глупость

Это лаба в моем институте.

 

11 час назад, hasl сказал:

3. если уж так хотите ASM, напишите код инициализации на СИ и посмотрите как скомпрометируется код ASM

Это глупость. Кто пишет на си инициализацию делают в asm

 

11 час назад, hasl сказал:

5. Чтобы проверить саму настройку счетчика достаточно просто переключить источник тактирования

Не 1 раз писал, что делал так. Настройка самого таймера работает. Не работает асинхронный режим.

12 часа назад, ruhi сказал:

и выдавать тоже на определенную но другую.

Ничего про этой найти не смог. Можно поподробнее?

Изменено пользователем CUBE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот так у меня работает:

		cli
;====настроим Т2 на асинхронный режим и кварц 32кГц===
		clr	r16            		;
		out	TCCR2,r16      		;
		out	OCR2,r16       		;
		ldi	r16,0b00001000 		;
		out	ASSR,r16       		;
		ldi	r16,0b00001010		;
		out	TCCR2,r16      		;
wait_tccr2:
		in	r16,ASSR        ;
		sbrc	r16,0         	;
		rjmp	wait_tccr2     	;
		ldi	r16,0b01100101 		;
		out	OCR2,r16       		;
wait_ocr2:
		in	r16,ASSR        ;
		sbrc	r16,1         	;
		rjmp	wait_ocr2      	;
		ldi	r16,0b00001010		;
		out	TCCR2,r16      		;
		clr	r16                 ;
		out	TCNT2,r16           ;
wait_tcnt2:
		in	r16,ASSR        ;
		sbrc	r16,2         	;
		rjmp	wait_tcnt2     	;
		sei

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ruhi    34
1 час назад, CUBE сказал:

Ничего про этой найти не смог. Можно поподробнее?

Извиняюсь, начать надо было с вопроса о типе процессора, это Атмега??? или кто??? Какой номер таймера используете.

На каждую атмегу есть пдф-ка и там есть раздел про таймеры типа такого:

16-bit Timer/Counter
(Timer/Counter1 and
Timer/Counter3)
The 16-bit Timer/Counter unit allows accurate program execution timing (event management),
wave generation, and signal timing measurement. The main features are:
• True 16-bit Design (i.e.,Allows 16-bit PWM)
• Three Independent Output Compare Units
• Double Buffered Output Compare Registers

...

Там все расписано, в принципе в интернете, достаточно просто, можно найти полный русский перевод.

И, совет, вы бы хоть подписали инструкции в вашем коде, что они по вашему делают, а то вообще говоря не понятно что мы обсуждаем, потому что:

 

1 час назад, CUBE сказал:

Настройка самого таймера работает. Не работает асинхронный режим.

режим или настройка не могут работать или НЕ работать, не работает всегда таймер пусть в каком то определенном режиме, с определенными настройками.

Я бы попросил все таки уточнить, что вы имеете ввиду под "асинхронный режим", я боюсь мы исходим из разных определений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1

@Геннадий Не могу понять как работает ваш код. Точнее почему он работает. Ведь вы ничего не писали в TIMSK то есть нет разрешения прерываний не по переполнению не по совпадению, выбран лишь решим по совпадению (бит WGM21 в TCCR2).

У меня не работает.

 

Изменено пользователем CUBE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1
54 минуты назад, ruhi сказал:

это Атмега???

Да. В название темы указано. Пробовал и на 16А.

 

56 минут назад, ruhi сказал:

Какой номер таймера используете.

Timer/Counter2 8-bit async (TC2)

 

58 минут назад, ruhi сказал:

И, совет, вы бы хоть подписали инструкции в вашем коде

Согласен, у асемблера ужасная читаемость. Сделаю

 

59 минут назад, ruhi сказал:

Я бы попросил все таки уточнить, что вы имеете ввиду под "асинхронный режим", я боюсь мы исходим из разных определений.

Асинхронный режим работы таймера. При которой таймер работает от внешнего кварца, а сама программа выполняется он внутреннего источника тактов. Задается в регистре ASSR битом AS2. При его работе PB6 PB7 перестают быть пинами ввода/вывода и на них вешается кварцевый резонатор, разработчиками как раз предполагается что часовой (32768 кГц). Только при инициализации этого режима таймер отказывается тикать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
56 минут назад, CUBE сказал:

@Геннадий Не могу понять как работает ваш код. Точнее почему он работает. Ведь вы ничего не писали в TIMSK то есть нет разрешения прерываний не по переполнению не по совпадению, выбран лишь решим по совпадению (бит WGM21 в TCCR2).

Это не весь код, а последовательность инициализации таймера для асинхронного режима. Все остальное - прерывания, предделители и т.д. остается на Ваше усмотрение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ruhi    34
4 часа назад, CUBE сказал:

При его работе PB6 PB7 перестают быть пинами ввода/вывода и на них вешается кварцевый резонатор, разработчиками как раз предполагается что часовой (32768 кГц).

Ага, вот этого я не понял. Я думал он от меандра работает на одной ноге. Тогда надо осциллографом смотреть есть ли колебания на кварце.

Потом вот это CS02:0 установлено???

Depending on the mode of operation used, the counter is cleared, incremented, or decremented
at each timer clock (clkT0). clkT0 can be generated from an external or internal
clock source, selected by the clock select bits (CS02:0). When no clock source is
selected (CS02:0 = 0) the timer is stopped.

А то он останется стопед даже если:

4 часа назад, CUBE сказал:

Задается в регистре ASSR битом AS2.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
CUBE    1

Решено. Я 2 раза не всмотрелся что дают мне продавцы. (как позже выяснилось на 32 768 просто не было, и давали какой был с такими же циферками). 

Естественно ничего не работало с кварцами на 32 768 000 т.е. 32,768 МГц. 

Поставил на 32768 Гц (32,768кГц)  все заработало с пол пинка. 

P.s. Всем кто пытался помочь спасибо. Жаль что решение оказалось не достойно широкого обозрения. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: TheCoolKuid
      Здравствуйте.
      Часто прошивал МК, в один из моментов по программе должна была выставляться единица на 5Б пин. После этого убрал эту функцию, но теперь при включении к питанию МК на любой прошивки пин уходит в ноль и МК не отвечает ни на UART, ни на I2C. Пин не уходит в ноль только на чистом кристалле. Даже если в новой прошивке и слома нет про включение этого пина, он в единице. Может ли это означать, что программная память посыпалась?
      Спасибо.
    • Автор: Alex_Chpook
      Здравствуйте. Делаю бегущую строку на AVR и драйверах max7219 по этой статье. Исходный код есть в конце статьи. 
      Хотел бы доработать устройство чтобы можно было передавать сообщение через Bluetooth модуль HC-05 при помощи Bluetooth terminal. Сам знаю как это можно сделать, т.к. все примеры находил только под Arduino. 
      Прошу помочь кто знает как это  можно реализовать 
    • Автор: Alex_Chpook
      Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. 
      При попытке смоделировать в Proteus вылазят ошибки:
      Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал((
      Подскажите пожалуйста кто знает))
      Проект со схемой Proteus и прошивку прикрепляю.
      И просто схема: 
       

      Строка c MAX7219.rar