[ AxeXea @ 26.12.2012. 17:57 ] @
PCF8583 i2c +PIC16F877A
Koristio sam kod sa Mikroelektronikinog sajta da ispisem datum i vreme na LCD.PCF8583 je spojen na port C RC3 i RC4.
Sve radi vise manje kako treba,iskljucim napajanje mikrokontroleru i nakon nekog vremena kad ga ukljucim on iscita korektno vreme.
Evo kod:
char seconds, minutes, hours, day, month, year; // Global date/time variables

// Software I2C connections
sbit Soft_I2C_Scl at RC3_bit;
sbit Soft_I2C_Sda at RC4_bit;
sbit Soft_I2C_Scl_Direction at TRISC3_bit;
sbit Soft_I2C_Sda_Direction at TRISC4_bit;
// End Software I2C connections

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

//--------------------- Reads time and date information from RTC (PCF8583)
void Read_Time() {

Soft_I2C_Start(); // Issue start signal
Soft_I2C_Write(0xA0); // Address PCF8583, see PCF8583 datasheet
Soft_I2C_Write(2); // Start from address 2
Soft_I2C_Start(); // Issue repeated start signal
Soft_I2C_Write(0xA1); // Address PCF8583 for reading R/W=1

seconds = Soft_I2C_Read(1); // Read seconds byte
minutes = Soft_I2C_Read(1); // Read minutes byte
hours = Soft_I2C_Read(1); // Read hours byte
day = Soft_I2C_Read(1); // Read year/day byte
month = Soft_I2C_Read(0); // Read weekday/month byte
Soft_I2C_Stop(); // Issue stop signal

}

//-------------------- Formats date and time
void Transform_Time() {
seconds = ((seconds & 0xF0) >> 4)*10 + (seconds & 0x0F); // Transform seconds
minutes = ((minutes & 0xF0) >> 4)*10 + (minutes & 0x0F); // Transform months
hours = ((hours & 0xF0) >> 4)*10 + (hours & 0x0F); // Transform hours
year = (day & 0xC0) >> 6; // Transform year
day = ((day & 0x30) >> 4)*10 + (day & 0x0F); // Transform day
month = ((month & 0x10) >> 4)*10 + (month & 0x0F); // Transform month
}

//-------------------- Output values to LCD
void Display_Time() {

Lcd_Chr(1, 6, (day / 10) + 48); // Print tens digit of day variable
Lcd_Chr(1, 7, (day % 10) + 48); // Print oness digit of day variable
Lcd_Chr(1, 9, (month / 10) + 48);
Lcd_Chr(1,10, (month % 10) + 48);
Lcd_Chr(1,15, year + 48); // Print year vaiable + 8 (start from year 2008)

Lcd_Chr(2, 6, (hours / 10) + 48);
Lcd_Chr(2, 7, (hours % 10) + 48);
Lcd_Chr(2, 9, (minutes / 10) + 48);
Lcd_Chr(2,10, (minutes % 10) + 48);
Lcd_Chr(2,12, (seconds / 10) + 48);
Lcd_Chr(2,13, (seconds % 10) + 48);
}


//------------------ Performs project-wide init
void Init_Main() {

TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
//ANSEL = 0; // Configure AN pins as digital I/O
//ANSELH = 0;
//C1ON_bit = 0; // Disable comparators
//C2ON_bit = 0;

Soft_I2C_Init(); // Initialize Soft I2C communication
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off

Lcd_Out(1,1,"Date:"); // Prepare and output static text on LCD
Lcd_Chr(1,8,':');
Lcd_Chr(1,11,':');
Lcd_Out(2,1,"Time:");
Lcd_Chr(2,8,':');
Lcd_Chr(2,11,':');
Lcd_Out(1,12,"201");
}

//----------------- Main procedure
void main() {

Delay_ms(2000);

Init_Main(); // Perform initialization

while (1) { // Endless loop
Read_Time(); // Read time from RTC(PCF8583)
Transform_Time(); // Format date and time
Display_Time(); // Prepare and display on LCD

Delay_ms(1000); // Wait 1 second
}
}


E sad,kad promenim zadnju naredbu u kodu sa Delay_ms(1000) sa Delay_ms(500) sat radi duplo brze!??
Koliko ja zakljucujem iscitavanjem uticemo na tacnost vremena u RTC?!
Kako iscitati PCF8583P bez da uticemo na njega,odnosno na njegovu tacnost???
Hvala unapred na pomoci.
[ Genie_1984 @ 26.12.2012. 18:59 ] @
To sigurno nije tačno jer iščitavanje RTC ne remetiš tačnost. Nego ti se desi da kasno pročitaš jednu vrednost, recimo da pročitaš na 9.6 sekundi sledeća nova sekunda će biti u sledećem čitanju tj. za 500ms pa deluje da je brze.

