Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Težave s serijsko komunikacijo pri PCF8583
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Sob Dec 20, 2008 9:28 pm    Naslov sporočila: Težave s serijsko komunikacijo pri PCF8583 Odgovori s citatom

Uporabljam ATmega32
Kristal 8 MH in 38400 RS232
Sda = Portd.4
Scl = Portd.5

Želim usposobiti PCF8583, a ni sreče.

Ko želim kaj izpisati preko Print dobim samo neke čudne znake.
Ko pa ta program zbrišem in napišem samo print«sss« pa deluje OK
Nekje v programu je nekaj falš, da ne deluje serijska komunikacija.

Uporabil sem program, ki ga lahko najdemo v primerih Bascom AVR-ja
Koda:

$lib "mcsbyte.lbx"                                          ' use the byte lib since we do not need longs
$crystal = 8000000
$baud = 38400
'declare used subs


Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte)
Declare Sub Gettime()


'Declare variables
Dim Tm(5) As Byte At &H60
Dim I As Byte , Temp As Byte

'These are pointers to tm() for simple handling.
Dim S As Byte At &H60 Overlay
Dim M As Byte At &H61 Overlay
Dim H As Byte At &H62 Overlay
Dim D As Byte At &H63 Overlay
Dim Month As Byte At &H64 Overlay


'configure the used port pin for I2C
Config I2cdelay = 5                                         ' default slow mode
Config Sda = Portd.4
Config Scl = Portd.5

' not needed since the pins are in the right state
'I2cinit
Call Settime(56 , 1 , 1 , 29 , 11)                          'set time

Print Chr(27) ; "[2J";                                      'clear screen
Print "PCF8583 Clock Sample"
Do
   Call Gettime
   'since the values are stored in BCD format we can use Hex() to display them
   Print Chr(27) ; "[2;2f";                                 ' VT100 emulation set pos to 2,2
   Print Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s) ; " Err:" ; Err
   Wait 1
Loop
End




Sub Gettime()

   'there are 2 ways to get the time. With low level i2c calls or with a high level call
   'first the high level call
    Tm(1) = 2                                               ' point to second register

    I2creceive &HA0 , Tm(1) , 1 , 5                         ' write the second address and get 5 bytes back
    'i2creceive will first write 1 byte from tm(1) which is 2, and then will read 5 bytes and store it onto tm(1)-tm(5)


    'and optional with low level calls
'    For I = 1 To 5
'       Temp = I + 1
'       I2cstart
'       I2cwbyte &HA0                                        'write addres of PCF8583
'       I2cwbyte Temp                                        'select register
'       I2cstart                                             'repeated start
'       I2cwbyte &HA1                                        'write address for reading info
'       I2crbyte Tm(i) , Nack                                'read data
'    Next
 '  I2cstop
End Sub


Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
    'values are stored as BCD values so convert the values first

    Tm(1) = Makebcd(s1)                                     'seconds
    Tm(2) = Makebcd(m1)                                     'minutes
    Tm(3) = Makebcd(h1)                                     'hours
    Tm(4) = Makebcd(d1)                                     'days
    Tm(5) = Makebcd(month1)                                 'months


    I2cstart                                                'generate start
    I2cwbyte &HA0                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstart                                                'repeated start
    I2cwbyte &HA0                                           'write mode
    I2cwbyte 2                                              'select seconds Register
    For I = 1 To 5
      I2cwbyte Tm(i)
    Next                                                    'write seconds
    I2cstop
End Sub
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 21, 2008 9:37 am    Naslov sporočila: Odgovori s citatom

Takoj ko sem pogledal tvoj program, sem opazil nekaj, kar mi ni všeč:

Koda:

'Declare variables
Dim Tm(5) As Byte At &H60
Dim I As Byte , Temp As Byte

'These are pointers to tm() for simple handling.
Dim S As Byte At &H60 Overlay
Dim M As Byte At &H61 Overlay
Dim H As Byte At &H62 Overlay
Dim D As Byte At &H63 Overlay
Dim Month As Byte At &H64 Overlay



Spremenljivke si postavil na fiksno lokacijo &H60, ne da bi preveril, ali je ta lokacija prosta.
Po prevajanju poglej, kje so dejansko te spremenljivke, in ugotovil boš, da sta tudi spremenljivki I in Temp na istih mestih, torej se prekrivata s spremenljivkami S in M. In to ni fajn, kaj ne?
Predlagam sledeč način definiranja spremenljivk:


Koda:

'Declare variables

'These are pointers to tm() for simple handling.
Dim S As Byte 
Dim M As Byte 
Dim H As Byte 
Dim D As Byte 
Dim Month As Byte 
Dim Tm(5) As Byte At S Overlay
Dim I As Byte , Temp As Byte



Na ta način nisi se postavil z overlay na fiksno lokacijo, pa vseeno dosežeš željeno prekrivanje spremenljivk, saj je željeno le to, da se prekrivajo spremenljikve S, M, H, D, in Month z TM(5)

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Ned Dec 21, 2008 10:21 am    Naslov sporočila: Odgovori s citatom

Hvala bom preveril.
Ali mi lahko prilepiš tvoj sample iz Bascoma AVT "clock.bas" - če je kaj posodobljen.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 21, 2008 10:32 am    Naslov sporočila: Preklicujem Odgovori s citatom

Preklicujem mojo prejšnjo trditev, da je bila napačna definicija spremenljivk.
A načelno vztrajam, da ni varno postavljati spremenljivke na fiksna mesta, ker ne vemo, kam postavlja spremenljivke Bascom sam, če želimo prekrivanje, potem je dobro, da prekrivamo preko simbolnih imen že definiranih spremenljivk.
Vsekakor po opravljenem prevajanju je dobro pregledati poročilo o prevodu, kjer dobiš lokacije spremenljivk, posebno če uporabljaš prekrivanje.
Moj bascom sample clock.bas je tak kot tvoj.

Treba bo potrebno naprej iskati, kaj je narobe, da ti print ne dela.
Začni s tem, da daš takoj po obveznih definicijah o kristalu, mikroprocesorju in baudni hitrosti


Koda:
$hwstack = 128
$swstack = 64
$framesize = 64
print "Dober dan!"
wait 1

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 21, 2008 11:55 am    Naslov sporočila: ponujam Odgovori s citatom

Ponujam v uporabo moja podprograma za uporabo RTC PCF8583

Prednost mojih dveh podprogramov je v tem, da vsebuje tudi letnico, ki si jo zapiše na lokacijo 16 RAM-a, ki je v istem čipu, pa tudi dan v tednu.
Uporaba je tako:
V glavnem programu definiraš spremenljivki
Koda:
Dim Z(1) As Byte
Dim Niz1 As String * 18

Ti dve spremenljivki se sicer na prekrivata, toda če uporabim pri spremenljivki Z indeks, ki je večji od ena, naslovim bajt v spremenljivki izza Z(1) to pa je odgovarjajoči bajt spremenljivke Niz1.
Definirati moram še konstanti, ki povesta, kako je čip vezan in ali beremo ali pišemo:
Koda:
Const Wrtc = &HA0                                           ' i2c rtc A0 na +0V:
Const Rrtc = &HA1

in pa seveda config scl in sca.

Ko želimo v glavnem programu zapisati čas in datum v RTC, informacijo damo v Niz1 v obliki ddmmll hhmm dt to se pravi dan mesec leto ura minuta dan v tedni recimo tako:
Koda:
Niz1 = "251208 1200 Ce" 
gosub wrtcsr

Zapisali smo 25. dec 2008 ura 1200 Četrtek
(Šumnikov nisem uporabil, ker informacijo često prenašam ali dobivam preko SMS-ov, kjer šumniki niso na razpolago.)

Kadar želim informacijo od RTC-a pa kličem
Koda:
gosub rrtcsr
print Niz1

in informacijo dobim v enakem formatu nazaj.

Koda:
'         ---------------------RTC -------------------------------
' Podprograma za pisanje in branje RTC informacij preko skupnega I2C-vodila
' Vhodno/izhodna informacija je v spremenljivki Niz1 definirani kot:
' Dim Z(1) As Byte
' Dim Niz1 As String * 18
' tako da lahko preko spremenljivke y(x) pridemo do poljubnega bajta
' Format informacije je ddmmll uunn Ne

