f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - PCF8583 różnice w schemacie

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
PCF8583 różnice w schemacie
Autor Wiadomość
wylly

Dołączył: 21 Lis 2012
Posty: 6
Wysłany: Sro Lis 21, 2012 7:21 am   PCF8583 różnice w schemacie

Witam.
Chciałem się was zapytać który schemat jest poprawny.
Podejrzewam że obydwa schematy są ok. Tylko czy obsługa pcfa będzie taka sama na obydwu schematach. Czy ich adresy się nie zmienią.
- Na schemacie z instrukcji płytki evb szyna I2C jest podciągnięta do zasilania przez rezystory 10k w drugim schemacie rezystory te wynoszą 4,7k.
- Na schemacie płytki evb noga A0 jest połączona z zasilaniem w drugim schemacie i innych znalezionych w sieci noga A0 jest praktycznie podłączona zawsze do masy.

Schemat evb
Jaką wartość ma kondensator C3. Brak opisanego wyjścia VSS na schemacie w drogim schemacie jest do masy.

Przykładowy schemat z sieci
Rezystory podciągające 4.7k nie są widoczne na schemacie, tylko pin INT jest podciągnięty tym rezystorem. Mi pin INT nie jest potrzebny
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lis 21, 2012 1:34 pm   

1. W tym wypadku wartość rezystorów podciągających nie ma praktycznie znaczenia dla działania układu i jego obsługi. Ma to znaczenie dopiero przy projektowaniu długich linii magistrali I2C.
2. noga A0 służy do adresowania układów na magistrali I2C. Zmienia to adres układu, ktory służy do jego wywoływania na magistrali. Przy nodze podpiętej do VCC układ ma adres 162 (odczyt) i 163 (zapis), natomiast przy nodze zwartej z masą adresy to odpowiednio 160 i 161.
3. w płytce EvB kondensator ten nie jest zamontowany. Służy on do dostrajania sprzętowego kwarcu do żądanej częstotliwości (niwelowania jego błędów). Jeśli np. zegarek będzie spieszył lub spóźniał się to wtedy można tam wlutować ten kondensator ceramiczny, ale jego wartość trzeba dobrać indywidualnie do zaobserwowanego błędu.
4. Ten schemat po prostu jest narysowany w innej konwencji. U6G$2 to wyprowadzenia zasilania (widać pod nakładającymi się opisami numery nóżek 4 - gnd i 8 - vcc), które są odpowiednio podłączone - pod tym względem oba schematy są równoważne.
5. ten rezystor we współpracy z procesorami AVR praktycznie nie ma zastosowania. linie SDA i SCL całej magistrali muszą być podciągnięte do VCC jedną para rezystorów, być może na drugim schemacie sa one umieszczone w innym miejscu magistrali - w każdym razie takowe muszą być.
_________________
http://www.piotr94.net21.pl/
 
     
wylly

Dołączył: 21 Lis 2012
Posty: 6
Wysłany: Sro Lis 21, 2012 4:17 pm   

Bardzo dziękuję za fachową odpowiedź.

Jednak odnośnie punktu 3 ten kondensator na evb przynajmniej u mnie chyba jest zamontowany.
Bo gdy wyciągnę pcfa z podstawki to widać tam kondensator smd (wydaje być się to rozmiar 0805).

Wyczytałem też gdzieś na jakiejś stronie że powinno się dawać jakiś kondensator pomiędzy zasilaniem a gnd danego układu scalonego. Podobno niweluje to ryzyko występowania jakiś błędów. I niewiem na ile jest to prawdą. A jeśli to prawda to jakiej wartości taki kondensator powinien być.
Na drugim schemacie widać taki kondensator który ma wartość 100nF.
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lis 21, 2012 4:26 pm   

