Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.01.2009, 00:13
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
to urry
насчет перебора согласен но сдесь
Код:
|
// Если tmp лежит в диапазоне, записать переменную
if (908‹tmp) {
if (1022›tmp) {
q=10;
};
}; |
чуть длиннее и при tmp=1 легко проскакивает.
ГЫЫЫ. 8O Ну я и плуг. Теперь, наконецто дошло :P и правда компактно, качественно и профессионально. +1
|
|
|
|
24.01.2009, 15:42
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Снова я и снова с проблемами /покрайней мере для меня/. Все тот же МикроС и все та же ММС. Беру базовый пример из справки, компилю, прошиваю работает. Немного изменяю (жирным в листинге) шью - не работает. В проте все ок, по отдельности части кода работают... Т.к. в первом случае все работает, а во втором нет, проблема софтовая. Уже месяц воюю с этим МикроС, может там глючная реализачия библиотеки ММС? а то со всем другим без проблем, с первого раза (АДС, УСАРТ, ЛЦД). Особенностей ломанной версии тоже быть не должно ибо другие проекты без проблем.
Код:
|
#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!
|
|
|
|
24.01.2009, 15:52
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
В коде жирным выделите не получилось. Изменения: обьявления переменной *txt, функция Analiz, допись " Mmc_Fat_Write(txt[i], 7);" да в общем то и все. Изменения минимальны, а код неправильный
Где ступил на этот раз?
|
|
|
|
24.01.2009, 16:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Что не понравилось - вы эту переменную "i" крутите во всех фунциях и объявили глобально. Это плохо, трудно увидеть где и что ее модифицирует. Дайте другие названия переменным... желательно осмысленные. Я совсем не понял текст.
|
|
|
|
24.01.2009, 20:16
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
to urry
1. Надеюсь, что не поняли текст который послался абракадаброй ( /* чтение 2 */). Если же это о коде в целом то такой базовый пример в MikroC for PIC (v8.2).
2. Для борьбы с одинаковостью меняю переменную i на более осмысленную "peremenna9_kanal_2". Знаками "==" выделяю фрагменты дописанного кода.
Чтобы не загрязнять и не растягивать тему прикрепляю зазипованные листинги примера, измененного файла на С и раздел справки по ММС.
Прикрепленный файл: 5398312.rar
|
|
|
|
24.01.2009, 20:21
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Раздел инструкции .
Прикрепленный файл: 1268997.rar
|
|
|
|
25.01.2009, 00:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Я не увидел инициализацию ацп,только чтение, ну это такое... как именно не работает ? что можно прочитать ? отрубить ацп вообще, записывать однородную информацию, что тогда ?
|
|
|
|
25.01.2009, 19:46
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Да, в выложенном в коде был не настроил портА на аналоговый вход. Но это не влияет на работоспособность
Начал с самого начала, стал отрубать все лишнее. Вернее пришивать - допишу чуть-чуть, прошиваю и пробую, работает ли. В общем самое не хорошее что повторное обращение к функции записи (например из цикла) не работает /у меня ![Бьюсь об стену](images/smilies/icon_obstenu.gif) /, причем только в железе, прот фурычит весело и непринужденно. Не могу поставить дополнять текстовый файл из цикла, наверное придется делать все через сброс схемы ибо других вариантов я больше не вижу.
Как писал ранее АЦП отдельно работает, опрос диапазона бегает, да и вообще все более или менее кроме этой ММС.
|
|
|
|
25.01.2009, 19:52
|
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Еще веселого понемногу:
Код:
|
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);" |
цикл просто напросто виснет
Наверно руки у меня кривоватые и нужно бросать эту *рень?
|
|
|
|
25.01.2009, 21:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Ну я же не знаю, что там внутри - и этот микроси только на картинке видел.. Попробуй своей фукцией затереть контент
через копирование строки - тогда не нужно вызывать запись два раза .
Сначала
strcpy(file_contents,txt[peremenna9_kanal_2],7)
или как - посмотри хедер...А потом
Mmc_Fat_Write(file_contents, 42);
Второй вариант - отказаться вообще от ведения файловой системы, создать здоровенный на всю флешку текстовый файл, заполнить его пробелами и дописывать - вместо пробелов свою инфу, вычисляя последнюю запись по наличию пробела.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:23.
|
|