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

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

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

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

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

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

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

 
Опции темы
Непрочитано 11.12.2008, 15:10  
kr11507
Прописка
 
Аватар для kr11507
 
Регистрация: 10.04.2008
Сообщений: 165
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
kr11507 на пути к лучшему
По умолчанию CVAVR while и таймер

У меня одного инструкции в CVAVR типа:

(begin)
while (ACSR.ACO) {};
в асме _0x14:
SBIS 0x8,5
RJMP _0x16
RJMP _0x14
_0x16:

(end)

(begin
interrupt [ANA_COMP] void ana_comp_isr(void)
{
TCCR1B=0x00;
charge_off;
fl_12=1;
ticks=TCNT1;
}

while (!fl_12) {};
в асме _0x52:
TST R9
BREQ _0x52
(end)
останавливают таймер1 или это фича?
Нифига себе померил время заряда конденсатора...
Реклама:
kr11507 вне форума  
Непрочитано 12.12.2008, 11:40  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Вам хоть самому себе понятно что написали?
По моему бред какой-то.
Vov123 вне форума  
Непрочитано 12.12.2008, 12:51  
kr11507
Прописка
 
Аватар для kr11507
 
Регистрация: 10.04.2008
Сообщений: 165
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
kr11507 на пути к лучшему
По умолчанию

Генератором тока накачиваю кондер до 1.2 вольта и жду вручную ( while(ACSR.ACO){}; )
или прерывание флажок поднимает ( while(!fl_12){}; ) В обоих случаях на терминал
в Proteus выходит число (ticks=TCNT1 или в прерывании ticks=ICR1) не зависящее от емкости.
AVR Studio тупо проходит один раз. Еще смешнее то, что переделка команды в
while(ACSR.ACO){delay_ms(100)}; так же не вызывает страшной задержки. Может так и должно быть?
Похоже Proteus гонит.
Проект прилепил, вдруг понадобится.

Прикрепленный файл: 4458354.zip
kr11507 вне форума  
Непрочитано 13.12.2008, 02:46  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Не могу разобраться в Вашем проекте.Что например вот это:#include ‹m8_128.h›.
И в какой среде Вы работаете?В CVAVR или WinAVR.Видимо код сокращён,открывается с ошибками.
Использую Протеус 7.2 Ваши файлы открыть не могу.
Для измерения времени заряда конденсатора Ваш счётчик должен быть настроен на захват.Т.е.когда отработает компаратор счетчик останавливается,и Вы должны установить прерывания в TIMSK (разрешение прерывания по событию "захват")А у Вас он равен 0.
В принципе получается,что надо одновременно подать напряжение на конденсатор и вход компаратора.Далее компаратор отключит счётчик по захвату и в прерывании Вы должны обработать значения счётчика.
Vov123 вне форума  
Непрочитано 13.12.2008, 10:49  
avr11507
Прохожий
 
Регистрация: 16.04.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avr11507 на пути к лучшему
По умолчанию

Сообщение от Vov123
Не могу разобраться в Вашем проекте.Что например вот это:#include ‹m8_128.h›.
Это названия регистров и битов из даташита ATMega8 с сайта 123[censored].
Сообщение от Vov123
И в какой среде Вы работаете?В CVAVR или WinAVR.Видимо код сокращён,открывается с ошибками.
В сабже CVAVR. 2.03.4 Standart, перенесено с предыдущего без проблем. А прот у меня 7.4 SP3
Сообщение от Vov123
Для измерения времени заряда конденсатора Ваш счётчик должен быть настроен на захват.Т.е.когда отработает компаратор счетчик останавливается,и Вы должны установить прерывания в TIMSK (разрешение прерывания по событию "захват")А у Вас он равен 0.
Вы не обратили внимания на заглушки в исходнике, начинал я как теоретически должно работать, все было выкинуто, чтобы добраться до while (!fl_12) {};. Приложил проект не обрезанный.
Сообщение от Vov123
В принципе получается,что надо одновременно подать напряжение на конденсатор и вход компаратора.Далее компаратор отключит счётчик по захвату и в прерывании Вы должны обработать значения счётчика.
Не в бровь а в глаз. Осталось с помощью форумчан понять почему это не работает. Проекту плевать на емкость, хотя по графикам все ОК.

-- Прилагается рисунок: --


Прикрепленный файл: 9495391.zip
avr11507 вне форума  
Непрочитано 13.12.2008, 14:36  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Нет у меня софта,чтобы просмотреть Ваш труд.Хотелось бы посоветовать:ведь главная изюминка Вашей программы аналоговый компаратор,а Вы его пока запустить не можете.Тогда зачем утежелять себе жизнь пока не нужным софтом,типа UARTA,вывода на дисплей и т.д.Когда зароботает основная программа это можно будет легко прицепить.
Вот я Вам тут на память накропал.В SPLAN-е у меня нет микросхем на 28 ножек,так что извините.

#include ‹mega8.h›

interrupt [ANA_COMP] void ana_comp_isr(void)
{
PORTB.1=0 //обратно отключаем подачу напряжения
TCCR1B=0X0 //останавливаем счётчик
TCNT1=0 //сбрасываем счётчик в 0
UNSIGNED INT A=ICR1 //в переменную А помещаем значение захвата

}

void main(void)
{
DDRD.6=0
PORTD.6=0 //конфигурация выводов
DDRD.7=0 //аналогового компаратора
PORTD.7=0

DDRB.0=0 //конфигурация вывада ICP1
PORTB.0=0

DDRB.1=1 //конфигурация вывода подачи напряжения
PORTB1=0

ACSR=0B00001111
TIMSK=0B00100000
#asm("sei")

main:
WHILE(1)

{
кАКОЕ-ТО УСЛОВИЕ ЗАПУСКА{
TCCR1B=0X01 //запускаем таймер
PORTB.1=1 //подаём напряжение
WHILE(!ACSR.ACO){} //ждём пока напряжение на выводах
//уровняется,потом аппаратно в регистр ICR1 копируется значение захвата
//и происходит прерывание
}
}

-- Прилагается рисунок: --
Vov123 вне форума  
Непрочитано 13.12.2008, 16:11  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Я думаю,что реальное устройство необходимо дополнить цепью разряда конденсатора в виде последовательной цепи транзистора и резистора подключенной параллельно обкладкам конденсатора.Управление подцепить к свободному порту.Шунтирование производить в начале условия запуска,предварительно подобрав задержку.
Vov123 вне форума  
Непрочитано 13.12.2008, 19:03  
avr11507
Прохожий
 
Регистрация: 16.04.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avr11507 на пути к лучшему
По умолчанию

Уважаемый, сея схема существует на PIC реально и думаю менять не будем, а вот Ваше WHILE(!ACSR.ACO){} //ждём пока напряжение на выводах
под ОЧЕНЬ большим вопросом. В Proteus 7.4 SP3 таймер не меняется при любой емкости, в AVR Studio проскакивает в пошаговой отладке как _одна_ (соответственно количество тактов и тиков таймера) команда, а добавление WHILE(!ACSR.ACO){_delay_ms(100)} //ждём пока напряжение на выводах
так же не отражается на показаниях таймера. Ну скажите мне что прот глючит и переместите тему и я отстану.
avr11507 вне форума  
Непрочитано 13.12.2008, 19:10  
avr11507
Прохожий
 
Регистрация: 16.04.2008
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
avr11507 на пути к лучшему
По умолчанию

Кстати, извините, граф Comparator кажется показывает, что запустить я его могу. А еще я умею привязать это дело к таймеру:
// Timer 1 input capture interrupt service routine
/*interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
ticks= ICR1;
} что кажется красивее чем

TCCR1B=0X0 //останавливаем счётчик
TCNT1=0 //сбрасываем счётчик в 0
UNSIGNED INT A=ICR1 //в переменную А помещаем значение захвата
Но радует, что насчет остановки таймера когда хочу я - я был прав, доверяю Вам и теперь буду пользоваться без сомнений.
avr11507 вне форума  
Непрочитано 13.12.2008, 19:37  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию

Сделайте себе реальное устройство.Наподобие KIT.Сам я юзаю ATMega8535.На плате проц,кварц и цокеты под выводы портов.Подключаю при помощи разъёмов кнопки,LED,7-SEG,дисплей WH0802,RS-232.Сам я редко для себя пользуюсь эмуляторами.Так как в реальном устройстве всё проходит намного быстрей и работа в эмуляторе не значит,что будет работать в реальном устройстве,что кстати справедливо и для наоборот.
Удачи и всего доброго!
Vov123 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция printf в cvavr 1.25.8 Mitrar Микроконтроллеры, АЦП, память и т.д 10 01.09.2009 15:30
Структуры в CVAVR ua_gruzin Микроконтроллеры, АЦП, память и т.д 9 04.02.2009 12:58
Програмирование CVAVR buka_2004 Микроконтроллеры, АЦП, память и т.д 54 02.12.2007 20:31
Таймер Serq Автоматика и аппаратура связи 18 27.11.2007 18:32
Таймер dem9968 Делимся опытом 1 03.02.2005 09:03


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


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