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

 
 
17 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> tiny2313 & mega8, посоветуйте плз
Wild007
сообщение Nov 21 2006, 09:57
Сообщение #61


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



В решение с флагом TIMER_2 вкраась существенная ошибка, надо:
brne prov
CBR FLAG,1<<TIMER_2
M10:
По поводу записи в EEPROM:
ewrite:
sbic eecr,eewe ;
rjmp ewrite ;

Это ожидание окончания предыдущего цикла записи.
out eearh,zh ;
out eearl,zl ;

Это адрес в EEPROM, куда пишем данные.
subi zl,$A0 ;мне
ld rin,z ;вот эта
subi zl,$5F ;часть не понятна

Это вычисление адреса и загрузка переменной для записи в EEPROM и адрес для следующего цикла записи.
out eedr,rin ;
sbi eecr,eemwe ;
sbi eecr,eewe ;

Это запись переменной RIN в EEPROM.
cpi zl,24 ; и вот здесь причем тут 24?
brne ewrite ;

24 это "конечная" точка. Я не вычислял какие адреса переписываются, но прошелся по логике програмы. А твой опус будет работать нерпедсказуемо smile.gif . Логика работы с EEPROM стандартна и менять ничего не надо. (смотри DATA_SHEET или два поста выше)

Сообщение отредактировал Wild007 - Nov 21 2006, 09:58


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 09:58
Сообщение #62


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



и еще один вопросик...судя вот по этому:
...............................
sbr svet,0b00010000 ; светить Т1
ldi rin,0 ; включить поперечный нагрев
rcall nagr ;
rcall delay ; выдерживаем время для заварки Т1

ldi radr,doza_1 ; дозатор на всасывание
rcall decod ;
cbr reg_flgs,0b00000001 ; флаг на начало всасывания

SBRS Flag,timer_2
RJMP M10
ldi rin,TNASOS ;
prov:

dec rin
cpi rin,0
brne prov
M10:

cbr svet,0b00010000 ; погасить Т1
sbr svet,0b00100000 ; светить Т2
ldi rin,1 ; включить продольный нагрев
rcall nagr ;
rcall delay ; выдерживаем время для заварки Т2
.................................................
импульс поперечного нагрева заканчмвается раньше, чем импульс прододольного. А на циклограме которая идет в паспорте с даным дозатором нарисовано что импульс продольного нагрева заканчивается раньше чем импульс поперечного. Это реально???
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 10:25
Сообщение #63


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Terapefft @ Nov 21 2006, 08:58) *
и еще один вопросик...судя вот по этому:
...............................
sbr svet,0b00010000 ; светить Т1
ldi rin,0 ; включить поперечный нагрев
rcall nagr ;
rcall delay ; выдерживаем время для заварки Т1

ldi radr,doza_1 ; дозатор на всасывание
rcall decod ;
cbr reg_flgs,0b00000001 ; флаг на начало всасывания

SBRS Flag,timer_2
RJMP M10
ldi rin,TNASOS ;
prov:

dec rin
cpi rin,0
brne prov
M10:

cbr svet,0b00010000 ; погасить Т1
sbr svet,0b00100000 ; светить Т2
ldi rin,1 ; включить продольный нагрев
rcall nagr ;
rcall delay ; выдерживаем время для заварки Т2
.................................................
импульс поперечного нагрева заканчмвается раньше, чем импульс прододольного. А на циклограме которая идет в паспорте с даным дозатором нарисовано что импульс продольного нагрева заканчивается раньше чем импульс поперечного. Это реально???

Сделать программно "реально" можно что угодно. Я такие проблемы решаю по другому. Запускаешь какой нить таймер на определенный "тик" (в милисекундах или тому подобное), в прерываниях изменяешь какие нить переменные, устанавливаешь флаги, а в MAIN_LOOP анализируешь их и включаешь\выключаешь, что угодно и как тебе угодно. И "поперечный нагрев" начинается раньше\позже "продольного" или наоборот smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 11:08
Сообщение #64


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



то есть грубо говоря допустим есть у меня таймер2 с точностью о,1с, в рабочем цикле я просто включаю насос и выставляю флаг которым запускается счетчик, а ПП обработки счетчика по истечению некоторого времени (допустим TASOS) насос отключается. так?
и если сделать запись таким образом:
ldi rin,TNASOS
ewrite:
sbic eecr,eewe
rjmp ewrite
out eear,..... вот сюда что надо написать если у меня переменая TASOS в 77-й ячейке ОЗУ
out eedr,rin
sbi eecr,eempe
sbi eecr,eepe
ret

а чтение вот так:
ldi z, TNASOS

eread:

sbic eecr,eewe
rjmp eread
out eear,z
sbi eecr,eere
in rin,eedr

поправьте пожалуста если что не так, просто у меня уже мозг опух...smile.gif
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 11:30
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



ldi rin,TNASOS
ewrite:
sbic eecr,eewe
rjmp ewrite
АДРЕС СЕСТРА, АДРЕС!!! smile.gif smile.gif smile.gif
out eear,..... вот сюда что надо написать если у меня переменая TASOS в 77-й ячейке ОЗУ
out eedr,rin
sbi eecr,eempe
sbi eecr,eepe
ret
Включил чево-то -- выставил флаг -- в прерывании декрементируешь время (переменную равную (необходимое_время/"тик")) -- по нулю выключаешь чево-то, снимаешь флаг. Если надо включать\выключать много чиво -- надо много флагов и много переменных и все они включаются\выключаются так как нам надо не зависят от всяких DELAY. smile.gif А MAIN_LOOP крутится без всяких задержек и тормозов, можно добалять разные фичи без головной боли что не успеем. Прерывания неизбежны и включение\выключение устройств происходит по правильному алгоритму smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 13:24
Сообщение #66


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



