Передача данных с ATmega8 на COM порт ПК

Схемы и устройства на микроконтроллерах. Обсуждение.

Передача данных с ATmega8 на COM порт ПК

Сообщение sergx130 » 18 мар 2010, 16:49

Помогите разобраться со скоростью передачи данных от Atmega8 на порт ПК (Rs-232). Запрограммировал АЦП в данном МК. Все работает, только данные передаются очень медленно . Мне нужно оцифровать частоту 50 герц с как можно большим количеством точек. У меня работает со скоростью около 1000 точек за секунду. Мне нужно около 10000 точек - в этом и собственно проблема. Программу писал в CodeVisionAVR.

Вот сама программа. Код:
Код: Выделить всё
#include <mega8>
#include <delay>
#include <stdio>
#define ADC_VREF_TYPE & 0xff;
interrupt [ADC_INT] void adc_isr(void){
          printf("%d ",ADCW); //    печатаем в УАРТ значение регистра ADCW
          putchar(0x0D);              //  на новую строку УАРТА
       }
void init(void){

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 57600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;

ADMUX=0x0b00000000;   // вибираем 0-й канал АЦП
ADCSRA=0x0b10001011;   //  конфигурация АЦП
 #asm ("sei"); // разрешить все переривания
 }
  void main(void)
{
  init();     // визов функции int (инициализация всего)
 while(1){
      ADCSRA=0b11001011;   // включаем непреривное АЦП преобразование
      }
}

В проекте использовал скорость 57600 бод поскольку это максимальная скорость симуляции RS-232 в Proteus. На практике хочу использовать 115200 бод. Даныє буду слать на расстояние 1-0,5 метра (максимум на 2,5 м).
Вполне достаточно и скорости 1000 точек/сек. Но моя задача посложнее. Нужно считать форму сигнала 50 гц максимально точно, вплоть до точного перехода через ноль.
То есть мне нужно считать несколько периодов (не больше 3-5) с максимальным количеством точек (чтобы увидеть наименьшие импульсы).
В будущем можно сделать цифровой осциллограф.
sergx130
 
Сообщения: 1
Зарегистрирован: 18 мар 2010, 16:45

Re: Передача данных с ATmega8 на COM порт ПК

Сообщение vik_mix » 30 апр 2010, 08:19

В прерывании отправлять данные это плохо -
Накапливай в буфер сколько надо значений, потом отправляй пачкой на уарт:

Код: Выделить всё
#include <mega8>
#include <delay>
#include <stdio>
#define ADC_VREF_TYPE & 0xff;

#define BUF_SIZE 512 // необходимое число точек

unsigned char buff[BUF_SIZE];
unsigned int buf_cnt=0;
unsigned char owf_flag =0;

interrupt [ADC_INT] void adc_isr(void){
         if(!owf_flag){
            buff[buf_cnt]=ADCW;
            buf_cnt++;
            if(buf_cnt == BUF_SIZE)owf_flag=1;
                            }
       }
void init(void){

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 57600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;

ADMUX=0x0b00000000;   // вибираем 0-й канал АЦП
ADCSRA=0x0b10001011;   //  конфигурация АЦП
#asm ("sei"); // разрешить все переривания
}
  void main(void)
{
  init();     // визов функции int (инициализация всего)
while(1){
      ADCSRA=0b11001011;   // включаем непреривное АЦП преобразование

           if(owf_flag)
            {   
                while(buf_cnt){
                   buf_cnt--;
                   printf("%d ",buff[buf_cnt]); //    печатаем в УАРТ значение 
                   putchar(0x0D);              //  на новую строку УАРТА 
                  }     
              owf_flag = 0;
            }
      }
}


но учти - он будет молотить с максимальной скоростью, буфера может не хватить - по идее надо завести таймер на нужную скорость оцифровки- а в прерывании от таймера запускать преобразование ацп...
vik_mix
 
Сообщения: 8
Зарегистрирован: 27 апр 2010, 06:09

Re: Передача данных с ATmega8 на COM порт ПК

Сообщение vik_mix » 30 апр 2010, 08:48

Да не заметил - если ацп в режиме 10бит то нужно буфер объявить как unsigned int buff[]
и число точек уменьшить, а то не хватит памяти озу
хотя оцифровывать сеть 8бит заглаза
vik_mix
 
Сообщения: 8
Зарегистрирован: 27 апр 2010, 06:09


Вернуться в Схемы, устройства и проекты на микроконтроллерах



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

Зарегистрированные пользователи: нет зарегистрированных пользователей

cron