DS18S20 mit Nokia 3310 Display

    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!

    • DS18S20 mit Nokia 3310 Display

      Mach flott den Schrott.
      Hier möchte ich ein etwas älteres Projekt nochmal vorstellen.
      Ein Nokia Mobiltelefon umgebaut zu einer Temperaturanzeige.
      Das Telefon wurde dazu komplett ausgeräumt, nur noch das Display kommt zum Einsatz.
      Das Display ist ein Monochromes Grafikdisplay mit 84*48 Pixeln, organisiert als 504*8, angesteuert wird es über SPI.
      Es bringt seine eigene Ladungspumpe für die negative Versorgungsspannung mit und braucht nur noch einen externen Kondensator dafür.
      Ich habe eine Batteriehalterung und ein eigenes Tastenfeld eingebaut, um die Uhrzeit einstellen zu können.
      Der AVR benutzt einen 4MHz Quarz als Taktquelle, da bei 3V der interne Oszillator nicht sicher anläuft.
      Einmal pro Sekunde wird die Ladungspumpe gestartet und aus den 3V Versorgung etwa 5V für den DS18s20 erzeugt.
      Die 1wire Daten werden mit einer eigenen Routine ausgelesen, Bascom schafft das nur ab einer Mindest-Taktfrequenz von (ich glaube) 2MHz
      Es wird die Temperatur, der Temperaturtrend als Pfeil und als Diagramm und der Batteriestatus angezeigt.
      Dazu sind verschiedene (abgespeckte) Zeichensätze nötig.
      Die Batterie hält sehr lange da der AVR mit 500kHz taktet und zwischendurch in Idle geht.

      Im Anhang habe ich die benötigten Dateien gepackt.

      Gruß, Michael

      Quellcode

      1. 'Nokia 3310 Umbau auf Temperaturanzeige
      2. 'Versorgung über 2x AA Batterien mit Ladungspumpe für DS18S20 Sensor
      3. 'Quarz 4MHz, ClockDiv8 aktiviert
      4. 'Autor Michael Kinz bascomforum.de mit besten Dank für die Anregungen
      5. 'von Michael König www.mkprojekt.de
      6. 'und die ASM-Programmsequenzen von MagicWhiteSmoke
      7. 'dieser Quelltext steht unter der CC Lizenz
      8. 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
      9. 'Namensnennung, keine kommerzielle Nutung, Weitergabe nur unter gleichen Bedingungen
      10. $crystal = 500000
      11. $regfile = "m88def.dat"
      12. $hwstack = 64
      13. $swstack = 128
      14. $framesize = 80
      15. $noramclear
      16. Ddrd.5 = 1 'GND Display
      17. Ddrd.0 = 1 'Taster GND
      18. Ddrb.0 = 1 'Data/Command
      19. Ddrd.6 = 1 'Chip Enable
      20. Ddrd.7 = 1 'Reset Display
      21. Ddrc.1 = 1 'Versorgung Spannungsteiler
      22. Ddrd.3 = 1 'Ladungspumpe PWM
      23. Ddrd.1 = 1 'Versorgung Ladungspumpe
      24. Ddrb.4 = 1
      25. Portc = &B00111100 'Taster Pullup
      26. Dc Alias Portb.0
      27. Ce Alias Portd.6
      28. Re Alias Portd.7
      29. Lp_power Alias Portd.1
      30. Sp_teiler Alias Portc.1
      31. Re = 0 'Dislpay reset
      32. Waitms 20
      33. Re = 1
      34. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 0
      35. Config Clock = User
      36. Config Date = Dmy , Separator = .
      37. Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
      38. Start Adc
      39. 'Sekundeninterrupt
      40. Config Timer1 = Timer , Prescale = 8
      41. On Timer1 T1_irq
      42. Enable Timer1
      43. Enable Interrupts
      44. '7,6 kHz für Ladungspumpe
      45. Tccr2a = &B00010010
      46. Tccr2b = &B01000001
      47. Ocr2a = &B00100000
      48. Ocr2b = &B00010000
      49. Ce = 0
      50. Spiinit
      51. Dim Lsyssec As Long
      52. Dim Zeigersec As Long
      53. Dim Ltemp As Long
      54. Dim Temp As Byte
      55. Dim Count As Word
      56. Dim Batt As Integer
      57. Dim Tempw As Word
      58. Dim Temp_l As Byte At Tempw Overlay
      59. Dim Temp_h As Byte At Tempw + 1 Overlay
      60. Dim Forend As Byte
      61. Dim Foranf As Byte
      62. Dim Grafikbreite As Byte
      63. Dim L_breite As Byte
      64. Dim Werte(60) As Integer
      65. Dim Wertzeiger As Byte
      66. Dim Diamin As Integer
      67. Dim Diamax As Integer
      68. Dim Iii As Integer
      69. Dim B_iii As Byte
      70. Dim Tempi As Integer
      71. Dim W_max As Integer
      72. Dim W_min As Integer
      73. Dim W_diff As Word
      74. Dim Graph As Byte
      75. Dim Xaddress As Byte
      76. Dim Yaddress As Byte
      77. Dim Text As String * 14
      78. Dim Text_a As String * 14
      79. Dim Sign As String * 1
      80. Dim Lenght As Byte
      81. Dim Loops As Byte
      82. Dim Taster As Byte
      83. Dim Breite As Byte
      84. Dim I As Byte
      85. Dim Zeilenstart As Byte
      86. Dim Invertiert As Bit
      87. Dim Sec_flag As Bit
      88. Dim Startflag As Bit
      89. Dim Templ As Long
      90. Declare Sub Address
      91. Declare Sub Graphic
      92. Declare Sub Words
      93. Declare Sub Uhrzeit
      94. Declare Sub Tasterlesen
      95. Declare Sub Batterie
      96. Declare Sub Temperaturanzeige
      97. Declare Sub Zeiteinstellung
      98. Declare Sub Kleineanzeige
      99. Declare Sub Klein_case
      100. Declare Sub Big_raus
      101. Declare Sub Kleinraus
      102. Declare Sub Big_sign_select
      103. Declare Sub Diagramm
      104. 'Spannungsgrenzen Batterie in Zehntelvolt
      105. Const Obergrenze = 310
      106. Const Untergrenze = 220
      107. Const Diff = 90
      108. '############ DS18S20 ###############
      109. Dim 1w_i As Byte
      110. Dim 1w_t1 As Integer
      111. Dim 1w_t As Integer
      112. Dim Spp(9) As Byte
      113. Dim Temperatur_str As String * 6
      114. Dim T_single As Single
      115. Declare Function Ds1820_get_temp() As Single
      116. Declare Sub Temperatur_starten
      117. 'Config 1wire = Portd.2
      118. 1w Alias Ddrd.2
      119. 1win Alias Pind.2
      120. Const L = 1
      121. Const H = 0
      122. Call Temperatur_starten
      123. '######################################
      124. If Lsyssec < 86400 Then 'wegen Überlauf beim zurückstellen der Uhr
      125. Lsyssec = 86400
      126. End If
      127. Gosub Display_init
      128. Xaddress = 0 + 128
      129. Yaddress = 1 + 64
      130. Call Address
      131. Text = " Michael Kinz "
      132. Call Words
      133. Xaddress = 0 + 128
      134. Yaddress = 3 + 64
      135. Call Address
      136. Text = " Juni 2011 "
      137. Call Words
      138. Waitms 450 'für die erste Temperaturmessung
      139. Startflag = 1
      140. Zeigersec = -1
      141. Wertzeiger = 0
      142. ' ##############################################################################
      143. ' ############################# Hauptschleife ################################
      144. ' ##############################################################################
      145. Do
      146. Call Uhrzeit
      147. Disable Pcint0
      148. Disable Pcint1
      149. Acsr.7 = 1
      150. Power Idle 'warte auf die nächste Sekunde im Idle-Mode
      151. Call Tasterlesen
      152. Call Zeiteinstellung
      153. 'Messung alle 10 Sekunden starten
      154. Temp = _sec Mod 10
      155. If Temp = 9 Then
      156. Call Temperatur_starten
      157. End If
      158. ' und ausgeben
      159. If Temp = 0 Then
      160. Call Temperaturanzeige
      161. Call Batterie 'Batterie alle 10 Sekunden auch messen
      162. End If
      163. Ltemp = Zeigersec Mod 1440 '60 mal pro Tag, alle 24 Minuten bzw 1440 Sekunden
      164. If Startflag = 1 Then Ltemp = 0 'Beim Start sowieso
      165. If Ltemp = 0 Then
      166. Incr Wertzeiger 'Attayzeiger erhöhen
      167. Werte(wertzeiger) = 1w_t 'aktuelle Temperatur ins Array
      168. End If
      169. If Wertzeiger > 59 Then Wertzeiger = 0 'Überlauf vermeiden
      170. W_max = -200
      171. W_min = 600
      172. If 1w_t > W_max Then W_max = 1w_t
      173. If 1w_t < W_min Then W_min = 1w_t
      174. For Count = 1 To 60 'Max-Min Werte finden
      175. If Werte(count) > W_max Then W_max = Werte(count)
      176. If Werte(count) < W_min Then W_min = Werte(count)
      177. Next
      178. If Startflag = 1 Then 'beim Start Array füllen
      179. For Count = 1 To 60
      180. Werte(count) = 1w_t
      181. Next
      182. Startflag = 0
      183. End If
      184. Call Kleineanzeige 'Min-Max Anzeige vor dem Diagramm
      185. Call Diagramm
      186. Loop
      187. End
      188. '###############################################################################
      189. '###############################################################################
      190. '###############################################################################
      191. Sub Big_raus
      192. Local B_byte As Byte
      193. B_byte = 0
      194. Dc = 1
      195. For I = 0 To 2 '3 Zeilen bei großen Zeichen
      196. Yaddress = Zeilenstart + I
      197. Call Address
      198. Call Graphic '1 Zeile eines Zeichens ausschieben
      199. Next
      200. Dc = 0
      201. Yaddress = Yaddress - 2
      202. End Sub
      203. '----------------------------------------------------------------
      204. Sub Zeiteinstellung
      205. 'Taster = Pinc And &B00111100
      206. ' 60 - nichts gedrückt
      207. If Taster = 36 Then '2 Taster gleichzeitig
      208. Gosub Display_init 'Display löschen
      209. Do
      210. Call Tasterlesen
      211. Waitms 30 'Prellen abwarten
      212. Loop Until Taster = 60 'warten bis losgelassen
      213. Waitms 30 'Prellen abwarten
      214. Do
      215. Call Uhrzeit 'Anzeige Uhrzeit
      216. Call Tasterlesen
      217. If Taster = 52 Then 'Taster hoch
      218. Lsyssec = Lsyssec + 59
      219. Gosub T1_irq
      220. End If
      221. If Taster = 44 Then 'Taster runter
      222. Lsyssec = Lsyssec - 61
      223. Gosub T1_irq
      224. End If
      225. ' Xaddress = 0 + 128 'Debug
      226. ' Yaddress = 5 + 64
      227. ' Call Address
      228. ' Text = Str(taster)
      229. ' Call Words
      230. Waitms 50
      231. Loop Until Taster = 56 'Taster rechts
      232. Gosub Display_init 'Display löschen
      233. End If
      234. End Sub
      235. '-----------------------------------------------------------------------------
      236. Sub Kleineanzeige
      237. Breite = 4
      238. Xaddress = 0 + 128
      239. Yaddress = 4 + 64
      240. Call Address
      241. Tempi = W_max
      242. Call Kleinraus
      243. Yaddress = 5 + 64
      244. Call Address
      245. Tempi = W_min
      246. Call Kleinraus
      247. End Sub
      248. Sub Kleinraus
      249. If Tempi < 0 Then 'negativ?
      250. Restore Klein_minus
      251. Breite = 3
      252. Call Graphic
      253. Tempi = Abs(tempi) 'positiv machen
      254. End If
      255. If Tempi > 99 Then
      256. Iii = Tempi / 100
      257. B_iii = Iii
      258. Call Klein_case
      259. Tempi = Tempi Mod 100
      260. End If
      261. If Tempi > 9 Then
      262. B_iii = Tempi / 10
      263. Call Klein_case
      264. End If
      265. B_iii = Tempi Mod 10
      266. Breite = 1
      267. Restore Klein_punkt
      268. Call Graphic
      269. 'Breite = 4
      270. 'W_max ausgeben
      271. Call Klein_case
      272. Restore Klein_grad
      273. Breite = 2
      274. Call Graphic
      275. 'Grad ausgeben
      276. End Sub
      277. Sub Klein_case
      278. B_iii = B_iii + &H30
      279. Breite = 4
      280. '########## MWS ##########
      281. LDS R17, {b_iii}
      282. Loadwordadr Font_klein
      283. !MOVW XL, ZL
      284. Loadwordadr Char_data
      285. !Get_Next_Char:
      286. !LPM R16, Z+
      287. !CP R16, R17
      288. !BREQ Got_Match
      289. !ADIW XL, 4
      290. !TST R16
      291. !BRNE Get_Next_Char
      292. !Got_Match:
      293. !MOVW R8, XL
      294. 'Waitus 330
      295. '########## MWS ##########
      296. Call Graphic
      297. End Sub
      298. '-------------------------------------------------------------------------------
      299. Sub Diagramm
      300. W_diff = W_max - W_min 'Diagrammhöhe erfassen
      301. Incr W_diff
      302. Xaddress = 22 + 128
      303. Forend = Wertzeiger + 60
      304. Foranf = Wertzeiger + 1
      305. For I = Foranf To Forend 'aktueller Diagrammbereich
      306. Temp = I
      307. If Temp > 60 Then Temp = Temp - 60
      308. Yaddress = 4 + 64
      309. Call Address
      310. Tempw = Werte(temp) - W_min 'Array-Werte umrechnen Temperatur -> 0 bis 15
      311. Tempw = Tempw * 16
      312. Tempw = Tempw / W_diff
      313. Temp = 15 - Tempw
      314. Tempw = 0
      315. Tempw.temp = 1 'Ausgabe zuweisen
      316. Dc = 1 'Daten
      317. Ce = 0
      318. Spiout Temp_l , 1 'obere Diagrammhälfte
      319. Ce = 1
      320. Yaddress = 5 + 64
      321. Call Address
      322. Dc = 1 'Daten
      323. Ce = 0
      324. Spiout Temp_h , 1 'untere Diagrammhälfte
      325. Ce = 1
      326. Incr Xaddress 'nächste Position
      327. Next
      328. End Sub
      329. '-------------------------------------------------------------------------------
      330. Sub Temperaturanzeige
      331. T_single = Ds1820_get_temp()
      332. Text = Fusing(t_single , "#.#")
      333. Xaddress = 0 + 128
      334. Yaddress = 1 + 64
      335. Zeilenstart = Yaddress
      336. Breite = 0
      337. Call Address
      338. Lenght = Len(text)
      339. Grafikbreite = 0
      340. For Loops = 1 To Lenght 'Breite der großen zeichen bestimmen
      341. Sign = Mid(text , Loops , 1)
      342. Call Big_sign_select
      343. Read Breite
      344. Grafikbreite = Grafikbreite + Breite
      345. Incr Grafikbreite
      346. Next
      347. Grafikbreite = Grafikbreite + 20
      348. Breite = 84 - Grafikbreite
      349. L_breite = Breite / 2
      350. L_breite = L_breite + 1 'mitteln und Rand links bestimmen
      351. Lenght = Len(text)
      352. For I = 0 To 2
      353. Yaddress = Zeilenstart + I
      354. Xaddress = 128
      355. Call Address
      356. Dc = 1
      357. Breite = L_breite
      358. For Count = 1 To Breite 'Rand links löschen
      359. Graph = &H00
      360. Ce = 0
      361. Spiout Graph , 1
      362. Ce = 1
      363. Next
      364. Next
      365. Decr Breite
      366. For Loops = 1 To Lenght 'große Zeichen nacheinander rausschieben
      367. Sign = Mid(text , Loops , 1)
      368. Call Big_sign_select
      369. Xaddress = Xaddress + Breite
      370. Incr Xaddress
      371. Read Breite
      372. Gosub Big_raus
      373. Next
      374. Xaddress = Xaddress + Breite
      375. Incr Xaddress
      376. Restore Big_grad 'Gradzeichen hinterher
      377. Read Breite
      378. Gosub Big_raus
      379. Breite = 84 - Grafikbreite 'Restbreite ermitteln
      380. Breite = Breite - L_breite
      381. Grafikbreite = Grafikbreite + L_breite
      382. Xaddress = Grafikbreite
      383. Xaddress = Xaddress + 128
      384. Breite = L_breite
      385. For I = 0 To 2 'Restbreite rausschieben
      386. Yaddress = Zeilenstart + I
      387. Call Address
      388. Dc = 1
      389. For Count = 1 To Breite
      390. Graph = &H00
      391. Ce = 0
      392. Spiout Graph , 1
      393. Ce = 1
      394. Next
      395. Next
      396. End Sub
      397. '-----------------------------------------------------------------------------
      398. Sub Big_sign_select
      399. Select Case Sign
      400. Case "0" : Restore Big_0
      401. Case "1" : Restore Big_1
      402. Case "2" : Restore Big_2
      403. Case "3" : Restore Big_3
      404. Case "4" : Restore Big_4
      405. Case "5" : Restore Big_5
      406. Case "6" : Restore Big_6
      407. Case "7" : Restore Big_7
      408. Case "8" : Restore Big_8
      409. Case "9" : Restore Big_9
      410. Case "." : Restore Big_komma
      411. Case "-" : Restore Big_minus
      412. End Select
      413. End Sub
      414. Sub Batterie
      415. Start Adc
      416. Sp_teiler = 1 'alle 2 Sekunden
      417. Waitms 2
      418. Count = Getadc(7) 'Batteriespannung messen
      419. Sp_teiler = 0
      420. Stop Adc
      421. Templ = Count * 100
      422. Templ = Templ / 299
      423. Batt = Templ
      424. Xaddress = 78 + 128
      425. Yaddress = 64
      426. Batt = Batt - Untergrenze
      427. Batt = Batt / 18
      428. If Batt > 5 Then
      429. Batt = 5
      430. End If
      431. If Batt < 0 Then
      432. Batt = 0
      433. End If
      434. Batt = Batt + 128
      435. Text = Chr(batt)
      436. Call Address
      437. Call Words
      438. End Sub
      439. Sub Tasterlesen
      440. Taster = Pinc And &B00111100
      441. End Sub
      442. Sub Uhrzeit
      443. Xaddress = 0 + 128
      444. Yaddress = 0 + 64
      445. Call Address
      446. Text = Time$
      447. Call Words
      448. End Sub
      449. Function Ds1820_get_temp() As Single
      450. 1w = L
      451. Waitus 500
      452. 1w = H
      453. Waitus 30
      454. Bitwait 1win , Set
      455. Temp = &HCC
      456. Gosub 1wsend
      457. Temp = &HBE ' Temperatur auslesen
      458. Gosub 1wsend
      459. For Count = 1 To 9
      460. For I = 0 To 7
      461. 1w = L
      462. Waitus 1
      463. 1w = H
      464. Waitus 2
      465. Spp(count).i = 1win
      466. Waitus 55
      467. Next
      468. Next
      469. Stop Timer2
      470. Lp_power = 0
      471. 1w_i = Spp(1) And 1
      472. If 1w_i = 1 Then Decr Spp(1)
      473. 1w_t = Makeint(spp(1) , Spp(2))
      474. 1w_t = 1w_t * 50
      475. 1w_t = 1w_t - 25
      476. 1w_t1 = Spp(8) - Spp(7)
      477. 1w_t1 = 1w_t1 * 100
      478. 1w_t1 = 1w_t1 / Spp(8)
      479. 1w_t = 1w_t + 1w_t1
      480. 1w_t = 1w_t / 10
      481. ' Temperatur in 0,1 Grad Schritten
      482. 1w_t1 = 1w_t / 10
      483. Ds1820_get_temp = 1w_t / 10
      484. End Function
      485. Sub Temperatur_starten
      486. 'Ocr2b = 127 'Taktgeber Ladungspumpe
      487. Lp_power = 1 'Versorgung Ladungspumpe
      488. 'Start Timer2
      489. Tccr2a = &B00010010
      490. Tccr2b = &B01000001
      491. 'Ocr2a = &B00010000
      492. 'Ocr2b = &B00001000
      493. Ocr2a = &B00100000
      494. Ocr2b = &B00010000
      495. Waitms 10
      496. ' 1wreset
      497. ' 1wwrite &HCC
      498. ' 1wwrite &H44
      499. 1w = L
      500. Waitus 500
      501. 1w = H
      502. Waitus 30
      503. Bitwait 1win , Set
      504. ' 1wwrite &H33 Read ROM
      505. Temp = &HCC
      506. Gosub 1wsend
      507. Temp = &H44
      508. Gosub 1wsend
      509. End Sub
      510. 1wsend:
      511. For I = 0 To 7
      512. If Temp.i = 0 Then
      513. 1w = L
      514. Waitus 55
      515. 1w = H
      516. Waitus 1
      517. Else
      518. 1w = L
      519. Waitus 1
      520. 1w = H
      521. Waitus 55
      522. End If
      523. Next
      524. Return
      525. ' ------------------- Sekunden Timer -------------------------
      526. T1_irq:
      527. Timer1 = 3036
      528. Incr Lsyssec
      529. _sec = Time(lsyssec)
      530. _day = Date(lsyssec)
      531. Sec_flag = 1
      532. Incr Zeigersec
      533. Return
      534. Settime:
      535. Return
      536. Getdatetime:
      537. Return
      538. '---------------- Initialisation Display ----------------------
      539. Display_init:
      540. Dc = 0
      541. Ce = 0
      542. Ce = 1
      543. Ce = 0
      544. Temp = &H21
      545. Spiout Temp , 1
      546. Temp = &H06
      547. Spiout Temp , 1
      548. Temp = &H13
      549. Spiout Temp , 1
      550. 'Kontrast
      551. Temp = &HC4
      552. Spiout Temp , 1
      553. Temp = &H20
      554. Spiout Temp , 1
      555. Temp = &H0C
      556. Spiout Temp , 1
      557. Ce = 1
      558. 'Display-RAM löschen
      559. Xaddress = 0 + 128
      560. Yaddress = 0 + 64
      561. Call Address
      562. Dc = 1
      563. Temp = &B00000000
      564. For Count = 0 To 503
      565. Ce = 0
      566. Spiout Temp , 1
      567. Ce = 1
      568. Next
      569. Return
      570. '################# Unterfunktionen für Ausgabe ##################
      571. Sub Address
      572. Dc = 0
      573. Ce = 0
      574. Spiout Yaddress , 1
      575. Spiout Xaddress , 1
      576. Ce = 1
      577. End Sub
      578. Sub Graphic
      579. Local Blub As Byte
      580. Dc = 1
      581. Ce = 0
      582. Blub = 0
      583. Spiout Blub , 1
      584. '
      585. For Count = 1 To Breite
      586. Read Blub
      587. Spiout Blub , 1
      588. Next Count
      589. Ce = 1
      590. End Sub
      591. Sub Words
      592. Lenght = Len(text)
      593. For Loops = 1 To Lenght
      594. Sign = Mid(text , Loops , 1)
      595. Breite = 5
      596. '########## MWS ##########
      597. LDS R17, {Sign}
      598. Loadwordadr Font_data
      599. !MOVW XL, ZL
      600. Loadwordadr Char_data
      601. !Get_Nexte_Char:
      602. !LPM R16, Z+
      603. !CP R16, R17
      604. !BREQ Gote_Match
      605. !ADIW XL, 5
      606. !TST R16
      607. !BRNE Get_Nexte_Char
      608. !Gote_Match:
      609. !MOVW R8, XL
      610. ' Waitus 330
      611. '########## MWS ##########
      612. Call Graphic
      613. Next Loops
      614. End Sub
      615. Char_data:
      616. Data "0123456789ABCDEFGHIJKLMNZ .,_-:öüaceghilnouvwxyz!)°äö{128}{129}{130}{131}{132}{133}"
      617. $include "Zeichensatz_5_mod.inc"
      618. $include "Ms_Sans_Serif_Michael.inc"
      619. Klein_minus:
      620. Data &H08 , &H08 , &H08
      621. Klein_grad:
      622. Data &H03 , &H03
      623. Klein_punkt:
      624. Data &H40
      625. Font_klein:
      626. Data &H3E , &H41 , &H41 , &H3E
      627. Data &H00 , &H42 , &H7F , &H40
      628. Data &H62 , &H51 , &H49 , &H46
      629. Data &H22 , &H41 , &H49 , &H36
      630. Data &H1C , &H12 , &H79 , &H10
      631. Data &H4F , &H49 , &H49 , &H30
      632. Data &H3E , &H49 , &H49 , &H30
      633. Data &H01 , &H71 , &H09 , &H07
      634. Data &H36 , &H49 , &H49 , &H36
      635. Data &H06 , &H49 , &H49 , &H3E
      Alles anzeigen

      Fertig.jpgRueckseite.jpg
      Platine.pngInnen.jpg
      Dateien