roboforum.ru

Технический форум по робототехнике.


АЦП в ATmega16

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

АЦП в ATmega16

Сообщение Demon » 29 ноя 2007, 01:33

Помогите плиз. Пытаюсь считать показания с ВАЗ-го датчика темпиратуры и записать их в EEPROM но не выходит
может кто занимался подобным?

Ниже написанная мной прога на asm,может чтов схеме куда опорное напряжение подключать то? :no:
Код: Выделить всёРазвернуть
.INCLUDE "m16def.inc"
.def       temp=      r16      ;Регистр для хронения временной информации
.def       DataL=      r17      ;Данные АЦП младшие 8 разрядов
.def       DataH=      r18      ;Данные АЦП старшие 2 разряда
.org $0000
rjmp       RESET             ;Вектор сброса RESET на него переходит микроконтроллер при подаче пиания или сбросе
.org $0001
rjmp      Read_ADC         ;Внешнее прерывание INT0 в данном случае используется лдя запуска АЦП   
.org $0012
rjmp      Taime_OUT         ;Вектор прерывания переполнения таймера Т0
.org $000E
rjmp      ADC_Complit         ;Вектор прерывания преобразования АЦП завершено


;Инициализация устройств
;Инициализация стека

.org $0029                                                                  ;Ячейка с которой начнется запись программы
RESET:               ;Инициализация стека
                  ldi   temp,low(RAMEND)                                            
                    out   spl,temp
                    ldi   temp,high(RAMEND)
                  out   sph,temp                                             

;Инициализация внешнего прерывания INT0 по  спаду фронта сигнала

                  ldi temp,(1<<ISC00)+(1<<ISC01)
                    out MCUCR,temp
                  ldi temp,(1<<INT0)
                        out GICR,temp                                                     ;Разрешение внешнего прерывания INT0
                 

;Инициялизация порта Д
                     
                  ldi temp,(1<<PD6)
                  out DDRD,temp                                             ;Ноги 12  работают как выходы
;Инициализациа порта Б
                  ldi temp,(1<<PB0)
                   out DDRB,temp                                             ;Нога 14 работает как выход
                   out PortB,temp                                             ;Зажечь индикатор работы микроконтроллера

;Инициализация АЦП

                                                             ;Разрешение АЦП,разрешение прерывания АЦП и настройка частоты преобразований на 62.5 кГц при кварце 4МГц   
                  ldi temp,(1<<REFS0)+(0<<REFS1)                        
                  out ADMUX,temp                                             ;Выбор опорногонапряжения питания и по умолчанию 23 ноги как входа канала АЦП
               
                  ;out SFIOR,temp
;Инициализация таймера Т0
                  ldi temp,(1<<TOIE0)
                  out TIMSK,temp                                             ;Разрешение прерывания по перполнению таймера Т0
                  sei                                                      ;Общее разрешение прерываний
               
;Главный цикл прогрвммы
Main:               nop
                  rjmp Main

;Метка прерывания INT0
Read_ADC:            ldi temp,(1<<ADEN)+(1<<ADSC)+(1<<ADIE)+(1<<ADPS2)+(1<<ADPS0)
                  out ADCSRA,temp

                                                             ;Зануск прерывания АЦП и настройка частоты преобразований на 62.5 кГц при кварце 4МГц   
                  reti                                                   ;Выход из обработки прерывания
;Метка прерывания по переполнению таймера Т0

Taime_OUT:            cbi PortD,PD6                                             ;Погасить светодиод на 12 ноге
                  
                  reti

;Метка прерывания завершения преобразования АЦП

ADC_Complit:         tst r0                                                   ;Проверка регистра r0 на нулевое значение
                  breq pervoe                                                ;Перейти на метку pervoe если r0=0
                  sbi PortD,PD6                                             ;Зажеч светодиод на 12 ноге
                  ldi temp,(1<<CS00)+(0<<CS01)+(1<<CS02)                           ;Запустить таймер Т0 с прутделителем на 1024
                  out TCCR0,temp
                  ldi temp,(1<<EEMWE)+(1<<EEWE)
                  out EECR,temp
