ÓraIC-k használata

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

ÓraIC-k használata

HozzászólásSzerző: Robert » 2008. augusztus 17. vasárnap, 13:35

A PCF8583 jelű óraIC rutinjai (I2C, A2-es címen):


Alapok, kiolvasás

Kód: Egész kijelölése

         Const clkaddr=&HA2
         Dim .... (variables)

         Print "{027}[2JTime status:"
         Do
            I2cstart                                           'generate start
            I2cwbyte Clkaddr                                   'write addres of PCF8583
            I2cwbyte 2                                         'select second register
            I2cstart                                           'generate repeated start
            L_temp1b = Clkaddr + 1
            I2cwbyte L_temp1b                               'write address for reading info
            I2crbyte Clk_s , Ack                            '&h02 read seconds (00...59)
            If Clk_s.7 = 1 Then
               Csipog1                                      'Csak teszt!
               Goto Ujraolvas                               'nem megbizhato az adat (VL reg)
            End If
            Clk_s.7 = 0

            I2crbyte Clk_m , Ack                            '&h03 read minutes (00...59)
            Clk_m.7 = 0                                     '7. bit torlese

            I2crbyte Clk_h , Ack                            '&h04 read hours (00...23)
            Clk_h.7 = 0
            Clk_h.6 = 0

            I2crbyte Clk_d , Ack                            '&h05 read days (01....31)
            Clk_d.7 = 0
            Clk_d.6 = 0
            I2crbyte L_temp1b , Ack                         '&H06 weekday (nem haszn.) het napjai (0...6)
            I2crbyte Clk_wm , Ack                           '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
            Clk_cent = Clk_wm.7
            Clk_wm.7 = 0
            Clk_wm.6 = 0
            Clk_wm.5 = 0
            I2crbyte Clk_y , Nack                           '&h08 Year
            I2cstop                                         'generate stop
            Print "{027}[2;1f";                             ' VT100 emulation set pos to 2,2
            Print Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s)
            Print "" ; Bcd(clk_d) ; "." ; Bcd(clk_wm) ; "." ;
            If Clk_cent = 1 Then
               Print "20";
               Else
               Print "19";
            End If
            Print Bcd(clk_y) ; "."
            Print "Err:" ; Err
            Waitms 50
           Ujraolvas:
         Loop Until Inkey() = 27

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 17. vasárnap, 13:37

A I2C-s PCF8563-as IC a Bascom/Samples alatt a clock.bas állományban van leírva. A PCF8563 és a PCF8583 nem kompatibilis!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 17. vasárnap, 14:06

PCF 8563 óra beállítása (változók értelemszerűek):

Kód: Egész kijelölése

         Print "{027}[2JSet date & time..."
         Input "Year (1901-2099):" , L_temp1w
         If L_temp1w < 2000 Then
            Clk_cent = 0
            Else
            Clk_cent = 1
         End If
         L_temp1w = L_temp1w Mod 100
         Clk_y = L_temp1w
         Clk_y = Makebcd(clk_y)
         Input "Month (01-12)    :" , Clk_wm
         Input "Day (01-31)      :" , Clk_d
         Input "Hour (00-23)     :" , Clk_h
         Input "Minute (00-59)   :" , Clk_m
         Input "Second (00-59)   :" , Clk_s

         clk_S = Makebcd(clk_s)                                        'seconds
         clk_M = Makebcd(clk_m)                                        'minutes
         clk_H = Makebcd(clk_h)                                        'hours
         clk_D = Makebcd(clk_d)                                        'days
         Clk_wm = Makebcd(clk_wm)                           'months
         If Clk_cent = 1 Then Clk_wm.7 = 1

         I2cstart                                              'generate start
         I2cwbyte Clkaddr                                      'write address
         I2cwbyte 0                                            'select control register
         I2cwbyte 0                                         'Control1 reg
         I2cwbyte 0                                         'Control2 reg
         I2cstart                                              'repeated start
         I2cwbyte Clkaddr                                      'write mode
         I2cwbyte 2                                            'select seconds Register
         I2cwbyte clk_S
         I2cwbyte clk_M
         I2cwbyte clk_H
         I2cwbyte Clk_d
         I2cwbyte 5                                         'het napja (nem fontos)
         I2cwbyte Clk_wm
         I2cwbyte Clk_y
         I2cstop
         Wait 2

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. október 23. csütörtök, 12:18

PCF8563T kezelése. Főbb adatok kezelése.
Kissé eltérő a többi PCF85x3 chipektől.

Program alapvázlat:

Kód: Egész kijelölése

