Strona 1 z 1

Atmega bascom zapis odczyt FRAM

: 08 sty 2018, 10:23
autor: grabek_radek
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
  1. //Adres zapisu i odczytu
  2.  
  3. Const Addressw = &B10100000
  4. Const Addressr = &B10100001
  5.  
  6. //Inicjujemy I2C
  7.  
  8. Config I2cdelay = 10
  9. Config Scl = Portc.0
  10. Config Sda = Portc.1
  11. I2cinit
  12.  
  13.  
  14. //Odwołanie się do poszczególnych bitów zmiennej
  15.  
  16. Dim Byte1 As Byte
  17. Dim Byte2 As Byte
  18. Dim Byte3 As Byte
  19. Dim Byte4 As Byte
  20. // Czytanie
  21.  
  22. Call Read_eeprom(1 , Byte1)
  23. Call Read_eeprom(2 , Byte2)
  24. Call Read_eeprom(3 , Byte3)
  25. Call Read_eeprom(4 , Byte4)
  26.  
  27. //Zapis
  28.  
  29. Call Write_eeprom(1 , Byte1)
  30. Call Write_eeprom(2 , Byte2)
  31. Call Write_eeprom(3 , Byte3)
  32. Call Write_eeprom(4 , Byte4)
  33.  
  34. //Procedura czytania
  35.  
  36. Sub Read_eeprom(byval Adres As Byte , Byval Value As Byte)
  37. I2cstart
  38. I2cwbyte Addressw
  39. I2cwbyte Adres
  40. I2cstart
  41. I2cwbyte Addressr
  42. I2crbyte Value , Nack
  43. I2cstop
  44. End Sub
  45.  
  46. //Procedura zapisu
  47.  
  48. Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
  49. I2cstart
  50. I2cwbyte Addressw
  51. I2cwbyte Adres
  52. I2cwbyte Value
  53. I2cstop
  54. End Sub
  55.  

Re: Atmega bascom zapis odczyt FRAM

: 08 sty 2018, 11:38
autor: niveasoft
Słowo schemat wystąpiło minimum dwukrotnie a schematu tu nie widzę.
Napisz mi prościej gdzie tu pytanie i czego dotyczy :D
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.

Re: Atmega bascom zapis odczyt FRAM

: 08 sty 2018, 11:44
autor: grabek_radek
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ą .

Re: Atmega bascom zapis odczyt FRAM

: 08 sty 2018, 11:53
autor: niveasoft
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 :D

Innym sposobem jest przeczytanie noty aplikacyjnej samemu a nie zmuszanie do czytania niezainteresowanych danym układem :D
  1. $regfile = "m32def.dat"
  2. '$crystal = 11059200
  3. $crystal = 4000000
  4.  
  5. $hwstack = 32
  6. $swstack = 32
  7. $framesize = 128
  8. $baud = 19200
  9.  
  10. '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
  11. Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7       'UPT M16
  12. Config Lcd = 20x4
  13.  
  14. Cursor Off , Noblink
  15. Cls
  16.  
  17. Waitms 500
  18.  
  19. Config Portc.6 = Input : Set Portc.6 : Switch Alias Pinc.6
  20.  
  21.  
  22. $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
  23.  
  24. Config Scl = Portc.0                                        ' we need to provide the SCL pin name
  25. Config Sda = Portc.1                                        ' we need to provide the SDA pin name
  26.  
  27. I2cinit                                                     ' we need to set the pins in the proper state
  28.  
  29. Config Twi = 100000                                         ' wanted clock frequency
  30.  
  31.  
  32.  
  33. Dim B As Byte , Lock As Byte
  34.  
  35. Locate 1 , 1 : Lcd "Scanning.."
  36. Print "Scanning"
  37. For B = 0 To 254 Step 2                                     'for all odd addresses
  38.   I2cstart                                                  'send start
  39.   I2cwbyte B                                                'send address
  40.   If Err = 0 Then                                           'we got an ack
  41.  
  42.      Locate 2 , 1 : Lcd "Slv.at: &H" ; Hex(b) ; " (" ; B ; ")"
  43.      Print "Slv.at: &H" ; Hex(b) ; " (" ; B ; ")"
  44.  
  45.      Locate 3 , 1 : Lcd " Push switch..."
  46.      Lock = 1
  47.       Do
  48.        Debounce Switch , 0 , Sw_sub , Sub
  49.       Loop Until Lock = 0
  50.  
  51.   End If
  52.   I2cstop                                                   'free bus
  53. Next
  54.  
  55. Thirdline : Lcd Spc(20)
  56. Fourthline : Lcd "Koniec"
  57.  
  58. End
  59.  
  60. Sw_sub:
  61.  Lock = 0
  62.   Thirdline : Lcd Spc(20)
  63. Return
  64.  
  65. 'Found:
  66. 'DAC at &HC0 (192)
  67. 'ALS at &H06 (006)
  68. '    at &HAC (172)
  69. 'EEP at &HAE (174)
  70. 'RTC at &HD0 (208)
  71. 'BME at &HEC (236)
  72. 'BMP at &HEE (238)