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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 20.01.2009, 22:58   #11
dr_Sash
Прописка
 
Регистрация: 28.05.2008
Сообщений: 270
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
dr_Sash на пути к лучшему
По умолчанию

Сообщение от Popeye
...Стоп, немедленная поправка, PIC18F452 ниже 4,2В не работает, должен быть поставлен PIC18LF452 Кстати PIC18хх452 снят с производства, хотя по складам все еще имеются солидные количества, Мирочип выпустил PIC18F4520 для замены, хотя там проблемно, входы АЦП не совпадают.
Дык, что-ж Вы господа выбираете "дистрофопроцы" !?!
Чем Вам 18F2620(4620) не угодил ???

А на счет несовпадения выводов - ваще ЖЕСТЬ! А прогу подправить - "религия не позволяет"?!?

Весело встретили Новый Год...
Реклама:
dr_Sash вне форума  
Непрочитано 20.01.2009, 23:54   #12
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

to dr_Sash
Пожалуй повторюсь: про нестабильность попадалось мнение на форуме. Сам я лично с картами до этого не работал и решил не заморачиваться, а сделать как рекомендует инструкция к компилятору.

to Popeye
Цитата:
я лично обещаю не издеватся
спасибо мил человек не все такие добрые попадаются

ЗЫ: Из-за таких заморочек один вечер всерьез думал поставить буффер 5-3,3В (например MC7 4UHC1GT125). Этто прям как пионЭры - не ишем легких путей.
DDimon вне форума  
Непрочитано 21.01.2009, 00:34   #13
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

Рискну, вылажу мой художества, тем более обещали не издеваться...
Код:
/*
 * Description:
     В общем проект ведет даталог изменения величины аналогового сигнала во времени
     и записывает все это хозяйство на карту памяти. В первой версии пишутся просто
     диапазоны входного сигнала (5В условно разделены на 10 частей)

 * Test configuration:
     MCU:             PIC18F452
     Dev.Board:       макетка
     Oscillator:      HS, 20.000 MHz
     Ext. Modules:    MMC_32mb card on PORTC через делитель 3,3/1,3
     SW:              mikroC v8.2.0.0

 */

