Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 18.03.2010, 16:13   #1
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
Лампочка Передача данных с ATmega8 на COM порт ПК

Помогите разобраться со скоростью передачи данных от Atmega8 на порт ПК (Rs-232). Запрограммировал АЦП в данном МК. Все работает, только даны паредаються очень медленно ?. Мне нужно оцифровать частоту 50 герц с как можно большим количеством точек. У меня работает со скоростью около 1000 точек за секунду. Мне нужно около 10000 точек - в этом и собственно проблема. Программу писал в Codevisionavr.
В проекте использовал скорость 57600 бод посколько ето максымальная скорость сымуляции RS-232 в Proteus. На практеке хочу использовать 115200 бод. Даныє буду слать на растояныє 1-0,5 метра (максимум на 2,5 м). вполне достаточно и скорости 1000 точек/сек. Но моя задача посложнее. Нужно считать форму сигнала 50 гц максимально точно, вплоть до точного перехода через ноль.
Тоесть мне нужно считать несколько периодов (не болише 3-5) с максималим количеством течек (чтоби увидеть наименьшие импульсы).
В будущем можно сделать цифровой осцилограф.
Вот сама программа.
Код:
#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; // включаем непреривное АЦП преобразование
}
}
Реклама:
sergx1300 вне форума  
Непрочитано 18.03.2010, 16:20   #2
Cyber_RAT
Прописка
 
Регистрация: 29.11.2007
Адрес: Могилев. РБ.
Сообщений: 143
Сказал спасибо: 30
Сказали Спасибо 20 раз(а) в 20 сообщении(ях)
Cyber_RAT на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

"много буков" - как говорят некоторые, но! в протеусе просто перечислены скорости до 57600.. впишите руками 115200 - будет 115200. (причем это не голословно - ТЕНЬ сам об этом говорил)
а вы не пробовали сначала считать 1000 отсчетов в память меги а потом пакет передать?
Cyber_RAT вне форума  
Непрочитано 18.03.2010, 16:42   #3
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

Обычно АЦП вначале в память пишут, а потом неспешно передают данные из памяти в ПК.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 18.03.2010, 19:12   #4
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

Да это гиблая задача с таким подходом. Тут надо все делать одновременно. В тот момент, пока читаем АЦП, уже идет передача предыдущего значения в порт. Такие вещи надо делать напрямую с регистрами и все повесить на прерывания. Выставил флаг передающий регистр, получил новое значение АЦП. В вашем случае именно он будет самым слабым т.е. медленным звеном. Задача примитивная, никакой математики.
Забыл добавить. В моем подходе тоже есть косяк - frame error. Когда передаем непрерывную последовательность в порт, с некоторых битов начинают вылезать ошибки кадрирования. Надо очень точно выбирать частоту кварца, основываясь на минимальном значении frame error при подсчете регистра скорости передачи. Может быть будет смысл опустить до 36600, зато получить стабильную передачу без задержек.

Последний раз редактировалось Easyrider83; 18.03.2010 в 19:15.
Easyrider83 вне форума  
Непрочитано 18.03.2010, 19:37   #5
OneTech
Вид на жительство
 
Регистрация: 09.10.2009
Сообщений: 356
Сказал спасибо: 21
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
OneTech на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

Думаю стоит включить прерывание от ADC и UART. При возникновении прерывания от ADC "забирать" результат и ложить его в переменную, при возникновении прерывания от UART брать этот результат и "толкать" его в канал.
OneTech вне форума  
Непрочитано 18.03.2010, 20:45   #6
igor-k
Временная регистрация
 
Регистрация: 03.02.2005
Сообщений: 52
Сказал спасибо: 8
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
igor-k на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

ИМХО надо менять стиль программирования.
Скорость в 10000 точек, с одновременной передачей даже на скорости 115200 в вашем случае не достижима. Максимум (если ADCW==0) получается 115200/(10бит*2байта)=5760. Узкое место последовательный порт.
Надо отсчеты писать в память, а дальше после окончания измерения или во время отправлять в порт.
igor-k вне форума  
Непрочитано 18.03.2010, 21:11   #7
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

OneTech,
igor-k,
Вы хоть предыдущие сообщения читаете?
Easyrider83 вне форума  
Непрочитано 19.03.2010, 04:07   #8
igor-k
Временная регистрация
 
Регистрация: 03.02.2005
Сообщений: 52
Сказал спасибо: 8
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
igor-k на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

Читал! Разногласий не заметил. Только есть не большие уточнения.
Сообщение от Easyrider83 Посмотреть сообщение
Когда передаем непрерывную последовательность в порт
в даташите подробно всё описано про определение стоп бита и frame error.
При непрерывном потоке данных без frame error можно передавать когда скорости не совпадают
до 1%. А кварцы с частотой 1.8432, 3.6864 никто не отменял (разница в скоростях 0%).

экзотическая однако скорость
Сообщение от Easyrider83 Посмотреть сообщение
36600

Последний раз редактировалось igor-k; 19.03.2010 в 06:00.
igor-k вне форума  
Непрочитано 19.03.2010, 14:22   #9
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

А как ето реализовать програмно (запись даних в буфер потом передача)?
Может у кавото єсть примери
sergx1300 вне форума  
Непрочитано 20.03.2010, 19:47   #10
Aleksashka1
Прописка
 
Регистрация: 25.10.2008
Сообщений: 125
Сказал спасибо: 1
Сказали Спасибо 36 раз(а) в 26 сообщении(ях)
Aleksashka1 на пути к лучшему
По умолчанию Re: Передача данных с ATmega8 на COM порт ПК

Вам уже указали на радиокоте слабые места. Не думаю что тут найдете решение отличное от "тамошних" советов.
Что касается передачи данных в буфер с последующим их изъятием - то сами себя ставите в худшую ситуацию ибо это потеря скорости.(которой и так не было)
Aleksashka1 вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных в UART из текстового файла bombardier_rotax Proteus 6 24.02.2010 20:50
Беспроводная передача данных? maxNTF Автоматика и аппаратура связи 6 29.12.2009 12:20
Котроллер дисплея на Atmega8 kosant Микроконтроллеры, АЦП, память и т.д 24 30.11.2009 20:57
Порт С в ATmega8 VVKart Микроконтроллеры, АЦП, память и т.д 2 10.11.2009 14:08
proteus, atmega8, меняю ноги в hex - не работает digitest Микроконтроллеры, АЦП, память и т.д 3 08.10.2009 13:07


Часовой пояс GMT +4, время: 07:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot