سلام دوستان
حیفم اومد برنامه رو منتشر نکنم چرا که به شدت منابع برای راه اندازی بدون دردسر و با زمان بندی های رکورد و پخش دقیق رو این آیسی کمه
این برنامه به شدت تحت تاثیر برنامه های مختلفی هست که در کدویژن نوشته شده بودن سورس های مختلفی رو چک کردم که هرکدوم مشکلی داشتن و بنده متناسب با اتمل استادیو باتوجه به تغییراتی که مورد نیاز بود انجام دادم
به صورت کامل تست شده
از هر نقطه ای از حافظه میشه دقیقا اطلاعات رو ضبط یا پخش کرد
سورس تقدیم به شما
جا داره از کاربر عزیز 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;    
}









دیدگاه