#include ‹built_in.h›


 char
 *txt[11]={"0wibka","1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};

char
 filename[14] = "DATALOGxTXT";          // File names
unsigned long
 o, i, size;


 unsigned int
 tmp, q;



//M-M-M--------- Opens an existing file and appends data to it
//               (and alters the date/time stamp)
void M_Open_File_Append() {
     Mmc_Fat_Assign(&filename, 1);
     Mmc_Fat_Append();                                    // Prepare file for append
     Mmc_Fat_Write(" piwem po malu
", 27);   // Write data to assigned file
     Mmc_Fat_Write(txt[q], 7); // записать данные в назначенный файл
}//~




//-------------- Main. Uncomment the function(s) to test the desired operation(s)
void main() {
     //--- prepare PORTB for signalling
     PORTB = 0;
     TRISB = 0;
     PORTC = 0;
  TRISC  = 0;     // Все выводы PORTC - выходы +
  ADCON1 = 0x80;  // Конфигурирование аналоговых входов и Vref
  TRISA  = 0xFF;  // Все выводы PORTA - входы



PORTC.F1=~PORTC.F1;
  Delay_ms(1000);                     // Пауза 1 сек

PORTC.F1=~PORTC.F1;
   Delay_ms(1000);
   
   for (i=1; i‹200; i++){            //запуск пред-инита SPI (совет с форума)
       PORTC.F3=~PORTC.F3;
       Delay_ms(10);
       PORTC.F0=~PORTC.F0;
   }
   
   


PORTC.F1=1;                  // загорелась до инита ММС
     Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
     if (Mmc_Fat_Init(&PORTC,2) == 0) {
PORTC.F1=~PORTC.F1;          // потухла после инита ММС

   Delay_ms(1000);                     // Пауза 1 сек




   o=0;
while (o‹10){                        //тестовый прогон 10 шт
    o++;
    for (i=1; i‹15; i++){            //запуск cikla
       PORTC.F1=~PORTC.F1;
       Delay_ms(150);
       PORTC.F0=~PORTC.F0;
   }
   


  tmp = Adc_Read(2);  /* чтение аналогового значения из канала 2 */
 // FloatToStr(tmp, txt);  // txt = " tmp /buffer/" (один пробел слева использ.)




// ocenca zna4eni9 ADC===============================================  ==============
    q=0;          // если 0 то нет сигнала

    // Если tmp лежит в диапазоне, записать переменную
    if (tmp‹102) {
    q=1;
     };
   // Если tmp лежит в диапазоне, записать переменную
    if (102‹tmp) {
    if (204›tmp) {
    q=2;
    };
    };
   // Если tmp лежит в диапазоне, записать переменную
    if (204‹tmp) {
    if (306›tmp) {
    q=3;
    };
    };
    // Если tmp лежит в диапазоне, записать переменную
    if (306‹tmp) {
    if (408›tmp) {
    q=4;
    };
    };
    // Если tmp лежит в диапазоне, записать переменную
    if (408‹tmp) {
    if (510›tmp) {
    q=5;
    };
    };   
    // Если tmp лежит в диапазоне, записать переменную
    if (510‹tmp) {
     if (602›tmp) {
    q=6;
    };
    };   
    // Если tmp лежит в диапазоне, записать переменную
    if (602‹tmp) {
     if (704›tmp) {
    q=7;
    };
    };   
    // Если tmp лежит в диапазоне, записать переменную
    if (704‹tmp) {
     if (806›tmp) {
    q=8;
    };
    };   
    // Если tmp лежит в диапазоне, записать переменную
    if (806‹tmp) {
    if (908›tmp) {
    q=9;
    };
    };    
    // Если tmp лежит в диапазоне, записать переменную
    if (908‹tmp) {
    if (1022›tmp) {
    q=10;
    };
    };




         //--- Test routines. Uncomment them one-by-one to test certain features
         M_Open_File_Append();




 for (i=1; i‹30; i++){            //запуск cikla    мигаем-запись ок
       PORTC.F1=~PORTC.F1;
       PORTC.F0=~PORTC.F0;
       Delay_ms(150);

   }



};
     }
     else {
      PortC.F1=~portC.F1;         // не инит ФАТ
      Delay_ms(200);
     }

}//~!
Примерно как то так.
Цели и желаемое действие расписаны в заглавии кода поэтому повторяться не буду.

Результатом работы не доволен т.к. значения диапазона не пишет, а только издевается - мол "piwem po malu". Также не уверен в условиях выбора диапазонов (‹tmp‹) в справке такой формы записи не встречал, но компилятор не ругается... Форма записи переменной (txt[q]) обсуждалась недавно и сама по себе работала.

Что ж, кто бросит первый камень?
DDimon вне форума  
Непрочитано 21.01.2009, 07:09   #14
dr_Sash
Прописка
 
Регистрация: 28.05.2008
Сообщений: 270
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
dr_Sash на пути к лучшему
По умолчанию Курить! Курить! Курить и - еще раз - курить даташиты!!!

Сообщение от DDimon
Пожалуй повторюсь: про нестабильность попадалось мнение на форуме. Сам я лично с картами до этого не работал и решил не заморачиваться, а сделать как рекомендует инструкция к компилятору.

ЗЫ: Из-за таких заморочек один вечер всерьез думал поставить буффер 5-3,3В (например MC7 4UHC1GT125). Этто прям как пионЭры - не ишем легких путей.
"Мил человек" - а как на счет - ВНИМАТЕЛЬНО даташит почитать, особенно те его фрагменты, где канкретна говорится про питание от 2,7-3,3 Вольта и что для этого нада делать - там как раз то и написано, что многие модули (и АЦП, в том числе) требуют совсем других настроек и "другого немного" подхода! Если же
тупо запустить прогу, написанную под 5Вольт от 3,3 Вольт, то она вообще может не запуститься (ААА! Вообще НЕ РАБОТАЕТ! Во уроды, понаделали фигни, написано что должно работать, а оно савсем не работает!!! ААААА!!!!) - и не потому совсем, что не работает, а хотя бы потому, что BrownOut по умолчанию настроен на 4,2 Вольта, к примеру... Так же совсем "не работать" может АЦП, а потом окажется, что надо было "поколдовать" над его регистрами, да и пересчет ADRES H(L) в Вольты вести совсем "немного" по другому...

Так что - курим даташиД!!!
dr_Sash вне форума  
Непрочитано 21.01.2009, 10:08   #15
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

гы
Код:
unsigned char out(unsigned int tmp)
{
const unsigned int arr[3]={102,204.306};
unsigned char i;
if (tmp==0)return 0;
for (i=0;i‹3;i++)
{
if(arr[i]›=tmp)break;
}
return (i+1);
}
__________________
warez
urry вне форума  
Непрочитано 21.01.2009, 11:37   #16
Popeye
Почётный гражданин KAZUS.RU
 
Аватар для Popeye
 
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
Popeye на пути к лучшему
По умолчанию

Я тут присмотрелся немножко. Оказвается 8 битные ПИКи ххFхххх до 4,2V. Надо ххLFxxx или xxFxxJxx или xxFxxKxx. Может и путаю, да надобность внимательно читать ДШ потверждается еще раз. Приму к сведению, никогда 3V питания не требовалось да не миновать....
Ну а насчет MMC, тупо просмотрите готовый пример в библиотеке Multi Media Card Library, благо MikroE дают. Скомпилируйте, подправляейте на ваш вкус и т.д. Простейший путь ИМХО. Я на Бейсике пишу, вероятно на С имеется подобное.

Цитата:
Library Example
Following example consists of several blocks that demonstrate various aspects of usage of the Mmc_Fat16 library. These are:

-Creation of new file and writing down to it.
-Opening existing file and re-writing it (writing from start-of-file).
-Opening existing file and appending data to it (writing from end-of-file).
-Opening a file and reading data from it (sending it to USART terminal).
-Creating and modifying several files at once.
Богато однако
Удачи!
Popeye вне форума  
Непрочитано 21.01.2009, 21:48   #17
DDimon
Временная регистрация
 
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
DDimon на пути к лучшему
По умолчанию

todr_Sash
Оправдания. Очень кратко:
1. я новичек
2. уже есть PIC18F452
3. тут бы алгоритм отладить а не колдовством заниматься.
4. Да я NOOB /пока/.


tourry
попробую разобраться

Код:
unsigned char out(unsigned int tmp)      // задаем тип выходной переменной - 0-255
{ 
const unsigned int arr[3]={102,204.306}; // это я так понимаю массив значений, которые может принимать переменная. Непонятно диапазон 0 .. 65535 и разделение где через запятую, а где через точку.

unsigned char i; 

if (tmp==0)return 0;                     // если значение из АЦП равно 0 возвращает 0

for (i=0;i‹3;i++)                        //цикл, прогон 3 раза
{ 
if(arr[i]›=tmp)break;                    // если переменная больше или равна значению из АЦП (кстати нету tmp = Adc_Read(2)для моего случая) идет прерывание и выход из цикла.
} 
return (i+1); 
}
ХМ. А как это относится к моему листингу? Можно пояснения?
DDimon вне форума  
Непрочитано 21.01.2009, 22:35   #18
Popeye
Почётный гражданин KAZUS.RU
 
Аватар для Popeye
 
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
Popeye на пути к лучшему
По умолчанию

Tут думаю как бы полюбезнее
Вопрос - как у вас с англйским ? Если худо нельзя ли подумать сперва о некоем минимальном обучении читать английские тексты. Компьютерными словарями или переводчиками. Можно тело на курс английского затащить, если время-деньги позоляет. Вобщем дорог много. Но хороших электронщиков-конструкторов без английского не ведаю. На английском масса готовых решений. Собственным путем идти можно, да в конце концов вижу, сделали до нас. Зачем рыть землю впустую ?
Удачи!
Popeye вне форума  
Непрочитано 21.01.2009, 23:03   #19
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от DDimon
tourry
ХМ. А как это относится к моему листингу? Можно пояснения?
Г***но вопрос !!! Ваш код перебора действительно глаза режет, не говоря о откровенных ляпах - подставьте в тмр "1" и получите
if (1022›tmp) {
q=10;
Я как бы дал направление - Вы не поняли


Код:
  tmp = Adc_Read(2); 
	q=out(tmp);
//-----------------------------------
unsigned char out(unsigned int tmp)  
{
const unsigned int arr[10]={102,204,306,408,510,602,704,806,908,1022}; 
unsigned char i;

if (tmp==0)return 0;                 

for (i=0;i‹10;i++)                  
{
if(arr[i]›=tmp)break;                    
}
return (i+1);
}
__________________
warez
urry вне форума  
Непрочитано 21.01.2009, 23:09   #20
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Советую посмотреть эту реализацию
http://www.teuthis.com/html/mmc_mp3.html

Вот для затравки...
Код:
int mmc_init(){	//Initialises the MMC into SPI mode and sets block size
char p;
int i;
	SETUP_SPI(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4 | SPI_SS_DISABLED);
	SSPSTAT |= 0x40;                          // set CKE = 1 - clock idle low
	SSPCON &= 0xEF;                          // set CKP = 0 - data valid on rising edge
	SS=1;			//                    // set SS = 1 (off)
	for(i=0;i‹10;i++){                       // initialise the MMC card into SPI mode by sending clks on
	        SPI_WRITE(0xFF);
	}
	SS=0;				                     // set SS = 0 (on) tells card to go to spi mode when it receives reset
	SPI_WRITE(0x40);                        // send reset command
	for(p=4;p›0;p--){
		SPI_WRITE(0x00);                        // all the arguments are 0x00 for the reset command
	}
	SPI_WRITE(0x95);                        // precalculated checksum as we are still in MMC mode
//	puts("Sent go to SPI

");
	if(mmc_response(0x01)==1) return 1;     // if = 1 then there was a timeout waiting for 0x01 from the mmc (bad!)
//	puts("Got response from MMC

");
	i = 0;
	while((i ‹ 255) && (mmc_response(0x00)==1)){     // must keep sending command if response
	        SPI_WRITE(0x41);                // send mmc command one to bring out of idle state
		for(p=4;p›0;p--){
	 	       SPI_WRITE(0x00);
		}
	        SPI_WRITE(0xFF);                // checksum is no longer required but we always send 0xFF
	        i++;
__________________
Осторожно , злой кот
dosikus вне форума  
Закрытая тема

Закладки


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

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:29.


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