Микроконтроллеры AVR - применение и Краткий Курс - часть 9

 
1 2 3 4 5 6 7 47

AVL

новичок
WDT выключен.
Без разницы, что я ему в функцию вписываю. На МАКС частоте работает.
Ищу наставника по AVR. Не бесплатно :)  
RU termostat #20.03.2006 11:05
+
-
edit
 

termostat

аксакал

почему не работает "стандартная" функция "delay_ms". Она ж даже в хелпе к компилятору описана.
 


читайте курс - ВНИМАТЕЛЬНО.

janus

втянувшийся
Здравствуйте! Кто нибудь писал софт для приема данных от МК на компе через уарт? Можете исходниками поделиться? Желательно для билдера:) А то не получается:(
 

Вот компоненты, которые можно использовать. Есть доки и достаточно много проимеров.
TurboPower Async Professional:
Async Professional is a comprehensive communications toolkit for Borland Delphi, C++Builder, & ActiveX environments. It provides direct access to serial ports, TAPI, and the Microsoft Speech API. It supports faxing, terminal emulation, VOIP, & more.

TurboPower Async Professional

Async Professional is a comprehensive communications toolkit for Embarcadero Delphi, C++Builder, & ActiveX environments. It provides direct access to serial ...

// sourceforge.net
 



TurboPower Async Professional CLX:
Async Professional CLX is a comprehensive communications toolkit for Borland Kylix. It provides direct access to serial ports, and supports terminal emulation, file transfer protocols, & much more.

TurboPower Async Professional CLX

Async Professional CLX is a comprehensive communications toolkit for Borland Kylix. It provides direct access to serial ports, and supports terminal emulation, ...

// sourceforge.net
 


WBR, janus. http://janus.rbcmail.ru  

AVL

новичок
Да это понятно, что если где-то что-то да ещё и внимательно читать, то ответ я найду САМ. Но я ж для того и спрашиваю, что-б облегшить себе жизнь, если кому-то не в лом ответить. Для того ж и форум. Или для чего?
Ищу наставника по AVR. Не бесплатно :)  

SAA

втянувшийся

Здравствуйте! Кто нибудь писал софт для приема данных от МК на компе через уарт? Можете исходниками поделиться? Желательно для билдера:) А то не получается:(
 


Кое-что есть только смотри внимательно и обязательно проверяй, а то могут быть просто черновики (задумки) , ок!?

P.S. Последнее точно рабочее, насчет первых двух уверен не до конца ;)
 

SiNil

новичок
jagr, SAA, Спасибо.
Посмотрю сейчас.
Просто у меня проблема - МК передает на скорости 115200 почти непрерывно поток данных пакетами по килобайту и его надо оперативно принимать и по этим данным строить график. Всякие косяки вылазят. APRO смотрел, но чет когда смотрел, не понял, как юзать (в силу нелинейности своих рук). Придумал вроде решение, но сдругим компонентом(я их 3 штуки нашел, плюс пару классов, но не знаю, что с ними делать))) сейчас реализовываю.
Но за архивы по любому пасиб)))
 

pokos

аксакал

Просто у меня проблема - МК передает на скорости 115200 почти непрерывно поток данных пакетами по килобайту и его надо оперативно принимать и по этим данным строить график. Всякие косяки вылазят.
 

Помнится, баловался я таким делом. Но косяков не было, даже без Async Pro, а просто стандартными средствами Форточек. Буфер ему на приём побольше, и всё без потерь работает.
Запросто добивался, чтобы даже видео не херило поток данных с порта. Это средствами Delphi, без прибамбасов. RealTime Priority. Оно лечит.
 
RU termostat #21.03.2006 00:26
+
-
edit
 

termostat

аксакал

МК передает на скорости 115200 почти непрерывно поток данных пакетами по килобайту и его надо оперативно принимать и по этим данным строить график.
 


есть спец прога в инете - Serge77 давал линк в "БРЭО" или в "стенд"

SAA

втянувшийся

jagr, SAA, Спасибо.
Посмотрю сейчас.
Просто у меня проблема - МК передает на скорости 115200 почти непрерывно поток данных пакетами по килобайту и его надо оперативно принимать и по этим данным строить график.
 


Я помнится такое делал. Тут только один подводный камень, кварц и коэффициенты на МК нужно подобрать тщательнее, что бы не выпадало ничего из UART-ского потока. Коэффициенты ошибок в зависимости от делителя Alghoritm Builder показывает, если я ничего не путаю. В билдере я делал так:

//---------------------------------------------------------------------------
// Инициализация
//---------------------------------------------------------------------------
void __fastcall TForm1::InitCommunication(void)
{
if(hCom >= 0) CloseHandle(hCom);
hCom = CreateFile(PORT.c_str(),GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,
NULL);

if (hCom == INVALID_HANDLE_VALUE) MessageBox(0,"Error","com1",0);
DCB dcb = {0};
if (!GetCommState(hCom, &dcb)) MessageBox(0,"Error","BCB get",0);
else{
// структура DCB инициализирована
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
// dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
}
if(!SetCommState(hCom, &dcb)) MessageBox(0,"Error","BCB set",0);
}

//---------------------------------------------------------------------------
// Процедура снятия отсчетов с COM2
//---------------------------------------------------------------------------
void __fastcall CyclRead(void)
{
DWORD dwRead, dwWait;
OVERLAPPED Sync = {0};

// Создаём событие для контроля за асинхронным чтением
Sync.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(Sync.hEvent==NULL)
MessageBox(0,"Ошибка создания события для осчета","SyncEvent",0);
else{
// Пока кнопка старт нажата снимаем отсчеты
while(MCU_ACTIVE)
{
if(GET_DATA_FROM_MCU){

if(TRY_CONNECT){
TRY_CONNECT = false;
Form1->ClientGRP->Open();
}
if(Form1->ClientGRP->Active) Form1->Caption = "Client: SERVER START CONNECTING";

// Начинаем чтение…
if(!ReadFile(hCom, &Mes.Value, 2, &dwRead, &Sync)){
if(GetLastError() != ERROR_IO_PENDING)
MessageBox(0,"Ошибка чтения устройства","ReadFile",0);
else{
// Ошибок чтения нет, ожидаем завершение операции чтения
dwWait = WaitForSingleObject(Sync.hEvent, TIMEOUT);
switch (dwWait)
{
case WAIT_OBJECT_0: // Операция чтения закончена
if(!GetOverlappedResult(hCom, &Sync, &dwRead, FALSE))
MessageBox(0,"Ошибка при чтении устройства","ReadFile",0);
else
GetValue();
break;
case WAIT_TIMEOUT:
// Операция чтения данных ещё не закончилась можно занятся чем-нибудь полезным
break;
default:
MessageBox(0,"Ошибка выполнения операции","WaitForSingleObject",0);
}
}
}
else{
// Операция чтения уже завершилась, можно обрабатывать полученные данные
GetValue();
}
}
Application->ProcessMessages();
}
CloseHandle(Sync.hEvent);
}
}
 



Всякие косяки вылазят. APRO смотрел, но чет когда смотрел, не понял, как юзать (в силу нелинейности своих рук). Придумал вроде решение, но сдругим компонентом(я их 3 штуки нашел, плюс пару классов, но не знаю, что с ними делать))) сейчас реализовываю.
Но за архивы по любому пасиб)))
 


Не используй компонентов вообще, на уровне WinApi куда проще, устанавливаешь синхронное/асинхронное чтение с порта, открываешь его как файл и Read, в соответствии с синхро/асинхрон либо тут же читаешь, либо читаешь когда придет байт. И главное! Не забывай отдавать системе время

Application->ProcessMessages();
 
Это сообщение редактировалось 21.03.2006 в 09:51

SiNil

новичок
Я помнится такое делал. Тут только один подводный камень, кварц и коэффициенты на МК нужно подобрать тщательнее, что бы не выпадало ничего из UART-ского потока. Коэффициенты ошибок в зависимости от делителя Alghoritm Builder показывает, если я ничего не путаю.
 


В код вижне тоже показывает. Я кварц на 14,7456 использую. Ошибка - 0.

В билдере я делал так:
 


Спасибо огромное!

Не используй компонентов вообще, на уровне WinApi куда проще, устанавливаешь синхронное/асинхронное чтение с порта, открываешь его как файл и Read, в соответствии с синхро/асинхрон либо тут же читаешь, либо читаешь когда придет байт. И главное! Не забывай отдавать системе время
Application->ProcessMessages();
 