'Clock (PCF8563T)
   Const Clkaddr = &HA2                                     'A2
   Dim Clk_s As Byte                                        'Second
   Dim Clk_m As Byte                                        'Min
   Dim Clk_h As Byte                                        'Hour
   Dim Clk_d As Byte                                        'Day
   Dim Clk_wm As Byte                                       'Month
   Dim Clk_y As Byte                                        'Year/ev
   Dim Clk_cent As Byte                                     'szazad 0-19xx, 1-20xx

   Lcd "Set Clock...        "
   Waitms 100
   I2cinit
   I2cstart
   I2cwbyte Clkaddr
   If Err = 0 Then                                          'oraszinkron
      I2cstart                                              'generate start
      I2cwbyte Clkaddr                                      'write addres of PCF8583
      I2cwbyte 2                                            'select second register
      I2cstart                                              'generate repeated start
      Temp1b = Clkaddr + 1
      I2cwbyte Temp1b                                       'write address for reading info
      I2crbyte Clk_s , Ack                                  '&h02 read seconds (00...59)


      If Clk_s.7 = 1 Then
         Csipog1                                            'Csak teszt! (elemkimerulest/elemhibat jelol)
         Print "Error: Replace battery..."
         Print "Time NOT synchronized."
         Locate 4 , 1
         Lcd "  Replace battery!  "                         'Nem torlom a jelzobitet, mert a SDre is irodjon ki!
         Warning
         Clk_s.7 = 0
         Goto Kilep
      End If

      I2crbyte Clk_m , Ack                                  '&h03 read minutes (00...59)
      Clk_m.7 = 0                                           '7. bit torlese

      I2crbyte Clk_h , Ack                                  '&h04 read hours (00...23)
      Clk_h.7 = 0
      Clk_h.6 = 0

      I2crbyte Clk_d , Ack                                  '&h05 read days (01....31)
      Clk_d.7 = 0
      Clk_d.6 = 0
      I2crbyte Temp1b , Ack                                 '&H06 weekday (nem haszn.) het napjai (0...6)
      I2crbyte Clk_wm , Ack                                 '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
      Clk_cent = Clk_wm.7
      Clk_wm.7 = 0
      Clk_wm.6 = 0
      Clk_wm.5 = 0
      I2crbyte Clk_y , Nack                                 '&h08 Year
      I2cstop                                               'generate stop

      Print "Ext:" ; Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s) ; "   " ; Bcd(clk_d) ; "." + Bcd(clk_wm) ; "." ; Bcd(clk_y)
      Print "Int:" ; Time$ ; "   " ; Date$
      'Print "Int. Time:" ; Time$
      Tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
      Time$ = Tempstring20
      'Print "In. Date:" ; Date$
      Tempstring20 = Bcd(clk_d) + "." + Bcd(clk_wm) + "." + Bcd(clk_y)
      Date$ = Tempstring20
      Print "Time synchronized (Ext->Int)."


-------------------------------------------
'41: Read Clock
'42: Set Clock

      Prog41:
         Print "{027}[2JDate & Time status"
         Do
            I2cstart                                        'generate start
            I2cwbyte Clkaddr                                'write addres of PCF8583
            I2cwbyte 2                                      'select second register
            I2cstart                                        'generate repeated start
            L_temp1b = Clkaddr + 1
            I2cwbyte L_temp1b                               'write address for reading info
            I2crbyte Clk_s , Ack                            '&h02 read seconds (00...59)
            If Clk_s.7 = 1 Then
               Csipog1                                      'Csak teszt! (elemkimerulest jelol)
               Print "Battery error!"
               I2cstop
               Warning

               Clk_s.7 = 0

               I2cstart                                     'repeated start
               I2cwbyte Clkaddr                             'write mode
               I2cwbyte 2                                   'select seconds Register
               I2cwbyte Clk_s                               'Reset VL register
               I2cstop

               I2cstart                                     'generate start
               I2cwbyte Clkaddr                             'write addres of PCF8583
               I2cwbyte 2                                   'select second register
               I2cstart                                     'generate repeated start
               L_temp1b = Clkaddr + 1
               I2cwbyte L_temp1b                            'write address for reading info
               I2crbyte Clk_s , Ack                         '&h02 read seconds (00...59)
            End If

            Clk_s.7 = 0

            I2crbyte Clk_m , Ack                            '&h03 read minutes (00...59)
            Clk_m.7 = 0                                     '7. bit torlese

            I2crbyte Clk_h , Ack                            '&h04 read hours (00...23)
            Clk_h.7 = 0
            Clk_h.6 = 0

            I2crbyte Clk_d , Ack                            '&h05 read days (01....31)
            Clk_d.7 = 0
            Clk_d.6 = 0
            I2crbyte L_temp1b , Ack                         '&H06 weekday (nem haszn.) het napjai (0...6)
            I2crbyte Clk_wm , Ack                           '&h07 month/centaury (7.bit: cent. 1-20xx, 0-19xx)
            Clk_cent = Clk_wm.7
            Clk_wm.7 = 0
            Clk_wm.6 = 0
            Clk_wm.5 = 0
            I2crbyte Clk_y , Nack                           '&h08 Year
            I2cstop                                         'generate stop
            Print "{027}[2;1f";                             ' VT100 emulation set pos to 2,2
