Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
20.01.2009, 22:58
|
#11
|
Прописка
Регистрация: 28.05.2008
Сообщений: 270
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Сообщение от Popeye
|
...Стоп, немедленная поправка, PIC18F452 ниже 4,2В не работает, должен быть поставлен PIC18LF452 Кстати PIC18хх452 снят с производства, хотя по складам все еще имеются солидные количества, Мирочип выпустил PIC18F4520 для замены, хотя там проблемно, входы АЦП не совпадают.
|
Дык, что-ж Вы господа выбираете "дистрофопроцы" !?!
Чем Вам 18F2620(4620) не угодил ???
А на счет несовпадения выводов - ваще ЖЕСТЬ! А прогу подправить - "религия не позволяет"?!?
Весело встретили Новый Год...
|
|
|
|
20.01.2009, 23:54
|
#12
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
to dr_Sash
Пожалуй повторюсь: про нестабильность попадалось мнение на форуме. Сам я лично с картами до этого не работал и решил не заморачиваться, а сделать как рекомендует инструкция к компилятору.
to Popeye
Цитата:
|
я лично обещаю не издеватся
|
![Подмигивание](images/smilies/icon_wink.gif) спасибо мил человек ![Улыбка](images/smilies/icon_smile.gif) не все такие добрые попадаются
ЗЫ: Из-за таких заморочек один вечер всерьез думал поставить буффер 5-3,3В (например MC7 4UHC1GT125). Этто прям как пионЭры - не ишем легких путей.
|
|
|
|
21.01.2009, 00:34
|
#13
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Рискну, вылажу мой художества, тем более обещали не издеваться...
Код:
|
/*
* 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]) обсуждалась недавно и сама по себе работала.
Что ж, кто бросит первый камень?
|
|
|
|
21.01.2009, 07:09
|
#14
|
Прописка
Регистрация: 28.05.2008
Сообщений: 270
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Курить! Курить! Курить и - еще раз - курить даташиты!!!
Сообщение от DDimon
|
Пожалуй повторюсь: про нестабильность попадалось мнение на форуме. Сам я лично с картами до этого не работал и решил не заморачиваться, а сделать как рекомендует инструкция к компилятору.
ЗЫ: Из-за таких заморочек один вечер всерьез думал поставить буффер 5-3,3В (например MC7 4UHC1GT125). Этто прям как пионЭры - не ишем легких путей.
|
"Мил человек" - а как на счет - ВНИМАТЕЛЬНО даташит почитать, особенно те его фрагменты, где канкретна говорится про питание от 2,7-3,3 Вольта и что для этого нада делать - там как раз то и написано, что многие модули (и АЦП, в том числе) требуют совсем других настроек и "другого немного" подхода! Если же
тупо запустить прогу, написанную под 5Вольт от 3,3 Вольт, то она вообще может не запуститься (ААА! Вообще НЕ РАБОТАЕТ! Во уроды, понаделали фигни, написано что должно работать, а оно савсем не работает!!! ААААА!!!!) - и не потому совсем, что не работает, а хотя бы потому, что BrownOut по умолчанию настроен на 4,2 Вольта, к примеру... Так же совсем "не работать" может АЦП, а потом окажется, что надо было "поколдовать" над его регистрами, да и пересчет ADRES H(L) в Вольты вести совсем "немного" по другому...
Так что - курим даташиД!!!
|
|
|
|
21.01.2009, 10:08
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
гы
Код:
|
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);
} |
|
|
|
|
21.01.2009, 11:37
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
|
Я тут присмотрелся немножко. Оказвается 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.
|
Богато однако
Удачи!
|
|
|
|
21.01.2009, 21:48
|
#17
|
Временная регистрация
Регистрация: 13.05.2008
Сообщений: 88
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
to dr_Sash
Оправдания. Очень кратко:
1. я новичек
2. уже есть PIC18F452
3. тут бы алгоритм отладить а не колдовством заниматься.
4. Да я NOOB ![Горд собой](images/smilies/icon_dovl.gif) /пока/.
to urry
попробую разобраться
Код:
|
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);
} |
ХМ. А как это относится к моему листингу? Можно пояснения?
|
|
|
|
21.01.2009, 22:35
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
|
Tут думаю как бы полюбезнее
Вопрос - как у вас с англйским ? Если худо нельзя ли подумать сперва о некоем минимальном обучении читать английские тексты. Компьютерными словарями или переводчиками. Можно тело на курс английского затащить, если время-деньги позоляет. Вобщем дорог много. Но хороших электронщиков-конструкторов без английского не ведаю. На английском масса готовых решений. Собственным путем идти можно, да в конце концов вижу, сделали до нас. Зачем рыть землю впустую ?
Удачи!
|
|
|
|
21.01.2009, 23:03
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от 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);
} |
|
|
|
|
21.01.2009, 23:09
|
#20
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Советую посмотреть эту реализацию
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++; |
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:44.
|
|