ad. 3. ten kondensator na płytce EvB4.3v4 jest oznaczony gwiazdką (jest koło kwarcu 32768Hz) i fabrycznie nie jest montowany (tu: http://and-tech.pl/wp-con...evb4.3%20v4.pdf strona 13)
6. Kondensatory filtrujące zwykle 100nF, ceramiczne. W naszym układzie jednak nie są konieczne żadne zmiany, a ryzyko błędów jest znikomo małe.
_________________
http://www.piotr94.net21.pl/
 
     
wylly

Dołączył: 21 Lis 2012
Posty: 6
Wysłany: Sro Lis 21, 2012 8:38 pm   

No teraz wszystko jasne dziękuję za fachową poradę.

A ten kondensator o którym mówiłem że jest pod układem pcf nie jest uwzględniony na schemacie. Zrobiłem pomiary miernikiem i wyszło że to kondensator pomiędzy nogami Vss a Vdd i A0 (Vdd i A0 są razem połączone).

Wiem że w waszych układach zmiany są niepotrzebne. Jednak mając zrobiony prototyp jakiegoś tam urządzenia, sterownika itp. na płytce EVB należało by go w końcu kiedyś zbudować. Więc warto jest wiedzieć pewne rzeczy zanim się zrobi schemat czy zaprojektuje płytkę PCB.

Jeszcze raz dziękuję.
Pozdrawiam.
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lis 21, 2012 10:53 pm   

Owszem, kondensatory 100nF nigdy nie zaszkodzą, powinny być możliwie jak najbliżej nóżek układów.
_________________
http://www.piotr94.net21.pl/
 
     
slavcio2012 

Dołączył: 24 Lip 2013
Posty: 24
Wysłany: Czw Sie 15, 2013 11:25 am   

A co z podtrzymaniem za pomocą baterii mi nie działa
Kod:
Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte
Cls
Cursor Off

'Godziny = 12
'Minuty = 12
'Sekundy = 01
Godziny = Makebcd(Godziny)
Minuty = Makebcd(Minuty)
Sekundy= Makebcd(sekundy)

I2cstart
   I2cwbyte 162
   I2cwbyte 2
   I2cwbyte Sekundy
   I2cwbyte Minuty
   I2cwbyte Godziny

   I2cstop

Do

I2cstart
  I2cwbyte 162
  I2cwbyte 2
  I2cstart
  I2cwbyte 163
  I2crbyte Sekundy , Ack
  I2crbyte Minuty , Ack
  I2crbyte Godziny , Nack

  I2cstop

Sekundy = Makedec(sekundy)
Minuty = Makedec(minuty)
Godziny = Makedec(godziny)





Locate 1 , 7 : Lcd Godziny ; ":" ; Minuty


Loop : End
mam taki program jak wyłączę i załączę to zegar startuje od początku mam włożoną baterie nową napięcie jest
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pią Sie 16, 2013 11:40 am   

Masz Kolego błędny program, podtrzymanie działa (o ile bateria ma odpowiednie napięcie oczywiście), ale Ty za każdym uruchomieniem procesora kasujesz wartości wszystkich rejestrów na 0 za pomocą tego kawałka kodu:
Kod:

I2cstart
   I2cwbyte 162
   I2cwbyte 2
   I2cwbyte Sekundy
   I2cwbyte Minuty
   I2cwbyte Godziny

   I2cstop

Zakomentowanie zmiennych powoduje ni mniej ni więcej niż to, że będą one miały wartość 0, jak wszystkie zmienne globalne ;)
_________________
http://www.piotr94.net21.pl/
 
     
guru 

Dołączył: 25 Lis 2009
Posty: 29
Wysłany: Sro Sie 28, 2013 12:19 pm   

Odgrzebię trochę temat...
Piotrze u mnie na kodzie (ściągnięty z evb) też nie ma podtrzymania zegara.
Bateria wpięta, miernikiem sprawdziłem napięcie OK.
Kod:
$regfile = "m32def.dat"                                     ' specify the used micro
$crystal = 16000000                                         ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2


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 Sub Wysw_godz
Declare Sub Make_bcd
Declare Sub Make_dec