Pozdrav
[ AxeXea @ 26.12.2012. 19:31 ] @
Kapiram da bih sa 500mS trebalo da ocitavam dva puta istu sekundu,ali desava se da sat bukvalno ubrza...za 30 sekundi ode cela minuta!?
[ AxeXea @ 26.12.2012. 19:42 ] @
Smanjio sam na 100mS ali nije se nista dalje ubrzalo.Evo merio sam stopericom za 35 sekundi i 17 stotinki je prosao ceo minut!
Zanimljivo.
[ AxeXea @ 26.12.2012. 19:47 ] @
Jos jedna proba sa upisanim 5000mS...sad na svako iscitavanje od 5 sekundi on prikaze da je proslo 8 sekundi!?
Definitivno se utice na vreme...
[ Genie_1984 @ 26.12.2012. 19:53 ] @
Pa ne bi trbalo.
a kada resetuješ uC da li iščita dobro vreme ili žuri?
[ AxeXea @ 26.12.2012. 20:02 ] @
Ovako,sad sam se uhvatio za stopericu i merio vreme i kad je upisano 1000mS...i tu je za 60 sekundi proslo 36sekundi i 38 stotinki (vise manje)
Medjutim tad je iscitavanje svake sekunde pa se cini kao da radi tacno.Ovde ocigledno sam RTC gresi,ali mi nije jasno kako s obzirom da je kontrolisan sa kvarcom 32,768 kHz. ??
[ Genie_1984 @ 26.12.2012. 20:09 ] @
Ni meni nije jasno jer to ne bi trebalo da se događa.
A ti si radio pločicu ili je mikroe dev board + RTC?
[ yt1nvs @ 26.12.2012. 20:13 ] @
The PCF8583 is a clock and calendar

ako je ovaj chip namemjen za prikaz realnog vremena i datuma znaci da nije stoperica.Ljudi hoce da znaju koliko je sati npr.12:55 a manje vise je bitno koliko je jos sekundi.
[ AxeXea @ 26.12.2012. 20:15 ] @
Eksperimentalna ploca sa nabodenim delovima i zicicama koje sluze za konekciju.PCF je naboden a uz pinove je direktno stavljen i kristal,odnosno kristal je na samim pinovima.Ne znam kako se ostavlja slika,mogu da slikam.
[ AxeXea @ 26.12.2012. 20:17 ] @
Citat:
yt1nvs:
The PCF8583 is a clock and calendar

ako je ovaj chip namemjen za prikaz realnog vremena i datuma znaci da nije stoperica.Ljudi hoce da znaju koliko je sati npr.12:55 a manje vise je bitno koliko je jos sekundi.



Stvar je da u jednoj minuti gresi 30 sekundi!...a kontrolisan je kristalom?!
[ mikikg @ 26.12.2012. 20:24 ] @
To je ogromna greska, tu onda nesto nije dobro sa HW. Najkriticnije je oko samog kristala, mozda je upala neka prljavstina. Zadnja mogucnost je osteceni (izlomljen iznutra) kristal. Proveri i "pulling" kondenzator da li je OK, izmeri C metrom ako mozes.
Idealno bi bilo da izmeris sa F metrom ucestanost oscilatora.
[ AxeXea @ 26.12.2012. 20:26 ] @
Imam jos par komada kristala...sad cu da isprobam drugi pa javim.
[ Genie_1984 @ 26.12.2012. 20:27 ] @
Probaj da u inicijalizaciji dodaš ovo

Code:


Soft_I2C_Start();
Soft_I2C_Write(0xA0);
Soft_I2C_Write(0x00);
Soft_I2C_Write(0x00);
Soft_I2C_Stop();



Pretpostavljam da imaš pull-up otpornike na SCL,SDA i kondezator izmedji OSCI i VCC?


[ AxeXea @ 26.12.2012. 20:29 ] @
Eh,morace da saceka sutra poslepodne.Kristali su mi u radionici,odnosno servisu.Sutra ih donesem i probam pa se javim tad.
Hvala svima i veliki pozdrav.
73
YT1AMD
[ AxeXea @ 26.12.2012. 20:39 ] @
Citat:
Genie_1984:
Probaj da u inicijalizaciji dodaš ovo

Code:


Soft_I2C_Start();
Soft_I2C_Write(0xA0);
Soft_I2C_Write(0x00);
Soft_I2C_Write(0x00);
Soft_I2C_Stop();



Pretpostavljam da imaš pull-up otpornike na SCL,SDA i kondezator izmedji OSCI i VCC?





