سلام دوستان
حیفم اومد برنامه رو منتشر نکنم چرا که به شدت منابع برای راه اندازی بدون دردسر و با زمان بندی های رکورد و پخش دقیق رو این آیسی کمه
این برنامه به شدت تحت تاثیر برنامه های مختلفی هست که در کدویژن نوشته شده بودن سورس های مختلفی رو چک کردم که هرکدوم مشکلی داشتن و بنده متناسب با اتمل استادیو باتوجه به تغییراتی که مورد نیاز بود انجام دادم
به صورت کامل تست شده
از هر نقطه ای از حافظه میشه دقیقا اطلاعات رو ضبط یا پخش کرد
سورس تقدیم به شما
جا داره از کاربر عزیز hamidchi تشکر ویژه داشته باشم که با پی گیری مثمرشون و انتشار برنامشون به کدویژن باعث روشن شدن خیلی از مشکلات شدن
حیفم اومد برنامه رو منتشر نکنم چرا که به شدت منابع برای راه اندازی بدون دردسر و با زمان بندی های رکورد و پخش دقیق رو این آیسی کمه
این برنامه به شدت تحت تاثیر برنامه های مختلفی هست که در کدویژن نوشته شده بودن سورس های مختلفی رو چک کردم که هرکدوم مشکلی داشتن و بنده متناسب با اتمل استادیو باتوجه به تغییراتی که مورد نیاز بود انجام دادم
به صورت کامل تست شده
از هر نقطه ای از حافظه میشه دقیقا اطلاعات رو ضبط یا پخش کرد
سورس تقدیم به شما
جا داره از کاربر عزیز hamidchi تشکر ویژه داشته باشم که با پی گیری مثمرشون و انتشار برنامشون به کدویژن باعث روشن شدن خیلی از مشکلات شدن
کد:
/* * 4.c * * Created: 18/12/2015 4:15:35 PM * Author: __Mehran__ */ #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #ifndef F_CPU #define F_CPU 8000000 #endif // SPI functions //#include <spi.h> // Declare your global variables here #define POWERUP 0b00100000 #define SETPLAY 0b11100000 #define PLAY 0b11110000 #define SETREC 0b10100000 #define REC 0b10110000 #define STOPPWRDN 0b00010000 #define STOP 0b00110000 #define stop_key ((PINC & (1<<4) ) >> 4) #define rec ((PINC & (1<<5)) >> 5) #define play ((PINC & (1<<1) ) >> 1) #define play2 ((PINC & (1<<0) )) void ss_before(void); void ss_after (void); void stoppr (void); unsigned char adress_lsb; unsigned char adress_msb; int i; void spi_init_master (void) { // Set MOSI, SCK as Output //DDRB = (1<<5)|(1<<3) | (1<<2) ; //DDRB &=~(1<<4); // Enable SPI, Set as Master //Prescaler: Fosc/16 //SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);// | (1<< DORD); // sei(); //SPCR=0x73; // SPSR=0x00; } //Function to send and receive data for both master and slave unsigned char spi (unsigned char data) { // Load data into the buffer SPDR = data; //Wait until transmission complete while(!(SPSR & (1<<SPIF) )); // Return received data return(SPDR); } int main(void) { PORTB=0x00; DDRB=0x2C; //DDRB |= 1<<2 ; PORTC=0x38; DDRC=0x01; DDRC &=~(1<<0); DDRC &=~(1<<1); DDRC &=~(1<<5); DDRC &=~(1<<4); PORTD=0x00; DDRD=0xC0; TCCR0=0x00; TCNT0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; GICR|=0x40; MCUCR=0x02; GIFR=0x40; TIMSK=0x00; UCSRB=0x00; ADCSRA=0x00; ACSR=0x80; SFIOR=0x00; SPCR=0x71; SPSR=0x00; adress_lsb=0; adress_msb=0; DDRD |= 1<< 5 ; PORTD |= 1<<5 ; while (1) { if(play==0) { if(stop_key==0) break; // LED_play=1; // LED_rec=0; ss_before(); spi(POWERUP); ss_after(); _delay_ms(55); ss_before(); spi(0x00); spi(0x80); spi(SETPLAY); ss_after(); ss_before(); spi(PLAY); ss_after(); for(i=0;i<3290;i++) { if(stop_key==0) break; _delay_ms(10); } //LED_play=0; stoppr (); } if(play2==0) { if(stop_key==0) break; // LED_play=1; // LED_rec=0; ss_before(); spi(POWERUP); ss_after(); _delay_ms(55); ss_before(); spi(0x2C); spi(0x01); spi(SETPLAY); ss_after(); ss_before(); spi(PLAY); ss_after(); for(i=0;i<3290;i++) { if(stop_key==0) break; _delay_ms(10); } //LED_play=0; stoppr (); } if(rec==0) { if(stop_key==0) break; ss_before(); spi(POWERUP); ss_after(); _delay_ms(55); ss_before(); spi(POWERUP); ss_after(); _delay_ms(100); ss_before(); spi(0x2C); spi(0x01); spi(SETREC); ss_after(); ss_before(); spi(REC); ss_after(); // for(i=0;i<1643;i++) // record for 1 minute by i<1643 (1 second = 27 "i") // { // if(stop_key==0) break; // _delay_ms(10); // } // stoppr (); } if (stop_key == 0) stoppr(); _delay_ms(1); } } void ss_before(void) { // slave_select=1; PORTB |= 1<<2 ; _delay_us(1000); // slave_select=0; PORTB &=~(1<<2); _delay_us(1000); return; } void ss_after(void) { PORTB &=~(1<<2); _delay_us(1000); PORTB |= 1<<2 ; _delay_us(1000); return; } void stoppr (void) { ss_before(); spi(STOP); ss_after(); _delay_ms(80); return; }
دیدگاه