Atmega bascom zapis odczyt FRAM

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Atmega bascom zapis odczyt FRAM

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
  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.  
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.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Atmega bascom zapis odczyt FRAM

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 :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.
grabek_radek
Posty: 12
Rejestracja: 06 gru 2017, 17:10

Re: Atmega bascom zapis odczyt FRAM

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ą .
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Atmega bascom zapis odczyt FRAM

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 :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)
ODPOWIEDZ