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

 
 
 
Reply to this topicStart new topic
> ATmega128 АЦП
forastr
сообщение Apr 18 2011, 12:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Изучаю сейчас АЦП в avr.
Вот такой код:
Код
/*****************************************************
Chip type           : ATmega128
Program type        : Application
Clock frequency     : 8,000000 MHz
*****************************************************/
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#define ADC_VREF_TYPE 0xC0// 11000000
unsigned int adc_data;

                interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                {      
                        ADCSRA.6 = 1; //запуск преобразования        
                        TCNT0=0x83;// начальное значение таймера0  131
                }


                interrupt [ADC_INT] void adc_isr(void)
                {                              
                
                        // Read the AD conversion result
                        adc_data=ADCW;
                }
                

                void init_avr(void)
                {
                        TCCR0=0x04;  // 00000100   - частота синхронизации /64
                        TCNT0=0x83;  //начальное значение таймера0  131
                        TIMSK=0x01;  //прерываение по переполнению
                        
                        UCSR0B=0x08;// 00001000 -  разрегение работы передатчика
                        UCSR0C=0x06;//00000110 - 8 Data, 1 Stop, No Parity
                        UBRR0H=0x00;
                        UBRR0L=0x0C;//регистры скорости 00000001100 - Baud Rate:38400 погрешность 0.2%
                        
                        ACSR=0x80;  // 00001000 - разрешение прерывания аналогового компаратора
                                
                        ADMUX=ADC_VREF_TYPE & 0xff;  //1100000 - внтуренний ИОН 2.56В , правосторонее выравниевание, однополярный вход ADC0
                        ADCSRA=0x8E;// 10001110 - разрешаем работу ацп,разрешаем прерывание ацп, делитель на 64 = 125 000 Гц
                }                



                void main(void)
                {
                        init_avr();
                        #asm("sei")
                        while (1)
                                {                                        
                                        
                                };
                }


Вот такая схема в proteus:
Прикрепленное изображение


Вопрос: если я правильно понимаю то результат в переменной adc_data должен быть не такой!Я думаю что должно быть так:0000001111111111.Или нет?Подскажите пожалуйста!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 18 2011, 13:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(forastr @ Apr 18 2011, 16:54) *
Код
                                
                        ACSR=0x80;  // 00001000 - разрешение прерывания аналогового компаратора

Я думаю что должно быть так:0000001111111111.Или нет?Подскажите пожалуйста!
Типа - да. Вот, не знаю: в протеусе AVCC подключать нужно, или - так сойдёт? И ещё... Прерывания от компаратора Вы разрешили (см. выше), а соответствующая процедура его обработки - где?
Go to the top of the page
 
+Quote Post
forastr
сообщение Apr 19 2011, 05:55
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Спасибо за овтет! Странно, но когда раньше симулировал процессоры в proteus никогда не подключал AVCC к питанию....
Сечас подключил и все заработало laughing.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:48
Рейтинг@Mail.ru


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