I2C EEPROM kezelése
Re: I2C EEPROM kezelése
Üdv!
Valaki tud egy normális linket ahol az I2C lib fent van?
Van egy RTC-m és szeretném a memóriát használni rajta.
Valaki tud egy normális linket ahol az I2C lib fent van?
Van egy RTC-m és szeretném a memóriát használni rajta.
Re: I2C EEPROM kezelése
Mit szeretnél vele? Bascom alatt NEM libekben gondolkodunk ilyen egyszerű feladatnál.
24LC32 van rajta ha jól emlékszem.
Adatlap alapján a byte alapú kezelés nagyon egyszerű...
Pl:
http://mcselec.com/index2.php?option=co ... 5b82982ed0
Kb mintakód (ollózva):
24LC32 van rajta ha jól emlékszem.
Adatlap alapján a byte alapú kezelés nagyon egyszerű...
Pl:
http://mcselec.com/index2.php?option=co ... 5b82982ed0
Kb mintakód (ollózva):
Kód: Egész kijelölése
'--- Ala padatok ---
$crystal = 16000000 'Sebesseg
'$regfile = "M168def.dat" 'Chip
'$regfile = "M8def.dat" 'Chip
$regfile = "M328pdef.dat" 'Chip
$baud = 9600
$swstack = 128
$hwstack = 128
$framesize = 128
Config I2cdelay = 10 ' default slow mode:5
Config Sda = Portc.4
Config Scl = Portc.5
'I2C EEPROM
Declare Sub I2c_ram_write(address_desired As Word , Content As Byte)
Declare Sub I2c_ram_read(address_desired As Word)
Dim I2c_eeprom_address_desired As Word ' I2C EEPROM address counter (provides for 65536 locations).
Dim I2c_eeprom_address_high_byte As Byte ' High byte of EEPROM address.
Dim I2c_eeprom_address_low_byte As Byte ' Low byte of EEPROM address.
Dim I2c_eeprom_counter As Byte
Const Eeprom_chip_write_command = &B10100000 ' Family "A", Device/unit 1, write.
Const Eeprom_chip_read_command = &B10100001 ' Family "A", Device/unit 1, Read.
Prog4:
'I2C detect
Print "I2c-locator 1=no_device 0=device"
Print
Print " 0 2 4 6 8 A C E"
Print " 00 ";
For Temp1b = 0 To 254 Step 2
Temp2b = Temp1b Mod 16 ' addresses
If Temp2b = 0 And Temp1b > 0 Then
Print ' end of line?
Print " " ; Hex(temp1b) ; " ";
End If
I2cstart ' generate start
I2cwbyte Temp1b
Print " " ; Err ; " "; ' 1 no device, 0 device
I2cstop
Next Temp1b
Print
Wait 3
Prog10:
Input "Irasteszt (0-kihagy)" , Temp1b
If Temp1b = 0 Then Goto Prog10olvas
I2c_eeprom_address_desired = 0 ' We start writing at EEPROM address zero.
Print "Start I2CWrite (32 byte)"
Temp1b = 0 ' Generate test data (=0<256).
Do
Call I2c_ram_write(i2c_eeprom_address_desired , Temp1b) ' Write it to the EEPROM.
Incr I2c_eeprom_address_desired ' Increment EEPROM address location desired.
Incr Temp1b ' Generate test data (=0<256).
Toggle Led
Loop Until I2c_eeprom_address_desired = 32
Print "Mind beirva." ' Tell what is going on.
Prog10olvas:
Print
Print "Visszaolvasas...."
I2c_eeprom_address_desired = 0 ' We start reading at EEPROM address zero.
Do
Call I2c_ram_read(i2c_eeprom_address_desired) ' Call sub to read from device.
Decr I2c_eeprom_counter ' Decrement loop counter.
If Err = 0 Then ' Check status of operation.
Print "OK: " ; I2c_eeprom_address_desired ; " " ; Temp1b ' Report success.
Else ' or
Print "Hiba:" ; I2c_eeprom_address_desired ' Reeort failure.0
End If
Incr I2c_eeprom_address_desired ' Increment address counter.
Waitms 100
Loop Until I2c_eeprom_address_desired = 32
Print "Visszaolvasva" ' Tell what is going on.
Wait 5
END
Sub I2c_ram_write(address_desired As Word , Content As Byte) ' Writes data to the I2C EEPROM.
I2c_eeprom_address_low_byte = Low(address_desired) ' Extract low byte of address to be written.
I2c_eeprom_address_high_byte = High(address_desired) ' Extract high byte of addesss to be written.
I2cstart ' Send I2C Start.
I2cwbyte Eeprom_chip_write_command ' Select MicroChip EEPROM device type, address and write bit.
I2cwbyte I2c_eeprom_address_high_byte ' Send high address to write to.
I2cwbyte I2c_eeprom_address_low_byte ' Send low address to write to.
I2cwbyte Content ' Send the data to be written.
' If Err = 0 Then ' check status of operation.
' Print "OK: " ; Address_desired ' Report success.
' Else ' or
' Print "Hiba: " ; Address_desired ' Report failure.
' End If
I2cstop ' All we want to do is done.
Waitms 10 ' Wait for write to finish up.
End Sub
Sub I2c_ram_read(address_desired As Word) ' Reads data from the I2C EEPROM.
I2c_eeprom_address_low_byte = Low(address_desired) ' Extract low byte of address to be read.
I2c_eeprom_address_high_byte = High(address_desired) ' Extract high byte of address to be read.
I2cstart ' Send I2C Start..
I2cwbyte Eeprom_chip_write_command ' Select MicroChip EEPROM device type, address and write bit
I2cwbyte I2c_eeprom_address_high_byte ' Send high byte of address to read from.
I2cwbyte I2c_eeprom_address_low_byte ' Send low byte of address to read from.
I2cstart ' Issue another start sequence.
I2cwbyte Eeprom_chip_read_command ' Select MicroChip EEPROM device type, address and read bit
I2crbyte Temp1b , Nack ' Read data from desired location in chip.
I2cstop ' All we want to do is done.
End Sub
Re: I2C EEPROM kezelése
Sziasztok!
BascomAVRben meg tudom azt csinálni, hogy I2Cwbyte visszajöjjön az ACK előtt? Tehát kimegy a byte és nekem akkor kellene más bitet állítanom, valamint, ha "átveszem a vezérlést" az I2C porton (én kibillegtetem ezt az 1 byte-ot), akkor hogyan tudom visszaadni a vezérlést a Bascomnak? Most az SDA portot kimenetnek állítom, majd 'ki-órajelezem' az adatot, utána az SDA-t bemenetnek állítom, adok még egy extra órajelet (ez elméletileg az ACK) aztán úgy hagyom, jönnek a Bascom I2C adatfolyamok... Ha nincs ötlet, akkor kibitezem mind a 4 byte-ot, de akkor is vissza kellene állítani (?) valamit.
Azért az üljön sünbe, aki a microchipnél kiagyalta ezt az idióta vezérlési módot.
BascomAVRben meg tudom azt csinálni, hogy I2Cwbyte visszajöjjön az ACK előtt? Tehát kimegy a byte és nekem akkor kellene más bitet állítanom, valamint, ha "átveszem a vezérlést" az I2C porton (én kibillegtetem ezt az 1 byte-ot), akkor hogyan tudom visszaadni a vezérlést a Bascomnak? Most az SDA portot kimenetnek állítom, majd 'ki-órajelezem' az adatot, utána az SDA-t bemenetnek állítom, adok még egy extra órajelet (ez elméletileg az ACK) aztán úgy hagyom, jönnek a Bascom I2C adatfolyamok... Ha nincs ötlet, akkor kibitezem mind a 4 byte-ot, de akkor is vissza kellene állítani (?) valamit.
Azért az üljön sünbe, aki a microchipnél kiagyalta ezt az idióta vezérlési módot.