Pytania, kody i porady dotyczące nie tylko Bascom.
-
grabek_radek
- Posty: 12
- Rejestracja: 06 gru 2017, 17:10
Post
autor: grabek_radek » 08 sty 2018, 10:23
Witam serdecznie
Mam do kolegów takie pytanie,
Mam do dyspozycji zegar czasu rzeczywistego oraz FRAM jak na schemacie. I teraz pytanie czy coś jeszcze brakuje przy FRAM na schemacie wybrany adres urządzenia to 160.
Jeśli chodzi o kod do odczytu i zapisu FRAM
//Adres zapisu i odczytu
Const Addressw = &B10100000
Const Addressr = &B10100001
//Inicjujemy I2C
Config I2cdelay = 10
Config Scl = Portc.0
Config Sda = Portc.1
I2cinit
//Odwołanie się do poszczególnych bitów zmiennej
Dim Byte1 As Byte
Dim Byte2 As Byte
Dim Byte3 As Byte
Dim Byte4 As Byte
// Czytanie
Call Read_eeprom(1 , Byte1)
Call Read_eeprom(2 , Byte2)
Call Read_eeprom(3 , Byte3)
Call Read_eeprom(4 , Byte4)
//Zapis
Call Write_eeprom(1 , Byte1)
Call Write_eeprom(2 , Byte2)
Call Write_eeprom(3 , Byte3)
Call Write_eeprom(4 , Byte4)
//Procedura czytania
Sub Read_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cstart
I2cwbyte Addressr
I2crbyte Value , Nack
I2cstop
End Sub
//Procedura zapisu
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cwbyte Value
I2cstop
End Sub
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 08 sty 2018, 11:41 przez
grabek_radek, łącznie zmieniany 1 raz.
-
niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
-
Kontakt:
Post
autor: niveasoft » 08 sty 2018, 11:38
Słowo schemat wystąpiło minimum dwukrotnie a schematu tu nie widzę.
Napisz mi prościej gdzie tu pytanie i czego dotyczy

Może dla Ciebie to oczywiste ale zapewniam Cie że nie dla każdego i im dłużej będziesz wypytywał to nauczysz się tak formułować pytania by były jednoznaczne.
-
grabek_radek
- Posty: 12
- Rejestracja: 06 gru 2017, 17:10
Post
autor: grabek_radek » 08 sty 2018, 11:44
Już dołączyłem schemat.
Moje pytanie jest takie czy jesli podłącze w FRAM A1 i A2 do GND to adres na szynie I2C tego urządzenie jest 160?
Odnośnie schematu czy coś jeszcze muszę dodać do FRAM ? rezystory podciągające już są .
-
niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
-
Kontakt:
Post
autor: niveasoft » 08 sty 2018, 11:53
Naprawdę najprostsze jest użycie skanera adresów I2C który pokazuje co pod jakim adresem się zgłasza.
Ten skaner nie robi nic innego tylko zadaje po kolei adresy a w I2C jest tak że jeśli adresowany układ jest na szynie to odpowie.
Więc skaner pyta kolejno adresy i jeśli adres nie odpowiada to błąd, ale to go nie denerwuje i pyta o kolejny adres i jak nagle ktoś odpowie to wywala to na wyświetlacz że odpowiedział adres taki a taki
Innym sposobem jest przeczytanie noty aplikacyjnej samemu a nie zmuszanie do czytania niezainteresowanych danym układem
$regfile = "m32def.dat"
'$crystal = 11059200
$crystal = 4000000
$hwstack = 32
$swstack = 32
$framesize = 128
$baud = 19200
'Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0 , Wr = Porta.1 'Kujawa
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 'UPT M16
Config Lcd = 20x4
Cursor Off , Noblink
Cls
Waitms 500
Config Portc.6 = Input : Set Portc.6 : Switch Alias Pinc.6
$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
Config Scl = Portc.0 ' we need to provide the SCL pin name
Config Sda = Portc.1 ' we need to provide the SDA pin name
I2cinit ' we need to set the pins in the proper state
Config Twi = 100000 ' wanted clock frequency
Dim B As Byte , Lock As Byte
Locate 1 , 1 : Lcd "Scanning.."
Print "Scanning"
For B = 0 To 254 Step 2 'for all odd addresses
I2cstart 'send start
I2cwbyte B 'send address
If Err = 0 Then 'we got an ack
Locate 2 , 1 : Lcd "Slv.at: &H" ; Hex(b) ; " (" ; B ; ")"
Print "Slv.at: &H" ; Hex(b) ; " (" ; B ; ")"
Locate 3 , 1 : Lcd " Push switch..."
Lock = 1
Do
Debounce Switch , 0 , Sw_sub , Sub
Loop Until Lock = 0
End If
I2cstop 'free bus
Next
Thirdline : Lcd Spc(20)
Fourthline : Lcd "Koniec"
End
Sw_sub:
Lock = 0
Thirdline : Lcd Spc(20)
Return
'Found:
'DAC at &HC0 (192)
'ALS at &H06 (006)
' at &HAC (172)
'EEP at &HAE (174)
'RTC at &HD0 (208)
'BME at &HEC (236)
'BMP at &HEE (238)