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

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

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

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

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

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

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

 
Опции темы
Непрочитано 24.05.2007, 17:38  
idmg
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
idmg на пути к лучшему
По умолчанию Таймер на ATmega16... опять

Очень надеюсь на помощь, заранее спасибо.
Задача в следующем:
Дано: 1. ATmega16 2. DIP переключатель
3. кнопка 4. 7ми сегментный индикатор на два знака
Необходимо собрать таймер.
Переключатели устанавливают множитель паузы
(00 - х0,1сек. ; 01 - х1,0сек. ; 10 - х0,1мин.;
11 - х1,0мин.), таким образом пауза регулируется в пределах 0,1 секунда - 99 минут.
На индикаторы выводится значение паузы.
Кнопкой устанавливается значение паузы (зажимаем кнопку на 3секунды, индикаторы начинают мигать, мы в режиме установки паузы, каждое следующее нажатие прибавляет 1 к значению паузы, после установки нужного значения, зажимаем кнопку на 3 секунды, индикаторы перестают мигать, мы вышли из режима установки паузы).
При появлении нуля на ноге МК, устройство формирует паузу заданную множителем и кнопкой и отображаемую индикаторами; и выдает единицу на ногу МК.
В режиме установки паузы, при появлении нуля на ноге МК пауза не формируется.
Если на ноге МК появился ноль, но через время меньшее времени паузы на ноге опять единица возврат в исходное состояние
Большая просьба ко всем!!! помочь с написанием программы на С (компилятор CodeVision) по заданному алгоритму работы [/img]

-- Прилагается рисунок: --
Реклама:
idmg вне форума  
Непрочитано 24.05.2007, 19:50  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Вот посмотрите - avr123.nm.ru/06.htm

и avr123.nm.ru
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 24.05.2007, 21:16  
idmg
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
idmg на пути к лучшему
По умолчанию

Спасибо за Ваш труд уважаемый avr123.nm.ru! Честно изучил его от корки до корки три месяца назад.
Простой вопрос по куску кода:
PC2 - кнопка
PC1 - нога управляющая транзистором (РС1=0 транзистор открыт, РС1=1 транзистор закрыт)

while (1){
if (PINC.2==0)
{PORTC.1^=1;
delay_ms(100);}
else
{PORTC.1=1;}}

1. когда кнопка РС2 нажата транзистор включается с частотой 1/200 ms. когда отжимаем кнопку транзистор должен выключаться сразу, но реально при выполнении строчки delay_ms(100), МК не будет реагировать на изменение состояния PC.2, пока не отработает паузу 100ms. На рисунке симуляция в VMlab: кнопку отпускаю в 322мс а на PC1 единица формируется в 380мс. Как решить эту проблему?
И еще как сделать паузу 10 минут?

-- Прилагается рисунок: --
idmg вне форума  
Непрочитано 25.05.2007, 11:17  
mike7815
Прописка
 
Регистрация: 16.03.2005
Сообщений: 244
Сказал спасибо: 78
Сказали Спасибо 85 раз(а) в 55 сообщении(ях)
mike7815 на пути к лучшему
По умолчанию

idmg, а Вы про прерывание от таймера слышали? также то, что Вы предлагаете, дружественным интерфейсом ну уж ни как не назовешь. И такой маленький советик: по меньше слушайте чужих советов, побольше делайте. Иначе будет каша и результата ноль. А для изучения вначале лучше всего просто скопировать чей-то дельный поект и в нем разобраться.
mike7815 вне форума  
Непрочитано 25.05.2007, 12:55  
AndryG
Вид на жительство
 
Регистрация: 22.06.2006
Адрес: Украина
Сообщений: 308
Сказал спасибо: 19
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
AndryG на пути к лучшему
По умолчанию

Перед написанием программы, обычно, сперва составляют алгоритм ... и не нужно фыркать:"Задача простая, какой тут алгоритм?!"

Почти все решаемые на контроллерах задачи можно разделить на несколько частей:
- уровень железа (работа с кнопками. индикаторами и др. переферией)
- прикладной уровень (решение самой задачи)

Если полностью алгоритм работы охватить не можете, то делайте по кирпичикам ...
Например научитесь отлавливать короткое/длинное нажатие кнопки, вывод на индикатор данных, чтение установок джамперов и т.д.
Потом, когда фундамент будет готов ... можно и за задержки взяться.
А то получается Вы хотите делать задержки .. а чем Вы стартовать их будете? Кнопка то у Вас не работает - нет для ее обработки кода.
AndryG вне форума  
Непрочитано 25.05.2007, 14:55  
idmg
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
idmg на пути к лучшему
По умолчанию

С прерываниями все так же мутно, вешал на PD2 (INT0)
кнопку, включал внешнее прерывание INT0
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;

если МК выполняет строчку delay_ms(100) и в этот момент ногу PD2 кнопкой придавили к нулю прерывание-то произойдет, но только тогда когда МК отработает паузу 100мс. Отсюда и вопрос как это можно обойти? как работает функция delay? Как еще можно получить паузы без функции delay? Есть такой апноут AVR133
"Long delay generation" там про каскадирование таймеров, для меня это пока темный лес потому и прошу помощи.
idmg вне форума  
Непрочитано 25.05.2007, 15:14  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

По поводу пауз: можно сделать ассемблерные вставки:
#аsm
nop
nop
nop
....
#endаsm
команда nop выполнется 1 такт, поэтому зная частоту кварца, можно расчитать задержку. Если знаете ассемблер, то можно делать циклы, тогда можно добиться паузы любой длительности...
По поводу проекта... если выложите его в протеусе постараюсь помочь...
dimonbest вне форума  
Непрочитано 25.05.2007, 15:20  
idmg
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
idmg на пути к лучшему
По умолчанию

ОК к выходным выложу проект в протеусе
idmg вне форума  
Непрочитано 25.05.2007, 15:41  
idmg
Частый гость
 
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
idmg на пути к лучшему
По умолчанию

Правильно ли я понимаю что при частоте 1МHz, выполнение выделенного цикла 1 000 000 раз даст задержку 1 секунда, если не учитывать время инкрементирования переменной а?

//Chip type : ATmega16
//Clock frequency : 1,000000 MHz
// PA1 - out; PC1 - button;

#include ‹mega16.h›
unsigned char t=0;
unsigned char a=0;

void main (void){
MCUCSR=0xF0;MCUCSR=0xF0;

PORTA=0xFE;
DDRA=0xFF;

PORTC=0xFF;
DDRC=0xFE;

PORTB=0xFF;
DDRB=0xFF;

PORTD=0xFF;
DDRD=0xE7;
while (1){
if (PORTC.1 ==0) {
t++;}
else{
while (a‹t){
#asm nop;
#endasm
a++;}}

PORTA.1=1;}}
idmg вне форума  
Непрочитано 25.05.2007, 15:54  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от idmg
если МК выполняет строчку delay_ms(100) и в этот момент ногу PD2 кнопкой придавили к нулю прерывание-то произойдет, но только тогда когда МК отработает паузу 100мс.
Это не так.

Делэй не запрещает прерывания, они работают нормально.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять деталька (( aversI Поиск схем. Делимся схемами 4 21.10.2009 19:09
Опять про часы Monk22 Микроконтроллеры, АЦП, память и т.д 0 15.05.2008 20:15
Опять защита от коррозии vasseff Делимся опытом 13 14.06.2007 22:02
Опять RS-232! Prime Микроконтроллеры, АЦП, память и т.д 29 30.06.2006 19:12
Опять лазерный утюг 8) CastAway Делимся опытом 11 10.06.2005 09:12


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot