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

 
 
 
Reply to this topicStart new topic
> регистр 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
Vetal-Soft
сообщение Apr 15 2010, 08:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074



1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88
2.
CODE
unsigned int blabla;
TCNT3H = blabla << 8;
TCNT3L = blabla;
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 15 2010, 09:16
Сообщение #3


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

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



Цитата(Vetal-Soft @ Apr 15 2010, 14:19) *
1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88
2.
CODE
unsigned int blabla;
TCNT3H = blabla << 8;
TCNT3L = blabla;


TCNT3H и TCNT3L я от туда и считываю но получаю 8битное число.. хотя таймер 16битный...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 15 2010, 10:00
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5


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

Группа: Участник
Сообщений: 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
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7


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

Группа: Участник
Сообщений: 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
Сообщение #8


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

Группа: Участник
Сообщений: 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
mempfis_
сообщение Apr 16 2010, 05:26
Сообщение #9


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

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



Цитата
В ДШ вообще не указан адрес этого регистра

Адрес вам указали:
Код
1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88


Цитата
и компилятор кодвижн вообще не хочет компилировать.. мотивируя тем что я вообще ему написал какуюто лажу TCNT3..

А хидер правильный подключён?
Напишите свою функцию и читайте через указатель:
Код
unsigned int tcntL=0, tcntH=0;
tcntL =  (unsigned int) *( (unsigned char*) 0x88);
tcntH = (unsigned int) *( (unsigned char*) 0x89);
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 18 2010, 10:01
Сообщение #10


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

Группа: Свой
Сообщений: 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
defunct
сообщение Apr 18 2010, 23:19
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Станис @ Apr 15 2010, 08:56) *
Где шайтан зарыт???

В IAR и в WinAVR никаких проблем с TCNT3 нет.
Просто пишете x = TCNT3; без всякого шайтанства.

Наверно с CV работаете? Вот в нем шайтан и зарыт.
Может пора снести этот шайтан-CV, и начать пользоваться нормальными инструментами?
Go to the top of the page
 
+Quote Post
Станис
сообщение Apr 19 2010, 02:57
Сообщение #12


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

Группа: Участник
Сообщений: 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
demiurg_spb
сообщение Apr 19 2010, 06:57
Сообщение #13


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

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



Цитата(Станис @ Apr 19 2010, 07:12) *
ну да ошибся.. Я думаю лучше будет (*(unsigned int *) .. short тут никчему
Это абсолютно безразлично для Вашего конкретного случая.

Цитата(Станис @ Apr 19 2010, 07:12) *
Когда начал осваивать МК первое что попалось на глаза CVAVR, в принципе пока меня устраивает ну и изучаю я мк всего еще 3 месяца..
Побаловались и хватит. Переходите на что-нибудь серьёзное (gcc, iar). И чем раньше, тем лучше.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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