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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> ADUC824 + AD7734 как начать, Вопрос чайника, программирование ADUC824
ih_
сообщение Nov 23 2010, 13:00
Сообщение #16


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Приветсвую Вас.
Есть к FAUSTddd дополнительные вопросы.
Цитата(FAUSTddd @ Nov 18 2010, 07:11) *
...осуществляю так:
скорость передачи через уарт делаю максимальной 57600.
Какой у Вас кварц? При 11059200Гц, можно передавать на 230400 бод. Или Вы имели ввиду, что этой скорости хватит для передачи вашего потока?
Цитата
отключаю chop, время преобразования на АЦП уменьшаю до минимума 65мкс.
выставляю сингл режим на 1 канал АЦП запрашиваю-получаю полученные данные, отправляю по com-port
Попробуйте сначала запустить следующее преобразование, а в это время работать на вывод.
Цитата
в итоге дискретизация получаетсяя 2мс, итого 800гц/5=160гц. а надо 1Кгц
Промеряйте все времена по этапам обработки. Должно все быстро быть.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Nov 23 2010, 22:26
Сообщение #17


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(FAUSTddd @ Nov 23 2010, 14:40) *
Вообще тут ограничение у Адука на уарте пишут что 57600 максимум. насчет переходника еще не пробывал. но выставлять ведь как-то надо программно а там таймеры.

Чтото не видел я такого ограничения в УАРТе.
задействуйте второй таймер и поставьте кварц с частотой кратной 115200*32, например 11,0592МГц. И можете полуычить вплоть до 230кБит (режим 1 или 3).
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Nov 29 2010, 11:30
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



Еще возник вопрос- почемуто при отправке 0А через уарт на компе получаю 0D 0A?

Цитата
Чтото не видел я такого ограничения в УАРТе.

Какая максимальная скорость передачи может быть достигнута UART ADuC824?
Ответ: Максимальная скорость передачи ADuC824 составляет 393 Кбод. В единицах скорости
передачи ПК (целочисленное деление 115200) максимальная скорость передачи равна
57600 бод. Она достигается очисткой бита CD в регистре PLLCON и использованием
значений –1 и –7 в регистрах RCAP2H и RCAP2L, соответственно.
Цитата
Какой у Вас кварц? При 11059200Гц, можно передавать на 230400 бод. Или Вы имели ввиду, что этой скорости хватит для передачи вашего потока?

какой имеется ввиду кварц? адука или АЦП
Цитата
Попробуйте сначала запустить следующее преобразование, а в это время работать на вывод.
попробую

Сообщение отредактировал FAUSTddd - Nov 29 2010, 11:58
Go to the top of the page
 
+Quote Post
diglook
сообщение Nov 30 2010, 17:15
Сообщение #19


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

Группа: Участник
Сообщений: 99
Регистрация: 29-06-09
Пользователь №: 50 730



Извините может я неправ
Цитата
800гц/5=160гц. а надо 1Кгц

но в даташите
Optimized for fast channel switching
- 18-bit p-p resolution (21 bits effective) at 500 Hz
- 16-bit p-p resolution (19 bits effective) at 2 kHz
- 14-bit p-p resolution (18 bits effective) at 15 kHz

Go to the top of the page
 
+Quote Post
ih_
сообщение Dec 1 2010, 06:45
Сообщение #20


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата(FAUSTddd @ Nov 29 2010, 14:30) *
какой имеется ввиду кварц? адука или АЦП
ADUCа, мы же разбираем UART. Скорость может быть более 230 кбод (при 11.05092 Мгц кварце).
Цитата
Еще возник вопрос- почемуто при отправке 0А через уарт на компе получаю 0D 0A?
Проверьте отсутствие стоп-бита.

Сообщение отредактировал ih_ - Dec 1 2010, 06:46
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Dec 1 2010, 07:38
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



т.е. Watch crystal 32кГц поменять на кристалл 11Мгц? нужен четко 11.05092? и какой кварц его вид имеет значение или какие-то его параметры

а где проверить? в настройках приемной проги написано, стоп бит 1.

Сообщение отредактировал FAUSTddd - Dec 1 2010, 07:49
Go to the top of the page
 
+Quote Post
forever failure
сообщение Dec 1 2010, 07:50
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Тут автор видимо не упомянул, что согласно даташиту сабжевый контроллер имеет на борту ПЛЛку и делитель частоты, и наружу у него торчат ноги для поключения _часового_ кварца (32768 Гц) и другие варианты выбора источника тактовой частоты не предусмотрены. Поэтому использовать кварц с частотой 11.05092 МГц весьма проблематично, если вообще возможно.

Проверка ошибок фрейма/чётности/переполнения буфера в WinAPI:
CODE
bool frame_error = false;
DWORD err;
/* ... */
ReadFile (/*...*/); /* тут ваше чтение байта */
ClearCommError (handle, &err, 0);
if (err & (CE_FRAME | CE_RXPARITY | CE_IOE | CE_OVERRUN))
frame_error = true; /* ошибка обнаружена */
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Dec 1 2010, 09:58
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



Т.е. нельзя подрубить другой кристал?
пробывал проверить ошибки, ошибок нету, пользуюсь Ткомпорт компанентой делфи, проверяю так...

Код
if Errors = [] then Exit;
//  inherited OnError(Errors);
  if ceFrame in Errors then
     Application.MessageBox('The hardware detected a framing error.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceOverrun in Errors then
     Application.MessageBox('A charachter buffer overrun has occured.'+#13+'The next charachter is lost.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceRxParity in Errors  then
     Application.MessageBox('The hardware detected a parity error.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceBreak in Errors  then
     Application.MessageBox('The hardware detected a break condition.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceIO in Errors  then
     Application.MessageBox('An I/O error occured during communication with the device.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceMode in Errors  then
     Application.MessageBox('The requested mode is not supported.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceRxOver in Errors  then
     Application.MessageBox('An input buffer overflow has occured.', 'Îøèáêà', MB_ICONERROR+MB_OK);
  if ceTxFull in Errors  then
     Application.MessageBox('The output buffer is full.', 'Îøèáêà', MB_ICONERROR+MB_OK);

никаких ошибок нет

Такое ощущение что порт сам его превращает, потому как на всех прогах, такая же ситуация добаляется OD когда идет ОА, как настроить можно компорт?
Go to the top of the page
 
+Quote Post
ih_
сообщение Dec 1 2010, 12:44
Сообщение #24


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата(forever failure @ Dec 1 2010, 10:50) *
Тут автор видимо не упомянул, что согласно даташиту сабжевый контроллер имеет на борту ПЛЛку и делитель частоты, и наружу у него торчат ноги для поключения _часового_ кварца (32768 Гц) и другие варианты выбора источника тактовой частоты не предусмотрены.
Прошу прощения, что ввел автора в заблуждение. Кварц оставляем. Скорости более 230 кбод достижимы. И девяти битный режим как раз более предпочтителен, из-за меньшей ошибки на бит 32768*3*128/115200/9 = 12,1362962963.
Цитата
Такое ощущение что порт сам его превращает, потому как на всех прогах, такая же ситуация добаляется OD когда идет ОА, как настроить можно компорт?
Попробуйте принять то, что отправляете. Возможно, если приведете код инициалицации PLL, UART и таймера под UART, что то пряснится. А еще лучше и код ПОП UART или код которым отправляете.

Сообщение отредактировал ih_ - Dec 1 2010, 12:48
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Dec 1 2010, 14:16
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



Цитата
Скорости более 230 кбод достижимы. И девяти битный режим как раз более предпочтителен, из-за меньшей ошибки на бит 32768*3*128/115200/9 = 12,1362962963.


Каким образом достигается скорость 230 кбод?

Код
char G (unsigned char n)
{

ISPI=0;
SPIDAT=n;
while(ISPI==0);
return(SPIDAT);
}




void main (void) {


#ifndef MONITOR51
unsigned int m,i;
unsigned char c;
ADCMODE=0x10;
ADC1CON=0x20;    
PLLCON=0;
RCAP2H=-1;
RCAP2L=-7; //(достаточно близко к 57600 бод)    
TH2=0xFF;
TL2=-7;
SCON=0x52;
T2CON=0x34;
#endif
// CONFIGURE SPI...
ISPI=0; // set at the end of SPI transfer
WCOL=0; // collision error
SPE =1; // SPI enable now
SPIM=1; // MASTER MODE
//CPHA=1; // CLOCK PHASE SELECT both are 1
CPOL=1; // CLOCK POLARITY / for mode 3
SPR1=0; // 1 + 1 so Fosc/64
SPR0=0; //
T1=0;  RI=0;

T0=0;T0=1;

G(0x30);G(0x82);    
G(0x31);G(0x82);
G(0x32);G(0x82);
G(0x33);G(0x82);

P1 ^= 0x01;    
while(1){

if (RI) { while((c=getchar()) != '0') {G(0x38);G(0x3);RI=0;};

for (m=0;m<3;m++){    
if (m==0) G(0x38); /* запрос на запись в регистр режима*/
if (m==1) G(0x39);
if (m==2) G(0x3A);
G(0x40); /* запись  в регистр режима (однократное преобразование - 16 бита)*//* ждём готовности данных */
//G(0x42); /* запись  в регистр режима (однократное преобразование - 24 бита)*//* ждём готовности данных */

while (INT1);
if (m==0) G(0x48);
if (m==1) G(0x49); /* запрос на чтение из регистра данных */
if (m==2) G(0x4A);
putchar(G(0x00));
putchar(G(0x00));//putchar(G(0x00));

}    //}

}}


текст всей проги

Сообщение отредактировал FAUSTddd - Dec 1 2010, 15:26
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Dec 1 2010, 17:56
Сообщение #26


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(FAUSTddd @ Nov 29 2010, 14:30) *
Еще возник вопрос- почемуто при отправке 0А через уарт на компе получаю 0D 0A?

Видимо АДУК настолько умен что сам добавляет код возврата каретки (0D) biggrin.gif

Цитата(FAUSTddd @ Dec 1 2010, 17:16) *
Каким образом достигается скорость 230 кбод?

Вам же написали: 32768*3*128/115200/9 = 12,1362962963.

только ошибка великовата (11%) для ком-порта- боюсь комп ничего не будет принимать. Хотя если умножать на 127 (если это возможно, не помню уже способности PLL) то получилось бы почти ровно 12
Go to the top of the page
 
+Quote Post
forever failure
сообщение Dec 2 2010, 04:47
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Цитата(Alexashka @ Dec 1 2010, 23:56) *
Видимо АДУК настолько умен что сам добавляет код возврата каретки (0D) biggrin.gif

ээээ.... То есть на адуке завелась новая форма жизни в виде искусственного интеллекта ?

Ну и про 9 бит - а принимающая сторона способна такую посылку проглотить ? Да и 11 % отклонения по скорости - эт пожалуй за пределами возможностей последовательного порта.

Но, если у автора принимающая программа крутится под виндой, есть ход конём на кривой кобыле: на адуке выставить нестандартное значение скорости, которое устраивает и на принимающей программе тоже в коде инициализации ком порта подставить полученное значение скорости.
Go to the top of the page
 
+Quote Post
ih_
сообщение Dec 2 2010, 06:34
Сообщение #28


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата(FAUSTddd @ Dec 1 2010, 17:16) *
текст всей проги
Не совсем. А где putchar() и getchar()?
Цитата
Каким образом достигается скорость 230 кбод?
Идея такая. Один отсчет таймера (TFx=1, в Вашем случае это TF2) - соответсвуйт 1 биту в порт UART.
Формула CLK/baudRate/bits=TimerReloadValue, где:
- CLK - частота на выходе PLL (у Вас 12582912 Гц, код "PLLCON=0");
- baudRate - Ваша скорость передачи;
- bits - число бит на байт данных (у Вас 8 , код "SCON=0x52");
- TimerReloadValue - значение для перезагрузки таймера (у Вас 7, код "TL2=-7").

Пример расчета:
32768*3*128/115200/9 = 12,1362962963, где:
- CLK=32768*3*128=12582912 Гц;
- baudRate=115200 бод;
- bits=9 бит;
- TimerReloadValue=12 единиц.
Цитата
...11%...
Экперимент все поставит на свои места smile.gif

Дополнения/рекомендации по Вашему коду:
- код "SCON=0x52", заменить на "SCON=0x50", тк Вы устанавливаете биты RI и TI, а затем RI очищаете "RI=0";
- попробуйте отладить UART без SPI. Сейчас Вы отправляете в UART то, что принял SPI ("putchar(G(0x00));putchar(G(0x00))"), а принял он видимо "0x0D" и "0x0A". Из Вашего кода не видно, что Вы отправляете один байт "0x0A";
- инициалязация PLL. У Вас "PLLCON=0", попробуйте заменить на "PLLCON&=~0x43;while(!PLLCON|=0x40)". Надо проверять LOCK бит, иначе PLL дает частоту с большой погрешностью, видимо будут дополнительные проблемы.
Цитата(из datasheet)
In this mode, the PLL output can be 12.58MHz ± 20%
- проверьте расчет перезагрузки таймера синхронизации UART (у Вас 7). А если подсчитать 32768*3*128/57600/8 = 27,307. Получаем 27. Замените
Код
RCAP2H=-1;
RCAP2L=-7; //(достаточно близко к 57600 бод)    
TH2=0xFF;
TL2=-7;
на
Код
RCAP2H=-1;
RCAP2L=-27; //(теперь очень близко к 57600 бод)    
TH2=-1;
TL2=-27;
Или -7 оставить, а снизить частоту PLL до 32768*3*32/57600/8 = 6,827 ("PLLCON=5")


Сообщение отредактировал ih_ - Dec 2 2010, 06:57
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Dec 2 2010, 09:28
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



#include <aduc824.H> /* special function register declarations */
/* for the intended 8051 derivative */
#define XTAL 1572800 // CPU Oscillator Frequency

#include <stdio.h> /* prototype declarations for I/O functions */


#ifdef MONITOR51 /* Debugging with Monitor-51 needs */
char code reserve [3] _at_ 0x23; /* space for serial interrupt if */
#endif

это вся прога, путчары в конце. и их там 2а, теоретически там не может три байта прийти. Там скорее всего на компе както преобразуется, потому что приходит там нормально.

Спасибо попробую завтра на испытуемом.

Сообщение отредактировал FAUSTddd - Dec 2 2010, 09:50
Go to the top of the page
 
+Quote Post
FAUSTddd
сообщение Dec 7 2010, 11:12
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 15-11-06
Пользователь №: 22 340



в общем поглядел на осциллографе посылку 0A. с уарта на провод компорта идет одна только 0A.
далее попробывал все программы которые мне известны для компорта (в том числе и гипертерменал от виндовс), все они выдают вместо 0A - 0D0A. грешу на драйвер компорта, не знаю в чем может быть прокол, подскажите плыззз.
Go to the top of the page
 
+Quote Post

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

 


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


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