اطلاعیه

Collapse
No announcement yet.

تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

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

    تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

    سلام به تمامی دوستان ECA :bye
    من یه مدار تپل ساعت دیجیتالی پیدا کردم و تمامی قطعات اون توی خونه آماده هست ولی سون سگمنتی که توی این مدار استفاده شده از نوع کاتد مشترک هست و من خیلی جمهوری رو گشتم و فقط آند مشترک پیدا کردم . ( سون سگمنت کاتد مشترک کوچیک خیلی هست ولی من از نوع 7 در 11 سانتی متر رو میخوام که پیدا نمیشه ) .
    حالا از دوستان خواهش میکنم که فایل پروژه رو دانلود کنند و کسانی که وارد هستند سورس برنامرو از کاتد مشترک به آند مشترک تبدیل کنند . خیلی حیاتیه . مدار با سون سگمنت کاتد مشترک کوچیک بسته شده و جواب داده .

    سورس : بیسیک ( بسکام )
    قابلیت : ذخیره ساعت در هنگام قطعی برق - نمایش دما و ...
    سون سگمنت استفاده شده از نوع کاتد مشترک



    چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

    #2
    پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

    با سلام
    اینها رو not کنید :

    If Temp_clock >= 3 And Temp_clock <= 4 Then
    Com1 = 1 : Com2 = 0 : Com3 = 1 : Com4 = 1 : Com_dot = 1
    Temp = W \ 10 : Call Send
    Com1 = 1 : Com2 = 1 : Com3 = 0 : Com4 = 1 : Com_dot = 1
    Temp = W Mod 10 : Call Send
    Com1 = 1 : Com2 = 1 : Com3 = 1 : Com4 = 0 : Com_dot = 1
    Temp = 10 : Call Send
    Com1 = 1 : Com2 = 1 : Com3 = 1 : Com4 = 1 : Com_dot = 0
    '----------------
    و
    '------------------
    Sub Send
    Select Case Temp
    Case 0:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 1
    Seg_d = 1
    Seg_e = 1
    Seg_f = 1
    Seg_g = 0
    Case 1:
    Seg_a = 0
    Seg_b = 1
    Seg_c = 1
    Seg_d = 0
    Seg_e = 0
    Seg_f = 0
    Seg_g = 0
    Case 2:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 0
    Seg_d = 1
    Seg_e = 1
    Seg_f = 0
    Seg_g = 1
    Case 3:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 1
    Seg_d = 1
    Seg_e = 0
    Seg_f = 0
    Seg_g = 1
    Case 4:
    Seg_a = 0
    Seg_b = 1
    Seg_c = 1
    Seg_d = 0
    Seg_e = 0
    Seg_f = 1
    Seg_g = 1
    Case 5:
    Seg_a = 1
    Seg_b = 0
    Seg_c = 1
    Seg_d = 1
    Seg_e = 0
    Seg_f = 1
    Seg_g = 1
    Case 6:
    Seg_a = 1
    Seg_b = 0
    Seg_c = 1
    Seg_d = 1
    Seg_e = 1
    Seg_f = 1
    Seg_g = 1
    Case 7:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 1
    Seg_d = 0
    Seg_e = 0
    Seg_f = 0
    Seg_g = 0
    Case 8:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 1
    Seg_d = 1
    Seg_e = 1
    Seg_f = 1
    Seg_g = 1
    Case 9:
    Seg_a = 1
    Seg_b = 1
    Seg_c = 1
    Seg_d = 1
    Seg_e = 0
    Seg_f = 1
    Seg_g = 1
    Case 10:
    'C
    Seg_a = 1
    Seg_b = 0
    Seg_c = 0
    Seg_d = 1
    Seg_e = 1
    Seg_f = 1
    Seg_g = 0
    End Select
    Waitms 2
    Seg_a = 0
    Seg_b = 0
    Seg_c = 0
    Seg_d = 0
    Seg_e = 0
    Seg_f = 0
    Seg_g = 0
    End Sub


    البته توی سخت افزار هم بهتره برای درایو سگمن از ترانزیستو استفاده کنید!چون اینچزی که شما میگید احتمالا به جریان بالا برای روشن شدن سگمنتش نیاز داره !

    دیدگاه


      #3
      پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

      ممنون که به مدار نگاه کردین :smile:

      برای درایو کردن مشکلی وجود نداره ! از آیسی ULN2008 استفاده میکنم .
      ولی من هم دیروز همه اون قسمتی رو که نشون دادین رو NOT کردم ولی روی سون سگمنت چیزهای عجیب قریبی نمایش داده میشد . :angry:
      نمی دونم که چرا این جوری میشه .
      چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

      دیدگاه


        #4
        پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

        آقا من تاحالا uln2008 ندیدم دیتاشیتشم پیدا نکردم مطمئنین خروجیاش اینورس نیست؟

        دیدگاه


          #5
          پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

          سلام،

          از کد زیر استفاده کن و یادت هم نره که جهت D2 و D3 و D4 رو هم عوض کنی!
          کد:
          '*******************************************************************************
          '* Digital DS1307 Clock and Thermometer                              *
          '* Compiler: BASCOM-AVR 2.0.4.0                        *
          '* Creation Date: 01.10.2010                          *
          '* Author: Behnam Zakizadeh                          *
          '* License: freeware                              *
          '* © www.avr64.com                               *
          '* Ver: 1.0                                  *
          '*******************************************************************************
          $regfile = "m8def.dat"
          $crystal = 4000000
          '$projecttime = 0
          $hwstack = 64
          $swstack = 64
          $framesize = 64
          $lib "ds1307clock.lib"
          
          'Sub
          Declare Sub Refresh
          Declare Sub Send
          Declare Sub Keyscan
          Declare Sub Wait4key
          
          'A2D
          Config Adc = Single , Prescaler = Auto , Reference = Avcc
          Enable Adc
          Start Adc
          
          'Var
          Dim Temp As Byte , Sec_blink As Bit
          Dim Temp2 As Byte , W As Word , Temp_clock As Byte
          
          Config Sda = Portc.4
          Config Scl = Portc.3
          
          'address of ds1307
          Const Ds1307w = &HD0                    ' Addresses of Ds1307 clock
          Const Ds1307r = &HD1
          
          Config Clock = User
          
          'dim other needed variables
          Dim Weekday As Byte
          Waitms 100
          
          'For Blink LED
          Config Timer1 = Timer , Prescale = 64
          Enable Interrupts
          Enable Timer1
          Timer1 = 34276
          On Ovf1 Ov1
          Stop Timer1
          
          'I/O
          Ddrd = &B00011111
          Portd = &B11100000
          
          Min_key Alias Pind.7
          Hour_key Alias Pind.6
          Dip_key Alias Pind.5
          
          Com4 Alias Portd.4
          Com3 Alias Portd.3
          Com2 Alias Portd.1
          Com1 Alias Portd.0
          Com_dot Alias Portd.2
          
          Ddrb = &B00111110
          Portb = &H00
          
          Seg_a Alias Portb.1
          Seg_g Alias Portb.2
          Seg_b Alias Portb.3
          Seg_c Alias Portb.4
          Seg_f Alias Portb.5
          
          Point_up Alias Portb.1
          Point_dn Alias Portb.3
          Point_dg Alias Portb.4
          
          Ddrc = &B00000011
          
          Seg_e Alias Portc.0
          Seg_d Alias Portc.1
          
          'Main prog start here:
          If Dip_key = 0 Then
            Time$ = "23:59:50"                    ' to watch the day changing value
            Date$ = "06-08-10"                    ' 08 june 2010
          End If
          
          Start Timer1
          Do
            Call Refresh
            Call Keyscan
          Loop
          
          End
          
          Sub Refresh
            Gosub Getdatetime
            If Temp_clock >= 3 And Temp_clock <= 4 Then
             Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = W \ 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
             Temp = W Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
             Temp = 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
             Point_dg = 0
             Waitms 2
             Point_dg = 1
            Else
             W = Getadc(5)
             W = W / 2
             W = W - 2
             Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = _hour \ 10 : Call Send
             Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = _hour Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
             Temp = _min \ 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
             Temp = _min Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
             Point_up = Sec_blink
             Point_dn = Sec_blink
             Waitms 2
             Point_up = 1
             Point_dn = 1
            End If
          End Sub
          
          Sub Send
            Select Case Temp
            Case 0:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 1
            Case 1:
             Seg_a = 1
             Seg_b = 0
             Seg_c = 0
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 1
            Case 2:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 1
             Seg_d = 0
             Seg_e = 0
             Seg_f = 1
             Seg_g = 0
            Case 3:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 0
             Seg_e = 1
             Seg_f = 1
             Seg_g = 0
            Case 4:
             Seg_a = 1
             Seg_b = 0
             Seg_c = 0
             Seg_d = 1
             Seg_e = 1
             Seg_f = 0
             Seg_g = 0
            Case 5:
             Seg_a = 0
             Seg_b = 1
             Seg_c = 0
             Seg_d = 0
             Seg_e = 1
             Seg_f = 0
             Seg_g = 0
            Case 6:
             Seg_a = 0
             Seg_b = 1
             Seg_c = 0
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 0
            Case 7:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 1
            Case 8:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 0
            Case 9:
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 0
             Seg_e = 1
             Seg_f = 0
             Seg_g = 0
            Case 10:
             'C
             Seg_a = 0
             Seg_b = 1
             Seg_c = 1
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 1
            End Select
            Waitms 2
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 1
          End Sub
          
          Ov1:
          Timer1 = 34276
          Toggle Sec_blink
          Incr Temp_clock
          If Temp_clock > 4 Then Temp_clock = 0
          Return
          
          'called from ds1307clock.lib
          Getdatetime:
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 0                        ' start address in 1307
          
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307r                     ' send address
           I2crbyte _sec , Ack
           I2crbyte _min , Ack                    ' MINUTES
           I2crbyte _hour , Ack                   ' Hours
           I2crbyte Weekday , Ack                  ' Day of Week
           I2crbyte _day , Ack                    ' Day of Month
           I2crbyte _month , Ack                   ' Month of Year
           I2crbyte _year , Nack                   ' Year
           I2cstop
           _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
           _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
          Return
          
          Setdate:
           _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 4                        ' starting address in 1307
           I2cwbyte _day                       ' Send Data to SECONDS
           I2cwbyte _month                      ' MINUTES
           I2cwbyte _year                      ' Hours
           I2cstop
          Return
          
          Settime:
           _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 0                        ' starting address in 1307
           I2cwbyte _sec                       ' Send Data to SECONDS
           I2cwbyte _min                       ' MINUTES
           I2cwbyte _hour                      ' Hours
           I2cstop
          Return
          
          
          Sub Keyscan
            If Hour_key = 0 Then
             Incr _hour
             If _hour > 23 Then _hour = 0
             Gosub Settime
             Call Wait4key
            End If
            If Min_key = 0 Then
             Incr _min
             If _min > 59 Then _min = 0
             Gosub Settime
             Call Wait4key
            End If
          End Sub
          
          Sub Wait4key
            For Temp2 = 1 To 25
             Call Refresh
            Next
          End Sub

          در ضمن، ULN هم نمیخواد، مگر اینکه 7Seg هائی که استفاده میکنی بزرگ باشن و جریان بیشتر از 10 میلی آمپر بخوان.... تازشم، ULN رو کجاش گذاشتی؟! مهمه!!! چون فقط میتونی روی پین های پورت B و C که رفتن به 7Seg بزاریشون. و در اینصورت از کد زیر استفاده کن
          کد:
          '*******************************************************************************
          '* Digital DS1307 Clock and Thermometer                              *
          '* Compiler: BASCOM-AVR 2.0.4.0                        *
          '* Creation Date: 01.10.2010                          *
          '* Author: Behnam Zakizadeh                          *
          '* License: freeware                              *
          '* © www.avr64.com                               *
          '* Ver: 1.0                                  *
          '*******************************************************************************
          $regfile = "m8def.dat"
          $crystal = 4000000
          '$projecttime = 0
          $hwstack = 64
          $swstack = 64
          $framesize = 64
          $lib "ds1307clock.lib"
          
          'Sub
          Declare Sub Refresh
          Declare Sub Send
          Declare Sub Keyscan
          Declare Sub Wait4key
          
          'A2D
          Config Adc = Single , Prescaler = Auto , Reference = Avcc
          Enable Adc
          Start Adc
          
          'Var
          Dim Temp As Byte , Sec_blink As Bit
          Dim Temp2 As Byte , W As Word , Temp_clock As Byte
          
          Config Sda = Portc.4
          Config Scl = Portc.3
          
          'address of ds1307
          Const Ds1307w = &HD0                    ' Addresses of Ds1307 clock
          Const Ds1307r = &HD1
          
          Config Clock = User
          
          'dim other needed variables
          Dim Weekday As Byte
          Waitms 100
          
          'For Blink LED
          Config Timer1 = Timer , Prescale = 64
          Enable Interrupts
          Enable Timer1
          Timer1 = 34276
          On Ovf1 Ov1
          Stop Timer1
          
          'I/O
          Ddrd = &B00011111
          Portd = &B11100000
          
          Min_key Alias Pind.7
          Hour_key Alias Pind.6
          Dip_key Alias Pind.5
          
          Com4 Alias Portd.4
          Com3 Alias Portd.3
          Com2 Alias Portd.1
          Com1 Alias Portd.0
          Com_dot Alias Portd.2
          
          Ddrb = &B00111110
          Portb = &H00
          
          Seg_a Alias Portb.1
          Seg_g Alias Portb.2
          Seg_b Alias Portb.3
          Seg_c Alias Portb.4
          Seg_f Alias Portb.5
          
          Point_up Alias Portb.1
          Point_dn Alias Portb.3
          Point_dg Alias Portb.4
          
          Ddrc = &B00000011
          
          Seg_e Alias Portc.0
          Seg_d Alias Portc.1
          
          'Main prog start here:
          If Dip_key = 0 Then
            Time$ = "23:59:50"                    ' to watch the day changing value
            Date$ = "06-08-10"                    ' 08 june 2010
          End If
          
          Start Timer1
          Do
            Call Refresh
            Call Keyscan
          Loop
          
          End
          
          Sub Refresh
            Gosub Getdatetime
            If Temp_clock >= 3 And Temp_clock <= 4 Then
             Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = W \ 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
             Temp = W Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
             Temp = 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
             Point_dg = 0
             Waitms 2
             Point_dg = 1
            Else
             W = Getadc(5)
             W = W / 2
             W = W - 2
             Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = _hour \ 10 : Call Send
             Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
             Temp = _hour Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
             Temp = _min \ 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
             Temp = _min Mod 10 : Call Send
             Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
             Point_up = Sec_blink
             Point_dn = Sec_blink
             Waitms 2
             Point_up = 1
             Point_dn = 1
            End If
          End Sub
          
          Sub Send
            Select Case Temp
            Case 0:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 0
            Case 1:
             Seg_a = 0
             Seg_b = 1
             Seg_c = 1
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 0
            Case 2:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 0
             Seg_d = 1
             Seg_e = 1
             Seg_f = 0
             Seg_g = 1
            Case 3:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 1
             Seg_e = 0
             Seg_f = 0
             Seg_g = 1
            Case 4:
             Seg_a = 0
             Seg_b = 1
             Seg_c = 1
             Seg_d = 0
             Seg_e = 0
             Seg_f = 1
             Seg_g = 1
            Case 5:
             Seg_a = 1
             Seg_b = 0
             Seg_c = 1
             Seg_d = 1
             Seg_e = 0
             Seg_f = 1
             Seg_g = 1
            Case 6:
             Seg_a = 1
             Seg_b = 0
             Seg_c = 1
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 1
            Case 7:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 0
            Case 8:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 1
            Case 9:
             Seg_a = 1
             Seg_b = 1
             Seg_c = 1
             Seg_d = 1
             Seg_e = 0
             Seg_f = 1
             Seg_g = 1
            Case 10:
             'C
             Seg_a = 1
             Seg_b = 0
             Seg_c = 0
             Seg_d = 1
             Seg_e = 1
             Seg_f = 1
             Seg_g = 0
            End Select
            Waitms 2
             Seg_a = 0
             Seg_b = 0
             Seg_c = 0
             Seg_d = 0
             Seg_e = 0
             Seg_f = 0
             Seg_g = 0
          End Sub
          
          Ov1:
          Timer1 = 34276
          Toggle Sec_blink
          Incr Temp_clock
          If Temp_clock > 4 Then Temp_clock = 0
          Return
          
          'called from ds1307clock.lib
          Getdatetime:
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 0                        ' start address in 1307
          
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307r                     ' send address
           I2crbyte _sec , Ack
           I2crbyte _min , Ack                    ' MINUTES
           I2crbyte _hour , Ack                   ' Hours
           I2crbyte Weekday , Ack                  ' Day of Week
           I2crbyte _day , Ack                    ' Day of Month
           I2crbyte _month , Ack                   ' Month of Year
           I2crbyte _year , Nack                   ' Year
           I2cstop
           _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
           _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
          Return
          
          Setdate:
           _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 4                        ' starting address in 1307
           I2cwbyte _day                       ' Send Data to SECONDS
           I2cwbyte _month                      ' MINUTES
           I2cwbyte _year                      ' Hours
           I2cstop
          Return
          
          Settime:
           _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
           I2cstart                         ' Generate start code
           I2cwbyte Ds1307w                     ' send address
           I2cwbyte 0                        ' starting address in 1307
           I2cwbyte _sec                       ' Send Data to SECONDS
           I2cwbyte _min                       ' MINUTES
           I2cwbyte _hour                      ' Hours
           I2cstop
          Return
          
          
          Sub Keyscan
            If Hour_key = 0 Then
             Incr _hour
             If _hour > 23 Then _hour = 0
             Gosub Settime
             Call Wait4key
            End If
            If Min_key = 0 Then
             Incr _min
             If _min > 59 Then _min = 0
             Gosub Settime
             Call Wait4key
            End If
          End Sub
          
          Sub Wait4key
            For Temp2 = 1 To 25
             Call Refresh
            Next
          End Sub

          خوش گذشت ....
          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

          Sh_Nourbakhsh@Yahoo.com

          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

          دیدگاه


            #6
            پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

            نوشته اصلی توسط OutLandish992
            سلام به تمامی دوستان ECA :bye
            من یه مدار تپل ساعت دیجیتالی پیدا کردم و تمامی قطعات اون توی خونه آماده هست ولی سون سگمنتی که توی این مدار استفاده شده از نوع کاتد مشترک هست و من خیلی جمهوری رو گشتم و فقط آند مشترک پیدا کردم . ( سون سگمنت کاتد مشترک کوچیک خیلی هست ولی من از نوع 7 در 11 سانتی متر رو میخوام که پیدا نمیشه ) .
            حالا از دوستان خواهش میکنم که فایل پروژه رو دانلود کنند و کسانی که وارد هستند سورس برنامرو از کاتد مشترک به آند مشترک تبدیل کنند . خیلی حیاتیه . مدار با سون سگمنت کاتد مشترک کوچیک بسته شده و جواب داده .

            سورس : بیسیک ( بسکام )
            قابلیت : ذخیره ساعت در هنگام قطعی برق - نمایش دما و ...
            سون سگمنت استفاده شده از نوع کاتد مشترک

            سلام میتونی از ایسی 4049B استفاده کنی یه ایسی not هست اینم دیتاشیت :

            http://www.datasheetcatalog.org/data.../HEF4049BF.pdf
            AV Maziton 100
            Render By Artlantis Studio
            [img width=346 height=100]http://maziyar123.persiangig.com/View.jpg[/img]

            دیدگاه


              #7
              پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

              دوستان محترم . ممنون از نظرات ارزشمندتون .

              من برای درایو کردن سون سگمنت های بزرگ به مشکل خوردم . من توی ذهنم آیسی ULN2003 رو در نظر گرفته بودم ولی الان که فکر میکنم نمیشه چون 180 درجه ورودی و خروجی اختلاف فاز دارن. یعنی NOT هستند .

              به نظر شما من چه کاری میتونم انجام بدم . آیا آیسی هست که درست مثل رله عمل کنه . توی آیسی ULN پایه مشترک حتما باید به زمین وصل بشه چونکه امیتر ترانزیستورها محسوب میشه و اگه اونو به تغذیه وصل کنیم کار نمیکنه .
              چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

              دیدگاه


                #8
                پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                نوشته اصلی توسط OutLandish992
                دوستان محترم . ممنون از نظرات ارزشمندتون .

                من برای درایو کردن سون سگمنت های بزرگ به مشکل خوردم . من توی ذهنم آیسی ULN2003 رو در نظر گرفته بودم ولی الان که فکر میکنم نمیشه چون 180 درجه ورودی و خروجی اختلاف فاز دارن. یعنی NOT هستند .

                به نظر شما من چه کاری میتونم انجام بدم . آیا آیسی هست که درست مثل رله عمل کنه . توی آیسی ULN پایه مشترک حتما باید به زمین وصل بشه چونکه امیتر ترانزیستورها محسوب میشه و اگه اونو به تغذیه وصل کنیم کار نمیکنه .
                با سلام،

                اگر سون سگمنت هات بزرگن و جریان زیادی میکشن، من پیشنهاد میکنم که که یک ULN2003 بزاری سمت دیتای سون سگمنت ها ( a,b,c,d,e,f,g,p ) و از 4 تا ترانزیستور مثبت هم سمت مشترکها استفاده کنی....
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                  با تشکر از دوستان خوبم .
                  اما این کار رو هم انجام دادم . به هیچ صراطی مستقیم نمیشه . همه سون سگمنته روشن میشن و 8 رو نشون میدن . :angry: :cry2:
                  چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

                  دیدگاه


                    #10
                    پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                    نوشته اصلی توسط OutLandish992
                    با تشکر از دوستان خوبم .
                    اما این کار رو هم انجام دادم . به هیچ صراطی مستقیم نمیشه . همه سون سگمنته روشن میشن و 8 رو نشون میدن . :angry: :cry2:
                    با سلام،

                    با فرض سون سگمنت آند مشترک و با توجه به توضیحات پست قبلی، به سمت دیتا ( a,b,c,d,e,f,g,p ) که یک بدی و به سمت مشترک اونها صفر بدی، اونوقت روشن میشن....

                    از این کد استفاده کن ( فقط صفر و یک قسمت Com برعکس شده )
                    کد:
                    '*******************************************************************************
                    '* Digital DS1307 Clock and Thermometer                    *
                    '* Compiler: BASCOM-AVR 2.0.4.0                        *
                    '* Creation Date: 01.10.2010                          *
                    '* Author: Behnam Zakizadeh                          *
                    '* License: freeware                              *
                    '* © www.avr64.com                               *
                    '* Ver: 1.0                                  *
                    '*******************************************************************************
                    $regfile = "m8def.dat"
                    $crystal = 4000000
                    '$projecttime = 0
                    $hwstack = 64
                    $swstack = 64
                    $framesize = 64
                    $lib "ds1307clock.lib"
                    
                    'Sub
                    Declare Sub Refresh
                    Declare Sub Send
                    Declare Sub Keyscan
                    Declare Sub Wait4key
                    
                    'A2D
                    Config Adc = Single , Prescaler = Auto , Reference = Avcc
                    Enable Adc
                    Start Adc
                    
                    'Var
                    Dim Temp As Byte , Sec_blink As Bit
                    Dim Temp2 As Byte , W As Word , Temp_clock As Byte
                    
                    Config Sda = Portc.4
                    Config Scl = Portc.3
                    
                    'address of ds1307
                    Const Ds1307w = &HD0                    ' Addresses of Ds1307 clock
                    Const Ds1307r = &HD1
                    
                    Config Clock = User
                    
                    'dim other needed variables
                    Dim Weekday As Byte
                    Waitms 100
                    
                    'For Blink LED
                    Config Timer1 = Timer , Prescale = 64
                    Enable Interrupts
                    Enable Timer1
                    Timer1 = 34276
                    On Ovf1 Ov1
                    Stop Timer1
                    
                    'I/O
                    Ddrd = &B00011111
                    Portd = &B11100000
                    
                    Min_key Alias Pind.7
                    Hour_key Alias Pind.6
                    Dip_key Alias Pind.5
                    
                    Com4 Alias Portd.4
                    Com3 Alias Portd.3
                    Com2 Alias Portd.1
                    Com1 Alias Portd.0
                    Com_dot Alias Portd.2
                    
                    Ddrb = &B00111110
                    Portb = &H00
                    
                    Seg_a Alias Portb.1
                    Seg_g Alias Portb.2
                    Seg_b Alias Portb.3
                    Seg_c Alias Portb.4
                    Seg_f Alias Portb.5
                    
                    Point_up Alias Portb.1
                    Point_dn Alias Portb.3
                    Point_dg Alias Portb.4
                    
                    Ddrc = &B00000011
                    
                    Seg_e Alias Portc.0
                    Seg_d Alias Portc.1
                    
                    'Main prog start here:
                    If Dip_key = 0 Then
                      Time$ = "23:59:50"                    ' to watch the day changing value
                      Date$ = "06-08-10"                    ' 08 june 2010
                    End If
                    
                    Start Timer1
                    Do
                      Call Refresh
                      Call Keyscan
                    Loop
                    
                    End
                    
                    Sub Refresh
                      Gosub Getdatetime
                      If Temp_clock >= 3 And Temp_clock <= 4 Then
                       Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
                       Temp = W \ 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
                       Temp = W Mod 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
                       Temp = 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
                       Point_dg = 0
                       Waitms 2
                       Point_dg = 1
                      Else
                       W = Getadc(5)
                       W = W / 2
                       W = W - 2
                       Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
                       Temp = _hour \ 10 : Call Send
                       Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
                       Temp = _hour Mod 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
                       Temp = _min \ 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
                       Temp = _min Mod 10 : Call Send
                       Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
                       Point_up = Sec_blink
                       Point_dn = Sec_blink
                       Waitms 2
                       Point_up = 1
                       Point_dn = 1
                      End If
                    End Sub
                    
                    Sub Send
                      Select Case Temp
                      Case 0:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 1
                       Seg_f = 1
                       Seg_g = 0
                      Case 1:
                       Seg_a = 0
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 0
                       Seg_e = 0
                       Seg_f = 0
                       Seg_g = 0
                      Case 2:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 0
                       Seg_d = 1
                       Seg_e = 1
                       Seg_f = 0
                       Seg_g = 1
                      Case 3:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 0
                       Seg_f = 0
                       Seg_g = 1
                      Case 4:
                       Seg_a = 0
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 0
                       Seg_e = 0
                       Seg_f = 1
                       Seg_g = 1
                      Case 5:
                       Seg_a = 1
                       Seg_b = 0
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 0
                       Seg_f = 1
                       Seg_g = 1
                      Case 6:
                       Seg_a = 1
                       Seg_b = 0
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 1
                       Seg_f = 1
                       Seg_g = 1
                      Case 7:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 0
                       Seg_e = 0
                       Seg_f = 0
                       Seg_g = 0
                      Case 8:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 1
                       Seg_f = 1
                       Seg_g = 1
                      Case 9:
                       Seg_a = 1
                       Seg_b = 1
                       Seg_c = 1
                       Seg_d = 1
                       Seg_e = 0
                       Seg_f = 1
                       Seg_g = 1
                      Case 10:
                       'C
                       Seg_a = 1
                       Seg_b = 0
                       Seg_c = 0
                       Seg_d = 1
                       Seg_e = 1
                       Seg_f = 1
                       Seg_g = 0
                      End Select
                      Waitms 2
                       Seg_a = 0
                       Seg_b = 0
                       Seg_c = 0
                       Seg_d = 0
                       Seg_e = 0
                       Seg_f = 0
                       Seg_g = 0
                    End Sub
                    
                    Ov1:
                    Timer1 = 34276
                    Toggle Sec_blink
                    Incr Temp_clock
                    If Temp_clock > 4 Then Temp_clock = 0
                    Return
                    
                    'called from ds1307clock.lib
                    Getdatetime:
                     I2cstart                         ' Generate start code
                     I2cwbyte Ds1307w                     ' send address
                     I2cwbyte 0                        ' start address in 1307
                    
                     I2cstart                         ' Generate start code
                     I2cwbyte Ds1307r                     ' send address
                     I2crbyte _sec , Ack
                     I2crbyte _min , Ack                    ' MINUTES
                     I2crbyte _hour , Ack                   ' Hours
                     I2crbyte Weekday , Ack                  ' Day of Week
                     I2crbyte _day , Ack                    ' Day of Month
                     I2crbyte _month , Ack                   ' Month of Year
                     I2crbyte _year , Nack                   ' Year
                     I2cstop
                     _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
                     _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
                    Return
                    
                    Setdate:
                     _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
                     I2cstart                         ' Generate start code
                     I2cwbyte Ds1307w                     ' send address
                     I2cwbyte 4                        ' starting address in 1307
                     I2cwbyte _day                       ' Send Data to SECONDS
                     I2cwbyte _month                      ' MINUTES
                     I2cwbyte _year                      ' Hours
                     I2cstop
                    Return
                    
                    Settime:
                     _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
                     I2cstart                         ' Generate start code
                     I2cwbyte Ds1307w                     ' send address
                     I2cwbyte 0                        ' starting address in 1307
                     I2cwbyte _sec                       ' Send Data to SECONDS
                     I2cwbyte _min                       ' MINUTES
                     I2cwbyte _hour                      ' Hours
                     I2cstop
                    Return
                    
                    
                    Sub Keyscan
                      If Hour_key = 0 Then
                       Incr _hour
                       If _hour > 23 Then _hour = 0
                       Gosub Settime
                       Call Wait4key
                      End If
                      If Min_key = 0 Then
                       Incr _min
                       If _min > 59 Then _min = 0
                       Gosub Settime
                       Call Wait4key
                      End If
                    End Sub
                    
                    Sub Wait4key
                      For Temp2 = 1 To 25
                       Call Refresh
                      Next
                    End Sub
                    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                    Sh_Nourbakhsh@Yahoo.com

                    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                    دیدگاه


                      #11
                      پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                      آقا ببخشید جسارتا من متوجه نمیشم چه لزومی داره که هم از ترانزیستور استفاده کنیم هم از uln2003 خوب مگه قرار نیست که سگمنت رو درایو کنیم خوب از ترانزیستور برای انتخاب سگمنت استفاده میکنیم اون ور هم خوب جریان می خواد به زمین منتقل بشه دیگه و محدودیت هم دیگه نداره که بخواهیم از uln استفاده کنیم
                      من میگم از bc549 یا bc337 استفاده کنید مثل این :
                      و البته اون برنامه اول جناب aivhl که تماما نات هست استفاده کنید

                      دیدگاه


                        #12
                        پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                        با سلام،

                        خوب اگه سون سگمنت ها بزرگ باشن و هر سگمنت حدود 50 تا 100 میلی آمپر بخواد چی؟
                        به نظر من در این حالت وقتی 8 روشن بشه، میکرو هم میترکه :mrgreen:

                        مدار شما برای سون سگمنت های معمولی که حداکثر 10 تا 20 میلی آمپر مصرف دارن خوبه.
                        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                        Sh_Nourbakhsh@Yahoo.com

                        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                        دیدگاه


                          #13
                          پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                          نوشته اصلی توسط mojtaba_led
                          آقا ببخشید جسارتا من متوجه نمیشم چه لزومی داره که هم از ترانزیستور استفاده کنیم هم از uln2003 خوب مگه قرار نیست که سگمنت رو درایو کنیم خوب از ترانزیستور برای انتخاب سگمنت استفاده میکنیم اون ور هم خوب جریان می خواد به زمین منتقل بشه دیگه و محدودیت هم دیگه نداره که بخواهیم از uln استفاده کنیم
                          من میگم از bc549 یا bc337 استفاده کنید
                          و البته اون برنامه اول جناب aivhl که تماما نات هست استفاده کنید
                          من این مدار رو با BC549 بستم داره خوب جواب میده ( قسمت مشترک رو با این ترانزیستور بستم ) حالا میمونه قسمت دیتای سون سگمنت که گیج شدم باید چی کار کنم .
                          چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

                          دیدگاه


                            #14
                            پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                            آقا نظرتون در مورد این چیه :
                            البته خروجی های a تا b رو به حالت اول برگردوندم چونکه uln2803 خروجی هاش اینورس هستند .

                            دیدگاه


                              #15
                              پاسخ : تبدیل برنامه ساعت دیجیتالی با 7 سگمنت کاتد مشترک به آند مشترک

                              نوشته اصلی توسط mojtaba_led
                              آقا نظرتون در مورد این چیه :
                              البته خروجی های a تا b رو به حالت اول برگردوندم چونکه uln2803 خروجی هاش اینورس هستند .
                              با سلام، :bye

                              این تقریبا شبیه همونیه که من فکرشو میکردم. فقط نفهمیدم که RN1 برای چیه؟

                              اگر ترانزیستورها رو مثبت کنی و امیترشون رو مستقیم به مثبت و کلکتورشون رو هم مستقیم به آند سون سگمنت وصل کنی و بیسشون رو هم با یک مقاومت حدود 1 کیلو درایو کنی، اونوقت حرفه ای تره!

                              مرسی...
                              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                              Sh_Nourbakhsh@Yahoo.com

                              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                              دیدگاه

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