Полная версия этой страницы:
tiny2313 & mega8
Terapefft
Nov 28 2006, 13:01
сори че та я ступил

)) щас прошил контролер вставил на плату, он почему сразу срабатаывает (до нажатия кнопки "пуск"), как сделать чтобы он отчет начинал после нажатия "пуск"?
Wild007
Nov 29 2006, 09:33
Цитата(Terapefft @ Nov 28 2006, 12:01)

сори че та я ступил

)) щас прошил контролер вставил на плату, он почему сразу срабатаывает (до нажатия кнопки "пуск"), как сделать чтобы он отчет начинал после нажатия "пуск"?
Так как таймер запускается сразу после инициализации и "тикает" постоянно, надо его проинициализировать, а запускать после "нажатия" "пуск".
Terapefft
Nov 29 2006, 10:01
а как его запускать подскажите пожалуста?
Wild007
Nov 29 2006, 10:53
Перенести строки:
clr rin ; CK=2MHz
out tccr1a,rin
ldi rin,0b00000101 ; /1024
out tccr1b,rin
В любом DS есть:
Table 47. Clock Select Bit Description
CS12 CS11 CS10 Description
0 0 0 No clock source
(Timer/Counter stopped).0 0 1 clkI/O/1 (No prescaling)
0 1 0 clkI/O/8 (From prescaler)
0 1 1 clkI/O/64 (From prescaler)
1 0 0 clkI/O/256 (From prescaler)
1 0 1 clkI/O/1024 (From prescaler)
1 1 0 External clock source on T1 pin. Clock on falling edge.
1 1 1 External clock source on T1 pin. Clock on rising edge.
Terapefft
Nov 29 2006, 13:04
вот теперь он включается так как мне надо, тока после того как насос включается, плата индикации гаснет и все, почему такое может быть?
Wild007
Nov 29 2006, 13:59
Цитата(Terapefft @ Nov 29 2006, 12:04)

вот теперь он включается так как мне надо, тока после того как насос включается, плата индикации гаснет и все, почему такое может быть?
Может опять неправилная работа со стеком в прерывании? Туда надо прятать не только используемые регистры, но и SREG от греха подальше пока не научишься определять стоит его прятать или нет

.
Terapefft
Nov 29 2006, 15:49
теперь срабатывает как надо

) но тока первый цикл, дальше происходит хрень какаято, цикл как будто сдвигается, видимо это потому что счетчик постояно считает. Потому что уже во втором цикле он срабатывает прям с самого начала цикла, потом вобще тока включится и сразу выключится. А можно как нить после того как первое прерывание произошло, отключить счетчик в п/п обработки от таймера, чтобы такого не происходило??? или это не поможет???
Wild007
Nov 29 2006, 16:36
Конечно можно смотри:
Table 47. Clock Select Bit Description
CS12 CS11 CS10 Description
0 0 0 No clock source
(Timer/Counter stopped).Также надо обнулять TCNTxx, а то счет продолжается дальше после совпадения, а тебе надо чтоб с нуля

.
Terapefft
Nov 29 2006, 17:11
заработала как надо

)))) спасиба бальшое. завтра буду на оборудовании испытывать
Wild007
Nov 29 2006, 17:14
Цитата(Terapefft @ Nov 29 2006, 16:11)

заработала как надо

)))) спасиба бальшое. завтра буду на оборудовании испытывать

Я рад что хоть чем-то помог

.
Terapefft
Nov 30 2006, 16:58
подскажите пожалуста а можно как нить hex перегнать чтобы можна было читать??? надо посмотреть кое что в старой проге, ато на нее исходника нету
Цитата(Terapefft @ Nov 30 2006, 16:58)

подскажите пожалуста а можно как нить hex перегнать чтобы можна было читать??? надо посмотреть кое что в старой проге, ато на нее исходника нету
просто загрузи его в AVR-Studio
Alex_Pol
Nov 30 2006, 17:09
Цитата(Terapefft @ Nov 30 2006, 15:58)

подскажите пожалуста а можно как нить hex перегнать чтобы можна было читать??? надо посмотреть кое что в старой проге, ато на нее исходника нету
Если под "перегнать" понимается дизассемблировать, открой свой *.hex AVRСтудией. На её вопрос ответь "yes", студия кинется его отлаживать и выдаст исходник. Вид у него слегка диковатый, но разобраться просто. Тем более, отладчик под рукой.
Terapefft
Nov 30 2006, 17:10
он там не открывается, сначала окно выплывает типа сохранить как aps файл, а потом выдает
Error loading object file D:\мое\автомат\AVT8_4.HEX
у меня AVR studio 4.12
Wild007
Nov 30 2006, 17:21
Цитата(Terapefft @ Nov 30 2006, 16:10)

он там не открывается, сначала окно выплывает типа сохранить как aps файл, а потом выдает
Error loading object file D:\мое\автомат\AVT8_4.HEX
у меня AVR studio 4.12
Studio не понимает русского в названиях файлов
Alex_Pol
Nov 30 2006, 17:22
Убери русские буквы из путей!!!
Цитата(Terapefft @ Nov 30 2006, 17:10)

он там не открывается, сначала окно выплывает типа сохранить как aps файл, а потом выдает
Error loading object file D:\мое\автомат\AVT8_4.HEX
у меня AVR studio 4.12
только что проверил, загружаеться без проблем. Думаю проблема в том, что создовался файл в старой студии хотя по идеи формат не должен был меняться.
Alex_Pol
Nov 30 2006, 17:33
2 терапевт: бросай прошивку, дизассемблирую.
Terapefft
Dec 1 2006, 08:43
спасибо большое, я изменил директорию, написал английскими буквами и все нормально диз ассемблировалось. теперь буду развлекатся
Цитата(Alex_Pol @ Nov 30 2006, 17:22)

Убери русские буквы из путей!!!
Век живи, век учись, не знал об этом. Со времен дос привычка, называть файлы и папки по-английски
Alex_Pol
Dec 1 2006, 12:05
Цитата(Семён @ Dec 1 2006, 09:29)

Век живи, век учись, не знал об этом. Со времен дос привычка, называть файлы и папки по-английски

В своё время ох и нарвался я на этот прикол. На IARовском изделии для MSP. Дома всё работает, на работе матом ругается. В путях одна русская буква проскочила. "С". Сразу и не видно.

Пол - дня кувыркался.
Terapefft
Dec 4 2006, 11:32
поставил я котролер на автомат...насос включается и выключается все как надо

теперь возникла следующая проблема: разброс дозы слишком большой (около 60 гр на литр). Я подключал насос через частотник, он вроде не должен давать такую погрешность. С платы управления сигнал подавал на замыкающее реле, а потом на частотник. Сегодня попробовал просто сигнал с платы подавать на частотник через делитель напряжения (у частотника на входе до 10 В, а выход с платы 24В). Так теперь насос включается и не выключается, на него импулься почему то постояно поступают. Подскажите пожалуста может можна как нить еще погрешность уменьшить или че нить с делителем сделать???
Terapefft
Dec 4 2006, 17:18
и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
Wild007
Dec 5 2006, 09:43
Цитата(Terapefft @ Dec 4 2006, 16:18)

и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
tiny2313 может работать с встроенным генератором с внутренней или внешней времязадающей RC-цепочкой, с внешним керамическим либо кварцевым резонатором или от сигнала внешней снхронизации. Выбор режима работы осуществляется програмными фузами CKSEL0...3. (см.
DS).
Выставляешь фузы согласно твоего кварца и имеешь стабильное тактирование таймеров, почти, не зависящее от темтературы окружающей среды. Возможно разброс "дозы" и происходил из-за "плаванья" частоты внутреннего RC генератора.
И зачем мудрить с 10Мгц если есть кварцы на 2Мгц? Кварц всегда запускается на первой гармонике и если ставишь 10Мгц, то и имеешь 10Мгц
Alex_Pol
Dec 5 2006, 12:10
Цитата(Terapefft @ Dec 4 2006, 16:18)

и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
Именно из 10мГц получить 2мГц никак невозможно, но если даташит не врёт, в тиньке 2313 имеется штука с многообещающем названием "Clock Prescale Register – CLKPR". Не пользовался ни разу, но должно работать.
singlskv
Dec 5 2006, 12:27
Цитата(Alex_Pol @ Dec 5 2006, 12:10)

Цитата(Terapefft @ Dec 4 2006, 16:18)

