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

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

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

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

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

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

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

 
Опции темы
Непрочитано 06.10.2008, 06:35  
ams666
Частый гость
 
Регистрация: 28.11.2007
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ams666 на пути к лучшему
По умолчанию

маюсь дальше
подцепил в протеусе осцилограф кинул его на все порты карточки. в mmcinit после цикла spi(0xff) кинул кусочек как и посоветовали
Код:
do{ 
DelayMs(10); 
}while (Command(0x40,0,0,0x95) != 1);
в осцилографе прекрасно видно клок и улетающий набор команд но от карточки 0;
дальше идеи заканчиваются;(
..
посмотрел что строка
Код:
PORTB &= ~(1 ‹‹ SPICS); // enable MMC
не на месте передвинул, до цикла, теперь цикл с командой вообще не обрабатывается т.е. даже в осцилографе ничего нет
.. в регистре spdr болтается 40 т.е. второй байт из пакета command и на этом деле все висит
Реклама:
ams666 вне форума  
Непрочитано 06.10.2008, 10:25  
ams666
Частый гость
 
Регистрация: 28.11.2007
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ams666 на пути к лучшему
По умолчанию

а если убрать все именения CS то тогда развисает в цикле все нормлаьно на осцилографе видно но ответа по прежнему нет.
Понять не могу вот ведь совсем простой алгоритм
включили питание
подождали 1 мс
настроили spi на мк
подняли cs
послали 10 ff, карточка ушла в софтовый резет
опустили cs
подождали немного
послали cmd0 получили ответ не равный 0
послали cmd1 ну и дальше читаем сектора

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

Может, просто другую карточку возьми ? У всех ведь работает.
У меня, например , так
Код:
do{
 DelayMs(10);
}while (mmc_init() != 0);
// долбим, пока карта не включится, сцуко
unsigned char mmc_init (void)
{
unsigned char b;
unsigned int Timeout = 0;
				mmc_dis();	
	for ( b = 0;b‹0x0f;b++) //
		{
		mmc_write_byte(0xff);
		}
//--------------------------------------------------	
	while(mmc_write_command (CMD) !=1)// код 0х40 - это сброс карты карта должна ответить 01
	{
		if (Timeout++ › 200)
			{
				mmc_dis();
			return(1); 
			}
	}
	//----------------------------------------------
	Timeout = 0;
	CMD[0] = 0x41;//Commando 1// 0х41 - инициализация карты должна ответить 00 
	CMD[5] = 0xFF;
	while( mmc_write_command (CMD) !=0)
	{
		if (Timeout++ › 400)
			{
	mmc_dis();
			return(2); 
			}
	}
	mmc_dis();
	return(0);
}
//---------------------------------------------------------------------
urry вне форума  
Непрочитано 07.10.2008, 03:23  
ams666
Частый гость
 
Регистрация: 28.11.2007
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ams666 на пути к лучшему
По умолчанию

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

Я имел в виду железо.... Что, и в протеусе обмен глючит ?
urry вне форума  
Непрочитано 07.10.2008, 11:38  
ZLOI13
Временная регистрация
 
Регистрация: 09.03.2007
Сообщений: 75
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ZLOI13 на пути к лучшему
По умолчанию

Итак, я собрал устройство ниже. Устройство состоит из модулей. Цель такого подхода к разработке в том, чтобы как можно меньше производить платы и как можно быстрее осваивать ту или иную микросхему. Т.е. мне не нужно покупать дорогие евуалэйшн боарды, достоточно подцепить, что нужно из уже готового.
Модули собираются таким образом, чтобы как можно меньше вставлять проводков и как можно больше была помехоустойчивость и стабильность. Т.е. все пины на землю через 100К, на питании 10мкФ и т.д.
Слева находится модуль SD/MMC карт для общения с ними по SPI. В центре модуль МК, PIC16F73 - единственный МК, который у меня остался в запасах . Справа на верху в TO-92, это LM317LZ. Он преобразует напряжение в 3,55В и может выдавать 100мА. И, наконец, справа внизу - MAX232. Для общения с компом. Питание для сего девайс
а подаётся от старого БП компьютера. Ниже следующий код, написанный вчера под хайтековский компилятор для 16х, позволяет общаться с карточкой.
Код:
#include	‹PIC.h›
__CONFIG(HS&WDTDIS&PWRTEN&BORDIS);

...

unsigned char SendSPI (unsigned char TX)
{
SSPBUF=TX;
while(!STAT_BF)
{}
return SSPBUF;
}
	
unsigned char CommandSPI (unsigned char CMD, unsigned long ADDR, unsigned char CRC)
{
	SendSPI (CMD);
	SendSPI (*((unsigned char *)&ADDR + 3));
	SendSPI (*((unsigned char *)&ADDR + 2));
	SendSPI (*((unsigned char *)&ADDR + 1));
	SendSPI (*((unsigned char *)&ADDR + 0));
	SendSPI (CRC);
	
	}
...
main()
{
	//Настройка прерываний
	GIE=1;
	PEIE=1;
	///////////////////
	
	...
	
	//Настройка USART
	SPBRG=10;	//115 200 kbps
	SYNC=0;
	BRGH=1;
	SPEN=1;
	TXEN=1;
	CREN=1;
	RCIE=1;
	/////////////////
	//Настройка SPI
	///////Настройка портов
		TRISC=0b11010011;
		PORTC=0x0;
	///////////////////////
	//////Настройка параметров
		STAT_SMP=1;
		STAT_CKE=1;
		CKP=0;
		SSPEN=1;
		
		RC2=1;
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		SendSPI(0xFF);
		RC2=0;
		
		CommandSPI(0x40,0x0,0x95);
						
		while (SendSPI(0xFF)!=1)
		{};
		...
Ну а дальше не важно, потому что уже на этом этапе она проходит, если карточка вставлена, и не проходит, если не вставлена. Возможно проблема в том, что Вы посылаете команду и не ждёте ответа, попробуйте дополнить как у меня:
Код:
		while (SendSPI(0xFF)!=1)
		{};

-- Прилагается рисунок: --

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

И что ?
urry вне форума  
Непрочитано 07.10.2008, 14:19  
ZLOI13
Временная регистрация
 
Регистрация: 09.03.2007
Сообщений: 75
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ZLOI13 на пути к лучшему
По умолчанию

Сообщение от urry
И что ?
Долго я, да

Кстати, мне нравится Ваша аватарка, почти как с сигареткой.

P.S.
Курение вредит Вашему здоровью.
ZLOI13 вне форума  
Непрочитано 07.10.2008, 19:34  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Мне это уже на микрочипе говорили (учитывая, видимо, качество постов) ... Ну, это я в Одессе на пляже чинарик подобрал...
urry вне форума  
Непрочитано 08.10.2008, 03:19  
ams666
Частый гость
 
Регистрация: 28.11.2007
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ams666 на пути к лучшему
По умолчанию

компилятор winavr мк атмега 8 все пока в протеусе, код взят у капитана
Вот мой код:
Код:
#include ‹mmccommand.h›
#define SPIDI	PB4	// Port B bit 6 (pin7): data in (data from MMC)
#define SPIDO	PB3	// Port B bit 5 (pin6): data out (data to MMC)
#define SPICLK	PB5	// Port B bit 7 (pin8): clock
#define SPICS	PB2	// Port B bit 4 (pin5: chip select for MMC
Код:
char SPI(char d) 
char received = 0;
SPDR = d;
while(!(SPSR & (1‹‹SPIF)));
received = SPDR;
return (received);
}

void SPI_MasterInit(void)
DDRB &= ~(1 ‹‹ SPIDI);	// set port B SPI data input to input
DDRB |= (1 ‹‹ SPICLK);	// set port B SPI clock to output
DDRB |= (1 ‹‹ SPIDO);	// set port B SPI data out to output
DDRB |= (1 ‹‹ SPICS);	// set port B SPI chip select to output
SPCR = (1 ‹‹ SPE) | (1 ‹‹ MSTR) | (1 ‹‹ SPR1) | (1 ‹‹ SPR0);
}