Wrtcsr:                                                     'Wrtcsr:   <------
       ' Iz spremenljivke Niz1 v formatu "ddmmll uumm Ne" v RTC
       Reg14 = I : Push R14
       Reg14 = J : Push R14
       Reg14 = K : Push R14
       I = Z(11) And &H0F                                   ' minute
       Shift I , Left , 4
       J = Z(12) And &H0F
       I = I + J
       I2cstart                                             ' Start sequence for I2CBUS
       I2cwbyte Wrtc                                        ' point address to write to PCF8583
       I2cwbyte 0                                           ' points to register 0
       I2cwbyte 0                                           ' set control register
       I2cwbyte 0                                           ' set hundreds
       I2cwbyte 0                                           ' set seconds
       I2cwbyte I                                           ' set minutes

       I = Z(9) And &H0F                                    ' ure
       Shift I , Left , 4
       J = Z(10) And &H0F
       I = I + J
       I2cwbyte I                                           ' set hours

       I = Z(2) And &H0F                                    ' dan v mesecu
       Shift I , Left , 4
       J = Z(3) And &H0F
       I = I + J
       J = Z(6) * 10                                        'leto
       J = J + Z(7)
       J = J Mod 4
       Shift J , Left , 6
       I = I Or J
       I2cwbyte I                                           ' dan in leto

       For I = 0 To 28 Step 2                               ' dan v tednu
           J = Lookup(i , Dnevi)
           Incr I
           K = Lookup(i , Dnevi)
           Decr I
           If J = Z(14) And K = Z(15) Then
              Exit For
           End If
       Next
       I = I / 4
       If I = 7 Then I = 6                                  ' če ni našel dneva!
       Shift I , Left , 1
       If Z(4) = &H31 Then
          Incr I
       End If
       Shift I , Left , 4
       J = Z(5) - &H30
       I = I Or J
       I2cwbyte I                                           ' dan v tednu in mesec
       I2cstop

    ' leto spravimo v dva polja, ker rtc šteje leta samo od 0 do 3, dodamo
    ' še en bajt, ki ga spravimo v eeprom rtc-a, da dobimo celo letnico

       I = Z(6) - &H30                                      ' aditivna konstanta leta
       I = I * 10
       J = Z(7) - &H30
       I = I + J
       I = I / 4
       I2cstart                                             ' Start sequence for I2CBUS
       I2cwbyte Wrtc                                        ' point address to write to PCF8583
       I2cwbyte 16                                          ' points to ram
       I2cwbyte I                                           ' year / 4                             '
       I2cstop
       Pop r14 : K = Reg14
       Pop r14 : J = Reg14
       Pop r14 : I = Reg14
Return

Rrtcsr:                                                     'Rrtcsr:   <-------------
                Push R14
    Reg14 = I : Push R14
    Reg14 = J : Push R14
    I2cstart                                                ' Start sequence for I2CBUS
    I2cwbyte Wrtc                                           ' point address to write to PCF8583
    I2cwbyte 2                                              ' point to register 2
    I2cstart                                                ' repeat start sequence for I2CBUS
    I2cwbyte Rrtc                                           ' point address to read
    I2crbyte I , 8                                          ' seconds and ignore
    I2crbyte I , 8                                          ' minutes
' V Niz1-u boste dobili rezultat recimo tako:
'Niz1 = "051105 0811 So"
' '  x  1...5....0....5!
'       ddmmll uumm da
    Reg14 = I : Push R14
    I = I And &H0F
    I = I Or &H30
    Z(12) = I
    pop r14 : i = reg14
    Shift I , Right , 4
    I = I And &H0F
    I = I Or &H30
    Z(11) = I

    I2crbyte I , 8                                          ' hours
    Reg14 = I : Push R14
    I = I And &H0F
    I = I Or &H30
    Z(10) = I
    pop r14 : i = reg14
    Shift I , Right , 4
    I = I And &H0F
    I = I Or &H30
    Z(9) = I

    I2crbyte I , 8                                          ' year and day
    Reg14 = I : Push R14
    I = I And &H0F
    I = I Or &H30
    Z(3) = I
    pop r14 : i = reg14
    Reg14 = I : Push R14
    Shift I , Right , 4
    I = I And &H03
    I = I Or &H30
    Z(2) = I
    pop r14 : i = reg14
    Shift I , Right , 6
    Z(7) = I                                                ' kasneje popravimo leta

    I2crbyte I , 9                                          ' week and month
    I2cstop
    Reg14 = I : Push R14
    I = I And &H0F
    I = I Or &H30
    Z(5) = I
    pop r14 : i = reg14
    Reg14 = I : Push R14
    Shift I , Right , 4
    I = I And &H01
    I = I Or &H30
    Z(4) = I
    pop r14 : i = reg14
    Shift I , Right , 5
    Shift I , Left , 2                                      'krat 4
