ATMega2560 ADC Kanäle 8-15 auslesen?

    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!

    • Trexis5 schrieb:

      Reset Adcsra.adsc 'Stop ADC
      Ist das klug? Da muß die "arme Sau" wenige Nanosekunden nachdem es Strom bekommt schon losrennen. a_448_c66dc889
      Ich weiß das er eine Messung direkt nach dem Vref umschalten problemlos hinbekommt bei 1Mhz trotz Warnung im Datenblatt. Aber in dem Fall muß er 16 mal schneller aus dem Schlaf heraus starten.
      Ergibt dort eine zweite Messung gleich darauf (ohne Abschaltung) das gleiche Ergebnis?

      Trexis5 schrieb:

      Im Simulator geht das.
      Welche Bascom Version? Bei mir (Vers 2.0.8.1.001) sind nur 8 Adc's voreinstellbar
    • Noch ein Testprogramm

      BASCOM-Quellcode

      1. '*******************************************************************************
      2. 'Display Driver IC HX8357B or C 480x320 Pixel
      3. 'Modus 16Bit
      4. 'HVGA 480x320 3,6
      5. 'Autor: Hkipnik@aol.com
      6. 'Copyright by Hkipnik@aol.com
      7. '*******************************************************************************
      8. '
      9. ' Testprogramm Diagramm 16 Kanal
      10. ' 3.1.2018
      11. '
      12. $regfile = "M2560def.dat"
      13. $crystal = 16000000
      14. $hwstack = 250
      15. $swstack = 250
      16. $framesize = 250
      17. Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
      18. ' Led auf Arduino Board
      19. Config Portb.7 = Output
      20. '*******************************************************************************
      21. 'Display Mode
      22. '*******************************************************************************
      23. Const Sd_card = 0 'with SD Card = 1 -- without SD Card = 0
      24. Const Lcd_mode = 3 '1=Portrait 2=Portrait 180° 3=landscape 4=landscape 180°
      25. Const Lcd_driver = 1 '1=HX8357B 2=HX8357C
      26. '*******************************************************************************
      27. #if Sd_card = 1
      28. $include "Avr-Dos\Config_MMCSD_HC.bas"
      29. $include "Avr-Dos\Config_AVR-DOS.bas"
      30. #endif
      31. '*******************************************************************************
      32. $include "TFTDriver\HX8357_declarations.inc"
      33. '*******************************************************************************
      34. 'Init the Display
      35. '*******************************************************************************
      36. Call Lcd_init()
      37. Call Lcd_clear(black)
      38. '*******************************************************************************
      39. Dim x1 as word
      40. Dim y1(16) as word
      41. Dim x2 as word
      42. Dim y2(16) as word
      43. Dim A_Kanal as byte
      44. Dim Analogwert as word
      45. Dim Zyklus as word
      46. Dim Schleife as word
      47. Dim Farbe(16) as word
      48. Dim Offset as word
      49. Dim Dummy as String * 10
      50. Dim Temp_str As String * 20
      51. #If 0
      52. Farbe(1) = Brown
      53. Farbe(2) = Azure
      54. Farbe(3) = Purple
      55. Farbe(4) = Red
      56. Farbe(5) = Violet
      57. Farbe(6) = Yellow
      58. Farbe(7) = Silver
      59. Farbe(8) = Gray
      60. Farbe(9) = Green
      61. Farbe(10) = Orange
      62. Farbe(11) = Navy
      63. Farbe(12) = Coral
      64. Farbe(13) = Steelblue
      65. Farbe(14) = Olive
      66. Farbe(15) = Palegreen
      67. Farbe(16) = White
      68. #endif
      69. For Schleife = 1 to 16
      70. farbe(schleife) = schleife * &H88
      71. next
      72. Declare Function Analog(byval Kanal As Byte , Byval Anzahl As Word ) As Word
      73. ' Analog
      74. Config Adc = free , Prescaler = Auto , Reference = Internal_2.56
      75. Start Adc
      76. '*******************************************************************************
      77. ' SD Card Info
      78. '*******************************************************************************
      79. #if Sd_card = 1
      80. Call Init_sd_card() 'Init SD Card
      81. Temp_str = "SD Card= " + Str(sd_ok)
      82. Call Lcd_text(temp_str , 1 , 1 , 2 , Yellow , Black , 1)
      83. ' 1 OK
      84. ' 0 Error
      85. Temp_str = "SD Card Typ= " + Str(mmcsd_cardtype)
      86. Call Lcd_text(temp_str , 1 , 20 , 2 , Yellow , Black , 1)
      87. ' 0 can't init the Card
      88. ' 1 MMC
      89. ' 2 SDSC Spec. 1.x
      90. ' 4 SDSC Spec. 2.0 or later
      91. ' 12 SDHC Spec. 2.0 or later
      92. Wait 2
      93. Call Lcd_clear(black)
      94. #endif
      95. #if Sd_card = 1
      96. ' Dateikopf schreiben
      97. If SD_OK = 1 then
      98. Open "Messdat.txt" For Append As #2
      99. Print #2 , "Messung K01 K02 K03 K04 K05 K06 K07 K08 K09 K10 K11 K12 K13 K14 K15 K16 "
      100. Close #2
      101. End If
      102. #endif
      103. Do
      104. '*******************************************************************************
      105. ' Display Landscape
      106. '*******************************************************************************
      107. #if Lcd_mode = 3 Or Lcd_mode = 4
      108. Call Lcd_clear(black)
      109. Call Lcd_text( " 16 Kanal Diagramm " , 10 , 10 , 11 , Yellow , black , 1)
      110. #if Sd_card = 1
      111. if SD_OK = 1 then
      112. Call Lcd_text( "SD OK" , 400 , 10 , 11 , Yellow , black , 1)
      113. end if
      114. #endif
      115. Wait 1
      116. Call Lcd_clear(black)
      117. For Schleife = 1 to 16
      118. Offset = Schleife - 1
      119. Offset = offset * 20
      120. Call Lcd_text( "Kanal : " + Str(Schleife) , 1 , offset , 13 , White , black , 1)
      121. Next
      122. For Schleife = 1 to 16
      123. y1(Schleife) = Analog(Schleife -1 , 20) / 52
      124. offset = Schleife - 1
      125. Offset = offset * 20
      126. y1(Schleife) = y1(Schleife) + offset
      127. y2(Schleife) = y1(Schleife)
      128. Next
      129. Do
      130. For x1 = 79 to 479
      131. x2 = x1
      132. Call Lcd_line(X1 , 0 , X2 , 319 , 1 , black)
      133. For Schleife = 1 to 16
      134. y1(Schleife) = Analog(Schleife -1 , 20) / 52
      135. offset = Schleife - 1
      136. Offset = offset * 20
      137. y1(Schleife) = y1(Schleife) + offset
      138. Call Lcd_line(X1 , Y1(Schleife) , X2 , Y2(Schleife) , 1 , Farbe(Schleife))
      139. y2(Schleife) = y1(Schleife)
      140. Next
      141. #if Sd_card = 1
      142. If SD_OK = 1 then
      143. Open "Messdat.txt" For Append As #2
      144. Dummy = Str(zyklus)
      145. Dummy = Format(dummy , "000000")
      146. Print #2 , Dummy ; " " ;
      147. For A_kanal = 0 To 15
      148. Analogwert = Analog(a_kanal , 1000 )
      149. Dummy = Str(analogwert)
      150. Dummy = Format(dummy , " 0000")
      151. Print #2 , Dummy ;
      152. Next
      153. Print #2 , ""
      154. Close #2
      155. Call Lcd_text(Str(zyklus) , 400 , 300 , 11 , Yellow , black , 1)
      156. Incr Zyklus
      157. End if
      158. #endif
      159. next
      160. Loop
      161. '*******************************************************************************
      162. #endif
      163. Loop
      164. End
      165. '*******************************************************************************
      166. Function Analog(byval kanal as byte , byval Anzahl as word)
      167. Local Xschleife As Word
      168. Local Xanalogmesswert As Word
      169. Local Xanalogmesswert_summe As Long
      170. Local Xanalog_mittel As Long
      171. If Anzahl = 0 Then Anzahl = 1
      172. Xanalogmesswert_summe = 0
      173. ' Anpassung für Atmega 2560
      174. ' AD Kanal 8-15
      175. If Kanal > 7 Then
      176. Kanal = Kanal + 24
      177. End If
      178. For Xschleife = 1 To Anzahl
      179. Xanalogmesswert = Getadc(kanal)
      180. Xanalogmesswert_summe = Xanalogmesswert_summe + Xanalogmesswert
      181. Next
      182. Xanalog_mittel = Xanalogmesswert_summe / Anzahl
      183. Xanalogmesswert = Xanalog_mittel
      184. Analog = Xanalogmesswert
      185. End Function
      186. #if Sd_card = 1
      187. $include "Avr-Dos\SD_card_init.inc"
      188. #endif
      189. $include "TFTDriver\HX8357_functions.inc"
      190. $include "Font\Arial11x14.font"
      191. $include "Font\Bc12x24.font"
      192. $include "Font\Crn15x16.font"
      193. $include "Font\Crn20X24.font"
      194. $include "Font\Digital11x16.font"
      195. $include "Font\Digital14x24.font"
      196. $include "Font\Digital19x32.font"
      197. $include "Font\Digital20x32.font"
      198. $include "Font\Droidsans16x24.font"
      199. $include "Font\font25x32.font"
      200. $include "Font\font12x16.font"
      201. $include "Font\font8x8.font"
      202. $include "Font\My6_8.font"
      203. $include "Font\My12_16.font"
      Alles anzeigen
    • Insanity schrieb:

      Noch ein Testprogramm
      noch abgespeckter hab' ich's doch hier ATMega2560 ADC Kanäle 8-15 auslesen? gemacht. Ist im Prinzip das gleiche, ab Kanal 7 gibt es einen Sprung in der Nummerierung, der offset ist 24.
      Alles geht prima, auch die bandgap lässt sich messen. Ich hab' ein sainsmart Arduinomegaboard.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Bitte steinigt mich nicht, es läuft jetzt!

      Meine Programmversion war die 2.0.7.9, ich habe jetzt ein Update auf die neue Version
      gemachtund es geht.
      Habe ewig die Zugangsdaten gesucht und dann einen uralten rechner aufgestellt,
      wo sie gespeichert waren.
      Tut mit leid um die Zeit, die ich euch geklaut habe. ;(

      Vielen Dank für eure Unterstützung!

      Gruß Ralf
    • @Ralf warum soll dir was leid tun? Die hier mit an Lösungen eines Problems mitmachen, haben die Zeit (die machen's ja freiwillig). Die reizt es auch die Lösung zu finden. Es kam halt (noch) keiner drauf, dass es an einer alten Version lag. Jetzt sind die Teilnehmer wieder um eine Erfahrung reicher. So muss man nicht mühsam selber Fehler machen, um was zu lernen :D . Ich persönlich finde es immer interessant, weil man sich mit dem Datenblatt beschäftigt und so immer auf neue Seiten kommt, die man sonst nicht so intensiv lesen würde.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------