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

 
 
> MSP430 - снова вопросы от чайника, Вопросы от чайника про MSP и магнитный компас
Daria
сообщение Jul 23 2008, 19:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



smile.gif Здравствуйте. Кто читал предыдущую мою тему "MSP430 - вопросы от чайника", тот поймет - это снова я biggrin.gif Тему закрыли, слишком долго висела. А вопрсов все больше. smile.gif
Если кому-то вдруг окажется не влом разбираться, то
Вот кусок проги:
int flag;//глобальные переменные
int cindex;
испульзуемые функции(write_flash - пишет число во flash, read_flash - считывает)
void write_flash(float* value, float *addr)
{ while(FCTL1 & BUSY);
_BIC_SR(GIE);
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*addr = 0;

while(FCTL1 & BUSY);
FCTL1 = FWKEY + WRT; for (int i=0;i<=3;i++)
{ *addr = value[i];
addr++;
}

_BIS_SR(GIE);
while(FCTL1 & BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

void read_flash(float* addr, float* pfO)
{
for (int i=0;i<=3;i++)
{ pfO[i]=*addr;
addr++;
}
}
Чего хочу сделать - Если присылаю 0, то должны считаться два показания с выводов P6.3 и P6.4, присылается 0хАА - т.е. "считалось", записываются первые элементы двух массивоы данных.
Когда набирается по четыре элемента, индекс сбрасывается
Если присылаю 0xFF, то должна выполнится функция calibrovka_hmc, если она выполняется неверно, то присылается 0хСС, иначе из flash считывается и присылается вычисленная с помощью этой функции константа.
Внутри функции main
ADC12CTL0 = ADC12ON + REFON + SHT0_8; //настройка АЦП
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;

float temp[4];
flag=0;
cindex=0;
for(;;)
{
for(delay = 0; delay <20000; delay++);
if( flag==0 )
{send_int(0x0);
}
if( flag==1 )
{

if (calibrovka_hmc(CVx, CVy, temp)==0)//calibrovka_hmc - имеет параметрами два массива и вычисляет четыре константы(нужные для калибровки устройства)

{
send_int(0xCC);
flag=0;
}
else
{
float pfO[4];
read_flash((float*)0x1000,pfO);
r=(int)(pfO[0]+0.5);
send_int®;
flag=0;
}

flag=4;
}

if (flag==2)
{
ADC12CTL0 |=ADC12SC + ENC; CVx[cindex] = ADC12MEM3; CVy[cindex] = ADC12MEM4;
ADC12CTL0 &= ENC;
cindex++;
send_int(0xAA);
flag=0;
}

if (cindex>3)
cindex=0;
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx ( void)
{
if( RXBUF0==0xFF)
flag = 1;
if (RXBUF0==0x0)
flag = 2;
}
В ЧЕМ ПРОБЛЕМА:
Перед выполнением калибровки присылаю элементы массива, полученного при считывании показаний с выводов, - оказывается, что в массив записываются по два-три раза одно значение, хотя этого не может быть. Соответственно, из-за этого не работает и все остальное crying.gif
Может, неправильно настроен АЦП? Или в чем может быть дело?
И, если кому-то вдруг не влом разбираться - функции записи во flash и чтения flash - можно ли сделать как-то поумнее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 23 2008, 22:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Некоторое (продолжительное) время не заглядывал в форум, а когда заглянул оказалось, что вашу тему прикрыли. cranky.gif
По поводу Flash.
Проверять готовность к записи во Flash (бит BUSY) при выполнении программы записи прямо из Flash нет необходимости. Вот такая вот продвинутая технология у MSP430 smile.gif Почему так, объяснять еще раз не буду. Читайте внимательно User's Manual. Проверка готовности нужна только в том случае, если ваша функция записи исполняется из ОЗУ (SRAM), а не из Flash.
Запись во внутреннюю Flash MSP430 может производится 16-и разрядными словами и/или байтами. float имеет размерность 32 бита, т.е. 2 слова/4 байта. Так что, для записи переменной float нужно как минимум две команды записи 16-и битных слов или четыре команды записи байта. У вас указатели value и addr указывают на тип float. Поэтому команды типа addr++; увеличивают значение такого указателя на 4 байта и во Flash пишется какая-то фигня. Пишите тогда уж пословно, делая явное приведение типа к 16-и битному целому.
Код
for (int i=0; i<(4*2); i++) // здесь я явно выделил удвоение числа элементов записи
((unsigned short *)addr)[i] = ((unsigned short *)value)[i];

Назначение функции чтения из Flash я вообще не очень понимаю. У MSP430 фон-Неймановская архитектура с общим адресным пространством для команд и данных. Встроенного EEPROM тоже нет. Так что выделять копирование в отдельную функцию (если только она не вызывается несколько раз) я не вижу смысла. Да и ее тоже можно оптимизировать на одну команду (выкинув addr++; ), если в теле цикла писать
Код
pfO[i]=addr[i];

Насчет всего остального.
Может у меня сложилось неверное впечатление, но похоже вы не осознаете, что такое синхронные и асинхронные события. Просто не владеете таким уровнем абстракций. Попробую объяснить на бытовом примере.
Вы когда-нибудь видели как подъемный кран работает? Внизу на земле стоит стропальщик, который крепит к крюку крана груз, а наверху в кабине крана сидит крановщик, который управляет движением крюка, стрелы и платформы крана. Причем крановщик не сам-по-себе управляет, а подчиняется управляющим командам стропальщика. Только после того как груз
- прицеплен,
- надежность крепления проверена,
- стропальщик подал команду "вира!"
крановщик включает двигатель, приводящий к движению крюка и стрелы крана. До подачи команды "вира!" крановщик просто ждет готовности груза.
У вас в системе присутствуют асинхронные процессы (измерение АЦП, прием/передача UART), а вы работаете с ними как Бог на душу положит. sad.gif Стропальщик убил бы просто такого крановщика, если бы остался жив после его несанкционированных действий. wink.gif
Эта иллюстрация синхронных действий. Для иллюстрации же асинхронных процессов к картине работы башенного крана нужно добавить несколько КАМАЗов с кирпичем, которые приезжают на стройку асинхронно работе крана, когда у них получится, и сваливают кирпич в общую кучу. Которую потом стропальщик с крановщиком общими синхронными действиями перемещают на строящийся уровень дома smile.gif
Эта моя пространная тирада относится в частности к строке
Цитата
ADC12CTL0 |=ADC12SC + ENC; CVx[cindex] = ADC12MEM3; CVy[cindex] = ADC12MEM4;

Где вы запускаете преобразование АЦП и тут же, не дожидаясь окончания выполнения преобразования, считываете результаты оцифровки непонятно чего. Раз вы не используете прерывание от АЦП, ну подождите для приличия установки флага готовности что ли laughing.gif
Код
ADC12CTL0 |=ADC12SC|ENC;
while ((ADC12IFG&(1<<3))!=0);
CVx[cindex]=ADCMEM3;
while ((ADC12IFG&(1<<4))!=0);
CVy[cindex] = ADC12MEM4;

То же самое относится к модификации флага в прерывании UART. Если вы посылаете последовательности из двух команд 0xFF и 0x00, и снова 0xFF и 0x00, но не успели считать значение какого-то флага, то его значение потеряется и вы получите дублирование команды 0xFF или 0x00. Потому, что прием через UART асинхронен выполнению основного тела программы, где эти флаги анализируются. Для того чтобы команды, принятые через UART не терялись, их нужно буферизировать, т.е. складывать в некий массив из которого в основном теле программы они будут извлекаться.
Буферы бывают линейные (типа FIFO) и циклические. По-моему для вашего случая больше подходит циклический буфер. Пример.
Код
#define UART_MAXBUFSIZE 8  //здесь задается размер выделяемого UART буфера
struct cbuf
{ unsigned char *pBuf;  //указатель на начало буфера
  unsigned int rIdx;   //индекс для чтения элемента из буфера
  unsigned int wIdx;  //индекс для записи элемента в буфер
  unsigned int cntr;  //счетчик общего количества элементов в буфере, чтобы знать о его заполнении
} cbuf;
unsigned char uartBuf[UART_MAXBUFSIZE]; // собственно сам буфер UART


где-то в начале программы нужно инициализировать структуру этого буфера
Код
...
cbuf.pBuf=&uartBuf[0];
cbuf.rIdx=0;
cbuf.wIdx=0;
cbuf.cntr=0;
...

В прерывании от приемника UART запись в буфер
Код
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx ( void)
{ if (cbuf.cntr<UART_MAXBUFSIZE)
  { cbuf.pBuf[cbuf.wIdx]=U0RXBUF;
    if (cbuf.wIdx<(UART_MAXBUFSIZE-1))
      cbuf.wIdx++;
    else
      cbuf.wIdx=0;
    cbuf.cntr++;
  }
}

В теле программы считывание из буфера. Для атомарности доступа к буферу на время доступа к нему временно запрещаем прерывание от приемника UART
Код
...
if (cbuf.cntr>0)
{ IE1&=~URXIE0;
  uCmd=cbuf.pBuf[cbuf.rIdx];
  cBuf.cntr--;
  IE1|=URXIE0;
  if (cbuf.rIdx<(UART_MAXBUFSIZE-1))
    cbuf.rIdx++;
  else
    cbuf.rIdx=0;
}
// дальше значение переменной uCmd можно использовать как текущую команду, полученную через UART
...
Go to the top of the page
 
+Quote Post
Daria
сообщение Jul 24 2008, 19:29
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Ага, все же заглянули smile.gif спасибо за комментарии и критику, все подробно и пространно. smile.gif
По поводу АЦП я уже сама доперла, установку флагов жду, режим использую последовательный, и бит MSC ставлю biggrin.gif Теперь работает. По поводу read_flash - ну да, но это так, для понта отдельная функция smile.gif
А по поводу write_flash - хм. но она работает. я проверяла, во flash пишется не фигня smile.gif может это мне просто везет? biggrin.gif
Про буфер - спасибо, попробую.
Вообще спасибо, что не забыли smile.gif
Go to the top of the page
 
+Quote Post
=DS=
сообщение Jul 25 2008, 03:03
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836



Цитата(Daria @ Jul 24 2008, 23:29) *
А по поводу write_flash - хм. но она работает. я проверяла, во flash пишется не фигня smile.gif может это мне просто везет?


Пока везет. В данном случае строка:

*addr = value[i];
скорее всего, транслируется компилятором как

MOV.W @R12+, 0(R13)
MOV.W @R12+, 2(R13)


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

*addr = 0;

транслируется в

MOV.W #0x0, 0(R13)
MOV.W #0x0, 2(R13)


что два раза подряд вызовет стирание сегмента, причем без пауз между ними. В лучшем случае это вызовет удвоенный износ флешки, в худшем - неизвестно (поскольку до подобных действий наверняка еще никто не додумался smile.gif )
Go to the top of the page
 
+Quote Post
Daria
сообщение Jul 25 2008, 18:27
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(=DS= @ Jul 25 2008, 07:03) *
*addr = 0;

транслируется в

MOV.W #0x0, 0(R13)
MOV.W #0x0, 2(R13)


что два раза подряд вызовет стирание сегмента, причем без пауз между ними. В лучшем случае это вызовет удвоенный износ флешки, в худшем - неизвестно (поскольку до подобных действий наверняка еще никто не додумался smile.gif )

sad.gif а как тогда написать? Такая строка была в примере, который я скачала с ИАРовского сайта, - "фиктивная запись". Как тогда написать фиктивную запись ?smile.gif
И вот еще ВОПРОС- понимаю, что, наверное, глупый, но -
Когда гружу прогу с помощью IAR Kickstart - работает нормально, считает четко все - я проверяла. Но так как код уже превышает 4кБ, гружу с помощью полной версии - на COM приходит полная ересь. С чем это может быть связано? Код такой же - один в один.
Я думала, может дело в доступе к библиотекам, но не ругается же на код, на #include <math.h>, работает, считает, пишет... только фигню 05.gif
Вот. Не ругайтесь! - уж такая я глупая biggrin.gif
Вот сама функция, она принимает два массива и на их основании вычисляет и пишет во flash 4 четыре константы
int calibrovka_hmc( float* V1, float* V2, float* calibr)
{

float x[4], a[3][3],d[4];
float Ox,k,Oy,kx,ky;
for (int i=0;i<4;i++)
{ a[i][0]=2*(V1[i]-V1[i+1]);
a[i][1]=2*(V2[i]-V2[i+1]);
a[i][2]= -((V2[i])*(V2[i])-(V2[i+1])*(V2[i+1]));
a[i][3]= ((V1[i])*(V1[i])-(V1[i+1])*(V1[i+1]));
d[i]=((V1[i])*(V1[i])-(V1[i+1])*(V1[i+1]));
}

if (gauss(x,a,d,3)==0) return 0;
else
{
Ox=x[0];
k=x[2];
if (x[2]!=0) Oy=x[1]/x[2];
else Oy=0;
}
kx=sqrt((V1[3]-Ox)*(V1[3]-Ox)+k*(V2[3]-Oy)*(V2[3]-Oy));
ky=sqrt((kx)*(kx)/k);
calibr[0]=Ox;
calibr[1]=Oy;
calibr[2]=kx;
calibr[3]=ky;
write_flash( calibr, (float*) 0x1080);
return 1;
}

gauss( ) - решение системы методом Гаусса, она точно работает, не буду приводить - к тому же вряд ли кому-то будет охота в ней разбираться smile.gif
Такие вопросы laughing.gif

Сообщение отредактировал Daria - Jul 25 2008, 18:31
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 25 2008, 19:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Daria @ Jul 26 2008, 00:27) *
sad.gif а как тогда написать? Такая строка была в примере, который я скачала с ИАРовского сайта, - "фиктивная запись". Как тогда написать фиктивную запись ?smile.gif
Конечно фиктивная запись, вот только в примере скорее всего был указатель другого типа (unsigned int или unsigned char). Как поступить в данной ситуации я вам уже выше подсказал - используйте явное приведение типа. Раз у вас указатель на float, то при фиктивной записи преобразуйте его к указателю на unsigned int.
Код
*((unsigned int *)addr)=0;

Цитата(Daria @ Jul 26 2008, 00:27) *
И вот еще ВОПРОС- понимаю, что, наверное, глупый, но -
Когда гружу прогу с помощью IAR Kickstart - работает нормально, считает четко все - я проверяла. Но так как код уже превышает 4кБ, гружу с помощью полной версии - на COM приходит полная ересь. С чем это может быть связано? Код такой же - один в один.
Версии IAR одинаковы? Настройки проекта одинаковы? И вообще, спрашивается зачем использовать KickStart при наличии полной версии? 07.gif Если вы не пользуетесь дебаггером, то для загрузки прошивки в кристалл использовать IAR вообще не обязательно. Пользуйтесь специальными программами. MSPFET Programmer от Kurt-а или FET-Pro430 Lite от Elprotronic или вот тут же в форуме zltigo свою утилиту AT430 предлагает.
А вообще правильность работы алгоритма программы можно проверить в симуляторе. Тем более, если у вас есть в наличии результаты работы алгоритма по известным данным.
Go to the top of the page
 
+Quote Post
Daria
сообщение Jul 25 2008, 21:05
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



И версии, и настройки. А кикстарт - потому что сначала был только он smile.gif
FET-Pro430 Lite у меня есть. но не очень-то удобно компилироваться, а потом грузить через нее - проще и быстрее же все делать в ИАРе smile.gif
Дебаггером, кстати, пользуюсь, но проверить алгоритм не получается - он не показывает текущие значения моих переменных, только регистры контроллера 05.gif - то же касается симулятора

Кстати, если настройка АЦП
ADC12CTL0 = ADC12ON +REFON + SHT0_8+MSC;
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1+SHP;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;
а потом
ADC12CTL0 |=ADC12SC;
ADC12CTL0 |=ENC;
while(ADC12IFG & BIT3);
CVx[cindex] = ADC12MEM3;
while(ADC12IFG & BIT4);
CVy[cindex] = ADC12MEM4;
ADC12CTL0 &= ENC;
так нормально? Или опять грузовики с кирпичами понаехали? biggrin.gif
Go to the top of the page
 
+Quote Post
=DS=
сообщение Jul 25 2008, 21:40
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836



Цитата(Daria @ Jul 26 2008, 01:05) *
Дебаггером, кстати, пользуюсь, но проверить алгоритм не получается - он не показывает текущие значения моих переменных, только регистры контроллера 05.gif - то же касается симулятора

Галочка в project->options->linker->output "debug information for C-Spy" стоит?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Daria   MSP430 - снова вопросы от чайника   Jul 23 2008, 19:17
|- - rezident   Цитата(Daria @ Jul 26 2008, 03:05) И верс...   Jul 25 2008, 21:38
||- - Daria   Цитата(rezident @ Jul 26 2008, 01:38) Ну ...   Jul 26 2008, 12:38
||- - rezident   Цитата(Daria @ Jul 26 2008, 18:38) rezide...   Jul 26 2008, 12:58
||- - Daria   Так вот. Галочка стоит. А состояние переменных все...   Jul 28 2008, 20:14
||- - rezident   Цитата(Daria @ Jul 29 2008, 02:14) Так во...   Jul 28 2008, 23:05
||- - Daria   Цитата(rezident @ Jul 29 2008, 03:05) Ну ...   Jul 30 2008, 19:31
||- - Daria   Здравствуйте, снова я Цитата(rezident @ Jul...   Aug 7 2008, 20:43
||- - rezident   Цитата(Daria @ Aug 8 2008, 02:43) ЗКак бы...   Aug 8 2008, 01:29
||- - Daria   Цитата(rezident @ Aug 8 2008, 05:29) Можн...   Aug 8 2008, 20:28
||- - rezident   Цитата(Daria @ Aug 9 2008, 02:28) а вот п...   Aug 9 2008, 01:10
||- - Daria   Цитата(rezident @ Aug 9 2008, 05:10) Коли...   Aug 9 2008, 20:42
||- - rezident   Цитата(Daria @ Aug 10 2008, 02:42) Ну и п...   Aug 9 2008, 22:10
||- - Daria   Так. Ну вот, как-то не выходит ничего Если в пре...   Aug 11 2008, 20:19
||- - Dog Pawlowa   Цитата(Daria @ Aug 11 2008, 23:19) Как бы...   Aug 12 2008, 06:14
||- - Daria   Цитата(Dog Pawlowa @ Aug 12 2008, 10:14) ...   Aug 12 2008, 19:55
- - Т.Достоевский   Может так? Код#pragma vector=ADC_VECTOR { if ...   Aug 11 2008, 21:52
- - rezident   Все дело в том, что вы маски неверно накладываете....   Aug 11 2008, 23:19
- - rezident   Daria, извините за откровенность, но у вас какой-т...   Aug 12 2008, 23:30
|- - Daria   Цитата(rezident @ Aug 13 2008, 03:30) Re...   Aug 13 2008, 17:06
|- - rezident   Цитата(Daria @ Aug 13 2008, 23:06) Но - з...   Aug 13 2008, 18:19
||- - Daria   Цитата(rezident @ Aug 13 2008, 22:19) Яс...   Aug 13 2008, 19:59
|- - zhevak   Ух-х, какие крутые виражи! Ух, как человека мы...   Aug 14 2008, 08:09
|- - Daria   Цитата(zhevak @ Aug 14 2008, 12:09) Rezid...   Aug 14 2008, 20:47
|- - rezident   Цитата(Daria @ Aug 15 2008, 02:47) Rezide...   Aug 14 2008, 21:01
|- - Daria   Ага, будем считать с буфером приема разобрались ...   Aug 17 2008, 11:13
|- - zhevak   О-хо-хо... Ну да ладно! Даша, я предполагаю, ...   Aug 17 2008, 14:49
|- - rezident   Цитата(Daria @ Aug 17 2008, 17:13) Запись...   Aug 17 2008, 15:09
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:09) Изв...   Aug 17 2008, 15:51
|- - rezident   Цитата(zhevak @ Aug 17 2008, 21:51) Не, н...   Aug 17 2008, 15:56
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:56) Да ...   Aug 17 2008, 16:38
|- - Daria   Да-а-а утром отправляю вопрос, иде себе спокойне...   Aug 17 2008, 20:49
|- - Daria   здравствуйте снова. Такой вопрос - во время работ...   Aug 19 2008, 17:42
|- - rezident   Цитата(Daria @ Aug 19 2008, 23:42) можно ...   Aug 19 2008, 21:40
|- - Daria   Цитата(rezident @ Aug 20 2008, 01:40) А т...   Aug 20 2008, 18:20
|- - Daria   Здравствуйте. rezident, по поводу примера буфера п...   Aug 21 2008, 18:01
|- - rezident   Цитата(Daria @ Aug 22 2008, 00:01) для че...   Aug 21 2008, 21:19
|- - Daria   Как всегда - большое спасибо! про выравниван...   Aug 24 2008, 17:36
|- - Daria   Здравствуйте снова. Вот опять вопросы_ Делаю усред...   Aug 29 2008, 18:53
|- - rezident   Цитата(Daria @ Aug 30 2008, 00:53) Делаю ...   Aug 29 2008, 20:16
|- - Daria   Да знаю я, знаю, что долго сидеть в прерывании нех...   Aug 30 2008, 18:33
|- - rezident   Цитата(Daria @ Aug 31 2008, 00:33) Да зна...   Aug 30 2008, 21:04
|- - Daria   Цитата(rezident @ Aug 31 2008, 01:04) Ест...   Aug 31 2008, 16:48
|- - rezident   Цитата(Daria @ Aug 31 2008, 22:48) Нужно....   Aug 31 2008, 18:39
|- - Daria   Цитата(rezident @ Aug 31 2008, 22:39) В п...   Aug 31 2008, 20:29
|- - Daria   Ну вот, отпуск кончился, пошли суровые будни И в...   Sep 12 2008, 18:04
|- - rezident   Цитата(Daria @ Sep 13 2008, 00:04) Вот та...   Sep 12 2008, 18:27
||- - Daria   Цитата(rezident @ Sep 12 2008, 22:27) re...   Sep 18 2008, 13:34
||- - Daria   Здравствуйте. Такие вопросы - сейчас я прошиваю ...   Sep 23 2008, 18:33
||- - rezident   Цитата(Daria @ Sep 24 2008, 00:33) В даль...   Sep 23 2008, 19:56
|||- - Daria   Ага, но мне, как пока неквалифицированному програм...   Sep 23 2008, 20:12
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:12) Значит...   Sep 23 2008, 20:47
|||- - Daria   Цитата(rezident @ Sep 24 2008, 00:47) Для...   Sep 23 2008, 20:56
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:56) А UIF ...   Sep 23 2008, 21:35
|||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 23:56) Как-то...   Sep 23 2008, 21:52
|||- - Daria   Цитата(Сергей Борщ @ Sep 24 2008, 01:52) ...   Sep 24 2008, 17:18
||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 21:33) мне ск...   Sep 23 2008, 20:01
||- - LCD   Цитата(Daria @ Sep 23 2008, 22:33) Не под...   Sep 24 2008, 19:14
|- - MrYuran   Цитата(Daria @ Sep 12 2008, 22:04) Как бы...   Sep 13 2008, 10:53
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 16:53) И с ...   Sep 13 2008, 16:48
|- - MrYuran   Цитата(rezident @ Sep 13 2008, 20:48) А в...   Sep 13 2008, 17:31
|- - Сергей Борщ   Цитата(rezident @ Sep 13 2008, 19:48) А в...   Sep 13 2008, 18:20
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 23:31) А во...   Sep 13 2008, 20:13
|- - AHTOXA   Цитата(rezident @ Sep 14 2008, 02:13) При...   Sep 15 2008, 17:38
- - Kurt   2rezident: я восхищен силой вашего воображения ))   Aug 13 2008, 04:41
|- - _3m   Цитата(Kurt @ Aug 13 2008, 08:41) 2rezide...   Aug 13 2008, 06:34
- - rezident   Я не вижу функции инициализации UART, но попробуйт...   Sep 24 2008, 18:12
|- - Daria   Цитата(rezident @ Sep 24 2008, 22:12) Я н...   Sep 25 2008, 18:43
|- - rezident   Цитата(Daria @ Sep 26 2008, 00:43) Ну, те...   Sep 25 2008, 19:30
|- - Daria   Цитата(rezident @ Sep 25 2008, 23:30) Пок...   Sep 26 2008, 15:21
- - VAI   ЦитатаКварц, кстати, подходящий нашла у Murata - C...   Sep 25 2008, 06:57
- - rezident   Ну вот она и ошибка. Первой командой инициализации...   Sep 26 2008, 15:33
|- - Daria   Цитата(rezident @ Sep 26 2008, 19:33) Ну ...   Sep 29 2008, 19:16
|- - rezident   Цитата(Daria @ Sep 30 2008, 01:16) не-а, ...   Sep 29 2008, 20:23
|- - Daria   Цитата(rezident @ Sep 30 2008, 00:23) Дел...   Sep 30 2008, 19:00
|- - rezident   Цитата(Daria @ Oct 1 2008, 01:00) NData -...   Sep 30 2008, 19:49
|- - Daria   Кодtypedef struct CharBuffer { unsigned char* Dat...   Sep 30 2008, 20:26
|- - rezident   Цитата(Daria @ Oct 1 2008, 02:26) но так ...   Sep 30 2008, 23:05
|- - Daria   Цитата(rezident @ Oct 1 2008, 03:05) Поче...   Oct 1 2008, 18:23
|- - rezident   Цитата(Daria @ Oct 2 2008, 00:23) Да, но ...   Oct 1 2008, 19:34
|- - Daria   Цитата(rezident @ Oct 1 2008, 23:34) Если...   Oct 2 2008, 19:37
- - VAI   Кстати, по уартам, я как-то выкладывал свои исходн...   Oct 3 2008, 01:12
- - Daria   Цитата(VAI @ Oct 3 2008, 05:12) Кстати, п...   Oct 4 2008, 17:01
- - Daria   Опять я теперь нужен еще буфер - для АЦП. посмот...   Oct 5 2008, 15:42
- - Daria   И еще Мне нужно обмениваться с двумя устройствам...   Oct 5 2008, 19:35
- - Dog Pawlowa   Цитата(Daria @ Oct 5 2008, 22:35) И еще ...   Oct 6 2008, 06:04
- - Daria   Цитата(Dog Pawlowa @ Oct 6 2008, 10:04) О...   Oct 6 2008, 17:45
- - rezident   Цитата(Daria @ Oct 6 2008, 23:45) одно ус...   Oct 6 2008, 19:04
- - Daria   Цитата(rezident @ Oct 6 2008, 23:04) Личн...   Oct 7 2008, 17:09
- - rezident   Цитата(Daria @ Oct 7 2008, 23:09) Ага, а ...   Oct 7 2008, 17:41
- - Daria   Цитата(rezident @ Oct 7 2008, 21:41) В IA...   Oct 7 2008, 18:12
- - rezident   Цитата(Daria @ Oct 8 2008, 00:12) Все же ...   Oct 7 2008, 19:07
- - Daria   Цитата(rezident @ Oct 7 2008, 23:07) Либо...   Oct 10 2008, 20:23
3 страниц V   1 2 3 >


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:20
Рейтинг@Mail.ru


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