Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: tiny2313 & mega8
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3, 4, 5, 6
Terapefft
сори че та я ступил smile.gif)) щас прошил контролер вставил на плату, он почему сразу срабатаывает (до нажатия кнопки "пуск"), как сделать чтобы он отчет начинал после нажатия "пуск"?
Wild007
Цитата(Terapefft @ Nov 28 2006, 12:01) *
сори че та я ступил smile.gif)) щас прошил контролер вставил на плату, он почему сразу срабатаывает (до нажатия кнопки "пуск"), как сделать чтобы он отчет начинал после нажатия "пуск"?

Так как таймер запускается сразу после инициализации и "тикает" постоянно, надо его проинициализировать, а запускать после "нажатия" "пуск".
Terapefft
а как его запускать подскажите пожалуста?
Wild007
Перенести строки:
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.
smile.gif
Terapefft
вот теперь он включается так как мне надо, тока после того как насос включается, плата индикации гаснет и все, почему такое может быть?
Wild007
Цитата(Terapefft @ Nov 29 2006, 12:04) *
вот теперь он включается так как мне надо, тока после того как насос включается, плата индикации гаснет и все, почему такое может быть?

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

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

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

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

только что проверил, загружаеться без проблем. Думаю проблема в том, что создовался файл в старой студии хотя по идеи формат не должен был меняться.
Alex_Pol
2 терапевт: бросай прошивку, дизассемблирую.
Terapefft
спасибо большое, я изменил директорию, написал английскими буквами и все нормально диз ассемблировалось. теперь буду развлекатся smile.gif
Семён
Цитата(Alex_Pol @ Nov 30 2006, 17:22) *
Убери русские буквы из путей!!!

Век живи, век учись, не знал об этом. Со времен дос привычка, называть файлы и папки по-английски
Alex_Pol
Цитата(Семён @ Dec 1 2006, 09:29) *
Век живи, век учись, не знал об этом. Со времен дос привычка, называть файлы и папки по-английски
bb-offtopic.gif В своё время ох и нарвался я на этот прикол. На IARовском изделии для MSP. Дома всё работает, на работе матом ругается. В путях одна русская буква проскочила. "С". Сразу и не видно. smile.gif Пол - дня кувыркался.
Terapefft
поставил я котролер на автомат...насос включается и выключается все как надо smile.gif теперь возникла следующая проблема: разброс дозы слишком большой (около 60 гр на литр). Я подключал насос через частотник, он вроде не должен давать такую погрешность. С платы управления сигнал подавал на замыкающее реле, а потом на частотник. Сегодня попробовал просто сигнал с платы подавать на частотник через делитель напряжения (у частотника на входе до 10 В, а выход с платы 24В). Так теперь насос включается и не выключается, на него импулься почему то постояно поступают. Подскажите пожалуста может можна как нить еще погрешность уменьшить или че нить с делителем сделать???
Terapefft
и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
Wild007
Цитата(Terapefft @ Dec 4 2006, 16:18) *
и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???

