Hab ich den I2Cinit übersehen ?
Hallo,
hab gerade ein board mit 2 atmega8, 1 PCF8583 und einem ATMEL 24C256 Eprom fertiggestellt. die 4 komponenten sollen über den I2C bus miteinander kommunizieren, wobei einer der atmega8s der master ist.
Wie schon gesagt, die hardware ist soweit fertig. Das große problem liegt in der software, ich hab keinen blassen schimmer, wie das mit der adressierung des PCF und dem eeprom funzt, und wie bring ich den einen atmega8 als slave und den anderen als master. hab von einem user dieses boards mal ein script bekommen für den PCF (siehe unten) aber irgendwie funktioniert das nicht. Vielleicht liegts ja an der adressierung. Wär echt nett wenn mir jemand helfen könnte meinen bus zum laufen zu breingen.
gruß
xeus$baud = 2400
$regfile = "m8def.dat"
$crystal = 1000000
Config Sda = Portc.4
Config Scl = Portc.5
Dim I As Byte
Config Lcdpin = Pin , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.6 , Rs = Portd.4 ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
Dim A As Byte
Config Lcd = 20 * 4
Dim Ura As Byte , Minu As Byte , Sek As Byte , Dan As Byte
Dim S As Byte , M As Byte , H As Byte , D As Byte , Weekdays As Byte
Dim Wm As Byte , Yd As Byte
Dim Wm1 As Byte
Declare Sub Gettime()
Do
Call Gettime
If Ura < 10 Then
Locate 1 , 12
Lcd "0"
Locate 1 , 13
Lcd Ura
Else
Locate 1 , 12
Lcd Ura
End If
If Minu < 10 Then
Locate 1 , 15
Lcd "0"
Locate 1 , 16
Lcd Minu
Else
Locate 1 , 15
Lcd Minu
End If
Loop
Sub Gettime()
I2cstart 'generate start
I2cwbyte 160 'write addres of PCF8583
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte 161 'write address for reading info
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minutes
I2crbyte H , Nack 'read hours
' I2crbyte Yd , Ack 'read year and days
' I2crbyte Wm , Nack 'read weekday and month
I2cstop 'generate stop
Ura = Makedec(h)
Minu = Makedec(m)
Sek = Makedec(s)
End Sub
Hab ich den I2Cinit übersehen ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
oh ja der fehlt, werds gleich mal korigieren
Die Sub Gettime ist völlig in Ordnung. Hast du an die pullup Wiederstände für SDA und SCL gedacht ?
ja, kann gerade nur nicht testen, ob es funktioniert. Nachdem ich die fuses verändert hab, kann ich auf den mc nicht ehr zugreifen. enteder ich hab misstgebaut, oder der Programmer hat sich verabschiedet.
sobald ich den fehler behoben hab versuch ich es nochmal.
ps: hab 10 kohm pullups eingebaut.
nochWas:
Wie verhalt sich das eigentlich mit der hardWareseitigen adressierung des PCF und des eeproms? (A1 und A0)
Jedes Gerät auf dem I2C Bus sollte einen eindeutige Adresse eingestellt haben. mfg
Hallo,
der 24LC256 hat 3 Adresspins, sind alle auf GND ist die Adresse 160.
Ist nur A0 auf +5V, ist die Adresse 162. Sind A0-A2 auf +5V, ist die Adresse 174. Somit lassen sich 8 IC's von diesem Typ auf dem selben I2C Bus betreiben.
Der PCF8583 hat nur A0. Ist A0 auf GND, ist die Adresse ebenfalls 160.
Bei A0 auf +5V, ist sie 162.
Um beide auf einem Bus zu betreiben, musst du jedem eine eigene Adresse geben.
also die ansteuerung des pcf funzt. hab im datenblat nachgesehen und dort ist zu lesen, das er ein quarz braucht um richtig zu laufen, stimmt das?
Nicht unbedingt, ein 50Hz Takt geht auch. Ich nehme an, man hat bei der Entwicklung daran gedacht, auch die Netzfrequenz als Takt nutzen zu können.also die ansteuerung des pcf funzt. hab im datenblat nachgesehen und dort ist zu lesen, das er ein quarz braucht um richtig zu laufen, stimmt das?
Also wenn ich das etz richtig deute, dann braauche ich sehr woll einen externen takt. aber ist der trimm kondensator wirklich notwendig?vorallem zum kalibriern müsste ich mich mit der stoppuhr daneben hinstellen.
Ich hät noch eine klizekleine frage:
ich hab auf dem bus neben dem clockbaustein noch von atmel den 24c256, hast du vielleicht irgend ein kleines Bascom prog, mit dem ich daten (kommen aus einem integer) in diesen baustein speichere. vielleicht noch was zum auslesen??
wär echt nett,
xeus
Lesezeichen