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

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

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

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

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

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

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

 
Опции темы
Непрочитано 22.01.2009, 00:13  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

to urry
насчет перебора согласен но сдесь
Код:
   
 // Если tmp лежит в диапазоне, записать переменную 
    if (908‹tmp) { 
    if (1022›tmp) { 
    q=10; 
    }; 
    };
чуть длиннее и при tmp=1 легко проскакивает.


ГЫЫЫ. 8O Ну я и плуг. Теперь, наконецто дошло :P и правда компактно, качественно и профессионально. +1
Реклама:
DDimon вне форума  
Непрочитано 24.01.2009, 15:42  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

Снова я и снова с проблемами /покрайней мере для меня/. Все тот же МикроС и все та же ММС. Беру базовый пример из справки, компилю, прошиваю работает. Немного изменяю (жирным в листинге) шью - не работает. В проте все ок, по отдельности части кода работают... Т.к. в первом случае все работает, а во втором нет, проблема софтовая. Уже месяц воюю с этим МикроС, может там глючная реализачия библиотеки ММС? а то со всем другим без проблем, с первого раза (АДС, УСАРТ, ЛЦД). Особенностей ломанной версии тоже быть не должно ибо другие проекты без проблем.

Код:
#include ‹built_in.h›

char
 fat_txt[20] = "FAT16 not found",
 file_contents[50] = "XX MMC/SD FAT16 library\n";
char
*txt[11]={"---1--", "---2--", "---3--", "---4--", "---5--", "---6--", "---7--", "--8---", "--9---", "---10--","0wibka"};
char
 filename[14] = "MIKRO00xTXT";          // File names
unsigned short
 tmp, character, loop, loop2;
unsigned long
 i, size;

char Buffer[512];


  
  
  
  
//I-I-I--------- Writes string to USART
void I_Write_Str(char *ostr) {
  unsigned short i;

  i = 0;
  while (ostr[i]) {
    USART_Write(ostr[i++]);
  }
  USART_Write(0x0A);
}//~

//M-M-M--------- Creates new file and writes some data to it
void M_Create_New_File() {
  filename[7] = 'A';
  Mmc_Fat_Assign(&filename, 0xA0);      // Will not find file and then create file
  Mmc_Fat_Rewrite();                    // To clear file and start with new data
  for(loop = 1; loop ‹= 99; loop++) {   //  We want 5 files on the MMC card
    Usart_Write('.');
    file_contents[0] = loop / 10 + 48;
    file_contents[1] = loop % 10 + 48;
    Mmc_Fat_Write(txt[i], 7);   // write data to the assigned file
    Mmc_Fat_Write(file_contents, 42);   // write data to the assigned file

  }
}//~


 //M-M-M--------- anаliz vxodnix signalov
void M_Analiz() {
const unsigned int arr[10]={5,10,15,20,25,30,35,40,45,50};
 PortC.F0=~portC.F0;

  tmp = Adc_Read(2);  /* чтение аналогового значения из канала 2 */
   tmp=tmp/20.46;
// ocenca zna4eni9 ADC===============================================  ==============
if (tmp==0){
i=0;
};

for (i=0;i‹10;i++)
{
if(arr[i]›=tmp)break;
}
i=(i+1);
  } //~
  
  
//M-M-M--------- Creates many new files and writes data to them
void M_Create_Multiple_Files() {
  for(loop2 = 'B'; loop2 ‹= 'Z'; loop2++) {
    Usart_Write(loop2);             // signal the progress
    filename[7] = loop2;                 // set filename
    Mmc_Fat_Assign(&filename, 0xA0);        // find existing file or create a new one
    Mmc_Fat_Rewrite();                   // To clear file and start with new data
    for(loop = 1; loop ‹= 44; loop++) {
      file_contents[0] = loop / 10 + 48;
      file_contents[1] = loop % 10 + 48;
      Mmc_Fat_Write(txt[i], 7);   // write data to the assigned file
      Mmc_Fat_Write(file_contents, 42);  // write data to the assigned file

    }
  }
}//~

//M-M-M--------- Opens an existing file and rewrites it
void M_Open_File_Rewrite() {
  filename[7] = 'C';
  Mmc_Fat_Assign(&filename, 0);
  Mmc_Fat_Rewrite();
  for(loop = 1; loop ‹= 55; loop++) {
    file_contents[0] = loop / 10 + 64;
    file_contents[1] = loop % 10 + 64;
    Mmc_Fat_Write(txt[i], 7);   // write data to the assigned file
    Mmc_Fat_Write(file_contents, 42);    // write data to the assigned file

  }
}//~

