من کتابخانه ای به کدویژن اضافه نکردم بلکه از کتابخانه خودش استفاده کردم در ورژن 2.5.03
در مورد مثال هم بر روی چشم پیداش میکنم و براتون اپ میکنم
خدمت شما
توضیح مختصرکد:#include <mega32a.h> #include <alcd.h> #include <ff.h> #include <stdio.h> #include <delay.h> #define T1_OVF_FREQ 100 #define T1_PRESC 1024L #define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ))) unsigned char buffer[10]; FRESULT res; unsigned int nbytes; FATFS drive; FIL file; char path1[]="0:/MASOUD.txt"; interrupt [TIM1_OVF] void timer_comp_isr(void) { /* re-initialize Timer1 */ TCNT1H=T1_INIT>>8; TCNT1L=T1_INIT&0xFF; /* card access low level timing function */ disk_timerproc(); } void main(void) { TCCR1A=0x00; TCCR1B=(1<<CS12)|(1<<CS10); TCNT1H=T1_INIT>>8; TCNT1L=T1_INIT&0xFF; TIMSK=1<<TOIE1; delay_ms(1000); #asm("sei") // Alphanumeric LCD initialization // RS - PORTA Bit 0 // RD - PORTA Bit 6 // EN - PORTA Bit 1 // D4 - PORTA Bit 2 // D5 - PORTA Bit 3 // D6 - PORTA Bit 4 // D7 - PORTA Bit 5 // Characters/line: 16 lcd_init(16); lcd_clear(); if ((res=f_mount(0,&drive))==FR_OK) lcd_putsf("FAT mounted = OK"); delay_ms(1000); lcd_clear(); if ((res=f_open(&file,path1,FA_READ))==FR_OK) lcd_putsf("File open MASOUD"); delay_ms(1000); lcd_clear(); if ((res=f_read(&file,buffer,14,&nbytes))==FR_OK) lcd_putsf("Reading Data"); delay_ms(1000); lcd_clear(); lcd_puts(buffer); delay_ms(1000); lcd_clear(); if ((res=f_close(&file))==FR_OK) lcd_putsf("File closed"); while(1); }
فایل TXT به نام masoud که با همین نام در مموری کارت موجود هست را ابتدا باز و سپس می خواند و بعد میبنده وپایان برنامه .
ویرایش توسط Ma3ood : 26-06-2012 در ساعت 23:48
مسعود جان این برنامه تا رم چند گیگ جواب میده؟
من رم SD یک گیگ گذاشتم و با همین برنامه کار کردم اما جواب نداد، از سخت افزارم مطمئنم چون با یه برنامه دیگه البته شبیه همین تونستم یه فایل تو SD بسازم اما الان بعد از خط
if ((res=f_mount(0,&fat))==FR_OK)
lcd_putsf("FAT mounted = OK");
دیگه میکرو کار نمیکنه.
ممکنه به خاطر این باشه که از SD استفاده کردم؟ چون توی سایت eca خونم که با SD یکم اذیت میکنه اما جایی دیگه گفته بودن هم با SD و هم با MMC جواب میده.
یه راهنمایی کن
راستی این دستور خیلی مهمه
اسمی که توی رم ایجاد میکنی باید دقیقا با این جا یکسان باشه و توی برنامه اگه توجه کنی 14 بایت از این فایل میخونه مثلا همون یه اسمکد:char path1[]="0:/MASOUD.txt";
مرسی مسعود جان
یه سوال...
من میخوام اطلاعات یه عکس رو که حدود 100KB میشه رو ذخیره کنم، چون حافظه های دیگه ای مثل at45db161b اذیت کرد اومدم سراغ MMC و SD اما از اونجایی که حافظه من (مثلا 1G) تلف میشه و همینطور هزینه من بالا میره پیشنهادی داری که بتونم این مساله رو حل کنم؟ آخه فکر نکنم اون MMC قدیمی ها که با ظرفیت 128 و 64 و یا حتی 512M دیگه گیر بیاد
حق با شماست هزینه نسبت به کاری که میخواهیم انجام بدهیم متناسب نیست
در کل پیشنهاد من بازهم استفاده از mmc هست حافظه های 64 و 128 کم پیدا میشه ولی 256 و 512 زیاده تو بازار قیمتی هم ندارند 3 یا 4 تومن موبایل فروشی ها زیاد دارن چون خیلی ها رمشون را که ارتقا دادن اونا را هم انداختن دور
پیشنها خوبی بود چرا نرم موبایل فروشی ها بپرسم، مرسی
آقا من این SD رو 100 بار به همه نوعش فرمت کردم، جواب نمیده
فقط اون اول برنامه ای که توی مجله نویز شماره 2 بود که مشابه برنامه آقا مسعود هست رو ریختم رو میکرو و فقط فایل txt رو برام ساخت و نمیشد داخلش چیزی نوشت
کچلم کرده دیگه یکی یه راهنمایی کنه
مرسی
دوست من لطف کن شماتیک و برنامه ای که نوشتی ایجا بزار به طور کامل
اینم شماتیک و سورس برنامه
- برنامه رو با کدویژن 2.5.3 نوشتم.
- روی بردبورد نزدیک پایه های تغذیه میکرو و همینطور SD کارت یه 100 نانو و 1000 میکرو گذاشتم.
- بجای زنر از رگولاتور LF33 برا تغذیه SD استفاده کردم.
- با رم 1 ، 2 و 8 گیگ تست کردم.
فکر کنم میکرو به دستور if ((res=f_open(&file,path,FA_CREATE_ALWAYS))==FR_OK) (خط 56 برنامه) که میرسه هنگ میکنه چون بعد اون دستور یه LED گذاشتم که روشن شه اما نشد.
ممکنه به خاطر کمبود SRAM میکرو باشه!!!؟
البته دفعه اول جواب گرفتم، فایل txt رو میساخت اما فقط اطلاعات توش نمینوشت!!!
بعد از اون دیگه نتونستم جواب بگیرم
ویرایش توسط mj3747 : 27-07-2012 در ساعت 19:17
برنامه یه مشکلاتی داشت من زیاد وقت نداشتم برات تصحیحش کنم اما یه نمونه کد برات نوشتم اینو امتحان کن جواب میگیری
اما نکات
1- فرکانس کاری را 8 مگا خارجی بگذار
2- LCD به پورت a متصل هستش
3- در نرم افزار confing->lib->mmc را به نحوه تنظیم توجه کن
4-یه فایل txt در مموری به نام test بریز و اسمی با 10 کاراکتر توش بنویس
5- باید جواب بده 100%
در اخر این برنامه فعلا برای خوندن از MMC هستش .
در برنامه قبلی چه چیزی میخواستی در فایل txt بنویسه خوب فقط ایجاد میکرد و فکر نمی کنم هنگ هم کرده باشه چون داشته رایت میکرده و خوب چیزی هم نمی دیدی دیگه موفق باشی
ویرایش توسط Ma3ood : 27-07-2012 در ساعت 21:23
مرسی مسعود جان اما بازم جواب نداد!!!
- LCD که فرقی نداره به کدوم پورت باشه.
- تو تنظیمات MMC هم که اون 2 تا پایه اصلا استفاده نمیشه، با این حال رو پورت B تنظیم کردم بازم جواب داد.
برا بار اول که جواب گرفتم همه مراحل روی LCD نمایش میدادم، فقط مرحله writing رو نشون نمیداد اما تا آخر مراحل میرفت و باز کردن و بستن فایل نشون میداد!!!
میکروم mega32a که من توی برنامه mega32 انتخاب کردم، اونم درست کردم اما بازم جواب نداد.
دیگه مو تو سرم نمونده که بکنم
بله درسته، دقت کردم!
تست کردم، هم با 14.745600 هم با 10 خارجی و هم با 8 داخلی، البته کریستال 8 نداشتم اما خب بازم فکر کنم باید کار کنه دیگه!!!
مدار رو هم طبق مدار مجله نویز بسته بودم که البته جای 3.3 و 1.8 جابجا بود، شایدم فرقی نداشته باشه، در هر صورت الان طبق مدار شما میبندم و تست میکنم.
مرسی
1- خوب جای مقاومت ها رو که جابجا بستی ولتاژش فرق داره
2- ببینید شما که بهتر از من میدونید در این پروژه از تایمر 1 استفاده شده و و از اونجایی که تایمر ها وابسته به کلاک میکرو هستن پس گذاشتن کریستال 8 با 10 و یا 14 فرق داره برای تایمر و تنظیمات تایمر ممکنه بهم بخوره .
3-کدوم شماره مجله نویز این مطلب را داره
سلام مهندس
شما اينو هم تست كن. من كه باهاش كامل جواب گرفتم البته با STM32:
کد:FATFS fs; // ijade drive FIL file_temp; UINT bw; . . . f_mount(0,&fs); f_open(&file_temp, "Iranmicro.txt", FA_WRITE|FA_OPEN_ALWAYS|FA_OPEN_EXISTING); f_write(&file_temp,"http://www.iranmicro.ir",23,&bw); f_close(&file_temp); f_mount(0, 0);
_____________________________________
_____________________________________