Да, я уже понял про компоненты. Проблема была в другом - график медленно рисовался. Оказалось - TChart - сильно тормознутая (а мож руки кривые:) ). Так что главная проблема - рисовать. данные на большой скорости принимаются.
Сейчас всё сделал в два потока - один читает (реализованно синхронное чтение, на винапи), другой рисует. на канве ПайнтБокса. но иногда не рисуется :( Уже 5 дней не сплю:( Не получается нормальная прога.

Помнится, баловался я таким делом. Но косяков не было, даже без Async Pro, а просто стандартными средствами Форточек. Буфер ему на приём побольше, и всё без потерь работает.
Запросто добивался, чтобы даже видео не херило поток данных с порта. Это средствами Delphi, без прибамбасов. RealTime Priority. Оно лечит.
 

буфер большой нельзя. надо по килобайту... На какой скорости у тебя было?
RealTime Priority вешает прогу, и билдер, и систему :)
 

pokos

аксакал

буфер большой нельзя. надо по килобайту... На какой скорости у тебя было?
 

115200, макс буфер, который я пользовал, был 3кбайта.
RealTime Priority вешает прогу, и билдер, и систему :)
 

Значит неправильно пользуешься тредами.
Я проверял двумя способами. Первый - одновременно смотреть видео. Всё было без потерь и проскоков кадров. Второй, более суровый, запуск чего-нибудь сильно ресурсожрущего в DOS-окне. DOS-окно иногда подтормаживало, а вот данные не терялись.
 

SAA

втянувшийся

Проблема была в другом - график медленно рисовался. Оказалось - TChart - сильно тормознутая (а мож руки кривые:) ). Так что главная проблема - рисовать. данные на большой скорости принимаются.
 


Да уж не на такой и большой, посчитаем:
115 Кбит грубо = 15 КБ/с

Сейчас всё сделал в два потока - один читает (реализованно синхронное чтение, на винапи), другой рисует. на канве ПайнтБокса. но иногда не рисуется :( Уже 5 дней не сплю:( Не получается нормальная прога.
буфер большой нельзя. надо по килобайту... На какой скорости у тебя было?
RealTime Priority вешает прогу, и билдер, и систему :)
 


Не стал бы делить потоки, зачем?
Фактически лишний раз шелкать контекстом процессора ;)
Я тоже занимался выводом, взял просто выброс на канву через TForm->Canvas->MoveTo, TForm->Canvas->LineTo. Но не панацея пскольку луч (будем так говорить) стробирует на определенных скоростях (я делал развертку подобно осцилографу), тут скорее всего нужно буферезировать в TBitmap, потом TForm->Canvas->DrawBitmap. Это избавит от сопутствуещего стирания или прорисовки линии (это ж брезентхем скорее всего), в TBitmap можно шлепать векторно через TCanvas (по сути тот же брезентхем но без ожидания GDI) а можно и пиксильно через маску байта в массив TBitmap. Как настанет момент выброса на экран, Draw выкенет принципиально быстрее чем векторная отрисовка.
 
MD bezobraznic #23.03.2006 13:57
+
-
edit
 

bezobraznic

новичок
Кто пользуется microc for PIC какой вы програматор используете. Поделитесь схемой плиз!!!!
 
RU termostat #23.03.2006 14:41
+
-
edit
 

pdk

втянувшийся

Господа, а прошивает ли CodeVision мк подключенный через "5 проводков"?
( в документации перечисленно куча поддерживаемых плат, если ли среди них "проводки" ?)

Вопросс снят, разобрался)
Проект создания беспилотника www.FreeUAV.org  
Это сообщение редактировалось 23.03.2006 в 17:22
MD bezobraznic #23.03.2006 17:34
+
-
edit
 

bezobraznic

новичок
курс страницы 6 и 9
 


Благодарю!!!!
 
+
-
edit
 

Serge77

модератор

На какой самой маленькой частоте может работать Атмега8 с внешним RC генератором? В документации написано "меньше 0.9 МГц" - это значит можно почти до нуля?

На 1 КГц сможет? Насколько снизится потребление тока по сравнению с 1 МГц?
RU termostat #26.03.2006 11:36
+
-
edit
 

termostat

аксакал

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

Важно лишь чтобы фронты и спады импульсов были достаточно крутыми (какимим в ДШ читать!) - т.е. низкочастотная синусоида не покатит.

Потребление тоже в ДШ - в конце по моему графики.
+
-
edit
 

Serge77

модератор

Важно лишь чтобы фронты и спады импульсов были достаточно крутыми (какимим в ДШ читать!) - т.е. низкочастотная синусоида не покатит.
 

Вот я и спрашиваю, будет ли работать, если согласно документации на вход XTAL1 повесить резистор и конденсатор (внешний RC осциллятор), на которых частота тактового генератора Атмеги получится порядка 1 КГц? Достаточно ли крутыми будут те самые фронты?

Потребление тоже в ДШ - в конце по моему графики.
 


Читал. Там графики обрываются на 100 КГц. Вот я и засомневался, а что будет дальше?