//M-M-M--------- Opens an existing file and appends data to it
//               (and alters the date/time stamp)
void M_Open_File_Append() {
     filename[7] = 'B';
     Mmc_Fat_Assign(&filename, 0);
     Mmc_Fat_Set_File_Date(2005,6,21,10,35,0);
     Mmc_Fat_Append();
     [b]Mmc_Fat_Write(txt[i], 7);   // write data to the assigned file [b]                                // Prepare file for append
     Mmc_Fat_Write(" for mikroElektronika 2005\n", 27);   // Write data to assigned file

}//~

//M-M-M--------- Opens an existing file, reads data from it and puts it to USART
void M_Open_File_Read() {
  filename[7] = 'B';
  Mmc_Fat_Assign(&filename, 0);
  Mmc_Fat_Reset(&size);                 // To read file, procedure returns size of file
  for (i = 1; i ‹= size; i++) {
    Mmc_Fat_Read(&character);
    Usart_Write(character);         // Write data to USART
  }
}//~

//M-M-M--------- Deletes a file. If file doesn't exist, it will first be created
//               and then deleted.
void M_Delete_File() {
  filename[7] = 'F';
  Mmc_Fat_Assign(filename, 0);
  Mmc_Fat_Delete();
}//~

//M-M-M--------- Tests whether file exists, and if so sends its creation date
//               and file size via USART
void M_Test_File_Exist() {
  unsigned long fsize;
  unsigned int year;
  unsigned short month, day, hour, minute;
  unsigned char outstr[12];

  filename[7] = 'B';       //uncomment this line to search for file that DOES exists
//  filename[7] = 'F';       //uncomment this line to search for file that DOES NOT exist
  if (Mmc_Fat_Assign(filename, 0)) {
    //--- file has been found - get its date
    Mmc_Fat_Get_File_Date(&year, &month, &day, &hour, &minute);
    WordToStr(year, outstr);
    I_Write_Str(outstr);
    ByteToStr(month, outstr);
    I_Write_Str(outstr);
    WordToStr(day, outstr);
    I_Write_Str(outstr);
    WordToStr(hour, outstr);
    I_Write_Str(outstr);
    WordToStr(minute, outstr);
    I_Write_Str(outstr);
    //--- get file size
    fsize = Mmc_Fat_Get_File_Size();
    LongToStr((signed long)fsize, outstr);
    I_Write_Str(outstr);
  }
  else {
    //--- file was not found - signal it
    Usart_Write(0x55);
    Delay_ms(1000);
    Usart_Write(0x55);
  }
}//~


//-------------- Tries to create a swap file, whose size will be at least 100
//               sectors (see Help for details)
void M_Create_Swap_File() {
  unsigned int i;

  for(i=0; i‹512; i++)
    Buffer[i] = i;

  size = Mmc_Fat_Get_Swap_File(5000, "mikroE.txt", 0x20);   // see help on this function for details

  if (size) {
    LongToStr((signed long)size, fat_txt);
    I_Write_Str(fat_txt);

    for(i=0; i‹5000; i++) {
      Mmc_Write_Sector(size++, Buffer);
      Usart_Write('.');
    }
  }
}//~

//-------------- Main. Uncomment the function(s) to test the desired operation(s)
void main() {
     //--- prepare PORTB for signalling
     PORTB = 0;
     TRISB = 0;
     TRISD = 0;
     //--- set up USART for the file read
     Usart_Init(9600);
     Delay_100ms();
     //--- init the FAT library
     Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
     // use fat16 quick format instead of init routine if a formatting is needed
     if (!Mmc_Fat_Init(&PORTC, 2)) {
         // reinitialize spi at higher speed
         Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
         //--- Test start
         PORTB = 0xF0;
         PortC.F0=~portC.F0;
         //--- Test routines. Uncomment them one-by-one to test certain features
         M_Analiz();
         M_Create_New_File();
         M_Create_Multiple_Files();

         M_Open_File_Rewrite();
         M_Open_File_Append();
         M_Open_File_Read();
         M_Delete_File();
         M_Test_File_Exist();
         M_Create_Swap_File();
         Usart_Write('e');
     }
     else {
       I_Write_Str(fat_txt);
     }
     //--- Test termination
     PORTB = 0x0F;
}//~!
Последняя редакция кода, где анализ идет в виде отдельной функции. ХЗ. Теряю смысл жизни.
HELP!
DDimon вне форума  
Непрочитано 24.01.2009, 15:52  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