и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
Именно из 10мГц получить 2мГц никак невозможно, но если даташит не врёт, в тиньке 2313 имеется штука с многообещающем названием "Clock Prescale Register – CLKPR". Не пользовался ни разу, но должно работать.
даташит не врёт!
Пользовался CLKPR, очень удобно.
Так что бери кварц на 8 МГц и дели на 4, и будет Тебе счастье
Wild007
Dec 5 2006, 12:49
Цитата
Пользовался CLKPR, очень удобно.
Так что бери кварц на 8 МГц и дели на 4, и будет Тебе счастье
Нов таком случае нельзя забывать про фузу СKDIV8, если она установлена, то CLKPR=0011 (см. DS)
Alex_Pol
Dec 5 2006, 13:14
Цитата(Wild007 @ Dec 5 2006, 11:49)

Цитата
Пользовался CLKPR, очень удобно.
Так что бери кварц на 8 МГц и дели на 4, и будет Тебе счастье
Нов таком случае нельзя забывать про фузу СKDIV8, если она установлена, то CLKPR=0011 (см. DS)
Кстати, интересный вопрос, если я вручную пропишу в CLKPS3..0 все нули, контроллер забъёт на фузу, или нет? А если 0111 (деление на 128)? Дочитал даташит до конца. Забъёт.
Note that any value can be written to the CLKPS bits regardless of the CKDIV8 Fuse setting.
Terapefft
Dec 6 2006, 16:21
провожу я испытания уже дня два, поставил на плату кварц, частотник вроде тоже настроил как надо, доза все равно плавает

. (около 40 гр на литр). Может быть можно еще как нибудь уменьшить погрешность? или с асинхроным двигателем это нереально???
Wild007
Dec 6 2006, 16:41
Цитата(Terapefft @ Dec 6 2006, 15:21)

провожу я испытания уже дня два, поставил на плату кварц, частотник вроде тоже настроил как надо, доза все равно плавает

. (около 40 гр на литр). Может быть можно еще как нибудь уменьшить погрешность? или с асинхроным двигателем это нереально???
Посиавить тормозную муфту! И управлять с мп по выключению двигателя.
Alex_Pol
Dec 6 2006, 22:47
Цитата(Terapefft @ Dec 6 2006, 15:21)

или с асинхроным двигателем это нереально???
А до смены контроллера зто изделие как работало?
Terapefft
Dec 7 2006, 08:34
дело в том что с насосом эксперимент впервые.
2 Wild007 а что за тормозная муфта? раскажите пожалуста поподробнее
Wild007
Dec 7 2006, 10:07
Чертежей не нашел, нарисовал по памяти. В одном проекте надо было тормозить вал с двигателем 1кВт, искать что-то не было времени, сделали сами тормоз -- работает уже 6 лет.
Но если у вас доза зависит от количества оборотов двигателя -- правильней было бы поставить енкодер на вал и, не задавать время вращения, а считать обороты вала. Или использовать заслонку. А так получается много неизвестных которые трудно учесть (поддотваживание механики -- меняется со временем, выбег мотора после снятия напряжения и т.д.). Поэтому системы с обратной связью (типа енкодер) работают более стабильно и правильно
Terapefft
Dec 7 2006, 10:49
раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?
Terapefft
Dec 7 2006, 11:00
я вот щас нашел описание абсолютного энкодера. а как с ним работать? допустим подключаю я его к какой нить ноге меги, а в проге как быть??? нужно какой нить цикл ставить после включения насоса или как???
Wild007
Dec 7 2006, 11:04
Цитата(Terapefft @ Dec 7 2006, 09:49)

раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?
Простейший энкодер -- внутри мыши такое колёсико с дырочками + две детальки на плате

. А если серьёзно, то задай Google вопрос и найдешь кучу информации на руском языке. Множество русских фирм продаёт энкодеры любых видов для разных целей и у них есть техдокументация. Самому сделать -- тоже просто берём диск сверлим по контуру отверстия или нарезаем полосочки, ставим оптопару (их тоже много продают готовых) устанавливаем на вал, вывод фотодатчка подключаем к мп и имеем обратную связь. Програмно считаем импульсы и конкретно тормозим в нужный момент.
Ниже есть
обсуждение подключения энкодера. Удачи!
Terapefft
Dec 7 2006, 11:25
а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл
Wild007
Dec 7 2006, 11:49
Цитата(Terapefft @ Dec 7 2006, 10:25)

