Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Важный кусок программы для ATmega

Непрочитано 23.08.2011, 16:07  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Ознакомился с возможностями АЦП. Думаю если сменить текущий МК на МК с АЦП, многих нагромождений удастся избежать... Правда придётся пересмотреть идею в корне))... Например как обезопасить входы АЦП от возникших по разным причинам (молния, специально тнкули, штормы в варпе...) высоких напряжений, равязка трансформатором? Но напряжение подразумевается постоянным... Короче надо думать. Обойду одни проблемы появятся другие))) Но опыт форумной поддержки оказался положительный и это радует и обнадёживает. И для начала посоветуйте какую Атмегу выбрать? Проблем с Мк в городе нет (по крайней мере с АВРками)
Реклама:
orionSSV вне форума  
Непрочитано 23.08.2011, 16:58  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

Сообщение от orionSSV Посмотреть сообщение
Например как обезопасить входы АЦП от возникших по разным причинам (молния, специально тнкули, штормы в варпе...) высоких напряжений, равязка трансформатором?
Я вам нарисовал входную часть одного канала. Стабилитрон - это защитный диод (супрессор) на напряжение несколько десятков вольт, например 1.5KE20A. Можно и обычным стабилитроном обойтись. Боюсь, только, что от прямого попадания молнии это не поможет, как и уверен в почти нулевой вероятности такого события.

Сопротивления резисторов - несколько десятков килоом.

По мне - так достаточно ATmega16. И ножек и памяти хватит.

P.S. На вход можно и такую штуку поставить

Последний раз редактировалось Godzilla82; 23.08.2011 в 17:06.
Godzilla82 вне форума  
Непрочитано 23.08.2011, 19:32  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Godzilla82, Хе, занимательная штучка... у нас в Омске таких в продаже вроде нет.
по поводу входной цепи. А вы не могли бы привести примерные номиналы при условии что напряжения действующее на шлейфе =12 вольт и поступать будет на делитель напряжения до 5 вольт. Кстати, тут наверняка нужно учесть, что АЦП должен фиксировать состояния по определённым уровням напряжения. Я рассчитал для вот ТАКОЙ схемы подключения
Как там видно получается что:
ДЕЖУРНЫЙ РЕЖИМ - 3.0В
СРАБАТЫВАНИЕ - 1.03В
КОРОТКОЕ - 0.6В
ОБРЫВ - 5,0В
эти значения весьма нетрудно, я полагаю, выцепить с помощью АЦП. Поэтому мне интересно какие параметры имеет ваш вариант входной цепи.
orionSSV вне форума  
Непрочитано 23.08.2011, 20:13  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

Сообщение от orionSSV Посмотреть сообщение
Godzilla82, Хе, занимательная штучка... у нас в Омске таких в продаже вроде нет.
А что есть из мег? 32, 32A. Ну можно и 8-й обойтись, то есть её аналогом ATmega88.

Сообщение от orionSSV Посмотреть сообщение
напряжения действующее на шлейфе =12 вольт и поступать будет на делитель напряжения до 5 вольт.
Входная цепь и есть делитель напряжения. То есть, при обрыве - 12 вольт.

Тогда R1 100 кОм, R2 можно исключить, R3 - 24 кОм. Ёмкость 1 мкФ. Стабилитрон - КС139А.

На вход можно подавать хоть фазу. Естесственно, резисторы МЛТ1 или аналогичные на рабочее напряжение не менее 250В.

Опорное выбрать не 5В, а 2,56 (от внутреннего ИОН).

Порог событий задаётся в программе (пост 7):

PHP код:
 
switch(a) 
  { 
  case 0 .. 400:  
  return STATE_1; 
  break; 
             
  case 401 .. 600: 
  return STATE_2; 
  break; 

  case 601 .. 800: 
  return STATE_3; 
  break; 

  default 
  return STATE_4; 
  } 
} 
Сами константы пересчитаете. Значению 1024 соответствует 2,56 В.

В реале значения от 0 до 1023 (10 бит, выравнивание вправо).

P.S. Можно и стабилитрон выкинуть, так как на входах МК есть защитные диоды по питанию. При попадании фазы ток будет всего 310/100000 = 3,1 мА, что гораздо меньше допустимого тока.
Миниатюры:
Нажмите на изображение для увеличения
Название: in_sch.gif
Просмотров: 34
Размер:	2.1 Кб
ID:	25412  

Последний раз редактировалось Godzilla82; 23.08.2011 в 20:27.
Godzilla82 вне форума  
Непрочитано 24.08.2011, 12:49  
EagleB3
Вид на жительство
 
Регистрация: 03.05.2006
Сообщений: 312
Сказал спасибо: 30
Сказали Спасибо 144 раз(а) в 52 сообщении(ях)
EagleB3 на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Я бы делал так...
Где-то в разделе настроек:
PHP код:
//Нижние значения диапазонов напряжений с датчиков
//      Lev0   0 
#define Lev1 401
#define Lev2 601
#define Lev3 801 
Собственно функция:
PHP код:
char GetLevel(int ADC_Count) {
//Возвращает 0..3 в соответствии c попаданием ADC_Count в диапазоны Lev0..Lev3
    if (ADC_Count ‹ Lev1) return (0);
    else if (ADC_Count ‹ Lev2) return (1);
    else if (ADC_Count ‹ Lev3) return (2);
    else return (3);    
} 
Потом по ходу вызов функции:
PHP код:
Result = GetLevel(ADC_1_Count); 
Но это вопрос вкуса и стиля - кому что нравится.