вот я сделал отключение насоса в счетчике2:
timer2:
push rin
push rin1
ldi rin1,$a
ldi rin,$3c ; $3c=60
out tcnt2,rin

tm:
dec rin1
brne tm


pop rin ;
pop rin1

ldi radr,doza_0 ; отключаем насос
rcall decod
cbr reg_flgs,0b00000001
reti

в главном цикле просто:
...........................
ldi radr,doza_1 ; включаем насос
rcall decod
cbr reg_flgs,0b00000000
.................................
Но теперь происходит следующее: проходит 5 нормальных рабочих циклов и потом насос не включается не выключается. А остальное нормально работает. Причем длительность поддержания насоса во включеном состоянии не зависит от того какое значение я вношу в rin1.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 14:30
Сообщение #67


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Terapefft @ Nov 21 2006, 12:24) *
вот я сделал отключение насоса в счетчике2:
timer2:
push rin
push rin1
ldi rin1,$a
ldi rin,$3c ; $3c=60
out tcnt2,rin

tm:
dec rin1
brne tm


pop rin ;
pop rin1

ldi radr,doza_0 ; отключаем насос
rcall decod
cbr reg_flgs,0b00000001
reti

в главном цикле просто:
...........................
ldi radr,doza_1 ; включаем насос
rcall decod
cbr reg_flgs,0b00000000
.................................
Но теперь происходит следующее: проходит 5 нормальных рабочих циклов и потом насос не включается не выключается. А остальное нормально работает. Причем длительность поддержания насоса во включеном состоянии не зависит от того какое значение я вношу в rin1.

О какой "длителности" зависимой от RIN1 может идти речь, если период прерывания 0,1 сек, а цикл
tm:
dec rin1
brne tm
даже при RIN1 = &FF (для 2МГЦ) будет 0,1 милисек? biggrin.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 15:29
Сообщение #68


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



ну а как же тогда сделать???
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 15:34
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Смотри два поста назад:

Цитата(Wild007 @ Nov 21 2006, 10:30) *
Включил чево-то -- выставил флаг -- в прерывании декрементируешь время (переменную равную (необходимое_время/"тик")) -- по нулю выключаешь чево-то, снимаешь флаг. Если надо включать\выключать много чиво -- надо много флагов и много переменных и все они включаются\выключаются так как нам надо не зависят от всяких DELAY. smile.gif А MAIN_LOOP крутится без всяких задержек и тормозов, можно добалять разные фичи без головной боли что не успеем. Прерывания неизбежны и включение\выключение устройств происходит по правильному алгоритму smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 15:45
Сообщение #70


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



ну вот мне надо выдержать 1 секунду, я заношу в rin1 число $a
ldi rin1,$a
и дикрементирую его, по достижении нуля выключаю насос
dec rin1
brne tm

ldi radr,doza_0 ; отключаем насос
rcall decod

вроде все так как Вы говорили....
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 16:00
Сообщение #71


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Terapefft @ Nov 21 2006, 14:45) *
ну вот мне надо выдержать 1 секунду, я заношу в rin1 число $a
ldi rin1,$a
и дикрементирую его, по достижении нуля выключаю насос
dec rin1
brne tm

ldi radr,doza_0 ; отключаем насос
rcall decod

вроде все так как Вы говорили....

Я говорил -- в прерывании декрементируешь время , а не создаешь цикл из декркментации. Декрементируется ОДИН РАЗ в каждом прерывании, а так как прерывание возникает КАЖДЫЕ 0,1 сек, то общее время и сложится из количества проведенных прерываний и декркментации до нуля.


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 16:32
Сообщение #72


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



как нить вот так:
timer2:
push rin
push rin1
ldi rin1,$a;

ldi rin,$3c ; $3c=60
out tcnt2,rin ;

dec rin1
cpi rin1,0
brne tm

ldi radr,doza_0 ; отключаем насос
rcall decod
tm:


pop rin ;
pop rin1
reti
Go to the top of the page
 
+Quote Post
Wild007
сообщение Nov 21 2006, 17:04
Сообщение #73


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Нет, что-то такое:
MAIN_LOOP:
.......
SBRC FLAG,MOT1
RJMP NNN
LDI мотор включить
SBR FLAG,1<<MOT1 флаг включения мотора
LDI T_MOT1, &XX
NNN:

TIMER2:
.....
SBRS FLAG,MOT1
RJMP MMM
DEC T_OT1
BRNE MMM
CBR FLAG,1<<MOT1
LDI мотор выключить
MMM:
.....


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 21 2006, 17:50
Сообщение #74


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



сейчас сделал так как Вы сказали, но теперь он вобще перестал включатся. вот исходник, все вроде должно работать....я уже не знаю почему так
Прикрепленные файлы
Прикрепленный файл  avtomat.txt ( 71.06 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Nov 22 2006, 09:19
Сообщение #75


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

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



вернее насос только включается но не выключается потом, а если в главном цикле вместо SBRC FLAG,MOT1 поставить SBRS FLAG,MOT1, то он и включается и выключается, но время поддержания во включеном состоянии никак не изменяется. Насос просто выключается когда проходит весь цикл
Go to the top of the page
 
+Quote Post

17 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 


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


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