а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл
Какой датчик поставить это тебе решать. Главное чтобы он выдавал импульсы, ну скажем 5В. Количество импульсов зависит от дотчика. Главное что при вращении вала шли импульсы, а когда вал стоит -- нет. Ведь ты включаешь двигатель, кажется "доза", на какое-то время. За это время двигатель делает какое-то количество оборотов, скажем N. Пусть датчик на валу за один оборот формирует M импульсов (зависит от количества "дырочек"

в диске). Теперь мы можем посчитать на "сколько" импульсов нам надо включать двигатель для получения "правильной" дозы (N*M). Поэтому мы можем просто включать двигатель и теперь считать импульсы от датчика (не на время). По приходе нужного количества импульсов (N*M), выключаем двигатель и включаем тормоз. Эти мы исключаем всякие внешние факторы на количество оборотов -- количество "дозы". Ведь от времени включения двигателя зависит "доза"? Или я не прав?
Terapefft
Dec 7 2006, 11:54
да верно, доза зависит от времени включения насоса, я вот просто не пойму как програмно реализовать подсчет импульсов
Wild007
Dec 7 2006, 12:08
Цитата(Terapefft @ Dec 7 2006, 10:54)

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

.
Terapefft
Dec 7 2006, 16:58
я тут подумал и решил сделать так: взять диск и просверлить в нем дырки, и поставить его на вал двигателя, импульсы фиксировать индуктивным датчиком, т.е. если он попадает на "дырку" на выходе "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 (высокий уровень или низкий) ?
и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?
и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"?
Wild007
Dec 7 2006, 17:21
Цитата(Terapefft @ Dec 7 2006, 15:58)

sbi ddrd,3 ; установить PD3 как выход
Почему PD3
выход он же
ВХОД ПРЕРЫВАНИЯЦитата
вот у меня возникли вопросы :
что записать в PORTD (высокий уровень или низкий) ?
Если пин порта вход, то запись в регистр PORTD 1 подключает внутренний пулап резистор
Цитата
и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?
Конечно. Но в твоём случае можно просверлить и одно отверстие. Т.к. один регистр может "считать" импульсы только до 255. Для большего количества придется испозовать всё боьше и больше регстров

. Эксперементируй и считай, считай, считай
Цитата
и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"?

Можно померять сколко наберётся за один оборот. Но для большей точности мерять сколько оборотов надо на один литр.
А про проблемы на которые нарвешся прочиай по той ссылке что я давал выше. Пересказывать не буду.
Terapefft
Dec 7 2006, 17:43
я вот сделал п/п обработки прерывания
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
почему так?
Wild007
Dec 7 2006, 17:53
Ессесно
Цитата
C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label
Низзя использовать "зарегестрированные" слова. Измени INT1 на что-то вроде: CNT_INT1.
Terapefft
Dec 8 2006, 14:41
подключил я сегодня индуктивный датчик к контроллеру к ноге PD3, прошил контролер поставил на плату. так у меня теперь когда я замыкаю датчик плата индикации гаснет вобще

. почему это может быть?
Wild007
Dec 8 2006, 15:03
Цитата(Terapefft @ Dec 8 2006, 13:41)

подключил я сегодня индуктивный датчик к контроллеру к ноге PD3,
А порт правильно настроил?
Код
inc cntdat
cpi cntdat,$8
brne NNN
Почему сравнивается с 8?
Код
ldi radr,doza_0
rcall decod
А кто обнулять CNTDAT будет?
Terapefft
Dec 8 2006, 15:29
вот я в начале проги где инициализация таймеров идет поставил
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" это типа симуляция одного поворота

я щас просто поставил "1" чтоб посмотреть будет срабатывать или нет.
Wild007
Dec 8 2006, 15:36
Во первых :
Код
ldi Ttemp,0b00000100
out mcucr,Ttemp
должно стоять в инициализации МК, а
Код
ldi Ttemp,0b10000000; разрешение прерывания INT1
out gicr,Ttemp
после включения двигателя.
И (в обработке прерывания), когда выключил двигатель, запрещать прерывание INT1.
Terapefft
Dec 8 2006, 15:50
сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?
Wild007
Dec 8 2006, 16:14
Цитата(Terapefft @ Dec 8 2006, 14:50)

сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?
Поиграйся с
Код
cpi cntdat,$01
А может опять где-то CLI стоит?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.