Xeus
23.02.2005, 16:21
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 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