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

 
 
> несколько вопросов по ATmega162
antonn
сообщение May 24 2006, 09:13
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 24-05-06
Пользователь №: 17 400



Здравствуйте!
только начал работать с микроконтроллерами, и, естественно, появляются глупые вопросыsmile.gif
дело такое, я собираю плату сопряжения ПК (через rs232) и некоторыми датчиками станка (фотодатчики, вращающиеся, 3 шт) и некоторыми двигателями (приводами, если точнее, но не важно, нужно лишь на клеммы подавать некоторый уровень напряжения).
в качестве "сердца" выбран ATmega162, 3 встроенных счетчика используются фотодатчиками, для приводов 3 цапа подключаю.
переодически величины счетчика отправляются в ПК, и обнуляются. Ну, общую схему я себе представляю, нужно принципиально представить, и тут я торможу, т.к. начинающий. Как, примерно, можно реализовать инкрементирование счетчика, строб импульсов должен, по идее, поступать на какой то пин МК, и как то программно обрабатываться. Кто нибудь, может примерно сказать, как выглядит программа для такого счетчика и куда подавать строб(я так понимаю, нужно еще и прерывание внешнее использовать при подачи импульсов)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
andrvisht
сообщение May 24 2006, 09:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(antonn @ May 24 2006, 12:13) *
...
в качестве "сердца" выбран ATmega162, 3 встроенных счетчика используются фотодатчиками, для приводов 3 цапа подключаю.

если точность особая не нужна то можно обойтись просто 2-й инт цепочкой и использовать PWM режим таймера 0 и 1 или 1 и 2-го
Цитата
.... как выглядит программа для такого счетчика и куда подавать строб(я так понимаю, нужно еще и прерывание внешнее использовать при подачи импульсов)?

если контроллера будет делать еще что-то и частота импульсов большая то конечно лучьше завести на прерывания (их как раз 3 внешних 0, 1 , 2) а в обработчиках делать инкремент ваших счетчиков.

в прикрепленном файлике ссылки на ресурсы
Прикрепленные файлы
Прикрепленный файл  ______.htm ( 7.2 килобайт ) Кол-во скачиваний: 282
 
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 24 2006, 10:33
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Таймер/счетчик может работать от двух мсточников - внутренних клоков (возможно с предделителем) - для отсчета времени, и внешних импульсов на определенную ногу Tn(0,1,2) источник тактирования выбирается в регистре TCCRn.
Прерывание генерируеться по переполнению счетчика и вы можете его использовать, чтобы считать количество переполнений.
Если количество импульсов до считывания не переполнит счетчик, прерывание не понадобиться.
Не совсем понятно с ЦАПами - они внешние? или используете ШИМ?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
add
сообщение May 24 2006, 10:48
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Кто нибудь, может примерно сказать, как выглядит программа для такого счетчика и куда подавать строб(я так понимаю, нужно еще и прерывание внешнее использовать при подачи импульсов)?

Можно настроить таймер на программное прерывание. В обработчике прерывания , проверять вход,и по изменению на активный уровень соответственно инкрементировать счетчик. Тут зависит от длительности стробов, и временных интервалов. Точность (дескритизацию) можно устанавливать частотой таймера. Ошибка в пределах одного цикла таймера. Таким образом можно отвязаться от конкретных выводов контроллера(внешнее прерывание, запуск таймера и т.д.) и использовать более удобный пин.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 24 2006, 14:02
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
Как, примерно, можно реализовать инкрементирование счетчика, строб импульсов должен, по идее, поступать на какой то пин МК, и как то программно обрабатываться.

На мой взгляд, вам достаточно будет объявить 3 переменных Cnt0..Cnt2, и создать три обработчика внешних прерываний Int0, Int1, Int2, в обработчках этих прерываний инкрементирвать соответствующий счетчик. Кроме того запустить любой из встроенных таймеров для подсчета времени. Взависимости от времени, анализировать состояние трех переменных Cnt0..Cnt2 и выполнять какие-то требуемые действия, после чего переменные Cnt0..Cnt2 обнулять. С ЦАПами чуть позже.. ;>

Примерная структура программы на C (WinAvr) для решения вашей задачи:

Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

long Cnt0 = 0;  
long Cnt1 = 0;
long Cnt2 = 0;
long SysTime = 0;
// если захотите обрабатывать эти переменные в основном цикле программы
// необходимо будет предусмотреть синхронизацию данных (просто запретом прерываний),
//а также добавить ключевое слово volatile в объявление каждой из этих переменных

// Обработчик прерывания INT0
Singal (SIG_INTERRUPT0){
  Cnt0++;
}

// Обработчик прерывания INT1
Signal (SIG_INTERRUPT1){
  Cnt1++;
}

// Обработчик прерывания INT2
Signal (SIG_INTERRUPT2){
  Cnt2++;
}

// Обработчик прерывание по переполнению таймера 0
Signal (SIG_OVERFLOW0){  
   SysTime++;
   // Обработка переменных Cnt0..Cnt2
   // взависимости от текщего времени, которое у нас ведется в переменной SysTime
}


int main(void)
{
  // настройка портов
  // настройка таймеров и разрешение прерываний от таймеров (TIMSK)
  // настройка внешних прерываний рег. GIMSK
  // настройка УАРТа(ов)
  sei(); // разрешение прерываний

  for(;;){
  // Обработка UART0 и/или UART1 (передача по rs232)
  // какие-то другие действия
  // управление ЦАПами и проч.
  }
   return 0;
}
Go to the top of the page
 
+Quote Post
antonn
сообщение May 24 2006, 14:20
Сообщение #6





Группа: Новичок
Сообщений: 2
Регистрация: 24-05-06
Пользователь №: 17 400



спасибо, пойду почитаю...

2beer_warrior
переполнения не предвидится. ЦАПов пока нет, планирую их с последовательной передачей взять (эта передача, пока что, тоже под вопросом). Вообще ЦАПы под вопросом, мои "командиры" "морщатся", что то не нравится...

думаю, прерывание нужно внешнее, мне кроме импульса на счетчик нужно где то проверять бит направления вращения (одновременно с импульсом идет), по прерыванию и хотел увеличивать счетчик (или уменьшать, зависит от направления).
Представляю пока так (надеюсь правильно):
с датчика приходит импульс, который я подаю на вывод внешнего прерывания (один для всех датчиков), бит направления выдаю на один из пинов портов (итого 3 порта для трех датчиков), и по биту выставляю еще в 3 порта (показывает, что этот датчик сейчас работает, иначе 0 в порт). А в программе проверять биты работы датчиков, и соотвествующий счетчик изменять (по биту вращения). Похоже на правду или я совсем "плаваю"? smile.gif

2defunct
угу, значит так... попробую переделать под биты направленияsmile.gif
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 24 2006, 16:03
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Похоже на правду или я совсем "плаваю"? smile.gif

Похоже, если скорость импульсов небольшая, получиться.
Имейте в виду, что поступление каждого из трех импульсов, вызвет прерывание, и может случиться, что МК только и будет прерыватьсяsmile.gif
Ну а если получиться, в таком случае можно подумать о использовании таймеров под ШИМы и отказа от ЦАПов.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 24 2006, 16:40
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(beer_warrior @ May 24 2006, 19:03) *
Имейте в виду, что поступление каждого из трех импульсов, вызвет прерывание, и может случиться, что МК только и будет прерыватьсяsmile.gif

Насколько я понял задачу автора из другого форума, речь идет о частоте импульсов не более ~2.5Khz.. Так что МК должен успевать обрабатывать все импульсы без проблем. ;>
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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