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

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

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

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

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

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

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

 
Опции темы
Непрочитано 14.10.2006, 19:01  
fomalgaut
Прохожий
 
Регистрация: 07.10.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fomalgaut на пути к лучшему
По умолчанию Внутреннее АЦП ATMEGA8535 в непрерывном режиме.

Работаю с ATMEGA8535.
АЦП по прерыванию таймера 0 производит оцифровку 4 канала и выдает результат в порты.
Код:
WDR
LDI tmp,24                         
OUT WDTCR,tmp                                                              ;установка сторожа
LDI tmp,12                                                                           ;2 сек
OUT WDTCR,tmp
SEI                                                                                       ;разрешение обработки прерываний

LDI tmp,(1‹‹TOIE0)  
OUT TIMSK,tmp
LDI tmp,skor                                                                        ;интервал времени таймера 0
OUT TCNT0,tmp
LDI tmp,(5‹‹CS00)                                                             ;установка предделителя таймепа 0
OUT TCCR0,tmp                                                                 ;запуск таймера  

LDI tmp,(0‹‹ADLAR)|(4‹‹MUX0)|(0‹‹REFS0)             ;4 канал, внешний REF
OUT ADMUX,tmp
LDI tmp,(7‹‹ADPS0)|(1‹‹ADEN)|(1‹‹ADIE)|(1‹‹ADATE) ; непрерывное преобразование 
OUT ADCSRA,tmp
LDI tmp,(4‹‹ADTS0)                                                               ; по переполнению таймера
OUT SFIOR,tmp

AZPG:
--------------ОСНОВНАЯ ПРОГРАММА-----------------------
RJMP AZPG

;----------------------- -----Прерывание по переполнению таймера 0 ------------------------------
LTIMER0:
SBI ADCSRA,ADSC                         ;запуск преобразования
WDR
RETI
;******************** Прерывание по переполнению таймера 0******************


;*************************** Прерывание АЦП****************************
Ladc:
IN R16,ADCH
IN R17,ADCL
OUT PORTB,R16
OUT PORTА,R17
RETI
АЦП выдает постоянно только результат первого измерения.
Если отключить сброс сторожа то, результат становить динамичным.
Но нужно чтобы программа работала без сброса контроллера. Подскажите где ошибка в коде!
Заранее благодарен!
Реклама:
fomalgaut вне форума  
Непрочитано 15.10.2006, 02:22  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Я не профессионал, могу ошибаться,
но, по моему ошибки в следующем:
***
1- wdr обычно нельзя ставить в прерываниях таймера,
потому что возможна ситуация когда, допустим из-за ошибки кода,
или помехи основная программа зависла, а прерывания исправно
происходят, wdt обнуляется, основная программа не перезапускается;
***
2- порядок чтения результатов замера АЦП неправильный,
читаем даташит (для мега8535 - doc2502.pdf, стр.220)
"When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently,
if the result is left adjusted and no more than 8-bit precision is required, it is
sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH."
То есть надо читать сначала младший (ADCL),
а затем старший (ADCH) байты, иначе можем прочитать черте-что.
***
3-Разрешать прерывания (sei) нельзя до окончания инициализации.
***
4-Непонятно есть ли у Вас инициализация стэка, векторов.
То есть это кусок кода, или приведен весь код?
***
5-Если Вы используете непрерывное преобразование,
то флаг SBI ADCSRA,ADSC достаточно поставить один раз,
перед бесконечным циклом, а дальше он будет сам восстанавливаться.
***
6-Шо то я не углядел в коде где переключаются каналы.
***
Особо не вникал, скорее всего есть еще что нибудь.
_______________
Александр
2006 10 15
Laksus вне форума  
Непрочитано 15.10.2006, 23:14  
fomalgaut
Прохожий
 
Регистрация: 07.10.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fomalgaut на пути к лучшему
По умолчанию

Спасибо, за внимание Laksus
1. Это вопрос религии, если основная прога крутиться в бесконечном цикле…
2. Да согласен не досмотрел. Хотя ошибок по правильности оцифровки пока не наблюдал.
3. Согласен.
4. Вектора есть и стек есть.
5. В этом и проблема что не работат бесконечный цикл!
6. А что нужно обязательно переключать каналы, если датчик висит только на одном?

После внесения поправок 2 и 3 да 5 результат не изменился.
fomalgaut вне форума  
Непрочитано 16.10.2006, 02:42  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Сообщение от fomalgaut
6. А что нужно обязательно переключать каналы, если датчик висит только на одном?
Виноват. Недопонял Ваше сообщение. Понял так, что у Вас
используется четыре входа, а сбой состоит в том,
что читает только с одного входа.
__________
Только что погонял на симуляторе AVRStudio,
(добавил инициализацию, и изменил на мегу16,
код Ваш совсем не менял,
только изменил русскую букву "А" на латинскую в строке:
OUT PORTА,R17),
вроде все делает нормально.
Заходит и в прерывания таймера и АЦП.
Обновляет результаты.
Может ошибка в инициализации?
__________
Александр
2006 10 16
Laksus вне форума  
Непрочитано 16.10.2006, 07:34  
fomalgaut
Прохожий
 
Регистрация: 07.10.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
fomalgaut на пути к лучшему
По умолчанию

В AVRSTUDIO у меня все работает, а в живую код первого измерения!При том программа пробегает по всем прерываниям - ставил флажки вывод в порт.
fomalgaut вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как очистить очередь прерываний в ATMega8535? greafuger Микроконтроллеры, АЦП, память и т.д 4 04.06.2008 23:03
Использование прерываний в ATMega8535 igor727 Микроконтроллеры, АЦП, память и т.д 2 28.04.2007 15:50
ATMega8535 Sergeyich Микроконтроллеры, АЦП, память и т.д 3 15.09.2005 01:01
[b]Тайминг для ATMEGA8535 в среде ICC[/b] delay Микроконтроллеры, АЦП, память и т.д 0 24.06.2005 01:06
ATmega8535 и CodeVision... прошу совета !!! Виталий Микроконтроллеры, АЦП, память и т.д 1 30.09.2004 12:35


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


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