Single in 2 Nachkomma und 2 Vorkommastellen zerlegen?

    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!

    • Quellcode

      1. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      2. 'Mikrocontroller Konfigurieren
      3. $regfile = "m8adef.dat" ' specify the used micro
      4. $crystal = 1000000 ' used crystal frequency
      5. $hwstack = 32 ' default use 32 for the hardware stack
      6. $swstack = 10 ' default use 10 for the SW stack
      7. $framesize = 40 ' default use 40 for the frame space
      8. '$baud = 19200
      9. 'Ende Mikrocontroller Konfigurieren
      10. '=============================================================
      11. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      12. 'Ports Konfigurireren
      13. Config Portd.0 = Output
      14. Config Portd.1 = Output
      15. Config Portd.2 = Output
      16. Config Portd.3 = Output
      17. Config Portd.4 = Output
      18. Config Portb.6 = Output
      19. Config Portb.7 = Output
      20. Config Portd.5 = Output
      21. Config Portd.6 = Output
      22. Config Portd.7 = Output
      23. Config Portb.0 = Output
      24. Config Portb.1 = Output
      25. Seg_a Alias Portd.0
      26. Seg_b Alias Portd.1
      27. Seg_c Alias Portd.2
      28. Seg_d Alias Portd.3
      29. Seg_e Alias Portd.4
      30. Seg_f Alias Portb.6
      31. Seg_g Alias Portb.7
      32. Seg_dot Alias Portd.5
      33. Gnd_digit_1 Alias Portd.6
      34. Gnd_digit_2 Alias Portd.7
      35. Gnd_digit_3 Alias Portb.0
      36. Gnd_digit_4 Alias Portb.1
      37. Adc_volt Alias Portc.5
      38. Adc_ampere Alias Portc.4
      39. Config Adc_volt = Input
      40. Config Adc_ampere = Input
      41. 'Port für Spannungsmessung
      42. 'Ende Ports Konfigurieren
      43. '=============================================================
      44. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0,0482808213901151
      45. 'Anfang Konstanten
      46. Const Cons_spannung = 0.0482808213901151
      47. 'Spannungsteiler bei 21,1 Volt
      48. Const Cons_ampere = 0.0078525737464077
      49. 'Ein 1024stel bei 4,4Ampere / 0,25Ohm
      50. 'Ende Konstanten
      51. '============================================================= 0,0081265007375615
      52. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      53. 'Variablen
      54. Dim Var_x As Integer
      55. Dim Var_y As Byte
      56. Dim Var_tmp_anzeige As Byte
      57. Dim Var_z As Byte
      58. Dim Var_volt_adc As Word
      59. Dim Var_ampere_adc As Word
      60. Dim Var_volt As Single
      61. Dim Var_ampere As Single
      62. Dim Var_watt As Single
      63. Dim Var_watt_gesamt As Single
      64. Dim Var_watt_tmp As Single
      65. Dim Var_old_sec As Byte
      66. Dim Var_sec As Byte
      67. Dim Var_digit(4) As Single
      68. Dim Var_dot(4) As Byte
      69. Dim Var_watt_gesamt_tmp As Single
      70. Dim Var_eram_dummy As Eram Byte
      71. Dim Var_watt_gesamt_eram As Eram Single
      72. Dim Var_tmp_wert As Dword
      73. Dim Var_timer0 As Word
      74. Dim Var_sec_day As Integer
      75. 'Ende Variablen
      76. '=============================================================
      77. Var_watt_gesamt_tmp = Var_watt_gesamt_eram
      78. If Var_watt_gesamt_tmp < 0.01 Then Var_watt_gesamt_eram = 1
      79. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      80. 'Spannung Messen Anfang
      81. Config Adc = Single , Prescaler = 8 , Reference = Internal
      82. Start Adc
      83. 'Ende Spannung Messen
      84. '=============================================================
      85. Config Watchdog = 1024
      86. '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      87. 'Timer
      88. Const Timer0reload = 193
      89. Config Timer0 = Timer , Prescale = 1024
      90. Load Timer0 , Timer0reload
      91. On Timer0 Timer0_routine
      92. Enable Timer0
      93. Start Timer0
      94. Enable Interrupts
      95. 'Ende Timer
      96. '=============================================================
      97. Declare Function Writekey(byval Var_key As Byte , Byval Var_dot As Byte) As Byte
      98. Do
      99. If Var_sec = 15 Or Var_sec = 30 Or Var_sec = 45 Or Var_sec = 0 Then
      100. For Var_z = 0 To 20
      101. Waitms 1
      102. Var_volt_adc = Getadc(5)
      103. Var_tmp_wert = Var_tmp_wert + Var_volt_adc
      104. Next For
      105. Var_volt_adc = Var_tmp_wert / 20
      106. For Var_z = 0 To 200
      107. Var_ampere_adc = Getadc(4)
      108. Var_tmp_wert = Var_tmp_wert + Var_ampere_adc
      109. Next For
      110. Var_ampere_adc = Var_tmp_wert / 200
      111. Var_volt = Var_volt_adc * Cons_spannung
      112. Var_ampere = Var_ampere_adc * Cons_ampere
      113. Var_watt = Var_volt * Var_ampere
      114. Var_watt_tmp = Var_watt / 240
      115. Var_watt_gesamt = Var_watt_gesamt + Var_watt_tmp
      116. End If
      117. If Var_sec <> Var_old_sec Then
      118. Incr Var_x
      119. Var_old_sec = Var_sec
      120. End If
      121. If Var_x < 31 Then
      122. Var_tmp_wert = Var_watt * 100
      123. Var_digit(4) = Var_tmp_wert / 1000
      124. Var_tmp_wert = Var_tmp_wert Mod 1000
      125. Var_digit(3) = Var_tmp_wert / 100
      126. Var_tmp_wert = Var_tmp_wert Mod 100
      127. Var_digit(2) = Var_tmp_wert / 10
      128. Var_tmp_wert = Var_tmp_wert Mod 10
      129. Var_digit(1) = Var_tmp_wert
      130. Var_dot(1) = 0
      131. Var_dot(2) = 0
      132. Var_dot(3) = 1
      133. Var_dot(4) = 0
      134. Elseif Var_x > 30 Then
      135. Var_tmp_wert = Var_watt_gesamt / 1000
      136. Var_digit(4) = Var_tmp_wert / 1000
      137. Var_tmp_wert = Var_tmp_wert Mod 1000
      138. Var_digit(3) = Var_tmp_wert / 100
      139. Var_tmp_wert = Var_tmp_wert Mod 100
      140. Var_digit(2) = Var_tmp_wert / 10
      141. Var_tmp_wert = Var_tmp_wert Mod 10
      142. Var_digit(1) = Var_tmp_wert
      143. Var_dot(1) = 0
      144. Var_dot(2) = 1
      145. Var_dot(3) = 0
      146. Var_dot(4) = 0
      147. End If
      148. If Var_x = 59 Then
      149. Var_x = 0
      150. Incr Var_sec_day
      151. End If
      152. Incr Var_y
      153. If Var_y = 1 Then
      154. Var_tmp_anzeige = Writekey(222 , 0)
      155. Gnd_digit_1 = 0
      156. Gnd_digit_2 = 1
      157. Gnd_digit_3 = 1
      158. Gnd_digit_4 = 1
      159. Var_tmp_anzeige = Var_digit(4)
      160. Var_tmp_anzeige = Writekey(var_tmp_anzeige , Var_dot(4))
      161. Elseif Var_y = 2 Then
      162. Var_tmp_anzeige = Writekey(222 , 0)
      163. Gnd_digit_1 = 1
      164. Gnd_digit_2 = 0
      165. Gnd_digit_3 = 1
      166. Gnd_digit_4 = 1
      167. Var_tmp_anzeige = Var_digit(3)
      168. Var_tmp_anzeige = Writekey(var_tmp_anzeige , Var_dot(3))
      169. Elseif Var_y = 3 Then
      170. Var_tmp_anzeige = Writekey(222 , 0)
      171. Gnd_digit_1 = 1
      172. Gnd_digit_2 = 1
      173. Gnd_digit_3 = 0
      174. Gnd_digit_4 = 1
      175. Var_tmp_anzeige = Var_digit(2)
      176. Var_tmp_anzeige = Writekey(var_tmp_anzeige , Var_dot(2))
      177. Elseif Var_y = 4 Then
      178. Var_tmp_anzeige = Writekey(222 , 0)
      179. Gnd_digit_1 = 1
      180. Gnd_digit_2 = 1
      181. Gnd_digit_3 = 1
      182. Gnd_digit_4 = 0
      183. Var_tmp_anzeige = Var_digit(1)
      184. Var_tmp_anzeige = Writekey(var_tmp_anzeige , Var_dot(1))
      185. Var_y = 0
      186. End If
      187. If Var_sec_day = 360 Then
      188. Var_sec_day = 0
      189. Var_watt_gesamt_tmp = Var_watt_gesamt_eram
      190. Var_watt_gesamt_tmp = Var_watt_gesamt_tmp + 10
      191. If Var_watt_gesamt > Var_watt_gesamt_tmp Then
      192. Var_watt_gesamt_eram = Var_watt_gesamt
      193. End If
      194. End If
      195. Waitms 2
      196. Reset Watchdog
      197. Loop
      198. '#####################################################
      199. '#####################################################
      200. Function Writekey(var_key As Byte , Var_dot As Byte) As Byte
      201. Local Var_input_ziffer As Byte
      202. Var_input_ziffer = Var_key
      203. If Var_input_ziffer = 0 Then
      204. Seg_a = 1
      205. 'A
      206. Seg_b = 1
      207. 'B
      208. Seg_c = 1
      209. 'C
      210. Seg_d = 1
      211. 'D
      212. Seg_e = 1
      213. 'E
      214. Seg_f = 1
      215. 'F
      216. Seg_g = 0
      217. 'G
      218. Seg_dot = Var_dot
      219. 'punkt
      220. Goto Endeif
      221. Elseif Var_input_ziffer = 1 Then
      222. Seg_a = 0
      223. 'A
      224. Seg_b = 1
      225. 'B
      226. Seg_c = 1
      227. 'C
      228. Seg_d = 0
      229. 'D
      230. Seg_e = 0
      231. 'E
      232. Seg_f = 0
      233. 'F
      234. Seg_g = 0
      235. 'G
      236. Seg_dot = Var_dot
      237. Goto Endeif
      238. Elseif Var_input_ziffer = 2 Then
      239. Seg_a = 1
      240. 'A
      241. Seg_b = 1
      242. 'B
      243. Seg_c = 0
      244. 'C
      245. Seg_d = 1
      246. 'D
      247. Seg_e = 1
      248. 'E
      249. Seg_f = 0
      250. 'F
      251. Seg_g = 1
      252. 'G
      253. Seg_dot = Var_dot
      254. Goto Endeif
      255. Elseif Var_input_ziffer = 3 Then
      256. Seg_a = 1
      257. 'A
      258. Seg_b = 1
      259. 'B
      260. Seg_c = 1
      261. 'C
      262. Seg_d = 1
      263. 'D
      264. Seg_e = 0
      265. 'E
      266. Seg_f = 0
      267. 'F
      268. Seg_g = 1
      269. 'G
      270. Seg_dot = Var_dot
      271. Goto Endeif
      272. Elseif Var_input_ziffer = 4 Then
      273. Seg_a = 0
      274. 'A
      275. Seg_b = 1
      276. 'B
      277. Seg_c = 1
      278. 'C
      279. Seg_d = 0
      280. 'D
      281. Seg_e = 0
      282. 'E
      283. Seg_f = 1
      284. 'F
      285. Seg_g = 1
      286. 'G
      287. Seg_dot = Var_dot
      288. Goto Endeif
      289. Elseif Var_input_ziffer = 5 Then
      290. Seg_a = 1
      291. 'A
      292. Seg_b = 0
      293. 'B
      294. Seg_c = 1
      295. 'C
      296. Seg_d = 1
      297. 'D
      298. Seg_e = 0
      299. 'E
      300. Seg_f = 1
      301. 'F
      302. Seg_g = 1
      303. 'G
      304. Seg_dot = Var_dot
      305. Goto Endeif
      306. Elseif Var_input_ziffer = 6 Then
      307. Seg_a = 1
      308. 'A
      309. Seg_b = 0
      310. 'B
      311. Seg_c = 1
      312. 'C
      313. Seg_d = 1
      314. 'D
      315. Seg_e = 1
      316. 'E
      317. Seg_f = 1
      318. 'F
      319. Seg_g = 1
      320. 'G
      321. Seg_dot = Var_dot
      322. Goto Endeif
      323. Elseif Var_input_ziffer = 7 Then
      324. Seg_a = 1
      325. 'A
      326. Seg_b = 1
      327. 'B
      328. Seg_c = 1
      329. 'C
      330. Seg_d = 0
      331. 'D
      332. Seg_e = 0
      333. 'E
      334. Seg_f = 0
      335. 'F
      336. Seg_g = 0
      337. 'G
      338. Seg_dot = Var_dot
      339. Goto Endeif
      340. Elseif Var_input_ziffer = 8 Then
      341. Seg_a = 1
      342. 'A
      343. Seg_b = 1
      344. 'B
      345. Seg_c = 1
      346. 'C
      347. Seg_d = 1
      348. 'D
      349. Seg_e = 1
      350. 'E
      351. Seg_f = 1
      352. 'F
      353. Seg_g = 1
      354. 'G
      355. Seg_dot = Var_dot
      356. Goto Endeif
      357. Elseif Var_input_ziffer = 9 Then
      358. Seg_a = 1
      359. 'A
      360. Seg_b = 1
      361. 'B
      362. Seg_c = 1
      363. 'C
      364. Seg_d = 1
      365. 'D
      366. Seg_e = 0
      367. 'E
      368. Seg_f = 1
      369. 'F
      370. Seg_g = 1
      371. 'G
      372. Seg_dot = Var_dot
      373. Goto Endeif
      374. Elseif Var_input_ziffer = 222 Then
      375. Seg_a = 0
      376. 'A
      377. Seg_b = 0
      378. 'B
      379. Seg_c = 0
      380. 'C
      381. Seg_d = 0
      382. 'D
      383. Seg_e = 0
      384. 'E
      385. Seg_f = 0
      386. 'F
      387. Seg_g = 0
      388. 'G
      389. Seg_dot = 0
      390. Goto Endeif
      391. End If
      392. Endeif:
      393. Writekey = Var_input_ziffer
      394. End Function
      395. Timer0_routine:
      396. Incr Var_timer0
      397. If Var_timer0 = 5 Then
      398. Var_timer0 = 0
      399. Incr Var_sec
      400. End If
      401. If Var_sec = 60 Then Var_sec = 0
      402. Load Timer0 , Timer0reload
      403. Return
      404. End 'end program
      Alles anzeigen
    • Hallo Alex

      Alex_T schrieb:

      Kann aus meiner sicht hier nur am tauschen des Chips liegen AtMega48(Funkuhr) gegen AtMega8.
      Nein das liegt nicht am Chip das liegt an
      Var_tmp_anzeige = Writekey(222 , 0) ("löschen" Segmentanzeige)
      Da das immer ausgeführt wird egal wie Groß var_y ist führt das zum Flackern.
      (Segmentanzeige "löschen", neu schreiben, "löschen" ….)

      Das mit Funktion (schau mal in die Hilfe unter Sub) und goto endif solltest du vielleicht noch einmal überdenken.


      Gruß
      businski
    • Es wäre auch besser für die Segmente einen kompletten Port zu verwenden (PORTD zum Beispiel) und für die einzelnen Stellen auch wieder einen eigenen Port.
      Somit kannst du die Segmente und Stellen besser ausgeben.

      Beispiel

      BASCOM-Quellcode

      1. Dim Segmente As Byte
      2. 'ausgehend von folgender Anschlussbelegung
      3. ' a, b, c, d, e, f, g, dp
      4. 'D7,D6,D5,D4,D3,D2,D1,D0
      5. Segmente = &B11111100
      6. PORTD = Segmente
      7. Reset PORTB.0 '1. Stelle
      8. Waitms 50
      9. Set PORTB.0
      10. Segmente = &B01100000
      11. PORTD = Segmente
      12. Reset PORTB.2 '2. Stelle
      13. Waitms 50
      14. Set PORTB.1
      15. Segmente = &B11011010
      16. PORTD = Segmente
      17. Reset PORTB.2 '3. Stelle
      18. Waitms 50
      19. Set PORTB.2
      20. Segmente = &B11110010
      21. PORTD = Segmente
      22. Reset PORTB.3 '4. Stelle
      23. Waitms 50
      24. Set PORTB.3
      25. usw...
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • businski schrieb:

      Nein das liegt nicht am Chip das liegt anVar_tmp_anzeige = Writekey(222 , 0) ("löschen" Segmentanzeige)
      Da das immer ausgeführt wird egal wie Groß var_y ist führt das zum Flackern.
      (Segmentanzeige "löschen", neu schreiben, "löschen" ….)

      Das mit Funktion (schau mal in die Hilfe unter Sub) und goto endif solltest du vielleicht noch einmal überdenken.
      Hallo,

      das hab ich Experimentel ermittelt.
      Ohne diese Codezeile kam es bei anderen Projekten dazu das man am Display nichts erkennen konnte.
      Ich habe einen verzicht bereits ausprobiert das führt dazu das die aktiven und nicht aktiven Stellen gleichzeitig leuchten. Wobei es einen unterschied gibt. Die ausgewählten Stellen der 7 Segment Anzeige leuchten heller als die nicht ausgewählten Stellen. Dennoch ist das ding so nicht brauchbar.

      Experimtel ermittelt liegt es schon am Chip beim AtMega48 hab ich den selben Code übertragen und es kam zu keinem geflackere - während der Mega8 diesen Fehler zeigt. Hab dafür meinen Chip für meine Funkuhr kurzzeitig ausgebaut und dafür verwertet.

      Grüße
      Alex
    • Michael schrieb:

      Alex_T schrieb:

      Var_ampere_adc = Var_tmp_wert / 200
      Hier bekommst du ein fehlerhaftes Ergebnis, wenn Var_tmp_wert > 65535 ist.

      Alex_T schrieb:

      Var_tmp_wert = Var_watt * 100
      Auch huer, wenn Var_watt > 655 ist, dann gibt es ein Problem mit der Variablengröße bzw. Überlauf.
      var_tmp_wert = dword

      "Dword(fout bytes). Dwords are stored as unsigned 32-bit unsigned numbers ranging in value from 0 to 4294967295" Bascom hilfe.

      Nur bei dem Watt-Gesamt Variablen (Code) hab ich Probleme.

      Quellcode

      1. 'Hier die Codestelle - wobei es beim Orginalcode geteilt durch 100 waren nicht durch 1000
      2. 'wollte das nur mal austesten.
      3. Elseif Var_x > 30 Then
      4. Var_tmp_wert = Var_watt_gesamt / 1000
      5. Var_digit(4) = Var_tmp_wert / 1000
      6. Var_tmp_wert = Var_tmp_wert Mod 1000
      7. Var_digit(3) = Var_tmp_wert / 100
      8. Var_tmp_wert = Var_tmp_wert Mod 100
      9. Var_digit(2) = Var_tmp_wert / 10
      10. Var_tmp_wert = Var_tmp_wert Mod 10
      11. Var_digit(1) = Var_tmp_wert
      12. Var_dot(1) = 0
      13. Var_dot(2) = 1
      14. Var_dot(3) = 0
      15. Var_dot(4) = 0
      16. End If
      17. 'Ende Code für Anzeige
      18. 'Anfang Code für das berechnen von Watt-Gesamt
      19. Var_watt_tmp = Var_watt / 240
      20. Var_watt_gesamt = Var_watt_gesamt + Var_watt_tmp
      Alles anzeigen



      Grüße
      Alex
    • djmsc schrieb:

      Es wäre auch besser für die Segmente einen kompletten Port zu verwenden (PORTD zum Beispiel) und für die einzelnen Stellen auch wieder einen eigenen Port.
      Somit kannst du die Segmente und Stellen besser ausgeben.

      Beispiel
      Ja, dachte ich auch schon dran.
      Auch daran die Werte direkt in einer Variable zu speichern und auf die Funktion zu sch******.
      Passt nur nicht.
      Wird dann auf meiner Platine zu unübersichtlich.
      Außerdem erlaubt mir die Funktion die Daten auf belibige Ports zu schicken.

      Grüße
      Alex
    • Michael schrieb:

      Oh, Mann, simulier es doch einfach, wenn du mir nicht glaubst.a_45_132ca9f5
      Ich glaub dir schon.
      Du hast mir schon sehr oft extrem gute Ratschläge gegeben.
      Was ist dann mein Denkfehler?

      Dword müsste doch Werte bis 4294967295 aufnehmen können.
      200 * 1024 = 204800

      Bei den anderen Variablen var_ampere_adc und var_volt_adc hab es keine Probleme hab mir die Werte im Display ausgeben lassen und die Werte stimmten.

      Ich teste es lieber direkt an der Platine mit 10w verbraucher.

      Grüße
      Alex
    • Alex_T schrieb:

      Dword müsste doch Werte bis 4294967295 aufnehmen können.
      200 * 1024 = 204800
      Var_ampere_adc = Var_tmp_wert / 200

      Hier ist die erste Variable ein Word und die rechts neben dem = ein Dword.
      Die Rechnung wird prinzipiell im Ergebnis ausgeführt.
      Der Compiler lädt sich den Wert in die Ergebnisvariable, die läuft über, aus die Maus.

      Alex_T schrieb:

      Ich teste es lieber direkt an der Platine mit 10w verbraucher.
      Ja, mach ein Foto, 10 Watt können schön rauchen :D

      Alex_T schrieb:

      Experimtel ermittelt liegt es schon am Chip beim AtMega48 hab ich den selben Code übertragen und es kam zu keinem geflackere - während der Mega8 diesen Fehler zeigt.
      Du hast die Taktfrequenz geprüft?
    • Michael schrieb:

      Var_ampere_adc = Var_tmp_wert / 200
      Hier ist die erste Variable ein Word und die rechts neben dem = ein Dword.
      Die Rechnung wird prinzipiell im Ergebnis ausgeführt.
      Der Compiler lädt sich den Wert in die Ergebnisvariable, die läuft über, aus die Maus.
      Im grunde klar wenn der Wert 1024 übersteigen könnte.
      Nur ich lade ja max. 1024 ; 200 mal in die Variable var_tmp_wert
      Dann teile ich den Wert durch 200.
      Der Wert müsste jetzt wieder kleiner als 1024 sein.
      Oder meinst du das es daran liegt das esn eine Gleitkommazahl werden könnte?

      Wenn jetzt die Variablengröße den Wert im Ram festlegt - verstehe ich das Problem nur wenn es nicht so ist bin ich wieder am anfang.

      Hab ne Idee: ich weiße den Wert einfach var_tmp_wert zu.

      Quellcode

      1. For Var_z = 0 To 200
      2. Var_ampere_adc = Getadc(4)
      3. Var_tmp_wert = Var_tmp_wert + Var_ampere_adc
      4. Next For
      5. Var_ampere_adc = Var_tmp_wert / 200
      Es gibt noch ein Problem: dieser Codeteile erzeugt keine Fehler.
      Ich würde mal annehmen das der Angezeigte Ampere-Wert falsch wäre oder der Chip abstürzt.
      Nur keines von beiden passiert. Der Chip gibt sogar den korrekten Wert aus.
      Habs gerade getestet.

      Grüße
      Alex
    • Alex_T schrieb:

      Nur ich lade ja max. 1024 ; 200 mal in die Variable var_tmp_wert
      Dann teile ich den Wert durch 200.
      Der Wert müsste jetzt wieder kleiner als 1024 sein.
      1024*200 = 204800 -> passt nicht in ein Word

      Alex_T schrieb:

      Oder meinst du das es daran liegt das esn eine Gleitkommazahl werden könnte?
      speilt hier keine Rolle

      Alex_T schrieb:

      Var_ampere_adc = Var_tmp_wert / 200
      Zur Erinnerung, links ist ein Word, rechts neben dem Komma ein Dword.

      Alex_T schrieb:

      Der Chip gibt sogar den korrekten Wert aus.
      so lange, wie dein Messergebnis im Schnitt <= 327 ist, also im unteren Drittel des ADC (max. 1,4A)
    • Grundsätzlich: Du hast recht!

      Hab es gerade simuliert.

      Liegt IMHO nicht an meinen verständnis von Mathe.

      Noch eine Frage: liegt es daran das die Speichermenge, im Gedächtnis, die Bascom für eine Variable reserviert von der definition der Variable abhängt?

      Anders kann ich mir nicht erklären wieso dieser Code funzt




      Quellcode

      1. Dim Var_tmp_wert As Dword
      2. Dim Var_ampere_adc As Word
      3. Var_tmp_wert = 1023 * 200
      4. Var_tmp_wert = Var_tmp_wert / 200
      5. Var_ampere_adc = Var_tmp_wert
      6. Print Var_ampere_adc

      und dieser hier nicht




      Quellcode

      1. Dim Var_tmp_wert As Dword
      2. Dim Var_ampere_adc As Word
      3. Var_tmp_wert = 1023 * 200
      4. Var_ampere_adc = Var_tmp_wert / 200
      5. Print Var_ampere_adc
      Grüße und herzlichsten Dank für deine Hilfe!

      Hab die ganze Zeit gedacht ich könnte nicht mehr rechnen... ;)
      An das naheliegenste hab ich nicht einmal gedacht.

      Grüße
      Alex
    • Alex_T schrieb:

      Noch eine Frage: liegt es daran das die Speichermenge, im Gedächtnis, die Bascom für eine Variable reserviert von der definition der Variable abhängt?
      Du hast es erkannt, meinen Glückwunsch!
      Du hast eine wichtige Stufe auf der Leiter hoch zum Programmiererolymp genommen.
      An deinem Codebeispiel sehe ich, dass du es auch verstanden hast.
      Weiter so :thumbsup:
    • Michael schrieb:

      Du hast es erkannt, meinen Glückwunsch!Du hast eine wichtige Stufe auf der Leiter hoch zum Programmiererolymp genommen.
      An deinem Codebeispiel sehe ich, dass du es auch verstanden hast.
      Weiter so :thumbsup:
      Danke! Der Programmiererolymp muss noch ein paar Jahrhunderte auf mich warten.
      Halt mir mal einen Platz dort frei - ich möchte einen Fenstplatz ;-D
      Komme so etwa 2219.