AT24C32 an AtMega anschließen, Pinbelegung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hallo Alex,
      ich hänge noch ein Bascom-Programm an . Es hat zwar eine andere Funktion aber in ihm befinden sich zwei Sub's zum Lesen und S. Ich denke es könnte dir weiterhelfen

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 64
      4. $swstack = 64
      5. $framesize = 32
      6. $baud = 9600
      7. Dim Wt As String * 10 'Wochentag 10 zeichen
      8. Dim Weekday As Byte
      9. '*************************** SUB's ***********************
      10. Declare Sub Write_eeprom(_str As String , Byval _start As Integer) 'EEprom beschreiben
      11. Declare Sub Read_eeprom(_str As String , Byval _start As Integer) 'EEprom lesen
      12. '**********************************************************
      13. Dim Text As String * 10
      14. Dim D As Byte
      15. Dim Temp_str As String * 16
      16. Const Ds3231w = &HD0 '208 Schreibaddresse des Ds3231
      17. Const Ds3231r = &HD1 '209 Leseadresse des DS3231
      18. Config Clock = User ' Interne Time/Date Routinen für Bascom konfigurieren
      19. Config Date = Dmy , Separator = . 'Tag,Monat;Jahr Deutsch
      20. 'Time$ = "10:37:00"
      21. 'Date$ = "13.08.19"
      22. 'Print Time$
      23. '************************ LCD ******************************
      24. $lib "YwRobot_Lcd_i2c.lIb" 'I2c Libary aufrufen
      25. Config Sda = Portc.4 'I2C-SDA Pin definieren
      26. Config Scl = Portc.5 'I2C-SDL Pin definieren
      27. Dim Lcd_backlight As Byte 'Hintergrundbeleuchtung 0=Aus 1=Ein '
      28. Const Pcf8574_lcd = 126 'Adresse PCF8574 64,78,126
      29. Config Lcd = 16x2 '40x4,16x1, 16x2, 16x4, 16x4, 20x2, 20x4, 16x1a or 20x4A.
      30. Config I2cdelay = 1 'default =1 / 5 bei 200 kHZ / 10 bei 100 kz
      31. Initlcd 'LCD initialisieren
      32. Waitms 300
      33. Locate 1 , 1 : Lcd "start"
      34. Wait 1
      35. Cls
      36. '**********************************************************
      37. '******************** Hauptprogramm ***********************
      38. Text = "Nichts"
      39. Call Write_eeprom(text , 7)
      40. Do
      41. If Right(time$ , 2) = "00" Then Lcd_backlight = 0
      42. If Right(time$ , 2) = "02" Then Lcd_backlight = 1
      43. Locate 1 , 1
      44. Lcd Time$ ; " " ; D
      45. Print Time$ ; Text
      46. If Text <> Date$ Then
      47. Text = Date$
      48. Call Write_eeprom(text , 7)
      49. Text = ""
      50. Call Read_eeprom(text , 7)
      51. Incr D
      52. End If
      53. Locate 2 , 1
      54. Lcd Text
      55. Waitms 500
      56. Loop
      57. End
      58. ' Unterprogramme für die Bascom Date/Time-Funktionen
      59. '---------------------------------------------------
      60. Getdatetime:
      61. I2cstart 'Start
      62. I2cwbyte Ds3231w
      63. I2cwbyte 0 'auf 0 stellen
      64. I2cstart
      65. I2cwbyte Ds3231r
      66. I2crbyte _sec , Ack 'Sekunden
      67. I2crbyte _min , Ack 'Minuten
      68. I2crbyte _hour , Ack 'Stunden
      69. I2crbyte Weekday , Ack 'Wochentag
      70. I2crbyte _day , Ack 'Tag
      71. I2crbyte _month , Ack 'Monat
      72. I2crbyte _year , Nack 'Jahr
      73. I2cstop
      74. _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year) 'in Dez.wandeln
      75. _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) 'in Dez. wandeln
      76. Weekday = Dayofweek() 'lt.Bascomhilfe erforderlich
      77. Gosub Wg 'Unterprogramm Wochentag
      78. Return
      79. Setdate: 'Datum setzen (Schreiben)
      80. _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
      81. I2cstart 'Start
      82. I2cwbyte Ds3231w
      83. I2cwbyte 4 'Adresse 4
      84. I2cwbyte _day
      85. I2cwbyte _month
      86. I2cwbyte _year
      87. I2cstop
      88. Return
      89. Settime: 'Uhrzeit setzen (Schreiben)
      90. _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
      91. I2cstart 'Start
      92. I2cwbyte Ds3231w
      93. I2cwbyte 0 'Adresse 0
      94. I2cwbyte _sec
      95. I2cwbyte _min
      96. I2cwbyte _hour
      97. I2cstop
      98. Return
      99. '-------------------
      100. 'Wochentagauswertung
      101. '-------------------
      102. Wg:
      103. Select Case Dayofweek()
      104. Case 0
      105. Wt = "Montag "
      106. Case 1
      107. Wt = "Dienstag "
      108. Case 2
      109. Wt = "Mittwoch "
      110. Case 3
      111. Wt = "Donnerstag"
      112. Case 4
      113. Wt = "Freitag "
      114. Case 5
      115. Wt = "Samstag "
      116. Case 6
      117. Wt = "Sonntag "
      118. End Select
      119. Return
      120. '************************ EEprom beschreiben ***************************
      121. Sub Write_eeprom(_str As String , Byval _start As Integer)
      122. Local Temp_single As Single
      123. Local Temp_int As Integer
      124. Local High_byte As Byte
      125. Local Low_byte As Byte
      126. Local N As Byte
      127. Local A As String * 2
      128. For N = 1 To Len(_str)
      129. A = Mid(text , N , 1)
      130. Temp_single = _start / 256 'Ermitteln der Fließkommazahl
      131. High_byte = Abs(temp_single) 'aus dem Fließkommzahl den ganzahligen Anteil (Highbyte)
      132. Temp_int = High_byte * 255 'Wert des Ganzahligen Anteils
      133. Low_byte = _start - Temp_int
      134. I2cstart 'Start I2C
      135. I2cwbyte &HAE 'sende Slave Adresse
      136. I2cwbyte High_byte 'Sende Speicheradresse High
      137. I2cwbyte Low_byte 'Sende Speicheradresse LOW
      138. I2cwbyte Asc(a) 'Schreibe Wert
      139. I2cstop
      140. Waitms 2
      141. _start = _start + 1
      142. Next
      143. Temp_single = _start / 256 'Ermitteln der Fließkommazahl
      144. High_byte = Abs(temp_single) 'aus dem Fließkommzahl den ganzahligen Anteil (Highbyte)
      145. Temp_int = High_byte * 255 'Wert des Ganzahligen Anteils
      146. Low_byte = _start - Temp_int
      147. I2cstart 'Start I2C
      148. I2cwbyte &HAE 'sende Slave Adresse
      149. I2cwbyte High_byte 'Sende Speicheradresse High
      150. I2cwbyte Low_byte 'Sende Speicheradresse LOW
      151. I2cwbyte &H00 'Schreibe Wert für Textende
      152. I2cstop
      153. Waitms 2
      154. End Sub
      155. '********************** EEprom lesen ************************************
      156. Sub Read_eeprom(_str As String , Byval _start As Integer)
      157. Local A As String * 2
      158. Local Eeprom_value As Byte
      159. Local High_byte As Byte
      160. Local Low_byte As Byte
      161. Local Temp_single As Single
      162. Local Temp_int As Integer
      163. Do
      164. Temp_single = _start / 256 'Ermitteln der Fließkommazahl
      165. High_byte = Abs(temp_single) 'aus dem Fließkommzahl den ganzahligen Anteil (Highbyte)
      166. Temp_int = High_byte * 255 'Wert des Ganzahligen Anteils
      167. Low_byte = _start - Temp_int
      168. I2cstart 'Start I2C
      169. I2cwbyte &HAE 'sende Slave Adresse
      170. I2cwbyte High_byte 'Sende Speicheradresse High
      171. I2cwbyte Low_byte 'Sende Speicheradresse LOW
      172. I2cstart 'Start I2C
      173. I2cwbyte &HAF 'sende Slave Adresse +1 für Eeprom_value
      174. I2crbyte Eeprom_value , Nack 'lese Wert vom EEprom
      175. I2cstop
      176. A = Chr(eeprom_value)
      177. _str = _str + A
      178. _start = _start + 1
      179. Loop Until Eeprom_value = 0 'bis Textende (00)
      180. End Sub
      Alles anzeigen
      Versuch macht klug !
    • Cool!
      Danke! Eure Beiträge erklären das viel besser als die unzähligen Internetseiten die ich überflogen oder durchgelesen habe.

      Noch eine Frage: sollte ich zwischen Speicher und MC einen 100 Ohm Widerstand hängen um bei evtl. Programmfehlern eine zerstörung zu vermeiden? Oder ist dass unnötig?

      Grüße Alex