'            L_tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
            Print "Ext:" ; Bcd(clk_h) ; ":" ; Bcd(clk_m) ; ":" ; Bcd(clk_s) ; "   "
            Print "Int:" ; Time$
            Print
            Print "Ext:" ; Bcd(clk_d) ; "." ; Bcd(clk_wm) ; "." ;
            If Clk_cent = 1 Then
               Print "20";
               Else
               Print "19";
            End If
            Print Bcd(clk_y) ; "."
            Print "Int:" ; Date$
            Print "Err:" ; Err
            Waitms 50
           Ujraolvas:
         Loop Until Inkey() = 27
         Print "Int. Time:" ; Time$
         L_tempstring20 = Bcd(clk_h) + ":" + Bcd(clk_m) + ":" + Bcd(clk_s)
         Time$ = L_tempstring20
         Print "In. Date:" ; Date$
         L_tempstring20 = Bcd(clk_d) + "." + Bcd(clk_wm) + "." + Bcd(clk_y)
         Date$ = L_tempstring20
      Return

'------------------------------------------------------------------------------
      Prog42:
         Print "{027}[2JSet Date & Time"
         Input "Year (1901-2099):" , L_temp1w
         If L_temp1w = 0 Then Return
         If L_temp1w < 2000 Then
            Clk_cent = 0
            Else
            Clk_cent = 1
         End If
         L_temp1w = L_temp1w Mod 100
         Clk_y = L_temp1w
         Clk_y = Makebcd(clk_y)
         Input "Month (01-12)   :" , Clk_wm
         Input "Day (01-31)     :" , Clk_d
         Input "Hour (00-23)    :" , Clk_h
         Input "Minute (00-59)  :" , Clk_m
         Input "Second (00-59)  :" , Clk_s

         Clk_s = Makebcd(clk_s)                             'seconds
         Clk_m = Makebcd(clk_m)                             'minutes
         Clk_h = Makebcd(clk_h)                             'hours
         Clk_d = Makebcd(clk_d)                             'days
         Clk_wm = Makebcd(clk_wm)                           'months
         If Clk_cent = 1 Then Clk_wm.7 = 1

         I2cstart                                           'generate start
         I2cwbyte Clkaddr                                   'write address
         I2cwbyte 0                                         'select control register
         I2cwbyte 0                                         'Control1 reg
         I2cwbyte 0                                         'Control2 reg
         I2cstart                                           'repeated start
         I2cwbyte Clkaddr                                   'write mode
         I2cwbyte 2                                         'select seconds Register
         I2cwbyte Clk_s
         I2cwbyte Clk_m
         I2cwbyte Clk_h
         I2cwbyte Clk_d
         I2cwbyte 5                                         'het napja (nem fontos)
         I2cwbyte Clk_wm
         I2cwbyte Clk_y
         I2cstop
         Wait 2
         Gosub Prog41
      Return

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2008. október 23. csütörtök, 18:17

Ricoh RS5C372A/B:

Kód: Egész kijelölése

Const Rtc_w = &H64
Const Rtc_r = &H65

'RTC-hez
Dim Rtc_sec As Byte , Rtc_min As Byte , Rtc_hour As Byte
Dim Rtc_dow As Byte , Rtc_day As Byte , Rtc_month As Byte , Rtc_year As Byte
'-------------------------------------------------------------------------------
Sub Rtc_set:
Local New_hour As Byte , New_month As Byte , New_dow As Byte , Tmp1 As Byte
New_month = 128 + Rtc_month
New_month = Makebcd(new_month)
New_dow = Makebcd(new_dow)

New_hour = Lookup(rtc_hour , Idoorak12)