Probao sam da ubacim u kod i sad gresi "samo" 20ak sekundi :)
Postoji mogucnost da je problem sa kristalom.Nov je,ali stoji u kesici vec dosta godina.
[ AxeXea @ 26.12.2012. 20:46 ] @
Probao sam upravo da sa frekvenci metrom izmerim frekvenciju kristala ali na zalost ne moze jer u momentu kad dotaknem spoj oscilator se zaustavi,a sa time i sat,odnosno ispis na LCDu.
[ mikikg @ 26.12.2012. 21:45 ] @
Da, to je problem jer ulazna impedanca F metra je premala i totalno razdesi oscilatorno kolo.
Zato sam rekao da bi to bila idelana varijanta ali sa adekvatnim mernim sondama. Tehnicki bi ti trebao jedan hi-z OP izmedju da bi to mogao da izmeris.

Nego sad se setih, proveri napajanje, ako je "prljavo" moze da pravi problem.
[ AxeXea @ 27.12.2012. 14:25 ] @
Napajanje bi trebalo da je OK.,odavno sam ga napravio specijalno za ovakve igre sa mikrokontrolerima,stabilisano,procisceno,oklopljeno...
Nego,danas sam doneo "zalihu" kristala,sva tri,i sa svakim kristalom se desavaju razlicite greske?!Verovatno to moze sa trimer kondenzatorom da se dotera na potrebnu tacnost,ali zasto onda koristimo kristal kad
nam oscilovanje odnosno tacnost zavise od trimer kondenzatora?...i po kojoj referenci da ga podesim kad ne mogu da merim frekvenciju kristala,a verovatno bi i samo merenje uticalo na frekvenciju!?
Tipicna KVAKA22. :)
Razmisljam da li neke lokalne smetnje (QRM) mogu toliko da uticu...Jedino sta mogu da izmerim okolo je 50Hz od elektricne mreze u stanu.
Cini mi se da sam u datasheetu za PCF procitao da moze da se koristi referenca od 50Hz.
Jedino da sve ovo oklopim i onda probam :)
[ mikikg @ 27.12.2012. 15:32 ] @
Heh, to sa kristalima i oscilatorima na prvi pogled izgleda prosto ali kada se zadje malo dublje u problematiku tu brdo problema moze da iskrsne.
Uglavnom problemi (pod predpostavkom da ti je SW potpuno ispravan) mogu da dodju zbog neadekvatnog "opterecenja" kristala. Svaki tip/model kristal ima neku tacnu specificiranu impedancu na radnoj ucestanosti koja treba da se propisno optereti. To opterecenje se radi sa onim dodatnim kondenzatorima oko kristala.
Promenljivi kondenzatori u kolu kristala sluze ta se to fino (u promilima) dotera, ali kod tebe je greska u desetinama procenata sto ne moze tako da se kompezira.

Ne znam za taj konkretan RTC, probaj da iscitas neki drugi registar (za datum npr) cisto da bi utvrdio da li ti SW pouzdano komunicira sa IC. Ako to radi a clock brljavi, nije iskljuceno da je taj IC zavrsio karijeru.

Na 50Hz iz mreze tesko mozes da racunas kao neku ozbiljnu referencu. Tehnicki moze da radi sa 50Hz ali ocekuj gresku od par minuta u toku dana.

Ako ti bude zatrebala veoma precizna frekvetna referenca, pogledaj ovaj link koji opisuje kako doci do reference sa tacnoscu od ~0.05ppm
http://mikikg.wordpress.com/20...cije-pomocu-mobilnog-telefona/

[Ovu poruku je menjao mikikg dana 28.12.2012. u 00:36 GMT+1]
[ AxeXea @ 27.12.2012. 15:47 ] @
Igracu se ja jos sa ovim.
IC PCF...,je kupljen u prodavnici pre neki dan,nije se nigde "tumbao",do sada mi se nije desilo da kupim los deo,mada sve je moguce.
Kad sam pominjao 50Hz nisam mislio da ga koristim kao referencu,vec da imam smetnje iz okoline od 50Hz koje su dovoljno jake da mogu da ih izmerim.
Pada mi na pamet da taj signal od 50Hz na neki nacin ometa rad kola jer sdam procitao da PCF moze da koristi i tu referencu.
Jos malo cu se poigrati,pa ako treba kupicu jos jedan PCF...i "svezije" kristale.
[ mikikg @ 27.12.2012. 15:56 ] @
OK, samo prvo utvrdi ovo oko "pouzdanosti" tvoje I2C komunikacije da ne kupujes bezveze delove ako je tu problem.

A smetenje iz mreze, na to sam mislio kada sam reko da proveris napajanje. Kvalitetno napajanje nebi trebalo da ima veci AC ripple od 100-ak mV.

50Hz je preniska ucestanost da bi mogla kroz "vazduh" da toliko utice na rad nekog sklopa.

[Ovu poruku je menjao mikikg dana 28.12.2012. u 00:36 GMT+1]
[ goran_68 @ 27.12.2012. 17:20 ] @
Taj IC ima interni 32.768 kHz. Pogledaj datasheet. Kako si postavio bitove u kontrolnom registru? Ako koristis interni o kom onda kristalu pricas?
[ AxeXea @ 27.12.2012. 18:07 ] @
Koristio sam eksterni kristal od 32,768kHz.
[ AxeXea @ 27.12.2012. 18:15 ] @
Pregledao sam ponovo datasheet i koliko ja shvatam je da kolo ima svoj interni oscilator ali mu je potreban eksterni kristal.