tiny2313 может работать с встроенным генератором с внутренней или внешней времязадающей RC-цепочкой, с внешним керамическим либо кварцевым резонатором или от сигнала внешней снхронизации. Выбор режима работы осуществляется програмными фузами CKSEL0...3. (см. DS).
Выставляешь фузы согласно твоего кварца и имеешь стабильное тактирование таймеров, почти, не зависящее от темтературы окружающей среды. Возможно разброс "дозы" и происходил из-за "плаванья" частоты внутреннего RC генератора.
И зачем мудрить с 10Мгц если есть кварцы на 2Мгц? Кварц всегда запускается на первой гармонике и если ставишь 10Мгц, то и имеешь 10Мгц smile.gif
Alex_Pol
Цитата(Terapefft @ Dec 4 2006, 16:18) *
и вот еще вопрос у меня возник, если мне допустим надо чтобы контролер тактировался от внешнего кварца и работал допустим на 2 МГц, можно поставить кварц на 10 МГц??? или он будет работать от той частоты которая будет от кварца, можно ли как нить сделать так чтобы он от кварца на 10МГц работал на 2 МГц???
Именно из 10мГц получить 2мГц никак невозможно, но если даташит не врёт, в тиньке 2313 имеется штука с многообещающем названием "Clock Prescale Register – CLKPR". Не пользовался ни разу, но должно работать.
singlskv
Цитата(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, и будет Тебе счастье smile.gif
Wild007
Цитата
Пользовался CLKPR, очень удобно.
Так что бери кварц на 8 МГц и дели на 4, и будет Тебе счастье

Нов таком случае нельзя забывать про фузу СKDIV8, если она установлена, то CLKPR=0011 (см. DS)
Alex_Pol
Цитата(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
провожу я испытания уже дня два, поставил на плату кварц, частотник вроде тоже настроил как надо, доза все равно плавает sad.gif. (около 40 гр на литр). Может быть можно еще как нибудь уменьшить погрешность? или с асинхроным двигателем это нереально???
Wild007
Цитата(Terapefft @ Dec 6 2006, 15:21) *
провожу я испытания уже дня два, поставил на плату кварц, частотник вроде тоже настроил как надо, доза все равно плавает sad.gif. (около 40 гр на литр). Может быть можно еще как нибудь уменьшить погрешность? или с асинхроным двигателем это нереально???

Посиавить тормозную муфту! И управлять с мп по выключению двигателя. smile.gif
Alex_Pol
Цитата(Terapefft @ Dec 6 2006, 15:21) *
или с асинхроным двигателем это нереально???
А до смены контроллера зто изделие как работало?
Terapefft
дело в том что с насосом эксперимент впервые.
2 Wild007 а что за тормозная муфта? раскажите пожалуста поподробнее
Wild007
Чертежей не нашел, нарисовал по памяти. В одном проекте надо было тормозить вал с двигателем 1кВт, искать что-то не было времени, сделали сами тормоз -- работает уже 6 лет.

Но если у вас доза зависит от количества оборотов двигателя -- правильней было бы поставить енкодер на вал и, не задавать время вращения, а считать обороты вала. Или использовать заслонку. А так получается много неизвестных которые трудно учесть (поддотваживание механики -- меняется со временем, выбег мотора после снятия напряжения и т.д.). Поэтому системы с обратной связью (типа енкодер) работают более стабильно и правильно smile.gif
Terapefft
раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?
Terapefft
я вот щас нашел описание абсолютного энкодера. а как с ним работать? допустим подключаю я его к какой нить ноге меги, а в проге как быть??? нужно какой нить цикл ставить после включения насоса или как???
Wild007
Цитата(Terapefft @ Dec 7 2006, 09:49) *
раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?

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

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

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

Выход датчика заводишь на любой вход INT0 или INT1, организуешь пп обработки прерывания, настраиваешь прерывание на фронты или уровни срабатывания, и, в пп обработки прерывания, делаешь INC Rd. Конечно всё зависит от количества импульсов, но это уже програмные штучки smile.gif .
Terapefft
я тут подумал и решил сделать так: взять диск и просверлить в нем дырки, и поставить его на вал двигателя, импульсы фиксировать индуктивным датчиком, т.е. если он попадает на "дырку" на выходе "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
Wild007
Цитата(Terapefft @ Dec 7 2006, 15:58) *
sbi ddrd,3 ; установить PD3 как выход

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

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

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

Можно померять сколко наберётся за один оборот. Но для большей точности мерять сколько оборотов надо на один литр.
А про проблемы на которые нарвешся прочиай по той ссылке что я давал выше. Пересказывать не буду.
Terapefft
я вот сделал п/п обработки прерывания
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
Ессесно
Цитата
C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label

Низзя использовать "зарегестрированные" слова. Измени INT1 на что-то вроде: CNT_INT1. smile.gif
Terapefft
подключил я сегодня индуктивный датчик к контроллеру к ноге PD3, прошил контролер поставил на плату. так у меня теперь когда я замыкаю датчик плата индикации гаснет вобще sad.gif . почему это может быть?
Wild007
Цитата(Terapefft @ Dec 8 2006, 13:41) *
подключил я сегодня индуктивный датчик к контроллеру к ноге PD3,

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

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

А кто обнулять CNTDAT будет?
Terapefft
вот я в начале проги где инициализация таймеров идет поставил
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" чтоб посмотреть будет срабатывать или нет.
Wild007
Во первых :
Код
ldi Ttemp,0b00000100
out mcucr,Ttemp

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

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

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

А может опять где-то CLI стоит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.