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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Простой делитель на простом МК ATMEL?, нужно состряпать делитель макс 10Гц на 10, 4 канала.
The Fresh
сообщение Apr 9 2008, 16:05
Сообщение #1


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



Понимаю, что старо, как мир. Может есть готовые примеры на базе суперпростого TINY? Погуглил ничего не нашел, знаю плохо искал, но уже забадался smile.gif. Посоветуйте дайте ссылку. Спасибо.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Apr 9 2008, 16:27
Сообщение #2


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Дольше искать.
Тупо опрашиваешь 4 входа, фиксируешь переход из 0 в 1(или наоборот) , програмно организуешь
каждый счетчик, 4 выхода!
Задержка распространения будет определяться скоростью опроса + некоторая програмная задержка.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
The Fresh
сообщение Apr 11 2008, 13:58
Сообщение #3


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



На каком самом простом AVR можно организовать, так чтобы с внутреним генератором т.е. минимум железа, простой делитель, на входе 5в на выходе 5в
Go to the top of the page
 
+Quote Post
domowoj
сообщение Apr 11 2008, 15:01
Сообщение #4


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



На любом где входов-выходов больше 8-ми,
например:
AT90s2313, Atniny2313, Attiny24 и тд.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
The Fresh
сообщение Apr 11 2008, 15:19
Сообщение #5


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



Спасибо. Скачал AVR32Studio и AVRStudio 4.13, на чем лучше начать и если можно скиньте пожалуйста исходник пустышку, куда я смогу вставить свои while(1)
{
if gpio1=1 {i1++}
if gpio2=1 {i2++}
if gpio3=1 {i3++}
if gpio4=1 {i4++}

if i1=10 {gpio5=1 }
...........
}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 11 2008, 15:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Вам нужен транслятор языка С для AVR. Если Вы - только учитесь, то, наверное, лучше взять CodeVisionAVR.

P.S. Но, такая простая программа может быть написана и на ассемблере. Будите изучать ассемблер?
Go to the top of the page
 
+Quote Post
The Fresh
сообщение Apr 11 2008, 15:34
Сообщение #7


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



Понятно, что на асме быстрее будет в плане выполнения программы, но мне хотелось бы while do, тем более скорость не критична т.к. речь идет о герцах. Для ламера сомое то smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 11 2008, 22:30
Сообщение #8


кекс
******

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



Цитата(The Fresh @ Apr 11 2008, 17:19) *
Скачал AVR32Studio и AVRStudio 4.13,

AVR32Studio под другой кристал - под AVR32.

Так что останавливайтесь на AVRStudio 4.13.
Вам еще потребуется WinAVR.
Скачайте и установите самый свежий WinAVR.
После установки WinAVR, запустите AVRStudio. В первом отрывшемся диалоговом окне выбрать New Project -> AVR GCC, и следовать инструкциям (имя каталога проекта, .c файла, чип, отладчик и т.п.)
начать можно так:

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

void main(void)
{
   ...
}
Go to the top of the page
 
+Quote Post
The Fresh
сообщение Apr 13 2008, 05:10
Сообщение #9


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



Спасибо. Еще один небольшой вопрос. Как сделать по простому задержку на выходе на определенное количество сек,мсек, ведь выходов будет четыре, следовательно во времени эти задержки будут смещены?
Go to the top of the page
 
+Quote Post
domowoj
сообщение Apr 13 2008, 05:21
Сообщение #10


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Не понял.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
The Fresh
сообщение Apr 13 2008, 07:06
Сообщение #11


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

Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071



Например на первый счетный пришло 10 импульсов, следовательно на выходе формируем единицу с задержкой Nмсек. В следующий момент скажем через Kмсек на второй счетный пришел 10-ый импульс, формируем единицу на нем, но время выходного импульса на обоих выходах должны быть одинаковы, а события происходят в разное время т.е. не получится сделать

set gpio5=1;
delay (1000);
Или применить простые счетчики и считать в процессе иттерации какой выход сколько был в состоянии 1 т.е.
output1++;
if output>1000 set gptio5=0;
Далее опытным путем или дизассемблировав посчитать потактово время выполнения иттерации, ну это я так по ламмерски рассуждаю.
Go to the top of the page
 
+Quote Post
tazik
сообщение Apr 13 2008, 11:06
Сообщение #12


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

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Подойдет, например ATtiny26 - 2 порта по 8 I/O, внутренний RC генератор. Но есть одно но: при программировании придется выставить fuse RSTDSBL - так как Reset является альтернативной функцией одного из IO пинов. После этого контроллер можно будет перепрограммировать только с помощью параллельного программатора. Такие пироги crying.gif

Вот исходники на астме и проект для Proteus`а. В протеусе нет контроллера tiny26, пришлось использовать 90S8535. Соответственно, в asm-файле придется перекомментировать 4 первые строки.
Прикрепленный файл  frq_div.rar ( 20 килобайт ) Кол-во скачиваний: 115


По поводу синхронизации... Можно предложить 2 варианта:
1) Зафиксировать сразу все входные сигналы во временном регистре. Потом их обработать с записью результата во временный регистр. Потом одновременно передать все на выход. - Но это, правда, не совсем та синхронизация )
2) По возможности выровнять по времени ветки исполнения алгоритма добавлением NOP-ов. В принципе, ничего сложного.

Сообщение отредактировал tazik - Apr 13 2008, 11:14
Go to the top of the page
 
+Quote Post
Reton
сообщение Apr 13 2008, 13:46
Сообщение #13





Группа: Новичок
Сообщений: 2
Регистрация: 30-09-07
Пользователь №: 30 945



Можно и так, но лучше output1++; перенести из main в обработчик прерываний от таймера. Тогда не надо будет подсчитывать время опытным путем.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Apr 13 2008, 13:57
Сообщение #14


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Чтобы увеличить реакцию на входные воздействия можно применив тини2313 используя PCINT.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 14 2008, 14:41
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(The Fresh @ Apr 13 2008, 10:06) *
Например на первый счетный пришло 10 импульсов, следовательно на выходе формируем единицу с задержкой Nмсек. В следующий момент скажем через Kмсек на второй счетный пришел 10-ый импульс, формируем единицу на нем, но время выходного импульса на обоих выходах должны быть одинаковы, а события происходят в разное время
Не совсем понятно: зачем формируется единица с задержкой Nмсек? Вы хотите таким образом учесть разное время обработки событий? Имхо, оно будет измеряться микросекундами. Впрочем, можно просто замерить уже на макетке... Вот набросок программы для деления входного сигнала INi на 10, и формирования соответствующего выходного сигнала OUTi. Нетрудно будет расширить программу на 4 канала.
Код

void main(void)
{
  // Инициализация
  xi= INi;  ci=0;  OUTi= 0;
  //...................
  for(;;)
  {
    // Делитель на 10
    if(xi != INi)
    {
      xi= INi;
      if((++ci) == 10)  { ci= 0; OUTi= ~OUTi; }
    }
    //................
  }
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 11:54
Рейтинг@Mail.ru


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