' sledeči dve instrukciji opustimo, če želimo angleško verzijo dnevov tedna
    Incr I
    Incr I
    Z(14) = Lookup(i , Dnevi)
    Incr I
    Z(15) = Lookup(i , Dnevi)
    Z(16) = 0                                               ' konec niza
                                                              ' Popravek za leto 4-številčno
    I2cstart
    I2cwbyte Wrtc
    I2cwbyte 16                                             ' point to ram
    I2cstart
    I2cwbyte Rrtc
    I2crbyte I , 9                                          ' read year / 4
    I2cstop

    Shift I , Left , 2                                      ' krat 4
    I = I + Z(7)
    Reg14 = I : Push R14
    I = I / 10
    Z(6) = &H30 + I
    pop r14 : i = reg14
    I = I Mod 10
    Z(7) = &H30 + I

    Z(8) = &H20                                             'vstavimo blanko znake
    Z(13) = &H20

    Dancas = Left(niz1 , 14)
    Dancas = Dancas + " "

    pop r14 : j = reg14
    pop r14 : i = reg14
    pop r14

Return
Dnevi:
Data "SuNeMoPoTuToWeSrThCeFrPeSaSo"                         ' Dan v tednu
' -----------------------------RTC KONEC -------------------------------

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Pon Dec 22, 2008 9:15 pm    Naslov sporočila: Re: Preklicujem Odgovori s citatom

vilko je napisal/a:



Koda:
$hwstack = 128
$swstack = 64
$framesize = 64
print "Dober dan!"
wait 1


Ko prekopiram tole v Bascom AVR mi napiše sledeče.
Error : 46 Line : 1 Assignment error [$HWSTACK: 112 128: 112] , in File : C:\USERS\...\CLOCK.BAS
Error : 46 Line : 2 Assignment error [$SWSTACK: 112 64: 112] , in File : C:\USERS\...\CLOCK.BAS
Error : 46 Line : 3 Assignment error [$FRAMESIZE: 112 64: 112] , in File : C:\USERS\...\CLOCK.BAS

Ostalo bom še odkrival

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 9:25 pm    Naslov sporočila: Težave s serijsko komunikacijo in pcf8583 Odgovori s citatom

Malix,
kot sem ti povedal v ZS, moraš imeti ali original demo ali original Bascom, na žalost tvoj crk ne omogoča upgrade, stare različice programa pa ne podpirajo novih ukazov.
Da bi lahko inštaliral nov demo moraš pobrisati registre.
Vlado
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Pon Dec 22, 2008 10:35 pm    Naslov sporočila: Odgovori s citatom

Hvala naložil sem 1.11.9.0

Koda:
$hwstack = 128
$swstack = 64
$framesize = 64
print "Dober dan!"
wait 1


Pzpiše mi sledeče
ő*Dober dan!

ő*Dober dan!

...

Ali je to OK

Tvoj program mi javi napako tukaj
Reg14 = I : Push R14
Reg14 = J : Push R14

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Pon Dec 22, 2008 10:50 pm    Naslov sporočila: Odgovori s citatom

Zanima me ali more biti SCL in SDA na pinu PC0 in PC1 "tako kot je označeno v priročniku za ATMEGA32 - sli ji lahko prestaviš tudi drugam in to nastaviš s sledečim ukazom

Config Sda = Portd.4
Config Scl = Portd.5

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 10:57 pm    Naslov sporočila: Hm Odgovori s citatom

Prvo:
Ali si $hwstack in ostale dal takoj na začetek izza $regfile ukaza?

Če si, potem je nekaj narobe ali z nastavitvami tvojega prevajalnika ali z prevajalnikom samim.

Drugo:
Reg14 mora biti definiran v glavnem programu.
Osebno vedno uporabljam nekaj delovnih spremenljivk, ki izgledajo tako in morajo biti definirane v glavnem programu:

Koda:
Dim Reg14 As Iram Byte At 14 Overlay                        'register 14
Dim I As Byte                                               'splošne delovne spremenljivke
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Byte


Tretje, scl in sda mislim, da so lahko katerikoli portpini. Zdi se mi, da morajo biti tisti, ki so definirani v datasheetu le takrat, kadar želimo, da bo naš procesor i2c slave, kar običajno ni.

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 22, 2008 11:26 pm    Naslov sporočila: Probaj tako: Odgovori s citatom

Progbaj tako:

Koda:
$regfile = "m128def.dat"  oziroma tvoj procesor
$lib "mcsbyte.lbx"                       
$crystal = 8000000
$baud = 38400
$hwstack = 128
$swstack = 64
$framesize = 64
'declare used subs
Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte)
Declare Sub Gettime()
'Declare variables
Dim Reg14 As Iram Byte At 14 Overlay 
Dim I As Byte , Temp As Byte
Dim S As Byte
Dim M As Byte
Dim H As Byte
Dim D As Byte
Dim Month As Byte
Dim Tm(5) As Byte At S Overlay

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
malix
Profesionalec


