реклама на сайте
подробности

 
 
> регистр TCNT3 в атмеге162, где он????
Станис
сообщение Apr 15 2010, 05:41
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



начнем с того что так получилось что регистра TCNT3 нет в атмеге162??
если все делать таким вариантом:

unsigned int TCNT3;
TCNT3 = (TCNT3H<<8) + TCNT3L;
то почемуто получается что Т3 вообще 8битник.. Где шайтан зарыт???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Apr 15 2010, 10:00
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Для начала нужно прочитать раздел "Accessing 16-bit Registers" из даташита, в разделе посвященном описанию таймеров "16-bit Timer/Counter (Timer/Counter 1 and Timer/Counter3 )".
Там написано в каком порядке нужно читать/писать эти регистры.
Приличный компилятор делает это сам, например для IAR просто описан 16-разрядный регистр TCNT3 и с ним можно работать именно как с 16-битной переменной не задумываясь о порядке доступа к младшей/старшей части.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 15 2010, 11:33
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



Цитата(SSerge @ Apr 15 2010, 16:15) *
Для начала нужно прочитать раздел "Accessing 16-bit Registers" из даташита, в разделе посвященном описанию таймеров "16-bit Timer/Counter (Timer/Counter 1 and Timer/Counter3 )".
Там написано в каком порядке нужно читать/писать эти регистры.
Приличный компилятор делает это сам, например для IAR просто описан 16-разрядный регистр TCNT3 и с ним можно работать именно как с 16-битной переменной не задумываясь о порядке доступа к младшей/старшей части.

при всем том что написано в разделе "Accessing 16-bit Registers" С регистром TCNT1 можно работать как обычной 16битной переменной.. а вот регистра TCNT3 вообще нет.. даже в ДШ. кто найдет напишите адрес biggrin.gif

Ну даладно вопрос решен по другому. Был использован регистр TCNT1 на множество процессов.. только вот код вышел раз в 20 больше... biggrin.gif
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Apr 15 2010, 12:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Станис @ Apr 15 2010, 14:48) *
при всем том что написано в разделе "Accessing 16-bit Registers" С регистром TCNT1 можно работать как обычной 16битной переменной.. а вот регистра TCNT3 вообще нет.. даже в ДШ. кто найдет напишите адрес biggrin.gif

Ну даладно вопрос решен по другому. Был использован регистр TCNT1 на множество процессов.. только вот код вышел раз в 20 больше... biggrin.gif


Не понятно что у вас не получается....
В документации всё предельно ясно написано с примерами кода:

Код
Assembly Code Examples(1)
...
; Set TCNTn to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNTnH,r17
out TCNTnL,r16
; Read TCNTn into r17:r16
in r16,TCNTnL
in r17,TCNTnH
...
C Code Examples(1)
unsigned int i;
...
/* Set TCNTn to 0x01FF */
TCNTn = 0x1FF;
/* Read TCNTn into i */
i = TCNTn;


Если пишете на С то вообще не понятно к чему эта возня с адресами, разделениями на H/L и т.п.
TCNT3 = 0x1234; //запись
или
unsigned int tcnt3_val = TCNT3; //чтение

На ассемблере просто соблюдайте порядок:
при записи TCNT3H/TCNT3L
при чтении TCNT3L/TCNT3H
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 16 2010, 02:57
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



Цитата(mempfis_ @ Apr 15 2010, 18:52) *
Не понятно что у вас не получается....
В документации всё предельно ясно написано с примерами кода:

Код
Assembly Code Examples(1)
...
; Set TCNTn to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNTnH,r17
out TCNTnL,r16
; Read TCNTn into r17:r16
in r16,TCNTnL
in r17,TCNTnH
...
C Code Examples(1)
unsigned int i;
...
/* Set TCNTn to 0x01FF */
TCNTn = 0x1FF;
/* Read TCNTn into i */
i = TCNTn;


Если пишете на С то вообще не понятно к чему эта возня с адресами, разделениями на H/L и т.п.
TCNT3 = 0x1234; //запись
или
unsigned int tcnt3_val = TCNT3; //чтение

На ассемблере просто соблюдайте порядок:
при записи TCNT3H/TCNT3L
при чтении TCNT3L/TCNT3H



В ДШ вообще не указан адрес этого регистра и компилятор кодвижн вообще не хочет компилировать.. мотивируя тем что я вообще ему написал какуюто лажу TCNT3..
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 16 2010, 05:18
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



Вообщем надо было лишь в mega162.h добавить строку:
#define TCNT3 (*(unsigned char *) 0x88) // 16 bit access

адрес по TCNT3L
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 18 2010, 10:01
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Ошибочка у Вас тут:
Цитата(Станис @ Apr 16 2010, 09:33) *
#define TCNT3 (*(unsigned char *) 0x88) // 16 bit access

Вы наверное хотите этого...
Код
#define TCNT3 (*(unsigned short*) 0x88)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 19 2010, 02:57
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565



Цитата(demiurg_spb @ Apr 18 2010, 16:16) *
Ошибочка у Вас тут:

Вы наверное хотите этого...
Код
#define TCNT3 (*(unsigned short*) 0x88)


ну да ошибся.. Я думаю лучше будет (*(unsigned int *) .. short тут никчему



Цитата(defunct @ Apr 19 2010, 05:34) *
В IAR и в WinAVR никаких проблем с TCNT3 нет.
Просто пишете x = TCNT3; без всякого шайтанства.

Наверно с CV работаете? Вот в нем шайтан и зарыт.
Может пора снести этот шайтан-CV, и начать пользоваться нормальными инструментами?


Когда начал осваивать МК первое что попалось на глаза CVAVR, в принципе пока меня устраивает ну и изучаю я мк всего еще 3 месяца..

Сообщение отредактировал Станис - Apr 19 2010, 03:31
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016