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

 
 
> Снова АЦП
ILYAUL
сообщение Sep 21 2009, 17:53
Сообщение #1


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



ATmega164P. Отладчик AVRdragon и Studio Проблема в следующем ,при прогоне программы с подключённым макетом АЦП ведёт себя как ему и положено , но стоит запрограмировать микросхему и запустить в автономке АЦП просыпается только по прерыванию от таймера , в моем случае через секунду. FUSES выставлены - проблем я с ними не вижу. Ниже привожу код , может всё таки что-то упустил. Конечно многое отсёк оставив только относящееся к АЦП. HELP laughing.gif



Код
            ***********************
;           *                                     *
;           *                                     *
;           *     ATMega 164P             *
;           *                                     *
;           ***********************




.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m164pdef.inc"

.DEVICE ATmega164P

.org    ADCCaddr
    jmp ADC3  ; ADC Conversion Complete

        

; *****************************
; *                                               *
; *       Initialization АЦП          *
; *                                               *
; *                                               *
; *****************************


        ldi        temp,(1<<REFS0)|(1<<ADLAR)
        sts        ADMUX,temp     ; Внешнее напряжение AVcc, выравнивание влево
        ldi        temp,(1<<ADC0D)    ; Отключение цифрового контакта от
        sts        DIDR0,temp    ; PORTA pin0
        clr        temp
        sts        ADCSRB,temp
        ldi        temp,(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)
        sts        ADCSRA,temp        ; |(0<<ADSC) Преобразование отключено
    ; АЦП вкл. Прерывание разрешено . Делитель на 64 = 187,5 Кгц частота
    ; преобразования



; *****************************
; *                                               *
; *  Подпрограмма обнаружения     *
; *                                               *
; *                                               *
; *****************************



TIM2COMPB:
        
        cli
        push        temp
        push        count
        in          temp,SREG
        push        temp
        ldi        Cnt0,Low(255); Инициализация счётчика преобразований        
        clr        rab    ; Очиска рабочих регистров
        clr        mean0
        clr        mean1
        clr         ZH                         
            clr         ZL
        cbi        PORTB,0
            
ADC1:
                                            

        ldi        temp,(1<<SE)|(1<<SM0)     ; Настройка режима "сна"
        out        SMCR,temp    ; Запись SMCR
        sei        
        sleep                                   ; Преобразование
        dec        Cnt0                ;
        brne        ADC1                ; Если не равно 255 - преобразование
        ldi        count,$08            ; Начинаем процедуру вычисления среднего
ADC5:        lsr        mean1                ; 255=2 в степени 8
        ror        mean0                ; сдвигаем регистры в право 8 раз
        dec        count
        brne        ADC5                ; Конец процедуры вычисления среднего
        
        
        ldi        temp,(0<<SE)|(1<<SM0); Выход из режима "сна"
        out        SMCR,temp    
        pop        temp
        out        SREG,temp                                            
        pop        count
        pop        temp
        sbi        PORTB,0
        sei
        rjmp    CHECK


; *****************************
; *                                               *
; *       Вычисление среднего          
; *                                               *
; *****************************


ADC3:    
        cli
        ldi        temp,(0<<SE)|(1<<SM0)    ; Выход из режима "сна"
        out        SMCR,temp            ; Запись SMCR
        lds        rab,ADCH            ; Считывание только старшего регистра
        clr         temp
        add        mean0,rab            ; Вычисление среднего
        adc        mean1,temp            ; Вычисление среднего
        ret

                
; *****************************
; *                                               *
; *      Таблица значений для ADC    
                                               *
; *****************************

tabADC:            .db        $00,$01,$4A,$4B,$4C,$95,$96,$97
            .db        $B4,$B5,$B6,$7E,$7F,$80,$FE,$FF




Пояснения
TIM2COMPB: это прерывание от таймера по которому и запускается АЦП- убрано за ненадобностью


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Sep 23 2009, 08:43
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Коней попредержи на поворотах, англоязычный вы наш.


Нормально. Вполне правомочное требование курить оригинальные даташиты, а не перепевки с ошибками.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Sep 23 2009, 18:39
Сообщение #3


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Rst7 @ Sep 23 2009, 12:43) *
Нормально. Вполне правомочное требование курить оригинальные даташиты, а не перепевки с ошибками.

Так уважаемыемые давайте без сор. Я не запросил бы Вашей поддержки , если бы не проштудировал DS , прочую литературу , того же Евстифеева и не попробывал всё проанализировать сам. Прилложенный код , это естесвенно не начальный вариант. Это плод прочитанной литературы и всяческой инфы Инета.Просто я решил остановится и запросить помощь. Многих команд не бывло в первоначальном варианте и всё равно всё работало также как и в предложенном коде т.е. при прогоне программы через Драгон+ макетка всё работает и АЦП выдает расчитаную инфу, но вот в автономе нет. И я в ступоре , не могу понять почему. Если Вы считаете , что я что-то упустил в DS , то ткните носом ( не обидно) . Моего англиского хватит , что бы самому разобраться.

Сообщение отредактировал ILYAUL - Sep 23 2009, 18:50


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ILYAUL   Снова АЦП   Sep 21 2009, 17:53
- - domowoj   Почему в ADC3 в конце стоит ret ??? И зачем вот э...   Sep 21 2009, 22:16
|- - ILYAUL   Цитата(domowoj @ Sep 22 2009, 02:16) Поче...   Sep 22 2009, 05:17
|- - 777777   Цитата(ILYAUL @ Sep 22 2009, 09:17) Стави...   Sep 23 2009, 04:57
|- - domowoj   Цитата(777777 @ Sep 23 2009, 11:57) Я худ...   Sep 23 2009, 08:35
- - Александр Куличок   ЦитатаADC5: lsr mean1 ...   Sep 22 2009, 00:15
- - domowoj   У Евстифеева написано, что АЦП запускается по ком...   Sep 22 2009, 15:58
- - Александр Куличок   ЦитатаПояснения TIM2COMPB: это прерывание от тайме...   Sep 24 2009, 18:26
|- - ILYAUL   Александр Огромное спаибо эа развёрнутый ответ. ...   Sep 24 2009, 21:49
- - Александр Куличок   ЦитатаТаймер2 считает внешние 1Гц импульсы от DS13...   Sep 25 2009, 17:40
- - ILYAUL   Извините , что долго не отвечал. Выкладываю полный...   Oct 12 2009, 09:08
- - Александр Куличок   Исправлюсь по поводу своего высказывания: ЦитатаТа...   Oct 14 2009, 15:03
- - defunct   Цитата(Александр Куличок @ Oct 14 2009, 18...   Oct 14 2009, 22:49


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:28
Рейтинг@Mail.ru


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