DS1307 megbolondul

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00

DS1307 megbolondul

Hozzászólás Szerző: HPMaster »

Tiszteletem Urak!

A helyzet az, hogy csináltam egy projektet. DS1307es óra ic szolgáltatja a pontos dátumot és az időt.
Rendelkezik a dolog egy HW soros adatátviteli lehetőséggel is, ami nem lenne használva, csak egyszer. Az idő beállítására.

Viszont az óra folyton megbolondul. Teljesen lehetetlen időt ír. Ilyenkor persze megáll minden.

Lehet, hogy a sorosporti kapcsolat miatt bolondul meg?
Talán mikor megszakad a Mega16 és a gép között a kapcsolat, olyan parazita adatok kerülnek a kütyüre, amit hatással vannak az óraícre?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Amit meglesnék:
- 32kHz Quartz jó-e?
- 32kHz Qra nem kell járulékos fel/lehúzó kondi?
- az óraIC parazita áramlökést kap és megbolondul?
- az óraICre kell egy 100nF közvetlenül a chip táplábára....
Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00

Hozzászólás Szerző: HPMaster »

Szia Robert!

Köszi, a választ.
Időközben utánnanézegettem a dolgoknak.
A megbolondulás oka végülis az volt, hogy PWM jellel vezéreltem két BD245-öt.
Mivel ezeknek eléggé nagy áramra van szükség a vezérléséhez, és én csak két BC212-t használtam leválasztásra, így a nagy tranyók miatt a rendszer nagyon zavarérzékeny lett, mindezek mellett a 7805ös tápIC is erőteljesen melegedett, amelyre emiatt nagy hűtőborda szükségeltetett.

Ha hozzáértem a testhez, vagy a táphoz valamivel, azonnal szétesett a "stabilitása".

Most kicseréltem a BDket meg a két kis BC-t is FETre, meg optocsatolóra.
Azóta sem zavarérzékenység nincs, sem pedig a 7805-öt tápIC nem melegszik egyáltalán.

Nos, asszem így nem is oldódott a "rejtély".

Mégegyszer köszi.
Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00

Hozzászólás Szerző: HPMaster »

Szia Robert!

Köszi, a választ.
Időközben utánnanézegettem a dolgoknak.
A megbolondulás oka végülis az volt, hogy PWM jellel vezéreltem két BD245-öt.
Mivel ezeknek eléggé nagy áramra van szükség a vezérléséhez, és én csak két BC212-t használtam leválasztásra, így a nagy tranyók miatt a rendszer nagyon zavarérzékeny lett, mindezek mellett a 7805ös tápIC is erőteljesen melegedett, amelyre emiatt nagy hűtőborda szükségeltetett.

Ha hozzáértem a testhez, vagy a táphoz valamivel, azonnal szétesett a "stabilitása".

Most kicseréltem a BDket meg a két kis BC-t is FETre, meg optocsatolóra.
Azóta sem zavarérzékenység nincs, sem pedig a 7805-öt tápIC nem melegszik egyáltalán.

Nos, asszem így nem is oldódott a "rejtély".

Mégegyszer köszi.
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

Sziasztok!
nekem is ilyesmi gondom van a topic chipjével.. Olyan mint az anyósom, csak két rúgásra indul :) Ha megkapja a tápot, akkor nem mindig ugyan azt a másodpercet küldi vissza.. Kicsit várni kell vele, amire járni kezdene.. Én a kvarc-ra tippeltem, utánnanéztem, hátha kell rá még valami külső periféria, de az elemen kívül (amit rajta van, 3V-ra töltve) mást nem írnak..
valakinek tippje esetleg?
Geht nicht, Gibt's nicht!
Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00

Hozzászólás Szerző: HPMaster »

