Hallo zusammen,
nun hab ich auch mal ein Problemchen ...
( unter anderem auch mal wieder mit dem UMTS-Proxy
Die Buttons im Editor sind mal wieder tot )
Also wie im Titel geschrieben ... die DS1307 RTC will nicht so wie ich.
Hier der Programmcode in der ganzen Schönheit ...
Anhang anzeigen EvalBoard_m8_DS1307_v00.bas
und hier mal ein Foto vom Testaufbau ...
Ich hab mein kleines Zweikanal-Digital-Oszi drangenhängt und sehe alle
Signale auf dem Bus. Ich kann jedes gesendete Bit sehen und es paßt alles.
Nur die Ack-Bits vom DS1307 sind immer auf High (also kein ACK).
Das Mistding reagiert nicht. Ich hab alles komplett nach Datenblatt
angeschlossen. Pin8 auf +5V, Pin3 auf GND, Pin1+2 mit Uhrenquarz, am
Pin7 hab ich ne LED angeschlossen um den Taktausgang zu testen und
am Ubatt hab ich mit ner 3,3V-ZDiode eine Batterie simuliert. SDA/SCL hab
ich auch mehrfach überprüft. Die sind nicht vertauscht. Mit den beiden LEDs
am I2C-Bus sehe ich auch die Transfers kurz aufblitzen. Aber es geht auch
ohne LEDs nicht. Es liegt also auch nicht an der Last die ich mit den LEDs
erzeuge.
Das selbe Problem hatte ich schon am Mega128. Da hab ich auch einen auf
das Board gelötet und es lief nicht. Zur Übberprüfung hab ich also jetzt einen
an nen Mega8 gepackt und es ist die selbe Sch ...
Aus Verzweiflung hab ich dann einfach mal die Schreibadresse in einer Schleife
hochzählen lassen und von 00h-FEh alle getestet (Bit0 auf 0 wegen Write).
Alles ohne Erfolg. Er stellt den SQWE nicht auf 1Hz um damit ich sehe das er
reagiert hat. Auch kein ACK und nix.
Auf nem anderen Board hab ich nen PCF8583 drauf und der hat sofort seine
1Hz auf dem Testausgang rausgeschmissen. Auch ohne ein einziges gesendetes
Bit. Im Notfall werde ich die Teile verwenden und den DS1307 raushauen.
Ich pack die interessanten Teile hier nochmal so rein ...
CodeBox BASCOM
Also seht euch mal den Kram an den ich da verzapft habe und dann laß ich
mich mal überraschen
Gruß
Dino
nun hab ich auch mal ein Problemchen ...
( unter anderem auch mal wieder mit dem UMTS-Proxy
Die Buttons im Editor sind mal wieder tot )
Also wie im Titel geschrieben ... die DS1307 RTC will nicht so wie ich.
Hier der Programmcode in der ganzen Schönheit ...
Anhang anzeigen EvalBoard_m8_DS1307_v00.bas
und hier mal ein Foto vom Testaufbau ...
Ich hab mein kleines Zweikanal-Digital-Oszi drangenhängt und sehe alle
Signale auf dem Bus. Ich kann jedes gesendete Bit sehen und es paßt alles.
Nur die Ack-Bits vom DS1307 sind immer auf High (also kein ACK).
Das Mistding reagiert nicht. Ich hab alles komplett nach Datenblatt
angeschlossen. Pin8 auf +5V, Pin3 auf GND, Pin1+2 mit Uhrenquarz, am
Pin7 hab ich ne LED angeschlossen um den Taktausgang zu testen und
am Ubatt hab ich mit ner 3,3V-ZDiode eine Batterie simuliert. SDA/SCL hab
ich auch mehrfach überprüft. Die sind nicht vertauscht. Mit den beiden LEDs
am I2C-Bus sehe ich auch die Transfers kurz aufblitzen. Aber es geht auch
ohne LEDs nicht. Es liegt also auch nicht an der Last die ich mit den LEDs
erzeuge.
Das selbe Problem hatte ich schon am Mega128. Da hab ich auch einen auf
das Board gelötet und es lief nicht. Zur Übberprüfung hab ich also jetzt einen
an nen Mega8 gepackt und es ist die selbe Sch ...
Aus Verzweiflung hab ich dann einfach mal die Schreibadresse in einer Schleife
hochzählen lassen und von 00h-FEh alle getestet (Bit0 auf 0 wegen Write).
Alles ohne Erfolg. Er stellt den SQWE nicht auf 1Hz um damit ich sehe das er
reagiert hat. Auch kein ACK und nix.
Auf nem anderen Board hab ich nen PCF8583 drauf und der hat sofort seine
1Hz auf dem Testausgang rausgeschmissen. Auch ohne ein einziges gesendetes
Bit. Im Notfall werde ich die Teile verwenden und den DS1307 raushauen.
Ich pack die interessanten Teile hier nochmal so rein ...
CodeBox BASCOM
' ===== PortC =================================================================
' I=7= I=6= I=5= I=4= I=3= I=2= I=1= I=0= => 00000000 => DDRC
' ---- Reset SCL SDA ---- ---- ---- ---- => 00111111 => PORTC (init)
' x x | | | | | |
'
Ddrc = &B0000_0000
Portc = &B0000_1111
' ===== I2C/TWI initialisieren ================================================
Config Scl = Portc.5
Config Sda = Portc.4
I2cinit
Config Twi = 50000 ' Taktfrequenz 50 kBit/s
' TWI gleich einschalten, das macht BASCOM ansonsten erst beim I2CStart
'Twcr = &B00000100 ' nur TWEN setzen
' Optionale Einstellungen für TWI Kommunikation die nicht zwingend erforderliche sind
' Twsr = 0 ' Status und Prescaler Register
' Twbr = 152 ' Bit Rate Register, 72 = 100kHz 152 = 50kHz(0 bis 255)
' Config I2cdelay = 40
...
..
...
' ===== DS1307 ===== Register =====
' I2C-Adresse : 1 1 0 1 0 0 0 rw => wr D0h / rd D1h
' =7= =6= =5= =4= =3= =2= =1= =0=
' 00h Ch | 10sec | seconds | 00-59 CH=1 -> ClockHalt
' 01h X | 10min | minutes | 00-59
' 02h X |12h|A/P|10h| hours | 01-12 12h=1 PM=1
' X |24h| 10h | hours | 00-23 24h=0
' 03h X X X X X | day | 1-7
' 04h X X |10date | date | 01-28/29,01-30,01-31
' 05h X X X |10m| month | 01-12
' 06h | 10year | year | 00-99
' 07h |out| X X |SQW| X X |RS1|RS0| Ctrl-Byte
' | | | | _
' | | |___|___| 00 1Hz -> SQW
' | | | 01 4096Hz
' | | | 10 8192Hz
' | |__ SQWE 1=enable |_11 32768Hz
' |
' |___ SQW/Out-Level bei SQW=0(disable)
' ----- RTC DS1307 -----
Dim Ds1307_ctrl_value As Byte
Ds1307_ctrl_value = &B0001_0000
Const Ds1307wr = &B11010000 ' Adresse des DS1307 = &HD0 (schreiben)
Const Ds1307rd = &B11010001 ' Adresse des DS1307 = &HD1 (lesen)
Const Ds1307_sec = &H00
Const Ds1307_min = &H01
Const Ds1307_hour = &H02
Const Ds1307_day = &H03
Const Ds1307_date = &H04
Const Ds1307_month = &H05
Const Ds1307_year = &H06
Const Ds1307_ctrl = &H07
Dim Loopcount As Word
Loopcount = 0
' ###############################################
' ##### Hauptschleife Start #####################
' ###############################################
Do
If Loopcount = 0 Then
Locate 1 , 1
Lcd A ; " "
Incr A
I2cinit ' Init
I2cstart ' Startsequenz senden
' I2cwbyte Ds1307wr ' feste Write-Adresse senden
W = A ' Write-Adresse bauen
W.0 = 0 ' Write-Adresse bauen
I2cwbyte W ' Chip suchen (Write-Adresse zaehlt hoch)
Waitus 30 ' Damit man beim Oszilloskop die Bytes unterscheiden kann
I2cwbyte Ds1307_ctrl ' Control-Byte adressieren
Waitus 30 ' Damit man beim Oszilloskop die Bytes unterscheiden kannv
I2cwbyte &B0001_0000 ' SQWE auf 1Hz stellen
I2cstop ' Stop-Sequenz senden
' === Oszilloskop ===
' Mode : Dual
' Ch1 : 2V/Div --- SCL
' Ch2 : 2V/Div --- SDA
' Time : 10us/Div
' Trigger : Single
' Display : __v________
' Source : Ch1 --__
End If
Incr Loopcount
Loop
' ###############################################
' ##### Hauptschleife Ende ######################
' ###############################################
Also seht euch mal den Kram an den ich da verzapft habe und dann laß ich
mich mal überraschen
Gruß
Dino