|
|
  |
tiny2313 & mega8, посоветуйте плз |
|
|
|
Nov 21 2006, 09:57
|

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

|
В решение с флагом TIMER_2 вкраась существенная ошибка, надо: brne prov CBR FLAG,1<<TIMER_2M10: По поводу записи в 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 это "конечная" точка. Я не вычислял какие адреса переписываются, но прошелся по логике програмы. А твой опус будет работать нерпедсказуемо  . Логика работы с EEPROM стандартна и менять ничего не надо. (смотри DATA_SHEET или два поста выше)
Сообщение отредактировал Wild007 - Nov 21 2006, 09:58
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Nov 21 2006, 09:58
|

Частый гость
 
Группа: Свой
Сообщений: 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 ................................................. импульс поперечного нагрева заканчмвается раньше, чем импульс прододольного. А на циклограме которая идет в паспорте с даным дозатором нарисовано что импульс продольного нагрева заканчивается раньше чем импульс поперечного. Это реально???
|
|
|
|
|
Nov 21 2006, 10:25
|

Местный
  
Группа: Свой
Сообщений: 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 анализируешь их и включаешь\выключаешь, что угодно и как тебе угодно. И "поперечный нагрев" начинается раньше\позже "продольного" или наоборот
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Nov 21 2006, 11:08
|

Частый гость
 
Группа: Свой
Сообщений: 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 поправьте пожалуста если что не так, просто у меня уже мозг опух...
|
|
|
|
|
Nov 21 2006, 11:30
|

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

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

Местный
  
Группа: Свой
Сообщений: 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 милисек?
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Nov 21 2006, 16:00
|

Местный
  
Группа: Свой
Сообщений: 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 сек, то общее время и сложится из количества проведенных прерываний и декркментации до нуля.
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|