I2cstart
I2cwbyte Rtc_w
I2cwbyte &H00                                               'Másodpercek regisztere
Tmp1 = Makebcd(0)
I2cwbyte Tmp1
Tmp1 = Makebcd(rtc_min)
I2cwbyte Tmp1
Tmp1 = Makebcd(new_hour)
I2cwbyte Tmp1
Tmp1 = Makebcd(rtc_dow)
I2cwbyte Tmp1
Tmp1 = Makebcd(rtc_day)
I2cwbyte Tmp1
Tmp1 = Makebcd(rtc_month)
I2cwbyte Tmp1
Tmp1 = Makebcd(rtc_year)
I2cwbyte Tmp1
I2cstop
End Sub Rtc_set
'-------------------------------------------------------------------------------
Sub Rtc_get:

I2cstart
I2cwbyte Rtc_w
I2cwbyte &H00

I2cstart
I2cwbyte Rtc_r

I2crbyte Tmp1 , Ack
Rtc_sec = Makedec(tmp1)
I2crbyte Tmp1 , Ack
Rtc_min = Makedec(tmp1)
I2crbyte Tmp1 , Ack
Rtc_hour = Makedec(tmp1)
I2crbyte Tmp1 , Ack
Rtc_dow = Makedec(tmp1)
I2crbyte Tmp1 , Ack
Rtc_day = Makedec(tmp1)
I2crbyte Tmp1 , Ack
Rtc_month = Makedec(tmp1)
I2crbyte Tmp1 , Nack
Rtc_year = Makedec(tmp1)
I2cstop

'24 órásra átkonvertáljuk az időformátumot
Tmp1 = Rtc_hour
Rtc_hour = Lookup(tmp1 , Idoorak24)

End Sub Rtc_get
'-------------------------------------------------------------------------------
Idoorak12:
Data 12 , 01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09 , 10 , 11
Data 32 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31
'------------------------------------------------------------------------------
Idoorak24:
Data 00 , 01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09 , 10 , 11 , 00
Data 00 , 00 , 00 , 00 , 00 , 00 , 00 , 00
Data 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 12
'------------------------------------------------------------------------------
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2009. március 1. vasárnap, 23:27

Üdv!

Egy bináris órát csinálok, és a következőn akadtam el:
Az óra megy dugasztápról, a sok nagy led miatt, de van benne egy nokia akku, ami ha elmegy a hálózati feszültség átveszi a szerepét.
Eddig szép és jó minden, de ilyenkor le akarom kapcsolni a ledeket is, csak egy darabot villogtatok hogy az óra jár.
Klikk a képre a nagy változathoz:
Kép

Mega8 hajtja, a 13-as (PD7) lábra bekötöttema bejövő tápot, így ha az megszűnik a láb alacsonyra vált, és én a szoftverből le tudom a kijelzést tiltani.
Indításkor Portd.7 = 0 -ra van kapcsolva a programban.

Igenám csakhogy ez nagyon bizonytalanul működik, sokszor a láb nem vált át alacsony módba pedig gyakorlatilag sehonnan nem kap tápot.
Tettem a + és a GND közé egy 10k-s ellenállást (pirossal jelöltem) amitől teljesen rendbejött de szerintem ez így nem egészséges.
Van-e valami megoldás arra, amivel azonnal alacsonyra tudom húzni a 13-as lábat ha elmegy az 5V????

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3016
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. március 2. hétfő, 0:22

Szerintem jól van az úgy!
A táp vígan elbírja azt a 10K terhelést. Az aksít meg nem terheli a dióda miatt!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. március 2. hétfő, 5:13

A 10k nélkül és hiányzó hálózati tápnál lebegett a bemenet. A 10K tényleg kell oda...
Bár ágyú - veréb esete: Optocsatoló tranzisztora a GND fele, és 10K felzúzó a lábra. Az opto LEDje a bejövő falitápról járatva...

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2009. március 2. hétfő, 7:13

Köszi, akkor marad így!
Nemsokára nekiállok a DS1302-es óra IC-t belehegeszteni, mert órakvarcról még a (gyári referencia szerinti) 12.5 pF-es kondikkal is siet, napi 10-20 secet... Aztán majd a DCF óra lesz a következő!

Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

HozzászólásSzerző: kovacsna » 2009. március 2. hétfő, 8:41

Hello,

Rossz a szemlélet.... Ha nincs fesz akkor ne akarj még olyat csinálni amihez plusz energia kell.
Relés szemlélettel:
Ha nincs fesz, akkor nem abból tudom, hogy elment, mert meghúz egy jelfogó, hanem abból, hogy elenged! Érted?