A 32.768 kHz quartz crystal has to be connected to OSCI
(pin 1) and OSCO (pin 2). A trimmer capacitor between
OSCI and VDD is used for tuning the oscillator (see quartz
frequency adjustment). A 100 Hz clock signal is derived
from the quartz oscillator for the clock counters.

Koliko ja vidim ne moze da radi bez eksternog kristala ili eksterno dovedenog "clock-a".
[ goran_68 @ 27.12.2012. 20:04 ] @
U pravu si. Nikad nisam korstio njega kao RTC a ne procitah sve do kraja.
[ Genie_1984 @ 27.12.2012. 20:31 ] @
Soft I2C solidno radi (na 20Khz mislim) i ne verujem da je tu problem

Ovde imaš malo ozbinjiji primer za taj RTC pa probaj da ga kompajliraš i da isprogramiraš tvboj PIC. S time da alarm podesi na minut,dva i proveri da li će se pojaviti signal na INT pinu i posle koliko.

Koliki si kondezator iskoristio?

ps. Naravno prilagodi za tvoj hardware
[ AxeXea @ 27.12.2012. 21:13 ] @
Kondenzator je trimer plasticnjak od nekih 20ak pF
Probacu sutra da se pozabavim dalje sa ovim.
Hvala.
[ Genie_1984 @ 27.12.2012. 21:21 ] @
Batali trimer... Stavi 22pF fiksno
[ AxeXea @ 27.12.2012. 21:25 ] @
Probam sutra pa javim...
[ YuMERA @ 27.12.2012. 23:22 ] @
Kod mene taj RTC radi korektno... i mislim da je u okviru greske +-6 min na godinu dana...
Verovatno imas problema sa napajanjem... ja imam paralelno sa napajanjem i backup bateriju iz racunara tako da u svakom momentu RTC ima ptreban napon...
A mozda da pogledas kontrolne i status bitove na adresi 00h i to bit 4 i bit 5 koji su za clock mode... Ali vidim da kazes da si data sheet vec pogledao..
Inace od 5 kristala izabrao sam jedan sa kojim je najmanje gresio... tako da lako moze da bude i do kristala...

[ mikikg @ 28.12.2012. 00:24 ] @
@AxeXea Ako hoces da napravis signal generator sa PIC, za to je potreban malo dugaciji pristup.

Prvo bi trebalo da imas prezican i stabilan referetni izvor signala "neke" ucestanosti. Evo sa druge teme spomenuo sam ovaj jako fin kristal od 27MHz 10ppm http://www.txc.com.tw/download/products/c/7M-2008-P08.pdf. Taj kristal je po gruboj proceni precizniji i stabilniji izmedju 10 i 30 puta od klasicnih koje vidjamo svaki dan :) Cena mu je isto jako fina, nesto oko 0.5E u nabavci kod nas. Ovaj kristal je mozda jedan od najboljih u nizoj klasi cena.

Sledece, trebas taj kristal da uvezes u neki dobar oscilator.
To moze na X nacina da se resi ali pazi sad sledecu stvar. Ako planiras promenljivi generator signala sa relativno velikim rasponom generisanja ucestanpsti, potreban ti je neki fini promenljivi delitelj, po mogucstvu fraktalni delitelj da bi mogao da postavis neku ucestanost u MHz sa Hz tacnoscu.

Skoro sam "otkrio" jedan opak nov IC od Silicon Labs koji moze da posluzi u tu svrhu. U pitanju je Si5351, I2C configurable clock generator.
Taj IC ima od 3 do 8 NEZAVISNIH clock izlaza (zavisi od kucista) i svaki izlaz moze posebno da se programira na bilo koju ucestanost u rangu od neverovatnih 8kHz do 160MHz!!! Da ne objasnjavm detalje oko tog IC ali ukratko, on od ovih referetnih 27MHz prvo to mnozi da bi imao veci interni clock pa onda od toga deli sa fraktalnim deliteljima. Sledeca isto veoma interesatna opcija je da IC ima ugradjene u sebi pulling kondezatore koji cak mogu da se programski biraju za odredjeni tip kristala. Spomenuti kristal gore sa linka ima load kapacitet od svega 10pF i Silicon Labs u svojem DS njega preporucuje kao idelnu varijantu gde su svi moguci parametri oko uvezivanja kristala na ovaj IC dovedeni na najoptimalnije mere a sve u cilju dobijanja sto je moguce preciznijeg referetnog izvora sa sto manjim faznim shumom + odlicna kratkorocna i dugorocna stabilnost. Svi ovi malo "pipaviji" parametri su potrebni za neke novije tehnologije poput BlueTooth, HDMI i sl.
Dakle sa ovim IC mozes da napravis veoma veoma dobar signal generator.