Nekem is vannak néha hasonló gondok...Sőt! Olyat is csinál néha a cucc, hogy ha rajta van a 3V-os elem, akkor nem hajlandó járni, csak ha leveszem róla az elemet. Ez úgy tűnik, hogy egy pár óra pihentetés után visszaáll eredeti működésre, de nagyon bosszantó. Arra tippelek, hogy nem szereti ez a csip, ha sokat bolygatják. Sztem úgy van vele, hogy legyen az oszcillátorának táp aztán haggyák békén ketyegni.
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

HPMaster írta:Nekem is vannak néha hasonló gondok...Sőt! Olyat is csinál néha a cucc, hogy ha rajta van a 3V-os elem, akkor nem hajlandó járni, csak ha leveszem róla az elemet. Ez úgy tűnik, hogy egy pár óra pihentetés után visszaáll eredeti működésre, de nagyon bosszantó. Arra tippelek, hogy nem szereti ez a csip, ha sokat bolygatják. Sztem úgy van vele, hogy legyen az oszcillátorának táp aztán haggyák békén ketyegni.
Pont ugyan ilyenekkel szívok énis... Ha rajta az elem, akkor nem jár, leveszem, hagyom és egyszercsak jönnek vissza másodpercek. Én továbra is a kvarcra tippelek, valahol Kapu írt pár megás ellenállásról az oszcillátorra párba. Lehet hogy kap még egy esélyt, mielőtt kihajítom az ablakon az egészet :)
Geht nicht, Gibt's nicht!
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

HPMaster írta:Nekem is vannak néha hasonló gondok...Sőt! Olyat is csinál néha a cucc, hogy ha rajta van a 3V-os elem, akkor nem hajlandó járni, csak ha leveszem róla az elemet. Ez úgy tűnik, hogy egy pár óra pihentetés után visszaáll eredeti működésre, de nagyon bosszantó. Arra tippelek, hogy nem szereti ez a csip, ha sokat bolygatják. Sztem úgy van vele, hogy legyen az oszcillátorának táp aztán haggyák békén ketyegni.
Most találtam egy ilyent is, szerintem ebbe lehet valami:

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

Ami még talán fontos lehet, hogy a DS1307 használata mellett mindenképpen kapcsolja be az ember a Brown-Out Reset-et (BOR_ON).

Tapasztalataim szerint a bekapcsolásnál, és a kikapcsolásnál is problémát okoz a lassú feszültség fel- illetve leállás. Már pedig ha egy 1000-2000 µF-os kondi van a tápban, akkor ez elkerülhetetlen. Maga a PIC már kb 3v-tól működik, ahol az I2C-buszon lógó chippek (nálam DS1621 és DS1307) még nem igazán tudnak kommunikálni.

A következő képpen próbálhatjátok ki miről beszéltem:

a.) Írjatok egy I2C-hibát figyelő részt a progiba, ami a displayra kiír valamit (nálam ez 6 karakteren ERR_01).

b.) BOR_OFF-al fordítsátok le a progitokat

c.) Hirtelen bekapcs után (rákapcsolod a stabil 5V-ot) csökkentsétek a tápfeszt szép lassan. Nekem valahol 3.9V és 4.1V között előjött az I2C hiba. Ráadásul minden 3.-4. I2C hiba után resetelődőtt a DS1307

d.) Ugyan ezt megpróbálhatjátok a másik irányba. Hirtelen kikapcs után (5V-ot egyszerűen lekapcsolod) szép lassan 0V-ról indulsz a tápfesszel felfelé. A c-pontban leírt jelenséget figyelhettek meg, és sajnos majdnem 100%-ban I2C hibával indul a PIC.

Ha a BOR-t (BOR_ON) bekapcsoljátok a proci csak valahol 4,0-4,1V-nál indul el. Ez pedig ad elég időt és feszt a külső I2C chipeknek hogy normálisan beindulhassanak és kommunikálhassanak a PIC-el.
Geht nicht, Gibt's nicht!
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

Ezt szerintem kipróbálható úgy is, hogy a programot egy wait 5-el kezded, és a do loop-ban levő i2c lekérdezés azután idul csak??
(tudom hogy nem ez a jó megoldás csak agyalok hogy jól értelmezem-e)
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

