Puppenstuben Radio mit 128x64 OLED

    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!

    • Puppenstuben Radio mit 128x64 OLED

      BASCOM-Quellcode: Radio

      1. '*******************
      2. '* Udo Lorenz *
      3. '* 23.10.2017 *
      4. '* *
      5. '*******************
      6. 'Low Fuse (0xF1)
      7. 'High Fuse (0xDE)
      8. 'Lockbits (0xFF)
      9. 'VCC = 3,3V
      10. 'Puppenstubenradio mit ATtiny85; OLED-Display 128x64;
      11. 'RDA5807M - FM-RADIO-Modul; NF-Verstärkermodul;Taste Festsender waehlen;
      12. 'jeweils eine Taste Frequenz hoch bzw. runter.
      13. 'PS: Display zeigt nach Senderwahl animiertes Bild.
      14. 'I2c Slaves Alle Geraden Adressen Suchen...
      15. 'Slave DEC: 32 HEX: H20 BIN: B00100000 write RDA5807M
      16. 'Slave DEC: 34 HEX: H22 BIN: B00100010 read RDA5807M
      17. 'Slave DEC: 120 HEX: H78 BIN: B01111000 OLED
      18. 'Slave DEC: 192 HEX: HC0 BIN: B11000000 RDA5807M
      19. 'Ende Scan
      20. $regfile = "ATtiny85.DAT"
      21. $crystal = 16000000
      22. $hwstack = 80
      23. $swstack = 80
      24. $framesize = 100
      25. 'Config
      26. Dim Tastenwert As Word ,
      27. Dim Byte0 As Byte
      28. Dim Byte1 As Byte
      29. Dim Z As String * 5
      30. Dim Z1 As Byte
      31. Dim Freg As Integer
      32. Dim Pll As Single
      33. Dim Sender1 As String * 10
      34. Dim Zaehler As Dword
      35. Dim Z2 As Dword
      36. Config Pinb.4 = Input
      37. Config Portb.1 = Output
      38. Config Portb.3 = Output
      39. 'I2C Config
      40. Config Scl = Portb.2 ' Config i2c pins
      41. Config Sda = Portb.0
      42. Config I2cdelay = 1 'i2c speed 10 =100,5 = 200,2=500,1=1000
      43. I2cinit : Waitms 10
      44. 'Display Config
      45. $lib "glcdSSD1306-I2C.lib" ' SSD1306 LIB einbinden
      46. Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1106" 'SSD1106 oder SSD1306
      47. 'Sub
      48. Declare Sub Ausgabe
      49. Declare Sub Radio
      50. 'Display init
      51. Wait 1
      52. Cls
      53. Setfont Font16x16
      54. Lcdat 1 , 1 , " Radio "
      55. Lcdat 3 , 1 , " " , 1
      56. Lcdat 5 , 1 , " " , 1
      57. Lcdat 7 , 1 , "Font 16x"
      58. 'Tasten ADC Config
      59. Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1 ' Referenz 1,1V intern
      60. Start Adc
      61. 'Init Start
      62. Readeeprom Freg , &H20 'Sender im Eeprom als Startsender
      63. Readeeprom Sender1 , &H50
      64. Z = Str(freg)
      65. Call Radio
      66. Waitms 30
      67. If Freg > 999 Then Z = Format(z , "000.0") Else Z = Format(z , "00.0")
      68. Call Ausgabe
      69. Restore Dta1
      70. '===============================================================================
      71. 'Hauptprogramm
      72. Do
      73. For Zaehler = 0 To 2000
      74. Tastenwert = Getadc(2)
      75. If Tastenwert > 210 And Tastenwert < 250 And Freg > 875 Then 'Taste1 Frquenz Minus
      76. Freg = Freg - 1
      77. Z = Str(freg)
      78. If Freg > 999 Then Z = Format(z , "000.0") Else Z = Format(z , "00.0")
      79. Sender1 = " ???"
      80. Call Radio
      81. Call Ausgabe
      82. End If
      83. If Tastenwert > 440 And Tastenwert < 500 And Freg < 1080 Then 'Taste2 Frequenz Plus
      84. Freg = Freg + 1
      85. Z = Str(freg)
      86. If Freg > 999 Then Z = Format(z , "000.0") Else Z = Format(z , "00.0")
      87. Sender1 = " ???"
      88. Call Radio
      89. Call Ausgabe
      90. End If
      91. If Tastenwert > 650 And Tastenwert < 750 Then 'Taste3 Festsenderwahl
      92. Z1 = Z1 + 1
      93. If Z1 = 7 Then 'hier 6 Festsender
      94. Restore Dta1
      95. Z1 = 1
      96. End If
      97. Read Freg
      98. Read Sender1
      99. Z = Str(freg)
      100. If Freg > 999 Then Z = Format(z , "000.0") Else Z = Format(z , "00.0")
      101. Call Radio
      102. Call Ausgabe
      103. End If
      104. Waitms 10
      105. Next Zaehler
      106. Writeeeprom Freg , &H20 'Speichern des aktuellen Senders im Eeprom
      107. Writeeeprom Sender1 , &H50
      108. Gosub Bildausgabe
      109. Loop
      110. End
      111. '===============================================================================
      112. 'LCD-Font
      113. $include "font16x16.font"
      114. '===============================================================================
      115. Sub Ausgabe
      116. Lcdat 1 , 1 , " Radio "
      117. Lcdat 3 , 1 , " " , 1
      118. Lcdat 3 , 1 , " " ; Z , 1
      119. Lcdat 5 , 1 , " " , 1
      120. Lcdat 5 , 1 , " Mhz" , 1
      121. Lcdat 7 , 1 , " "
      122. Lcdat 7 , 1 , Sender1
      123. Waitms 10
      124. End Sub
      125. '===============================================================================
      126. Sub Radio
      127. I2cinit
      128. I2cstart
      129. I2cwbyte &B00100000 '20H write
      130. I2cwbyte &B11000010 '02H H-Bit
      131. I2cwbyte &B00000101 '02L L-Bit
      132. Pll = Freg - 870
      133. Byte0 = Pll / 4
      134. I2cwbyte Byte0
      135. Byte1 = Byte0 * 4 '03H
      136. Byte1 = Pll - Byte1
      137. Byte1 = Byte1 * 64
      138. Byte1.4 = 1
      139. I2cwbyte Byte1 '03L
      140. I2cwbyte &B00000010 '04H
      141. I2cwbyte &B00000000 '04L
      142. I2cwbyte &B10001000 '05H
      143. I2cwbyte &B10001111 '05L
      144. I2cwbyte &B00000000 '06H
      145. I2cstop
      146. End Sub
      147. '===============================================================================
      148. Bildausgabe:
      149. Showpic 0 , 0 , Bild1
      150. Do
      151. Z2 = Z2 + 1
      152. If Z2 = 3000 Then
      153. Showpic 0 , 0 , Bild1
      154. End If
      155. If Z2 = 18000 Then
      156. Showpic 0 , 0 , Bild2
      157. Z2 = 0
      158. End If
      159. Tastenwert = Getadc(2)
      160. If Tastenwert > 60 Then 'Bei Tastendruck Rücksprung ins HP
      161. Return
      162. End If
      163. Loop
      164. End
      165. 'Senderliste
      166. Dta1:
      167. Data 898% , " JUMP" , 923% , " RSA" , 970% , " DLF"
      168. Data 1000% , " PSR" , 1034% , "Zwickau" , 1054% , " RTL"
      169. Bild1:
      170. $bgf "8.bgf"
      171. Bild2:
      172. $bgf "7.bgf"
      Alles anzeigen
      Schaltplan.jpg
      Dateien
      • Anhang.zip

        (7,23 kB, 173 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Udo01 ()

    • Hallo,
      da ich mir auch gerade so ein Radio bauen möcht, hat mir der Beitrag schon geholfen, so wie auch diese Seite:

      http://full-chip.net/arduino-proekty/97-cifrovoy-fm-priemnik-na-arduino-i-module-rda5807-s-graficheskim-displeem-i-funkciey-rds.html

      Aus dem Arduino-Programm und dem obigen Bascom-Programm ist dann dieser Code-Schnipsel entstanden. Die Frequenz 94.6Mhz habe ich aus Testzwecken gewählt, da es hier der stärkste Sender ist. Es wird der RDS Sendername auf die UART ausgegeben.
      Viel Spaß beim Verwenden
      Oilaf
      Dateien
      • RDA5807M.bas

        (2,92 kB, 107 mal heruntergeladen, zuletzt: )
    • @Cable Du hast vollkommen recht, habe ich mich von der "gewöhnlichen" Struktur eines Programm leiten lassen.
      Ich würde es nicht so programmieren, wie Udo das gemacht hat.
      Die eigentliche Hauptschleife ist die Sub Bildausgabe, die aus einer DO-Loop besteht, die nur verlassen wird, wenn ein ADC Wert >60 gelesen wurde. Wozu diese verdrehte Logik gut sein soll, verstehe ich nicht. Aber wenn's funktioniert ...