Ovaj IC moze da zavrsi posao sve dok ti je potreban "cetvrtasti" signal. Ako ti je potreban neki drugi oblik, tu se stvar dodatno komplukuje, posebno ako ti je potreban sinusni signal. Ako ti je potreban sinusni signal, imam i neke druge "kandidate" (DDS od Analog Devices) pa ako ti treba pisacu o tome naknadno.

Sve u svemu, ovi specializovani IC su daleko bolje resenje za generisanje promenljive ucestanosti nego brojanje NOOP-ova u petlji :)
Cena kristala + IC potpuno opravdava njegovu upotrebu, cak je dobra opcija kada ti je potrebno vise nezavisnih clock-ova za razlicite pod-sklopove u uredjaju.

[Ovu poruku je menjao mikikg dana 28.12.2012. u 05:12 GMT+1]
[ bogdan.kecman @ 28.12.2012. 04:38 ] @
Citat:
mikikg: po mogucstvu fraktalni delitelj


sta bi bio fraktalni delitelj?

Citat:
mikikg:deli sa fraktalnim deliteljima


" Based on a PLL/VCXO + high resolution MultiSynth fractional divider architecture..."

fractional != fractal

to nema nikakve veze sa fraktalima. fractional divider znaci da moze da deli sa 2.5 a ne samo sa 2 i sa 3. fractional divider se izvodi na razlicite nacine, od toga da dobijes high jitter signal gde se n% vremena korisi floor(a) a m% vremena koristi floor(a)+1 gde je n:m definisano delom posle zareza (n+m=100%). moze da bude dobijen tako sto se podigne source klok pa se onda on deli celobrojno, moze da se koristi sigma delta modulator kao kontroler deljenja (vrlo popularno, ne znam tacno kako radi),

pogledaj npr: http://www.scribd.com/doc/6868408/Clock-Dividers imas celu oblast prilicno dobro pokrivenu
[ mikikg @ 28.12.2012. 05:54 ] @
Greska u prevodu, mislio sam na ne celobrojno deljenje :)
[ bogdan.kecman @ 28.12.2012. 11:35 ] @
fraktali su potpuno druga zivuljka, vrlo korisni u tvom domenu tamo kod antena ... zato sada imamo ove cip antena od par milimetara a rade kao one od par metara bez razlike :D .. no kad rece fraktalno deljenje udario me totalni zbun :D
[ AxeXea @ 28.12.2012. 11:47 ] @
Ovako narode.
Seo sam malo i razmislio,primetio sam da kad na frekvenciometar prikljucim bilo kakav komadic zice "u vazduhu" merim 50Hz!Pa pogledam sve ove silne kablove i uredjaje kojii su prikljuceni na racunar...
Uhvatim par komada keramike od po 100nF i iznabadam gde god sam mogao i za divno cudo evo preko sat vremena kontrolisem stopericom i radi kao "sat"
LCD monitor od racunara mi je na 20cm. od eksperimentalne ploce i po svemu sudeci iz njega probija nekakva smetnja.
Sad sve radi pa sam se malo bacio na merenje sa onim sta imam pri ruci ovde u stanu.
Upotrebio sam program na racunaru HDSDR koji zapravo radi kao analizator spektra u audio opsegu (soundcard).
Nasao sam jak signal od tacno 3700Hz. za koji i pretpostavljam da dolazi iz monitora.
Sad kad PCF... konacno radi kako treba,na pinu 2 gde je prikljucen jedan izvod kristala moguce je izmeriti signal od oko 1000Hz koji dolazi sa prekidima od tacno 1Hz.Takodjer na pinu 7 je prisutan potpuno cist signal od 1Hz.
Nista lepse nego kad se sve zavrsi kako treba.
Hvala svima na pomoci...,diskutovacemo mi jos.
[ mikikg @ 28.12.2012. 11:58 ] @
He he, ja rekoh jos u startu da proveris napajanje :)
Ocigledno da nemas osciloskop pa nisi merio DC a i ti rece da imas neki dobar ispravlja ... Nema veze, bitno da si resio problem.
[ AxeXea @ 28.12.2012. 12:09 ] @
Napisao sam 3700 herca a ne 3,7 megaherca.
Napajanje je OK.,pregledano OSCILOSKOPOM,koji mi se naravno ne nalazi ovde u stanu gde stanujem.Ali ometajuci signali prodiru ovde kod racunara a ne u servisu gde mi je osciloskop.
Ovo su znaci lokalne smetnje od racunara...
Ovo sad odlicno radi i idem da sebe pocastim pivom u ime toga :)
73 de YT1AMD
[ mikikg @ 28.12.2012. 12:10 ] @
Citat:
bogdan.kecman: fraktali su potpuno druga zivuljka, vrlo korisni u tvom domenu tamo kod antena ... zato sada imamo ove cip antena od par milimetara a rade kao one od par metara bez razlike :D .. no kad rece fraktalno deljenje udario me totalni zbun :D


