اطلاعیه

Collapse
No announcement yet.

برنامه codevision برای ds1307 وبایاس آن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه codevision برای ds1307 وبایاس آن

    با عرض سلام
    آیا کسی هست که برنامه codevision برای ds1307 رو داشته باشه.البته عرض کنم که در انتهای کتاب آقای ره افروز هست ومن امتحان کردم ولی از برنامه error میگیره و من نتونستم رفع کنم،در ضمن ثانیه شمارش هم نمیشمارد.ممنون میشم اگر کسی ds1307 رو بسته و جواب گرفته،اگر فایلی داره در اختیار ما هم بگذاره.پیشاپیش از حسن توجهتون سپاس گذارم.

    #2
    پاسخ : برنامه codevision برای ds1307 وبایاس آن


    #include <mega16.h>
    #include <stdio.h>
    #include <delay.h>
    #include <stdlib.h>
    #include <string.h>
    // I2C Bus functions
    #asm
    .equ __i2c_port=0x12 ;PORTD
    .equ __sda_bit=0
    .equ __scl_bit=1
    #endasm
    #include <i2c.h>

    // DS1307 Real Time Clock functions
    #include <ds1307.h>

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <lcd.h>

    // Declare your global variables here
    unsigned int di,moi,yi;

    void main(void)
    {
    // Declare your local variables here
    unsigned char h,m,s;
    unsigned char d,mo,y;
    char lcda[16],lcdb[16];

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=out
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
    PORTB=0x00;
    DDRB=0x01;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x03;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // I2C Bus initialization
    i2c_init();

    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: On
    // Square wave frequency: 1Hz
    rtc_init(0,1,0);

    // LCD module initialization
    lcd_init(16);
    di=29;moi=12;yi=86;
    //i2c_start();
    rtc_set_time(23,59,53);
    rtc_set_date(di,moi,yi);
    //i2c_stop();

    while (1)
    {
    // Place your code here
    // i2c_start();
    rtc_get_time(&h,&m,&s);
    rtc_get_date(&d,&mo,&y);
    // i2c_stop();
    sprintf(lcda,"Time:%02u:%02u:%02u",h,m,s );
    sprintf(lcdb,"Date:%02u/%02u/%02u",d,mo,y);
    lcd_clear();
    lcd_gotoxy(0,0);

    lcd_puts(lcda);

    lcd_putsf(" "
    if(h<=12 ) lcd_putsf("AM"
    else lcd_putsf("PM"
    lcd_gotoxy(0,1);
    lcd_puts(lcdb);
    delay_ms(1000);
    };
    }

    دیدگاه


      #3
      پاسخ : برنامه codevision برای ds1307 وبایاس آن

      یادتون باشه پایه sda و scl را با یک مقاومت به VCC وصل کنید

      دیدگاه


        #4
        پاسخ : برنامه codevision برای ds1307 وبایاس آن

        سلام مهرداد جان آقا تو رویه ومعماری I2C BUS هر جا صحبت از sda و sc l میشه میگن با ترانزیستورهای کلکتور باز یا درین باز اینا رو به زمین وصل
        می کنن . حالا الان شما میگی که با یه مقاومت اینا رو به vcc وصل کنیم یعنی یه حالت pull up براش در نظر گرفتی علتش چیه میشه یکم در موردش بحث کنیم :nerd: oo:
        دوستان! مدتی کمتر به سایت میام ..

        دیدگاه


          #5
          پاسخ : برنامه codevision برای ds1307 وبایاس آن

          نوشته اصلی توسط حسام الدین
          سلام مهرداد جان آقا تو رویه ومعماری I2C BUS هر جا صحبت از sda و sc l میشه میگن با ترانزیستورهای کلکتور باز یا درین باز اینا رو به زمین وصل
          می کنن . حالا الان شما میگی که با یه مقاومت اینا رو به vcc وصل کنیم یعنی یه حالت pull up براش در نظر گرفتی علتش چیه میشه یکم در موردش بحث کنیم :nerd: oo:
          سلام

          فکر کنم این امر به این دلیله که در i2c یک کلاک و دیتا برای ارتباط دو طرفه استفاده میشه

          اینه که گاهی اوقات پینها ورودی میشن و گاهی خروجی

          اما مطمئن نیستم اگه اشتباه میکنم دوستان منو اصلاح کنند :nerd:
          ِِDie for Life, Not Live to Die
          Freedom Fighter
          " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

          دیدگاه


            #6
            پاسخ : برنامه codevision برای ds1307 وبایاس آن

            خب اینیکه میگی رو می دونم دو خط یکی برای دیتا و یکی برای کلاک . :agree:
            از طرف دیگه میگی بعضی مواقع ورودی می خواهیم و بعضی وقتا خروجی و به این دلیله که این پولیتیک رو می زنن :rolleyes:
            اما من سوالم اینه که این ترانزیستورها با این نوع بایاس و آرایش چجوری به تبادل اطلاعات ما روی خط کمک می کنن؟ اصلا اگه نذاریمشون چی میشه؟؟
            از یکی تو دانشگاه پرسیدم: گفت شاید برای کنترل ولتاژ وجریان روی خط باشه :eek:
            حالا من موندم اینو دیگه از کجا آورد؟؟؟
            خلاصه ما سراپا گوشیم. بازم ممنون . :nerd:
            دوستان! مدتی کمتر به سایت میام ..

            دیدگاه


              #7
              پاسخ : برنامه codevision برای ds1307 وبایاس آن

              دوباره سلام .
              من قبلا یه تقویم با همین DS1307 ساخته بودم کارکردش خوب بود .اما الان که یه پروژه ی خیلی ساده تر رو می خوام انجام بدم " ساعت دیجیتالی با نمایش روی LCD " موقع نمایش ساعت هیچی روی LCD نمیاد .
              همه ی اتصالات روهم چک کردم از پیکر بندی میکرو و برنامه هم مطمئنم .
              (برنامه تقریبا مثل همینه که گذاشتید بالا)
              میشه کمک کنید تقریبا از خودم ناامید شدم :cry2: :cry2:
              دوستان! مدتی کمتر به سایت میام ..

              دیدگاه


                #8
                پاسخ : برنامه codevision برای ds1307 وبایاس آن

                سلام بچه ها این برنامه را امتحان کن
                #include <mega16.h>
                #include <delay.h>
                #include<stdio.h>

                // I2C Bus functions
                #asm
                .equ __i2c_port=0x1B ;PORTA
                .equ __sda_bit=0
                .equ __scl_bit=1
                #endasm
                #include <i2c.h>

                // DS1307 Real Time Clock functions
                #include <ds1307.h>

                // Alphanumeric LCD Module functions
                #asm
                .equ __lcd_port=0x18 ;PORTB
                #endasm
                #include <lcd.h>

                // Declare your global variables here
                unsigned char hour,minute,second;
                char lcd1[16],lcd2[16];
                unsigned char year,month,day;
                unsigned char key,keystate;

                flash unsigned char miltable[6][12]={
                {20,19,19,19,20,20,21,21,21,21,20,20},
                {10,11,10,12,11,11,10,10,10,9,10,10},
                {19,18,20,20,21,21,22,22,22,22,21,21},
                {11,12,10,11,10,10,9,9,9,8,9,9},
                {20,19,20,20,21,21,22,22,22,22,21,21},
                {10,11,9,11,10,10,9,9,9,8,9,9}};

                struct date{
                unsigned char day;
                unsigned char month;
                unsigned char year;
                };
                struct date shmdate,mildate ;

                /************************************************** ***********************/
                void miltoshmcv(unsigned char year,unsigned char month,unsigned char day)
                {
                unsigned char k,t1,t2;
                k=year%4;
                if(k==3)
                k=2;
                k*=2;
                t1=miltable[k][month-1];
                t2=miltable[k+1][month-1];
                if(month<3 || (month==3 && day<=miltable[k][month-1]))
                shmdate.year = year + 78;
                else
                shmdate.year = year + 79;

                if(day<=t1)
                {
                shmdate.day=day+t2;
                shmdate.month=(month+8)%12+1;
                }
                else
                {
                shmdate.day=day-t1;
                shmdate.month=(month+9)%12+1;
                }
                }
                /************************************************** ********************/

                void main(void)
                {

                // Declare your local variables here

                // Input/Output Ports initialization
                // Port A initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTA=0x00;
                DDRA=0x00;

                // Port B initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTB=0x00;
                DDRB=0x00;

                // Port C initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTC=0x00;
                DDRC=0x00;

                // Port D initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                PORTD=0xFF;
                DDRD=0x00;

                // Timer/Counter 0 initialization
                // Clock source: System Clock
                // Clock value: Timer 0 Stopped
                // Mode: Normal top=FFh
                // OC0 output: Disconnected
                TCCR0=0x00;
                TCNT0=0x00;
                OCR0=0x00;

                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: Timer 1 Stopped
                // Mode: Normal top=FFFFh
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                TCCR1A=0x00;
                TCCR1B=0x00;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;

                // Timer/Counter 2 initialization
                // Clock source: System Clock
                // Clock value: Timer 2 Stopped
                // Mode: Normal top=FFh
                // OC2 output: Disconnected
                ASSR=0x00;
                TCCR2=0x00;
                TCNT2=0x00;
                OCR2=0x00;

                // External Interrupt(s) initialization
                // INT0: Off
                // INT1: Off
                // INT2: Off
                MCUCR=0x00;
                MCUCSR=0x00;

                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x00;

                // Analog Comparator initialization
                // Analog Comparator: Off
                // Analog Comparator Input Capture by Timer/Counter 1: Off
                ACSR=0x80;
                SFIOR=0x00;

                // I2C Bus initialization
                i2c_init();

                // DS1307 Real Time Clock initialization
                // Square wave output on pin SQW/OUT: Off
                // SQW/OUT pin state: 0
                rtc_init(0,0,0);

                // LCD module initialization
                lcd_init(16);

                while (1)
                {
                rtc_get_time(&hour,&minute,&second);
                rtc_get_date(&day,&month,&year);
                miltoshmcv(year,month,day);

                key=PIND & 0b11111100;
                if (key!=keystate)
                {
                if (key!=0b11111100)
                {
                if (key==0xF8) //if key 1 pressed set the year
                {
                year++;
                if (year==100)
                year=0;
                }
                if (key==0xF4) //if key 2 pressed set the month
                {
                month++;
                if (month==13)
                month=1;
                }
                if (key==0xEC) //if key 3 pressed set the day
                {
                day++;
                if (day==32)
                day=1;
                }
                if (key==0xDC) //if key 4 pressed set the hour
                {
                hour++;
                if (hour==24)
                hour=0;
                }
                if (key==0xBC) //if key 5 pressed set the minute
                {
                minute++;
                if (minute==60)
                minute=0;
                }
                if (key==0x7C) //if key 6 pressed set the second
                {
                second++;
                if (second==60)
                second=0;
                }
                rtc_set_time(hour,minute,second);
                rtc_set_date(day,month,year);
                keystate=key;
                }else
                keystate=0b11111100;
                }

                sprintf(lcd1,"%02u:%02u:%02u",hour,minut e,second);
                sprintf(lcd2,"%02u/%02u/%02u",shmdate.year,shmdate.month,shmdate.day) ;

                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_puts(lcd1);
                lcd_gotoxy(0,1);
                lcd_puts(lcd2);
                delay_ms(100);

                };
                }

                دیدگاه

                لطفا صبر کنید...
                X