А самый интересный вопрос такой: если на XTAL1 (РВ6) подключен осциллятор, а в программе я даю команду
ldi tmp,0b10111111
out PORTB,tmp

это не помешает осциллятору?
RU termostat #26.03.2006 12:30
+
-
edit
 

termostat

аксакал

"Maksim":
Есть два меандра, как получить их логическое "И" на Си
 



т.е. они подаются на МК из вне ?

тогда так:

Сигналы подаются на ВХОДЫ PA1 PA2

выходной сигнал "И" будет на ВЫХОДЕ PA3

code text
  1. ====== CodeVisionAVR  =======
  2.  
  3. while(1){
  4.  
  5. if((PINA.1)&&(PINA.2))
  6.            {PORTA.3 = 1}
  7.      else
  8.            {PORTA.3 = 0};
  9.  
  10. };
  11.  
  12. ==============================


Если сигналы формируются самим МК то они должны быть вместо PINA.1 PINA.2 - но получатся большие задержки в формировании "И" - значит ошибки, если МК будет делать что-то еще.

Но помоему лучше поставить одно-элементную логическую микруху в корпусе SOT-23-5.


Можно еще проще:

Если сигналы идут с выходов типа "открытых коллекторов" - то их просто соединить вместе и получится "И"

Если сигналы с активный цифровых выходов - то их подпть на черточки диодов шотки, а "попки" диодов соединить в месте и подключить через резистор 4.7 КОм (зависит от частот сигнала и монтажной емкости) на питание МК. На "попках" диодов получим "И".

Опять же два диода так соединеных есть в корпусе SOT-23.
RU termostat #26.03.2006 12:34
+
-
edit
 

termostat

аксакал

Вот я и спрашиваю, будет ли работать, если согласно документации на вход XTAL1 повесить резистор и конденсатор (внешний RC осциллятор), на которых частота тактового генератора Атмеги получится порядка 1 КГц? Достаточно ли крутыми будут те самые фронты?
 


Там в ДШ написаны допустимые номиналы R и С - отсюда получается возможный диапазон частот такого генератора.

А самый интересный вопрос такой: если на XTAL1 (РВ6) подключен осциллятор, а в программе я даю команду
ldi tmp,0b10111111
out PORTB,tmp

это не помешает осциллятору?
 


Я стразу не могу ответить, опять же в ДШ нужно прочитать про альтернативные функции PORTB

Но думаю что если включен фтюзами внешний такт то вывод РВ6 перестает быть обычным I-O.
RU termostat #26.03.2006 13:28
+
-
edit
 

termostat

аксакал

Качайте люди BASCOM AVR 1.11.8.1 - Бэйсик для AVR

Он по прежнему великолепен и стал даже лучше !

Примеры - их список завораживает ...

а Help к нему - по сути курс с картинками для начинающего микроконтроллерщика !


Скоро обещали таблеточку !

... но и без нее лимит демо-версии увеличен с 2 до 4 КБ кода !


Встроен простенький отладчик с текстовым LCD, клавиатурой 4х4, терминал, генератор импульсов, переменный резистор, куча светодиодов, ЕСТЕСТВЕННО монитор регистров и переменных.

Вобщем и без внешнего симулятора великолепен, а в кУпе с VMLAB или PROTEUS и подавно !
+
-
edit
 

Serge77

модератор

Там в ДШ написаны допустимые номиналы R и С - отсюда получается возможный диапазон частот такого генератора.
 


Что-то я не нашёл допустимых номиналов. Есть ограничение на минимальную ёмкость, а про резистор ничего.

Есть External RC Oscillator application note, там написано "Wide Frequency Range 100 kHz - 12 MHz". Значит ниже 100 КГц нельзя?

Ещё один вопрос возник. Если XTAL1 (РВ6) задействован на осциллятор, то XTAL2 (РВ7) свободен, написано NC. Означает ли это, что его вообще ни для чего нельзя использовать? Или он будет работать, как обычный выход порта?
RU termostat #26.03.2006 13:58
+
-
edit
 

termostat

аксакал

Есть External RC Oscillator application note, там написано "Wide Frequency Range 100 kHz - 12 MHz". Значит ниже 100 КГц нельзя?

Если XTAL1 (РВ6) задействован на осциллятор, то XTAL2 (РВ7) свободен, написано NC.
 


Ну значит рекомендуют вы 100 кгц.

NC - значит не подсоединен. использовать нельзя ессно.
+
-
edit
 

Serge77

модератор

Ну раз второй выход всё равно пропадает, тогда RC смысла не имеет, лучше часовой кварц.
1 2 3 4 5 6 7 47

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru