Ficu napisał: Help bascoma już czytałem.
Co w tym kodzie jest źle?
Kolejność bracie , kolejność.Ponieważ w Twoim kodzie nie ma nigdzie instrukcji skoku do funkcji/podprogramu , to uC wykonując program po kolei , włazi do ...
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
i po napotkaniu instrukcji
End Sub wykonuje instrukcję Return/RET.Ponieważ nie ma gdzie wrócić , to albo się resetuje , albo idzie "w krzaki".
Wypróbuj poniższe i napisz co zobaczyłeś na LCD
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portb.2 , Db7 = Portb.1 , E = Pinc.1 , Rs = Pinc.0
Config Sda = Portd.5
Config Scl = Portd.7
Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Dim Addressw As Byte 'slave write address
Dim Addressr As Byte 'slave read address
Dim B1 As Byte , Adres As Byte , Value As Byte , T As Byte 'dim byte
B1 = 0
Value = &H55
Cls
Lcd "Szukam urzadzen ";
Lowerline
Lcd "na szynie I2C ";
For Addressw = 2 To 254 Step 2
I2cstart
I2cwbyte Addressw
I2cstop
If Err = 0 Then Exit For
Next
Cls
If Addressw < 255 Then
Lcd "Adres &H" ; Hex(Addressw);
Lowerline
Lcd "odpowiedzial ACK";
Addressr = Addressw + 1
Wait 5
Else
Lcd "Urzadzenia nie";
Lowerline
Lcd "odpowiadaja :(";
Stop
End If
Call Write_eeprom(10 , Value)
Call Read_eeprom(10 , B1)
Cls
If B1 = Value Then
Lcd "Sukces :)";
Lowerline
Lcd "B1=Value";
Else
Lcd "Porazka :(";
Lowerline
Lcd "B1<>Value";
End If
Stop
'Program wykonujący zapis do pamięci EEPROM
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart
I2cwbyte Addressw
If Err = 0 Then
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End If
End Sub
'Program wykonujący odczyt z pamięci EEPROM
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cstart
I2cwbyte Addressr
I2crbyte Value , Nack
I2cstop
End Sub
Piotrek
PS
Jakiego eepromu używasz
24C64 , różni się od mniejszych ... sióstr 24C2/4/8/16 między innymi sposobem adresowania.