char Command(char befF, uint16_t AdrH, uint16_t AdrL, char befH )
{	// sends a command to the MMC
	SPI(0xFF);
	SPI(befF);
	SPI((uint8_t)(AdrH ›› 8));
	SPI((uint8_t)AdrH);
	SPI((uint8_t)(AdrL ›› 8));
	SPI((uint8_t)AdrL);
	SPI(befH);
	SPI(0xFF);
	//PORTB &= ~(1 ‹‹ SPICS); // return the last received character
	return SPI(0xFF);	
	
}

int MMC_Init(void) { // init SPI
	char i;
	delay_ms(100);
// start MMC in SPI mode	// CS DI hight 
PORTB |= (1 ‹‹ SPICS); 
for(i=0; i ‹ 10; i++) { // send 10*8=80 clock pulses
SPI(0xff);
}
PORTB &= ~(1 ‹‹ SPICS); // enable MMC
delay_ms(1);

// готовы принимать команды CS low  шлем  cmd0

uart_puts("MMC_GO_IDLE_STATE");
serialterminate();

while (Command(MMC_GO_IDLE_STATE,0,0,0x95)!=1)
{
//Тут висим :( на осциле видно что идет передача но от карточки ничего нет
};
ams666 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поключение модуля к микроконтроллеру, как внешняя память. Gl_basik Микроконтроллеры, АЦП, память и т.д 2 15.03.2008 23:43
Как подключить устройства к компьютеру NikVE Автоматика и аппаратура связи 2 14.03.2008 16:49
Как подключить NE555 electronic-v Автоматика и аппаратура связи 3 19.11.2007 22:33
Как подключить два видеоглазка? willd Автоматика и аппаратура связи 55 30.04.2007 16:08
Как подключить? tim18 Микроконтроллеры, АЦП, память и т.д 12 26.04.2007 13:52


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


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