Pridružen/-a: Sre Jan 2004 16:11
Prispevkov: 100
Kraj: Maribor

PrispevekObjavljeno: Tor Dec 23, 2008 12:53 pm    Naslov sporočila: Odgovori s citatom

S tem programom mi je končno uspelo usposobiti PCF8583
Koda:
$regfile = "m32def.dat"
$lib "mcsbyte.lbx"
$crystal = 8000000
$baud = 38400


Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte)
Declare Sub Gettime()


Dim S As Byte
Dim M As Byte
Dim H As Byte
Dim D As Byte
Dim Month As Byte
Dim Tm(5) As Byte At S Overlay
Dim I As Byte , Temp As Byte


'configure the used port pin for I2C
Config I2cdelay = 5                                         ' default slow mode
Config Sda = Portc.2
Config Scl = Portc.3
Wait 1
Print "ok"
' not needed since the pins are in the right state
'I2cinit
Call Settime(56 , 1 , 1 , 29 , 11)                          'set time

Print Chr(27) ; "[2J";                                      'clear screen
Print "PCF8583 Clock Sample"
Do
   Call Gettime
   'since the values are stored in BCD format we can use Hex() to display them
   Print Chr(27) ; "[2;2f";                                 ' VT100 emulation set pos to 2,2
   Print Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s) ; " Err:" ; Err
   Wait 1
Loop
End




Sub Gettime()


    Tm(1) = 2                                               ' point to second register

    I2creceive &HA0 , Tm(1) , 1 , 5                         ' write the second address and get 5 bytes back
    'i2creceive will first write 1 byte from tm(1) which is 2, and then will read 5 bytes and store it onto tm(1)-tm(5)


End Sub


Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
    'values are stored as BCD values so convert the values first

    Tm(1) = Makebcd(s1)                                     'seconds
    Tm(2) = Makebcd(m1)                                     'minutes
    Tm(3) = Makebcd(h1)                                     'hours
    Tm(4) = Makebcd(d1)                                     'days
    Tm(5) = Makebcd(month1)                                 'months


    I2cstart                                                'generate start
    I2cwbyte &HA0                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstart                                                'repeated start
    I2cwbyte &HA0                                           'write mode
    I2cwbyte 2                                              'select seconds Register
    For I = 1 To 5
      I2cwbyte Tm(i)
    Next                                                    'write seconds
    I2cstop
End Sub


Žal mi tvoj program še vedno ne deluje.
Javlja polno napak

Koda:
Dancas = Left(niz1 , 14)
Dancas = Dancas + " "


Tukaj se zagotovo zalomi.
Bi se lahko priporočal za komplet Smile

Zanima me še nekaj.
Ali lahko v enem projektu uporabljam PFC8583 ki ima I2C komunikacijo na pinih Pc3 in Pc4 ter DS1820, ki komunicira preko 1Wire na PC0.

_________________
www.MaLiX.si
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 805
Kraj: Ljubljana

PrispevekObjavljeno: Tor Dec 23, 2008 4:14 pm    Naslov sporočila: Tista Odgovori s citatom

Tista dva ukaza, ki dajeta napako, enostavno izvrzi. Izhajata iz ene izboljšave podprograma, ki je ne potrebuješ.

Kje boš na mikroprocesorju imel scl, sda in 1wire je popolnoma v tvojih rokah

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2073
Kraj: Ljubljana

PrispevekObjavljeno: Tor Dec 23, 2008 7:34 pm    Naslov sporočila: Odgovori s citatom

Oj,

Bascom-AVR podpira RTC s kvarcem 32.768 kHz, poglej si primer megaclock.bas oziroma beri v Help-u Config Clock. PCF-ja sploh ne rabiš Smile

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
dkone
Profesionalec


Pridružen/-a: Sob Dec 2005 17:03
Prispevkov: 176
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2008 4:16 pm    Naslov sporočila: Odgovori s citatom

Jure je napisal/a:
Oj,

Bascom-AVR podpira RTC s kvarcem 32.768 kHz, poglej si primer megaclock.bas oziroma beri v Help-u Config Clock. PCF-ja sploh ne rabiš Smile

Lp
Jure



Že že,ampak,če rabiš da ti ura ostane tudi po izklopi napajanja uC-ja,je dobro imeti pcf-ja in dodatno baterijco,ali pa en velik kondezator. Wink

_________________
Lp,Denis
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group