В коде жирным выделите не получилось. Изменения: обьявления переменной *txt, функция Analiz, допись " Mmc_Fat_Write(txt[i], 7);" да в общем то и все. Изменения минимальны, а код неправильный
Где ступил на этот раз?
DDimon вне форума  
Непрочитано 24.01.2009, 16:24  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Что не понравилось - вы эту переменную "i" крутите во всех фунциях и объявили глобально. Это плохо, трудно увидеть где и что ее модифицирует. Дайте другие названия переменным... желательно осмысленные. Я совсем не понял текст.
__________________
warez
urry вне форума  
Непрочитано 24.01.2009, 20:16  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

to urry
1. Надеюсь, что не поняли текст который послался абракадаброй ( /* чтение 2 */). Если же это о коде в целом то такой базовый пример в MikroC for PIC (v8.2).
2. Для борьбы с одинаковостью меняю переменную i на более осмысленную "peremenna9_kanal_2". Знаками "==" выделяю фрагменты дописанного кода.
Чтобы не загрязнять и не растягивать тему прикрепляю зазипованные листинги примера, измененного файла на С и раздел справки по ММС.

Прикрепленный файл: 5398312.rar
DDimon вне форума  
Непрочитано 24.01.2009, 20:21  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

Раздел инструкции .

Прикрепленный файл: 1268997.rar
DDimon вне форума  
Непрочитано 25.01.2009, 00:31  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Я не увидел инициализацию ацп,только чтение, ну это такое... как именно не работает ? что можно прочитать ? отрубить ацп вообще, записывать однородную информацию, что тогда ?
__________________
warez
urry вне форума  
Непрочитано 25.01.2009, 19:46  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

Да, в выложенном в коде был не настроил портА на аналоговый вход. Но это не влияет на работоспособность
Начал с самого начала, стал отрубать все лишнее. Вернее пришивать - допишу чуть-чуть, прошиваю и пробую, работает ли. В общем самое не хорошее что повторное обращение к функции записи (например из цикла) не работает /у меня /, причем только в железе, прот фурычит весело и непринужденно. Не могу поставить дополнять текстовый файл из цикла, наверное придется делать все через сброс схемы ибо других вариантов я больше не вижу.
Как писал ранее АЦП отдельно работает, опрос диапазона бегает, да и вообще все более или менее кроме этой ММС.
DDimon вне форума  
Непрочитано 25.01.2009, 19:52  
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

Еще веселого понемногу:
Код:
char
 file_contents[50] = "XX MMC/SD FAT16 library by Anton Rieckert\n";

................................

//M-M-M--------- Creates new file and writes some data to it
void M_Create_New_File() {
  filename[7] = 'A';
  Mmc_Fat_Assign(&filename, 0xA0);      // Will not find file and then create file
  Mmc_Fat_Rewrite();                    // To clear file and start with new data
  for(loop = 1; loop ‹= 99; loop++) {   //  We want 5 files on the MMC card
    Usart_Write('.');
    file_contents[0] = loop / 10 + 48;
    file_contents[1] = loop % 10 + 48;
    Mmc_Fat_Write(file_contents, 42);   // write data to the assigned file
  }
}//~
если в цикл этого кода вставить
Код:
"Mmc_Fat_Write(txt[peremenna9_kanal_2], 7);"
цикл просто напросто виснет

Наверно руки у меня кривоватые и нужно бросать эту *рень?
DDimon вне форума  
Непрочитано 25.01.2009, 21:13  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Ну я же не знаю, что там внутри - и этот микроси только на картинке видел.. Попробуй своей фукцией затереть контент
через копирование строки - тогда не нужно вызывать запись два раза .
Сначала
strcpy(file_contents,txt[peremenna9_kanal_2],7)
или как - посмотри хедер...А потом
Mmc_Fat_Write(file_contents, 42);


Второй вариант - отказаться вообще от ведения файловой системы, создать здоровенный на всю флешку текстовый файл, заполнить его пробелами и дописывать - вместо пробелов свою инфу, вычисляя последнюю запись по наличию пробела.
__________________
warez
urry вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proteus+MikroC fmssp Proteus 9 21.03.2012 23:52
Вопрос к знатокам mikroC ctefan Микроконтроллеры, АЦП, память и т.д 2 02.05.2009 09:19
mikroC компилятор для пиков как его крякнуть ctefan Proteus, KiCAD и другие ECAD 7 01.01.2008 16:22
MIKROC 7 dosikus Proteus, KiCAD и другие ECAD 1 01.09.2007 20:17
Вопрос по симулятору в MikroC 6.2 fmssp Микроконтроллеры, АЦП, память и т.д 0 02.04.2007 10:38


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


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