Eh da je sreca da to vazi i za ucestanosti manje od 30MHz :) ... Tad nebih morao da se pentram po stubovima i razvlacim silne metre kablova ;)
Te chip antene su ok za preko 0.5GHz.
[ mikikg @ 28.12.2012. 12:17 ] @
@AxeXea To sa smetnjama zna da bude bas problem, nisam znao da je taj RTC toliko osetljiv ali ako nema ni jedan cap u blizini onda nije ni cudo.
73 de YU3MA
[ AxeXea @ 30.12.2012. 16:42 ] @
Sinhronizovao sam Datum i vreme sa satom na racunaru u sekundu,nakon par dana jos uvek drzi sinhronizaciju.
Nego,vidi se iz koda da se sto se tice godine iscitava samo zadnja cifra ono "201" je staticki ispisano na displej.
Sto bi se reklo 2020 cemo imati "milenijumsku bubu"!Sat ce se vratiti na 2010. godinu

char seconds, minutes, hours, day, month, year; // Global date/time variables

// Software I2C connections
sbit Soft_I2C_Scl at RC3_bit;
sbit Soft_I2C_Sda at RC4_bit;
sbit Soft_I2C_Scl_Direction at TRISC3_bit;
sbit Soft_I2C_Sda_Direction at TRISC4_bit;
// End Software I2C connections

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

//--------------------- Reads time and date information from RTC (PCF8583)
void Read_Time() {

//Soft_I2C_Start();
//Soft_I2C_Write(0xA0);
//Soft_I2C_Write(0x00);
//Soft_I2C_Write(0x00);
//Soft_I2C_Stop();



Soft_I2C_Start(); // Issue start signal
Soft_I2C_Write(0xA0); // Address PCF8583, see PCF8583 datasheet
Soft_I2C_Write(2); // Start from address 2
Soft_I2C_Start(); // Issue repeated start signal
Soft_I2C_Write(0xA1); // Address PCF8583 for reading R/W=1

seconds = Soft_I2C_Read(1); // Read seconds byte
minutes = Soft_I2C_Read(1); // Read minutes byte
hours = Soft_I2C_Read(1); // Read hours byte
day = Soft_I2C_Read(1); // Read year/day byte
month = Soft_I2C_Read(0); // Read weekday/month byte
Soft_I2C_Stop(); // Issue stop signal

}

//-------------------- Formats date and time
void Transform_Time() {
seconds = ((seconds & 0xF0) >> 4)*10 + (seconds & 0x0F); // Transform seconds
minutes = ((minutes & 0xF0) >> 4)*10 + (minutes & 0x0F); // Transform months
hours = ((hours & 0xF0) >> 4)*10 + (hours & 0x0F); // Transform hours
year = (day & 0xC0) >> 6; // Transform year
day = ((day & 0x30) >> 4)*10 + (day & 0x0F); // Transform day
month = ((month & 0x10) >> 4)*10 + (month & 0x0F); // Transform month
}

//-------------------- Output values to LCD
void Display_Time() {

Lcd_Chr(1, 6, (day / 10) + 48); // Print tens digit of day variable
Lcd_Chr(1, 7, (day % 10) + 48); // Print oness digit of day variable
Lcd_Chr(1, 9, (month / 10) + 48);
Lcd_Chr(1,10, (month % 10) + 48);
Lcd_Chr(1,15, year + 50); // Print year vaiable + 8 (start from year 2008)

Lcd_Chr(2, 6, (hours / 10) + 48);
Lcd_Chr(2, 7, (hours % 10) + 48);
Lcd_Chr(2, 9, (minutes / 10) + 48);
Lcd_Chr(2,10, (minutes % 10) + 48);
Lcd_Chr(2,12, (seconds / 10) + 48);
Lcd_Chr(2,13, (seconds % 10) + 48);
}


//------------------ Performs project-wide init
void Init_Main() {

TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
//ANSEL = 0; // Configure AN pins as digital I/O
//ANSELH = 0;
//C1ON_bit = 0; // Disable comparators
//C2ON_bit = 0;

Soft_I2C_Init(); // Initialize Soft I2C communication
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off

Lcd_Out(1,1,"Date:"); // Prepare and output static text on LCD
Lcd_Chr(1,8,':');
Lcd_Chr(1,11,':');
Lcd_Out(2,1,"Time:");
Lcd_Chr(2,8,':');
Lcd_Chr(2,11,':');
Lcd_Out(1,12,"201");
}

//----------------- Main procedure
void main() {

Delay_ms(2000);

Init_Main(); // Perform initialization

while (1) { // Endless loop
Read_Time(); // Read time from RTC(PCF8583)
Transform_Time(); // Format date and time
Display_Time(); // Prepare and display on LCD

Delay_ms(1000); // Wait 1 second
}
}

