دوستان در ادامه تبدیل برنامه ATmega32 به 128 به یه مشکل دیگه برخوردم
در انتها کل سورس رو براتون میزارم
این برنامه برای ارتباط با mmc با فرمت fat32 هستش که در اتمگا 32 کاملا درست کار میکنه
اما در 128 نه
مشکل در ارتباط با mmc و در تنظیمات SPI هستش
این بخش از برنامه برای تنظیمات spi در اتمگا32 هستش:
**********************************
در مگا32 از PortB.1 به عنوان SS استفاده شده است
حال این تغییرات رو برای مگا128 انجام دادم:
از Portb.5 به عنوان ss استفاده شده است
در ضمن میکرو از نوع ATmega128L است
برای همین از هیچ تقسیم مقاومتی استفاده نکردم و فقط برای تغذیه کارت از دیود زنر استفاده کردم
به نظر شما اشکال در کجاست؟؟؟
در انتها کل سورس رو براتون میزارم
این برنامه برای ارتباط با mmc با فرمت fat32 هستش که در اتمگا 32 کاملا درست کار میکنه
اما در 128 نه
مشکل در ارتباط با mmc و در تنظیمات SPI هستش
این بخش از برنامه برای تنظیمات spi در اتمگا32 هستش:
**********************************
#ifndef _SPI_ROUTINES_H_
#define _SPI_ROUTINES_H_
#define SPI_SD SPCR = 0x52
#define SPI_HIGH_SPEED SPCR = 0x50; SPSR |= (1<<SPI2X)
void spi_init(void);
unsigned char SPI_transmit(unsigned char);
unsigned char SPI_receive(void);
#endif
//use following macros if PB1 pin is used for Chip Select of SD
#define SD_CS_ASSERT PORTB &= ~0x02
#define SD_CS_DEASSERT PORTB |= 0x02
//use following macros if SS (PB4) pin is used for Chip Select of SD
//#define SD_CS_ASSERT PORTB &= ~0x10
//#define SD_CS_DEASSERT PORTB |= 0x10
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xEF;
DDRB = 0xBF; //MISO line i/p, rest o/p
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFE;
}
#define _SPI_ROUTINES_H_
#define SPI_SD SPCR = 0x52
#define SPI_HIGH_SPEED SPCR = 0x50; SPSR |= (1<<SPI2X)
void spi_init(void);
unsigned char SPI_transmit(unsigned char);
unsigned char SPI_receive(void);
#endif
//use following macros if PB1 pin is used for Chip Select of SD
#define SD_CS_ASSERT PORTB &= ~0x02
#define SD_CS_DEASSERT PORTB |= 0x02
//use following macros if SS (PB4) pin is used for Chip Select of SD
//#define SD_CS_ASSERT PORTB &= ~0x10
//#define SD_CS_DEASSERT PORTB |= 0x10
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xEF;
DDRB = 0xBF; //MISO line i/p, rest o/p
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFE;
}
در مگا32 از PortB.1 به عنوان SS استفاده شده است
حال این تغییرات رو برای مگا128 انجام دادم:
#ifndef _SPI_ROUTINES_H_
#define _SPI_ROUTINES_H_
#define SPI_SD SPCR = 0x52
#define SPI_HIGH_SPEED SPCR = 0x50; SPSR |= (1<<SPI2X)
void spi_init(void);
unsigned char SPI_transmit(unsigned char);
unsigned char SPI_receive(void);
#endif
//use following macros if PB5 pin is used for Chip Select of SD
#define SD_CS_ASSERT PORTB &= ~0x20
#define SD_CS_DEASSERT PORTB |= 0x20
//use following macros if SS (PB0) pin is used for Chip Select of SD
//#define SD_CS_ASSERT PORTB &= ~0x01
//#define SD_CS_DEASSERT PORTB |= 0x01
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xDE;
DDRB = 0xF7; //MISO line i/p, rest o/p
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFE;
}
#define _SPI_ROUTINES_H_
#define SPI_SD SPCR = 0x52
#define SPI_HIGH_SPEED SPCR = 0x50; SPSR |= (1<<SPI2X)
void spi_init(void);
unsigned char SPI_transmit(unsigned char);
unsigned char SPI_receive(void);
#endif
//use following macros if PB5 pin is used for Chip Select of SD
#define SD_CS_ASSERT PORTB &= ~0x20
#define SD_CS_DEASSERT PORTB |= 0x20
//use following macros if SS (PB0) pin is used for Chip Select of SD
//#define SD_CS_ASSERT PORTB &= ~0x01
//#define SD_CS_DEASSERT PORTB |= 0x01
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xDE;
DDRB = 0xF7; //MISO line i/p, rest o/p
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFE;
}
از Portb.5 به عنوان ss استفاده شده است
در ضمن میکرو از نوع ATmega128L است
برای همین از هیچ تقسیم مقاومتی استفاده نکردم و فقط برای تغذیه کارت از دیود زنر استفاده کردم
به نظر شما اشکال در کجاست؟؟؟
دیدگاه