'Declare variables
Dim Tm(5) As Byte At &H60
Dim I As Byte , Temp As Byte
Dim L As Byte , Ll 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 Porta = Output
'Porta = 252

Config Sda = Portc.1
Config Scl = Portc.0

Portc = 240

Config Pinc.7 = Input
Config Pinc.6 = Input
Config Pinc.5 = Input
Config Pinc.4 = Input


'Config Debounce = 30

' not needed since the pins are in the right state
I2cinit

Call Settime(56 , 59 , 23 , 29 , 11)                        'set time
Cursor Off Noblink
Cls
Do
   Call Gettime
   Call Wysw_godz

Locate 2 , 1
Lcd "Err:" ; Err

Debounce Pinc.4 , 0 , Ustaw , Sub



   Waitms 100
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 &HA2 , 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 &HA2                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstart                                                'repeated start
    I2cwbyte &HA2                                           'write mode
    I2cwbyte 2                                              'select seconds Register
    For I = 1 To 5
      I2cwbyte Tm(i)
    Next                                                    'write seconds
    I2cstop
End Sub







Return

Ustaw:

Locate 2 , 7
Lcd "ustawianie"
L = 3
Cursor On Blink
Locate 1 , 1

Call Gettime()

Do
Debounce Pinc.7 , 0 , Plus , Sub
Debounce Pinc.6 , 0 , Minus , Sub
Debounce Pinc.5 , 0 , Nastepny , Sub
Debounce Pinc.4 , 0 , Wyjscie


Call Wysw_godz
If L = 0 Then Goto Wyjscie

Ll = 3 - L
Ll = Ll * 3
Ll = Ll + 2

Locate 1 , Ll




Waitms 200
Loop
Wyjscie:
'zapis do układu czasu
    I2cstart                                                'generate start
    I2cwbyte &HA2                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstart                                                'repeated start
    I2cwbyte &HA2                                           'write mode
    I2cwbyte 2                                              'select seconds Register
    For I = 1 To 5
      I2cwbyte Tm(i)
    Next                                                    'write seconds
    I2cstop
    Cursor Blink Off
Locate 2 , 1
Lcd "zapisano        "


Wait 1
Cls
Return

Plus:

Call Make_dec
Tm(l) = Tm(l) + 1

If L = 3 Then
   If Tm(l) > 23 Then
   Tm(l) = 0
   End If
Else
   If Tm(l) > 59 Then
   Tm(l) = 0
   End If
End If


Call Make_bcd

Return
Minus:

Call Make_dec
Tm(l) = Tm(l) - 1
If L = 3 Then
   If Tm(l) > 23 Then
   Tm(l) = 23
   End If
Else
   If Tm(l) > 59 Then
   Tm(l) = 59
   End If
End If


Call Make_bcd
Return
Nastepny:
L = L - 1
Return

Wysw_godz:
Locate 1 , 1
Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s) ; " " ; Hex(d) ; "-" ; Hex(month);
Return

Make_bcd:
Tm(l) = Makebcd(tm(l))
Return
Make_dec:
Tm(l) = Makedec(tm(l))
Return


Bardzo proszę o pomoc.
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Sie 28, 2013 2:18 pm   

Hmm, czy myślenie boli?
A co robi po każdym uruchomieniu procesora funkcja Settime?
_________________
http://www.piotr94.net21.pl/
 
     
guru 

Dołączył: 25 Lis 2009
Posty: 29
Wysłany: Czw Sie 29, 2013 6:29 am   

Hmmm...Czasem może boleć....
Skąd może wynikać odchyłka (zegar spóźnia się) przez 16 godzin około 59 sekund.
Czy da się to jakoś wyregulować?
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Czw Sie 29, 2013 12:02 pm   

;)
Albo może ona wynikać z zakłóceń w zasilaniu czy też spadku napięcia na baterii, albo może wiązać się z koniecznością zamontowania w miejsce oznaczone na płytce * kondensatora dostrajającego lub trymera.
_________________
http://www.piotr94.net21.pl/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group