EEpropm_writeL:         sbic EECR,EEWE
                  rjmp EEpropm_writeL                                          ;Ждать прка  предыдущая запись EEPROM не завершиться
                  inc r19                                                   ;Увеличить адрес ячейки EEPROM в которую будет записанно значение АЦП
                  out EEARL,r19                                             ;Задать адрес ячейки EEPROM в которую будет записанно значение АЦП
                  in  DataL,ADCL                                             ;Прочитать значение АЦП младшие разряды
                  out EEDR,DataL                                             ;Записать значкние АЦП в регистр данных EEPROM
                  sbi EECR,EEMWE                                             ;Установить флаг занятости EEPROM
                  sbi   EECR,EEWE                                             ;Записать в EEPROM

EEpropm_writeH:         sbic EECR,EEWE
                  rjmp EEpropm_writeH                                          ;Ждать прка  предыдущая запись EEPROM не завершиться
                  inc r19                                                   ;Увеличить адрес ячейки EEPROM в которую будет  записанно значение АЦП
                  out EEARL,r19                                             ;Задать адрес ячейки EEPROM в которую будет записанно значение АЦП
                  in  DataH,ADCH                                             ;Прочитать значение АЦП младшие разряды
                  out EEDR,DataH                                             ;Записать значкние АЦП в регистр данных EEPROM
                  sbi EECR,EEMWE                                             ;Установить флаг занятости EEPROM
                  sbi   EECR,EEWE                                             ;Записать в EEPROM
pervoe:               ldi temp,1
                  mov r0,temp   
                  sbi EECR,EEMWE               
                  reti
Последний раз редактировалось Demon 02 дек 2007, 15:30, всего редактировалось 2 раз(а).
Demon
 
Сообщения: 15
Зарегистрирован: 29 ноя 2007, 01:12
Откуда: Тула

Re: АЦП на ATmega16

Сообщение Master » 29 ноя 2007, 09:53

может чтов схеме куда опорное напряжение подключать то

К ножке AREFF, если конечно не используется внутреннее опорное напряжение.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: АЦП на ATmega16

Сообщение Digit » 29 ноя 2007, 10:59

Demon, ты схемку нарисуй, как у тебя что включено. А то не понятно, где ошибку искать.

Добавлено спустя 10 минут 58 секунд:
И кстати "не выходит" - это как? Что происходит?
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: АЦП на ATmega16

Сообщение Demon » 02 дек 2007, 00:05

ни как не получается подскожите как вставить ресунок за ранее спасибо

Добавлено спустя 7 минут 55 секунд:
не получается это в смысле в железе не работает а на AVR Studio данные с АЦП записываются в EEPROM
данные тыкаю точечки,разрады устанавливаю
Demon
 
Сообщения: 15
Зарегистрирован: 29 ноя 2007, 01:12
Откуда: Тула

Re: АЦП на ATmega16

Сообщение Demon » 02 дек 2007, 02:02

схма проста через датчик пускаю плюс питания меги и перемвчками соединяю Vcc c AVcc ну землю,кнопка на прерывание и станддартная обвязка
датчик подключон к выводу ADC0
может надо соединить Vcc c AREF?
да вроде и так пробовал
попробовал подкинуть на AREF и впроге изменил (0<<REFS0)+(0<<REFS1)
но нет в EEprom-е как были FF так и остались
Demon
 
Сообщения: 15
Зарегистрирован: 29 ноя 2007, 01:12
Откуда: Тула

Re: АЦП на ATmega16

Сообщение Digit » 02 дек 2007, 16:36

Demon писал(а):как вставить ресунок за ранее спасибо


Сделал подробное описание процесса. Даже с картинками. Смотреть там: Как вставить картинку в текст сообщения?
.
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7