Kakvo bi ovde bilo resenje?
[ ZAS011 @ 30.12.2012. 16:57 ] @
Rešenje za šta?
U tom RTC-u su godine upisane sa 2 cifre (00..99) u BCD formatu.
Središ to lepo u tvom programu pa će ti pokazati ispravan datum i u 2020, 2030, ,,,
Ako ne znaš tačno kako je datum/vreme upisano u taj RTC, prelistaj mu datasheet, biće ti jasnije.
[ AxeXea @ 30.12.2012. 17:18 ] @
Ma listao sam datasheet.Tamo me zbunjuje jer pise da se dan i godina iscitava u istom bajtu.
[ goran_68 @ 30.12.2012. 17:54 ] @
Evo ti godine iz tvog koda:

year = (day & 0xC0) >> 6; // Transform year

[ AxeXea @ 30.12.2012. 18:14 ] @
Kao sto rece covek iznad,godine se iscitavaju kao BCD od samo dva bita.Znaci moze se sa ta dva bita prikazati 00,01,10,11,cetiri stanja.
U bajtu od osam bita koji je iscitan 6 bitova se odnose na dan a dva na godinu???
U delu koda se sa >>6 pomera citanje registra za 6 mesta tako da dobijemo ona dva bita za godinu...,ali sta da ja radim sa dva bita za godinu???Sta ce da bude 2014??0,1,2,3.......za 4 nema mesta?!
[ ZAS011 @ 30.12.2012. 18:55 ] @
Sorry na mojoj neprijatnosti u prethodnom post-u, taj PCF zna za samo 4 godine, nije kao 8563 stogodišnji. Tu već moraš da se igraš sa malko matematike i trošenjem internog EEPROM-a PIC-onje.


PCF8583


PCF8563
[ AxeXea @ 30.12.2012. 19:49 ] @
Ovaj PCF8563 su verovatno napravili posle ljutih mailova nezadovoljnih korisnika :)))
[ korak @ 31.12.2012. 01:12 ] @
Može da pomogne u traženju greške sledeće:

Programiraj PCF8583 da na INT izlazu bude 1 Hz. Proveri da li je tako, ako jeste onda PCF8583 radi dobro pa grešku traži u komuniciranju sa MCU-om.

Pozdrav.
[ AxeXea @ 31.12.2012. 07:14 ] @
korak
Nis

Član broj: 125522
Poruke: 492
*.dynamic.sbb.rs.
OS: Windows XP




Profil

Email

Privatna Poruka

Re: RTC PCF8583 -iscitavanje utice na tacnost!? 31.12.2012. u 02:12 - pre 5h 59min

Može da pomogne u traženju greške sledeće:

Programiraj PCF8583 da na INT izlazu bude 1 Hz. Proveri da li je tako, ako jeste onda PCF8583 radi dobro pa grešku traži u komuniciranju sa MCU-om.

Pozdrav.




:)
ajde brate nek ti ne bude mrsko procitaj sve od pocetka,a ne samo prvi post.
[ atomant @ 05.01.2013. 17:34 ] @
Procitao sam uvodni tekst, nisam citao sve. Kao neko ko koristi ovaj RTC, mogu da ti kazem da nikako ne moze da ubrza :)

Moze da uspori. Evo za godinu i po dana mogu da ti kazem da kasni 11 minuta od inicijalno programiranog vremena (koristim ga za slanje nekih izvestaja i jos neke radnje, ali sam po izvestajima primetio kasnjenje). Nema daylight saving time (koliko je meni poznato), mada moze i to da se isprogramira.
[ bogdan.kecman @ 06.01.2013. 03:04 ] @
Citat:
atomant:  mogu da ti kazem da nikako ne moze da ubrza :)


tvoj kristal u tvojim temperaturnim uslovima kasni, promeni mu temp uslove da vidis kako ce da brza .. ili promeni kristal .. sam PCF ne kasni i ne zuri on je 100% tacan u odnosu na kristal koji mu okacis, kristal je taj koji ne osciluje tacno na nazivnoj frekvenciji nego bezi tamo vamo
[ mikikg @ 06.01.2013. 06:27 ] @
Licno mislim da je vreme ovakvih RTC integralaca proslo! Sada se poizvode i PIC-evi koji imaju u sebi HW implementaciju za RTC (dodaje se jos jedan kristal od 32.768KHz za tu namenu). Taj PIC-ev RTC moze da radi i kada je procesor u sleep modu.

Dakle za neke nove konstrukcije preporucujem upotrebu PIC-eva koji imaju integrisan RTC.
[ rsinisa @ 06.01.2013. 06:51 ] @
Ne mora ni tako. Ja evo već bezmalo 14 godina koristim spoljni oscilator, najčešće 3,2768 MHz, i TMR0 interapt kao izvor realnog vremena. Doduše, tu jeste problem potrošnje struje jer ne može da radi u sleep modu, ali sa NiCd baterijom 3,6V/60 mAh sam izvlačio i po 5 dana rada bez napajanja što je za moje potrebe bilo više nego dovoljno.

