Перейти к содержанию

Не получается получить данные с АЦП


pryanic

Рекомендуемые сообщения

Доброго времени суток. Понадобилось разобраться с АЦП.  Основной материал использовал Евстифеева (микроконтроллеры семейства мега) и учебный курс Di-Halt.

На первый раз задача простая - обработать напряжение с переменного резистора и послать по UART в терминал. С терминалом уже кое-что делал, так что тут вряд ли косяк есть.

Кратко опишу программу: каждую секунду в обработчике прерывания таймера (не совсем точно, прерывание по переполнению Т0) запускаю преобразование АЦП установкой в 1 бита ADSC. 

В обработчике прерывания АЦП читаю байт ADCH (выравнивание по левому краю ADLAR=1) и шлю по уарт. Но в терминал приходят одни FF независимо от положения движка потенциометра (подключен к PC1 средним контактом, крайними на землю и AVCC)
 

Скрытый текст

 

            .include        "m8def.inc"
            .include "macrobaselib.inc"   


            .equ     XTAL = 8000000     
            .equ     baudrate = 9600  
            .equ     bauddivider = XTAL/(16*baudrate)-1

            .def    temp    =    R16
            .def    ADCdata    =    R20

;= Start     macro.inc ========================================

;= End         macro.inc ========================================

; RAM ========================================================
        .DSEG


; FLASH ======================================================
            .cseg
            .org    0
            rjmp RESET                         ; Reset Handler
            rjmp EXT_INT0                     ; IRQ0 Handler
            rjmp EXT_INT1                     ; IRQ1 Handler
            rjmp TIM2_COMP                     ; Timer2 Compare Handler
            rjmp TIM2_OVF                     ; Timer2 Overflow Handler
            rjmp TIM1_CAPT                     ; Timer1 Capture Handler
            rjmp TIM1_COMPA                 ; Timer1 CompareA Handler
            rjmp TIM1_COMPB                 ; Timer1 CompareB Handler
            rjmp TIM1_OVF                     ; Timer1 Overflow Handler
            rjmp TIM0_OVF                     ; Timer0 Overflow Handler
            rjmp SPI_STC                     ; SPI Transfer Complete Handler
            rjmp USART_RXC                     ; USART RX Complete Handler
            rjmp USART_UDRE                 ; UDR Empty Handler
            rjmp USART_TXC                     ; USART TX Complete Handler
            rjmp A_D_C                         ; ADC Conversion Complete Handler
            rjmp EE_RDY                     ; EEPROM Ready Handler
            rjmp ANA_COMP                     ; Analog Comparator Handler
            rjmp TWSI                         ; Two-wire Serial Interface Handler
            rjmp SPM_RDY                     ; Store Program Memory Ready Handler

; Interrupts ==============================================

EXT_INT0:    nop
            reti             
EXT_INT1:    nop
            reti                 
TIM2_COMP:    nop
            reti             
TIM2_OVF:    nop
            reti             
TIM1_CAPT:    nop
            reti         
TIM1_COMPA:    nop
            reti              
TIM1_COMPB:    nop
            reti              
        
TIM0_OVF:    nop                        
            reti              
SPI_STC:    nop
            reti              
            
USART_UDRE:    nop
            reti
USART_RXC:    nop        
            reti                
USART_TXC:    nop
            reti              
                 
EE_RDY:        nop
            reti                  
ANA_COMP:    nop
            reti                  
TWSI:        nop
            reti                     
SPM_RDY:    nop
            reti  

TIM1_OVF:    PUSHF

            setb    ADCSRA,    ADSC
;            OUTI    ADCSRA,(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)        
            POPF
            reti 
            
            
A_D_C:        PUSHF
            in        ADCdata,    ADCL
            in        ADCdata,    ADCH


uart_snt:    SBIS     UCSRA,    UDRE    
            RJMP    uart_snt     
            OUT        UDR,     ADCdata    
            POPF    
            reti      

; End Interrupts ==========================================


Reset:       STACKINIT    ; Èíèöèàëèçàöèÿ ñòåêà
            RAMFLUSH    ; Î÷èñòêà ïàìÿòè
            GPRFLUSH    ; Î÷èñòêà ÐÎÍ     


; End coreinit.inc

; Internal Hardware Init  ======================================
            outi    ddrb,    0xFF
            outi    portb,    0x00

uart_init:    LDI     R16, low(bauddivider)
            OUT     UBRRL,R16
            LDI     R16, high(bauddivider)
            OUT     UBRRH,R16

            LDI     R16,0
            OUT     UCSRA, R16

            
            LDI     R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
            OUT     UCSRB, R16    

            ; Ôîðìàò êàäðà - 8 áèò, ïèøåì â ðåãèñòð UCSRC, çà ýòî îòâå÷àåò áèò ñåëåêòîð
            LDI     R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
            OUT     UCSRC, R16


; ADC Init - Èíèöèàëèçóðåì ÀÖÏ.

            OUTI    ADCSRA,(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)
             OUTI    ADMUX,0b0110001

Timer1_1S:    clr        temp
            out        tcnt1h,    temp
            out        tcnt1l,    temp
;            ldi        temp,    0xFF
;            out        ocr1bh,    temp
;            out        ocr1bl,    temp    
            outi    tccr1b,    (1<<CS12)
            setb    TIMSK,    TOIE1
            setb    tccr1a,    com1a0
            setb    SFIOR,    PSR10

            SEI

; Main =========================================================
Main:    nop
        nop
        nop
        nop

        RJMP    Main
; End Main =====================================================


; Procedure ====================================================

; End Procedure ================================================


; EEPROM =====================================================
            .ESEG                ; Ñåãìåíò EEPROM

 

 

ADC_test.zip

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

Ссылка на комментарий
Поделиться на другие сайты

В железе собрано? У меня в Протеусе что-то меняется при вращении потенциометра:

image.png.160e930ba56d5c95b8a4598e971ca593.png

Кстати, такая запись не установит бит в ноль: (0<<TXCIE). В ноль устанавливается иначе, с использованием инверсной маски:

REG |=  (1 << BIT)			// Установка бита в 1
REG &= ~(1 << BIT)			// Установка бита в 0

 

С уважением, Михаил, EEP Lab

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, aitras сказал:

В железе собрано? У меня в Протеусе что-то меняется при вращении потенциометра:

Да, в железе-то одни FF и идут. Причем независимо от того подключен резистор к входу АЦП или нет(

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Хм, вроде бы обнаружил косяк!  В инициализации АЦП

OUTI ADMUX, 0b0110000

Не хватает еще нуля в конце. Поэтому и запись в регистр проходила некорректно. Бит ADLAR устанавливался в 1, а REFS0 так и оставался 0. Получалось что опорное напряжение должно подаваться с внешнего ИОНа. Но проверю в железе уже завтра)

Антон. Блог

HTPC -> foobar2000 -> SMSL M8A -> Nataly 2012 -> Focal JMLab Tantal 515

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...