DOGMAN írta:Ezt szerintem kipróbálható úgy is, hogy a programot egy wait 5-el kezded, és a do loop-ban levő i2c lekérdezés azután idul csak??
(tudom hogy nem ez a jó megoldás csak agyalok hogy jól értelmezem-e)
Én tegnap kikapcsoltam, (elem maradt persze), ma indítottam az áramkört, és a tegnapi időn állt... pár perc után elindult magától.... Nem értem, S.O.S :)
Amit előző postomban írtam, azt megpróbáltam, de nem lett jobb a helyzet
Valakine tippje?
Tisztelettel
Geht nicht, Gibt's nicht!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az elem és a tápfeszültség hogyan megy az ICre? A standard rajz alapján? Az elem tápfeszültsége 2.7V felett van?

A I2C felhúzóellenállás értéke >2k?

A 7-es lábon mi van? Clk kimenet? felhúzóellenállás (>4k)?
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

Robert írta:Az elem és a tápfeszültség hogyan megy az ICre? A standard rajz alapján? Az elem tápfeszültsége 2.7V felett van?

A I2C felhúzóellenállás értéke >2k?

A 7-es lábon mi van? Clk kimenet? felhúzóellenállás (>4k)?
Elem direktbe megy Vbat(3.pin),GND--GND feszültsége 3,2 V. Ugyan azt a tápot kapja mint az AVR, pufferkondi van a körbe,1000uF, 7805 csinál stabil tápot. A standard rajz alatt nem tudom mire gondolsz :)

I2C felhúzó 4,7k
A 7-es láb AVR pinjére megy felhúzó nélkül. Használva semmilyen téren nincs, csak azért tettem rá, mert volt hely a nyákon, és az AVR pin-je sem kellett.. :)
Geht nicht, Gibt's nicht!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Tipp:
A 7-es labon at az AVRes aramkort megtaplalod es az elem ezt nem birja...
Az AVR labbal az osszekozes megszuntetheto? (hatha...)
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

Hozzászólás Szerző: evildodo »

Robert írta:Tipp:
A 7-es labon at az AVRes aramkort megtaplalod es az elem ezt nem birja...
Az AVR labbal az osszekozes megszuntetheto? (hatha...)
Már vágom is a nyákot :)
Ezt megoldottam, most pedig tesztelek :) Köszi!
Geht nicht, Gibt's nicht!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ezt találtam neked:

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

'-------------------------------------------------------------------------------
'                           DS1307.BAS
' shows how to use the ds1307 clock on the 2313 futurlec board
' it also shows the CONFIG CLOCK=USER option
'-------------------------------------------------------------------------------
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 19200
$lib "mcsbyte.lbx"                                          ' for smaller code
$lib "ds1307clock.lib"                                      ' modified lib

'configure the scl and sda pins
Config Sda = Portd.6
Config Scl = Portd.5

'address of ds1307
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1

Config Clock = User                                         ' this will dim the bytes automatic
'dim other needed variables
Dim Weekday As Byte

Print "DS1307"
Waitms 100
' assigning the time will call the SetTime routine
Time$ = "23:58:59"                                          ' to watch the day changing value
Date$ = "11-13-02"                                          ' 13 november 2002
Do
  Print "Date Time : " ; Date$ ; " " ; Time$
  Waitms 500
Loop

End

'called from ds1307clock.lib
Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' MINUTES
  I2crbyte _hour , Ack                                      ' Hours
  I2crbyte Weekday , Ack                                    ' Day of Week
  I2crbyte _day , Ack                                       ' Day of Month
  I2crbyte _month , Ack                                     ' Month of Year
  I2crbyte _year , Nack                                     ' Year
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' Send Data to SECONDS
  I2cwbyte _month                                           ' MINUTES
  I2cwbyte _year                                            ' Hours
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' Hours
  I2cstop
Return
:roll:
Válasz küldése