Az opto jó megoldás, de nem kell 10K felhúzó. Használd a belsőt.
Ha elmegy a fesz akkor egyre ugrik a láb és hajrá!
Az opto ledjét meg hajtsd egy soros zéneren meg egy ellenálláson keresztül. Az 5V elétt milyen feszültséged van?(Bocsi, de nem volt időm végig olvasni a cikket) Ha mondjuk 12V akkor beteszel valami 8-10 V körüli zénert + ellenállás. A maradék fesz az 12V-Zéner fesz. Ennyi megy a ledre. Ehhez számolsz egy ellenállást, amivel beállítod a led áramát. Ha 8V alá esik a fesz akkor a zéneren már nem fog áram folyni így az opto ledjén sem, elengedi a lábat és az egyre vált. Akkor meg megcsinálod a kikapcsolást.
Mire odáig leesik a fesz, hogy leáll a proci, addig annyi idő eltellik, hogy sörözni is van ideje a procinak!

BY

KN

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. március 2. hétfő, 9:01

Én csalnék, hamár külső óraIC.
Az elmegy feltöltött kondiról is. Ide beraknék egy SuperCAP-t. Arról ~3-4 hét áthidalást tudsz. A LEDeket kikapcsolni arra az időre amíg nem megy a hálózat. Esetleg beépíteni egy nagyfényű LED-et és néha felvillantani, hogy élek még. Ekkor ugye energiatakarékoskodni illik....


A belső felhúzó ellenállás érdekes tud lenni: túl nagyértékű, és a láb így antennaként tud viselkedni. ha egy mobil megszólal mellette, akkor lábon a fesz fel-le bír ugrálni... Főleg ha hosszú madzag is van rajta....


Az Opto+Zener+ellenállás teljesen jó:).

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2009. március 2. hétfő, 10:01

kovacsna írta:Hello,

Az opto jó megoldás, de nem kell 10K felhúzó. Használd a belsőt.
Ha elmegy a fesz akkor egyre ugrik a láb és hajrá!
Az opto ledjét meg hajtsd egy soros zéneren meg egy ellenálláson keresztül. Az 5V elétt milyen feszültséged van?(Bocsi, de nem volt időm végig olvasni a cikket) Ha mondjuk 12V akkor beteszel valami 8-10 V körüli zénert + ellenállás. A maradék fesz az 12V-Zéner fesz. Ennyi megy a ledre. Ehhez számolsz egy ellenállást, amivel beállítod a led áramát. Ha 8V alá esik a fesz akkor a zéneren már nem fog áram folyni így az opto ledjén sem, elengedi a lábat és az egyre vált. Akkor meg megcsinálod a kikapcsolást.


Ez az elve ugye? (google ezt dobta elsőnek)
Kép

"...abban a pillanatban amikor jel érkezik a LED-re (az optocsatoló
felépítésében taláható diodára gondolok) az vilagítani kezd. A keletkező fény megvilágitja a
fototranzisztor bázisát, ennek hatasára a taranzisztor aktiválodik a kollektor és emitter közti
feszültség lecsökken kb. 0.5 V-ra a mikrokontroller ezt ugy érzekeli mint logikai null."


Vagyis amíg van 5V táp addig alacsony a láb, amikor elmegy akkor magasra vált... Majd délután berajzolom a saját kapcsolásomba.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9476
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. március 2. hétfő, 10:30

Igen, ezaz. De én 4lábú optót raknék be....
A kivezetett fototranzisztor-bázis és a GND közé egy ellenállás nem árt (100k)...
A kisebb opto kevesebb macera, és kevesebb helyet is foglal:)

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2009. március 2. hétfő, 10:35

Robert írta:Igen, ezaz. De én 4lábú optót raknék be....
A kivezetett fototranzisztor-bázis és a GND közé egy ellenállás nem árt (100k)...
A kisebb opto kevesebb macera, és kevesebb helyet is foglal:)


Pont ez a CNY17 van itthon vagy 10 darab... :D

Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

HozzászólásSzerző: kovacsna » 2009. március 2. hétfő, 13:07

Az amit berajzoltál jó, csak még sorba kell egy zéner! Ez azért kell, hogy határozottan elengedje bizonyos fesz alatt a lábat és az magasra tudjon váltani!
Pl. 12V-ról nehéz úgy belőni az ellenállást, hogy 8V esetén már ne hajtsa meg az opto ledjét! Érted? Viszont ha beteszel egy 8,1V -os zénert az határozottan lezár a zéner fesz alatt( Zéner hatás). Nem erre találták ki, de így is lehet használni:)
Viszont ha megvan a 12V akkor a zéneren esik 8V tehát marad 4V.
Kb 4mA kell az optonak. Az bőven elég. Ergo 1K ( az egy 1K mindenhová jó:) ) sorba és műxik a dolog! I=U/R => 0.004=4/R => R=1000 ohm!

by
KN


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég