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

 
 
17 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> tiny2313 & mega8, посоветуйте плз
Wild007
сообщение Dec 7 2006, 11:04
Сообщение #136


Местный
***

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



Цитата(Terapefft @ Dec 7 2006, 09:49) *
раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?

Простейший энкодер -- внутри мыши такое колёсико с дырочками + две детальки на плате smile.gif . А если серьёзно, то задай Google вопрос и найдешь кучу информации на руском языке. Множество русских фирм продаёт энкодеры любых видов для разных целей и у них есть техдокументация. Самому сделать -- тоже просто берём диск сверлим по контуру отверстия или нарезаем полосочки, ставим оптопару (их тоже много продают готовых) устанавливаем на вал, вывод фотодатчка подключаем к мп и имеем обратную связь. Програмно считаем импульсы и конкретно тормозим в нужный момент.

Ниже естьобсуждение подключения энкодера. Удачи! smile.gif


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


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

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



а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 7 2006, 11:49
Сообщение #138


Местный
***

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



Цитата(Terapefft @ Dec 7 2006, 10:25) *
а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл

Какой датчик поставить это тебе решать. Главное чтобы он выдавал импульсы, ну скажем 5В. Количество импульсов зависит от дотчика. Главное что при вращении вала шли импульсы, а когда вал стоит -- нет. Ведь ты включаешь двигатель, кажется "доза", на какое-то время. За это время двигатель делает какое-то количество оборотов, скажем N. Пусть датчик на валу за один оборот формирует M импульсов (зависит от количества "дырочек" smile.gif в диске). Теперь мы можем посчитать на "сколько" импульсов нам надо включать двигатель для получения "правильной" дозы (N*M). Поэтому мы можем просто включать двигатель и теперь считать импульсы от датчика (не на время). По приходе нужного количества импульсов (N*M), выключаем двигатель и включаем тормоз. Эти мы исключаем всякие внешние факторы на количество оборотов -- количество "дозы". Ведь от времени включения двигателя зависит "доза"? Или я не прав?


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


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

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



да верно, доза зависит от времени включения насоса, я вот просто не пойму как програмно реализовать подсчет импульсов
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 7 2006, 12:08
Сообщение #140


Местный
***

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



Цитата(Terapefft @ Dec 7 2006, 10:54) *
да верно, доза зависит от времени включения насоса, я вот просто не пойму как програмно реализовать подсчет импульсов

Выход датчика заводишь на любой вход INT0 или INT1, организуешь пп обработки прерывания, настраиваешь прерывание на фронты или уровни срабатывания, и, в пп обработки прерывания, делаешь INC Rd. Конечно всё зависит от количества импульсов, но это уже програмные штучки smile.gif .


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


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

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



я тут подумал и решил сделать так: взять диск и просверлить в нем дырки, и поставить его на вал двигателя, импульсы фиксировать индуктивным датчиком, т.е. если он попадает на "дырку" на выходе "0". Подключать его буду к PD3. Посмотрите пожалуста программную реализацию
в начале я добавляю регистр
.def cntdat=r19
и переменную для порта D
.equ dat=3 ; вход индуктивного датчика

В начале главного цикла

ldi Ttemp,0b00001000 ; прерывание по спадающему фронту
out mcucr,Ttemp
ldi Ttemp,0b10000000 ; разрешение прерывания INT1
out gicr,Ttemp

sbi ddrd,3 ; установить PD3 как выход

вот у меня возникли вопросы :

что записать в PORTD (высокий уровень или низкий) ?
и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?
и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"? smile.gif
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 7 2006, 17:21
Сообщение #142


Местный
***

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



Цитата(Terapefft @ Dec 7 2006, 15:58) *
sbi ddrd,3 ; установить PD3 как выход

Почему PD3 выход он же ВХОД ПРЕРЫВАНИЯ
Цитата
вот у меня возникли вопросы :
что записать в PORTD (высокий уровень или низкий) ?

Если пин порта вход, то запись в регистр PORTD 1 подключает внутренний пулап резистор
Цитата
и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?

Конечно. Но в твоём случае можно просверлить и одно отверстие. Т.к. один регистр может "считать" импульсы только до 255. Для большего количества придется испозовать всё боьше и больше регстров smile.gif . Эксперементируй и считай, считай, считай smile.gif
Цитата
и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"? smile.gif

Можно померять сколко наберётся за один оборот. Но для большей точности мерять сколько оборотов надо на один литр.
А про проблемы на которые нарвешся прочиай по той ссылке что я давал выше. Пересказывать не буду.


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


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

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



я вот сделал п/п обработки прерывания
INT1:
in rin1,sreg ; запомнить регистр состояния
push rin1


inc cntdat
cpi cntdat,$8
brne NNN

ldi radr,doza_0
rcall decod


NNN:
pop rin1
out sreg,rin1

reti

я планирую сделать 8 дырок. Как вы думаете нормально ли будет работать эта п/п? вроде на мой взляд должна. У меня почему то АВРстудио ругается при компиляции, говорит:
C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label
почему так?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 7 2006, 17:53
Сообщение #144


Местный
***

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



Ессесно
Цитата
C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label

Низзя использовать "зарегестрированные" слова. Измени INT1 на что-то вроде: CNT_INT1. smile.gif

Сообщение отредактировал Wild007 - Dec 7 2006, 17:54


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 8 2006, 14:41
Сообщение #145


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

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



подключил я сегодня индуктивный датчик к контроллеру к ноге PD3, прошил контролер поставил на плату. так у меня теперь когда я замыкаю датчик плата индикации гаснет вобще sad.gif . почему это может быть?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 8 2006, 15:03
Сообщение #146


Местный
***

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



Цитата(Terapefft @ Dec 8 2006, 13:41) *
подключил я сегодня индуктивный датчик к контроллеру к ноге PD3,

А порт правильно настроил?
Код
inc cntdat
cpi cntdat,$8
brne NNN

Почему сравнивается с 8?
Код
ldi radr,doza_0
rcall decod

А кто обнулять CNTDAT будет?


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


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

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



вот я в начале проги где инициализация таймеров идет поставил
ldi Ttemp,0b10000000 ; разрешение прерывания INT1
out gicr,Ttemp

потом в начале рабочего цикла:

ldi Ttemp,0b00000100
out mcucr,Ttemp
cbi ddrd,3
sbi portd,3
а п/п обработки прерывания:

CNT_INT1:
in rin,sreg
push rin

inc cntdat
cpi cntdat,$01
brne NNN

ldi radr,doza_0
rcall decod
sbr reg_flgs,0b00000001 ;
clr cntdat
NNN:

pop rin
out sreg,rin

reti
сравнивал с "8" это типа симуляция одного поворота smile.gif я щас просто поставил "1" чтоб посмотреть будет срабатывать или нет.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 8 2006, 15:36
Сообщение #148


Местный
***

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



Во первых :
Код
ldi Ttemp,0b00000100
out mcucr,Ttemp

должно стоять в инициализации МК, а
Код
ldi Ttemp,0b10000000; разрешение прерывания INT1
out gicr,Ttemp

после включения двигателя.
И (в обработке прерывания), когда выключил двигатель, запрещать прерывание INT1.


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


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

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



сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 8 2006, 16:14
Сообщение #150


Местный
***

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



Цитата(Terapefft @ Dec 8 2006, 14:50) *
сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?

Поиграйся с
Код
cpi cntdat,$01

А может опять где-то CLI стоит?


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post

17 страниц V  « < 8 9 10 11 12 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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