Последний раз редактировалось EagleB3; 24.08.2011 в 13:02.
EagleB3 вне форума  
Непрочитано 24.08.2011, 13:39  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Дело вкуса. Но я тоже предпочитаю все распределять по функциям и процедурам... НО СЕЙЧАС МЕНЯ ЗАБОТИТ ИНОЕ! (и это, каюсь, уже оффтоп, но думаю вам эта задача на зубок, не более...)Разобравшись с АЦП атмеги16, я не могу запустить её счётчик Т1. Сначала я думал что 16-ные счётчики все одинаковы (да вроде так и есть!)и просто перенёс инициализацию счётчика и его прерывание из Atmega8515 на Atmega16
PHP код:
#define xtal 3686400
#define fmove     0.8// частота перемещения включения реле [Hz]
...
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// снова инициализируем Таймера/Счетчик 1
TCNT1=0x10000-(xtal/1024/fmove);
//Тута будут флаги....
}

void main(void)
{
...
TCCR1A=0;
// тактовая частота Таймера/Счетчика 1 - xtal/1024
TCCR1B=5;
// инициализируем Таймер/Счетчик 1
TCNT1=0x10000-(xtal/1024/fmove);
// очистим флаги прерываний Таймера/Счетчика 1
TIFR=0;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
... 
Не заработало... Тогда я начал делать всё с нуля. Рассуждая так (условия изменил кварц-12Мгц, не 4...).
кварц -12(МГц);
интервал прерывания пусть будет 500(мс);
коэффициент предделителя таймера 1024;
таким образом имеем частоту тактирования таймера: 12000000(Гц)/1024=11718.75(Гц);
период импульсов: 1/11718.75(Гц)=0,8533333333333333(мс);
Для того чтобы получить на выходе 500мс, необходимо иметь коэффициент деления равный 500(мс)/0,8533333333333333(мс)= 5859,375 или округл.=5859;
Шестнадцатиразрядный таймер имеет максимальный коэффициент пересчета 65536.
то есть после 65536 тактов будет прерывание, а нам при данных условиях нужно чтоб оно было через 5859, значит в TCNT1 грузим 65536-5859=59677 или 0xE91D...
итого
TCCR1A=0x00;
TCCR1B=0x85//предделитель 1024

TCNT1H=0xE9;
TCNT1L=0x1D;
ну и прерывание
TIMSK=0x80;

Инициализация TCNT1 в прерывании также должно стоять...
СКАЖИТЕ МНЕ Форумчане, где я не прав! И укажите мне как это нужно делать, что быть правым))

Последний раз редактировалось orionSSV; 24.08.2011 в 16:22.
orionSSV вне форума  
Непрочитано 24.08.2011, 19:54  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

Ну а что непонятного? Всё по даташиту.
Я, правда предпочитаю режим CTC. Он даёт гарантированную длительность между прерываниями и не требует дополнительных тактов на инициализацию счётчика.

Значение, до которого должен считать счётчик записываем в OCR1.
Читаем описание регистров TCCR1A, TCCR1B и устанавливаем нужные биты.

PHP код:
 
#include ‹mega16.h› 

interrupt [TIM1_COMPA] void timer1_compa_isr(void) 
{ 
PORTB ^= 1; 
} 

void main(void) 
{ 
PORTB  = 0b00000000; 
DDRB   = 0x00000001; 
TCNT1H = 0x00; 
TCNT1L = 0x00; 
TCCR1A = 0b00000000; 
TCCR1B = 0b00001100; 
ICR1H  = 0b000000; 
ICR1L  = 0b000000; 
OCR1AH = 0xB7; 
OCR1AL = 0x1A; 
OCR1BH = 0x00; 
OCR1BL = 0x00; 
TIMSK  = 0b00010000; 

#asm("sei") 

while (1); 
} 
Сообщение от orionSSV Посмотреть сообщение
TCCR1B=0x85//предделитель 1024
Это не только предделитель на 1024, но и фильтр шума на ноге захвата.
надо просто TCCR1B=0b00000101

Сообщение от orionSSV Посмотреть сообщение
TIMSK=0x80;
Это прерывание для таймера 2 по совпадению OCR2.

Для прерывания по переполнению TCNT1 нужно TIMSK=0x04;

Сообщение от orionSSV Посмотреть сообщение
// очистим флаги прерываний Таймера/Счетчика 1
TIFR=0;
Очистка флагов прерываний как правило осуществляется записью 1 (!!!) в соответствующий бит.


P.S. Стыдно... Пользуетесь CV AVR, а допускаете такие ошибки в инициализации.

Последний раз редактировалось Godzilla82; 24.08.2011 в 20:29.
Godzilla82 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Нужен образец программы для at89c51rc24pi avgust75 Микроконтроллеры, АЦП, память и т.д 9 09.08.2011 10:08
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 23:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.