Heb aan een 18f4550 een ds1307 gekoppeld. Werkt op zich goed alleen 1 probleempje. De tijd gaat precies een keer zo snel. De SQW uitvoer doet precies zoals die moet doen. 1 Hz, 4096 Hz enzovoort..

Iemand een idee?

Loopt je kristal op 32,768 kHz? (denk het wel want anders zou je SQW/OUT waarschijnlijk ook afwijken)

Doe je nog wat met de waardes die je binnen krijgt op je uC? Het zou natuurlijk net zo goed een rekenfout in je software kunnen zijn. In de datasheet zie ik zo snel geen registers die verkeerd ingesteld kunnen zijn. Als je "interrupt on change" gebruikt denk er dan aan dat er op zowel de neer- als de opgaande flank een interrupt gegenereerd wordt.

Heb er diverse kristallen ingedaan. Allemaal hetzelfde probleem. Als ik bijvoorbeeld een 24c65 ( eeprom ) aanstuur dan krijg ik correcte waarden. Ook als ik een andere ds1307 gebruik zelfde probleem. Gebruik 4k7 als pullup weerstand. Zou het daar mee te maken kunnen hebben wellicht? Vraag me af of er ook zo iets als een ontstoor condensator ergens nog aan gekoppeld dient te worden.
Oh heb het tot nu toe alleen op een breadboard getest.

RPU=tr/Cb
tr = rise time = max 1000 ns
Cb = capaciteit v/d bus = max 400 pF
1000 x 10-9/400 x 10-12 = 2k5

De pull-up zou je dus eventueel wat kunnen verlagen. Op de PicKit 2 zit een 3 kanaal logic-analyzer. Kijk eens wat er gebeurd op de bus.

Het lijkt me trouwens sterk dat het aan de bus zelf ligt, je krijgt immers wél data binnen. Zit er geen software bug in je programma? Wordt er ergens een variabele twee keer opgehoogd? Bijvoorbeeld met zoiets:


void blabla(var++){
   var=var+1;
}