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

 
 
 
Reply to this topicStart new topic
> Генратор тактов на AT89, посоветуйте
Muxamor
сообщение Dec 28 2005, 11:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Народ надо сделать генератор тактовых ипульсов трех дипозонный

1) 2ms-20ms шаг 10

2) 20ms-200ms шаг 10

3) 20ms-2000ms шаг10

Зочу делать на 89 ! Кто что может посоветовать как грамотно алгоритм ореализовать? а то на ум чет п риходят только задержки!

Если кто делал такую фичу не поделитесь ?


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
АДИКМ
сообщение Dec 28 2005, 11:16
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 2-08-05
Пользователь №: 7 294



Поскольку в AT89 аппаратного ШИМа нет и не будет, то конечно задержками. Таймер есть и не один, частоты у вас невысокие, так что нет проблем.


--------------------
летаю на пепелаце...
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 28 2005, 12:20
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Скинь те ктонить пример запуска таимер счетчика ! А то както раньше мне он не нужен был совсем!


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
shamray
сообщение Dec 28 2005, 13:54
Сообщение #4


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

Группа: Свой
Сообщений: 114
Регистрация: 31-08-05
Из: Украина, Одесса
Пользователь №: 8 105



Можно так

// CPU clock speed
#define F_OSC 16000000 // 16MHz processor
//#define F_OSC 14745000 // 14.745MHz processor
//#define F_OSC 8000000 // 8MHz processor
//#define F_OSC 7372800 // 7.37MHz processor
//#define F_OSC 4000000 // 4MHz processor
//#define F_OSC 3686400 // 3.69MHz processor

//#define CPU_DIV 12
#define CPU_DIV 6 //internal divider

#define F_CPU F_OSC/CPU_DIV

#define F_CPU_1000 F_CPU/1000

void timer0init(u08 ms)
{
IEN0_bit.ET0=1;
TMOD_bit.M00=1;
TMOD_bit.M10=0; //16 bit
TMOD_bit.C_T0=0;
TCON_bit.TR0=1;
TIMER0RELOAD=0xffff-(F_CPU_1000*ms);
}

void timer1init(u08 ms)
{
IEN0_bit.ET1=1;
TMOD_bit.M01=1;
TMOD_bit.M11=0; //16 bit
TMOD_bit.C_T1=0;
TCON_bit.TR1=1;
TIMER1RELOAD=0xffff-(F_CPU_1000*ms);
}

void maain (void)
{
timer0init(2); //time 2 ms
timer0init(10); //time 10 ms
EA=1;
}
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 05:34
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



А в асеблере есть ?

А то я на Си не пишу и его не знаю!


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
almay
сообщение Dec 29 2005, 07:05
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 26-01-05
Из: Московская обл.
Пользователь №: 2 207



А просто на делителе не хочеш пооробовать, если конечно задача стоит получить только заданную сетку частот.
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 07:08
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Ну мне надо еще управление организовать между режимами !

Как на делителе ?



Вот нащел тут такю програмулину

;организация перехода к метке NEXT при переполнении Т/С0

ORG 0BH ;адpec вектора прерывания от Т/С0

CLR TCON.4 ;останов Т/С0

RETI ;выход из подпрограммы обработки прерывания

[/size]

[size="3"] ORG 100H ;начальный адрес программы


MOV TMOD, #01H ;настройка Т/С0

MOV TL0, #LOW(NOT(50000-1)) ;загрузка таймера

MOV TH0, #HIGH(NOT(50000-1))

SETB TCON.4 ;старт Т/С0

SETB IE.1 ;перевод в режим холостого хода

SETB PCON.0

NEXT: ...

зачем перходить в режим холостого хода и что дает SETB PCON.0?


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
АДИКМ
сообщение Dec 29 2005, 07:48
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 2-08-05
Пользователь №: 7 294



Холостой ход нужен для снижения потребления. В данном случае это не актуально.

Просто после выполнения SETB PCON.0 процессор уснет, а после переполенения таймера (прерывания) продоолжит выполнение программы с метки NEXT.


--------------------
летаю на пепелаце...
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 08:54
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



А как сделать чтобы когда он переполнялся выставлялась единица на определенный порт !

Вообщим суть в том чтобы перед включения таимера я на пин подаю единицу а после переполнения я должен подать ноль ! Как так сказать написать прально это все?


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
almay
сообщение Dec 29 2005, 09:38
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 26-01-05
Из: Московская обл.
Пользователь №: 2 207



а) Если делать на делителе то каждую частоту подаеш на цифровой коммутатор.
б) В начальных установках выполняеш SETB Рх.х,затем при обработке прерывания инвертируеш текущее состояние Рх.х. Только учти, что время работы счетчика должно быть равным 1/2 от требуемой.
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 09:56
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Данная программа вроди должн авыполнять задержку 50 мс!

Пишу как там и почемуто не работает !

напишите че куда добавить чаинику!


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 12:32
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



ДА еще компилятор ругаеться на ORG 0BH и на SETB PCON.0


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 29 2005, 12:52
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



С ругательвом компелятора на ORG 0BH разобрался но на SETB PCON.0 всеравно ругаеться.

пиши вот такую прогу и не рабьотает так ка надо в чем дело ?

SCL EQU P1.4



SETB IE.7
Start:
CLR SCL
Call Zapusk
ORG 0BH
CLR TCON.4
RETI
Zapusk:
ORG 100H

MOV TMOD, #01H ;
MOV TL1, #LOW(NOT(10-1)) ;
MOV TH1, #HIGH(NOT(10-1))
SETB TCON.4 ;
SETB IE.1 ;
Jerdedo:
Setb SCL
JMP Start




end






--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
Muxamor
сообщение Dec 30 2005, 04:48
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Народ елки палки посоветйте че не так то ?


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
Roma_te
сообщение Dec 30 2005, 07:37
Сообщение #15


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

Группа: Свой
Сообщений: 123
Регистрация: 13-12-05
Из: Украина, Тернополь
Пользователь №: 12 161



Цитата(Muxamor @ Dec 29 2005, 16:52) *
С ругательвом компелятора на ORG 0BH разобрался но на SETB PCON.0 всеравно ругаеться.

Регистр PCON не предусматривает побитовой адресации, поетому с ним надо работать через маску. Попробуй MOV PCON, #80H
Go to the top of the page
 
+Quote Post

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

 


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


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