Pozdrav.
Sinisha
[ bogdan.kecman @ 06.01.2013. 06:58 ] @
pa sad, da je proslo vreme, nije ... svi veci mcu-ovi imaju rtc modul u sebi i to je ok ali i dalje ovakvi cipovi imaju veliku primenu ... externo cuvanje vremena + par bajtova eeproma za cuvanje tu i tamo neke konfiguracije je extra korisno, posebno kod modela koji sa jednom cr2032 izguraju po 3-4 godine a sa jednim dobrim supercap-om po mesec dana ... da ne spominjem da ima i dalje mnogo malih mcu-a koji nemaju rtc modul a trosenje timera i flesh-a na rtc nije uvek isplativo
[ mikikg @ 06.01.2013. 07:10 ] @
Naravno zavisi od primene ali krajnje prakticna opcija za manje zahtevne aplikacije. Ako su tu doda jos i dobar krystal kao npr ovaj od 10ppm to zavrsava posao bas super. Naravno i kod ovih PIC sa RTC ima opcija za dodatni naponski izvor tako da to ne vidim kao problem.
Ostaje uvek spoljni RTC kao dobra opcija ali posto se ovde vec igramo sa PIC sto to da ne koristimo na njegovom HW nivou :)
Bar sa PIC, sada se moze uzeti tacno adekvatan kontroler za odredjenu namenu, sve zavisi od zahteva konstrukcije.
[ Slobodan čovek @ 23.08.2014. 14:10 ] @
Da iskoristim temu za brzo pitanje.

Da li je normalno da se ispravan RTC čip (ne konkretno ovaj) zagreva pri radu, na nekih 44-45 oC (temperatura kučišta)?
[ bogdan.kecman @ 23.08.2014. 15:11 ] @
PCF8583 mi se nikad nije toliko grejao a nije ni dalas .. koji cip ti se
toliko greje? ne mislim da je normalno
[ Slobodan čovek @ 23.08.2014. 15:16 ] @
Pokušavam da popravim računar. Sumljam na BIOS čipove, pa sam merio koliko se zagrevaju. Oni su nege oko 35-36 oC (nisu vrući na dodir) pa sam pipnuo i RTC čip i primetio da je topao. Pa sam izmerio oko 44-45 oC na njegovom kućištu. A koji je čip u pitanju, da me ubiješ ne mogu da vidim. Morao bih sve da povadim, da bih izvadio matičnu, pa lupom nekako (ali mi se to ne radi - nije mali posao), a ovako ne vidim.
A još sam i primetio da se i na RTC i na BIOS čipovima, između njihovih napojnih pinovia (+Vcc i GND) meri kratak spoj (oko 10 omha), a kad se računar uključi, naponi su im u redu (3,3 V za BIOS i 5 V za RTC)...
[ bogdan.kecman @ 23.08.2014. 16:16 ] @
proveri ti kondove oko njih i na tom railu .. a za taj rtc ne verujem ja
da je to rtc, ako je iole nova ploca one retko imaju rtc kao stand alone
cip vec je rtc ili deo nekog veceg modula ili je u novijim masinama deo
efi biosa (to je obicno neki arm cortex m0 ili tako neki mcu) a za te
cipove je ok da odu na 30-40c
[ Slobodan čovek @ 23.08.2014. 16:21 ] @
Kondenzatori su u aluminijumskom kućištu sa gel elektrolitom. Nisu nabudženi. Ploča je nova (oko 6 meseci stara).

A za taj čip, ja sam samo pretpostavio da je to, pošto pored njega je kristal (najverovatnije 32.768kHz). Evo slike:

http://www.gigabyte.com/fileupload/product/2/4716/8809_big.jpg

Odmah iznad čipseta (iznad natpisa Gigabyte na hladnjaku je kristal kvarca a desno taj čip).
[ bogdan.kecman @ 23.08.2014. 16:32 ] @
nagadjam ali da su kristali vezani za njega bili bi mu blize .. ne
verujem da je to rtc .. morao bi da mu pridjes blize .. steta sto nemas
neki usb mikroskop idealni su za te stvari .. a bez da znas sta pise na
njemu nema sanse da nagadjas dal je ok sto se greje ili ne

sto se tice gel i kompozitnih kondova oni se obicno ne naduvaju kad im
padne esr vec izgledaju i dalje ko novi tako da ti tu nista ne pomaze
bez esrmetra

inace kada je high ripple na napajanju cela ploca se dodatno greje ..
[ Slobodan čovek @ 23.08.2014. 16:38 ] @
Znam to za te aluminijumske, ali nemam ESR metar...