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!

    • Leider hilft der Simulator auch wenig : Die DIDR's sind Null -OK, Das ADCSRB wird nicht beschrieben vor jeder Messung auf Null gesetzt a_67_e210de67 daher ließt er immer nur die ersten 7. Aber man kann auch nur 8 Werte vorgeben - Also ist er nicht dafür gebaut oder die Dat ist im Alpha-Stadium.

      Hat schon mal jemand einen Chip mit mehr als 8 ADC's im Simulator gehabt ??
    • Ralf schrieb:

      Ja unten, der ganz rechts.Hab die Leitung zum Chip durchgemessen.
      Und wie schon geschrieben, Getatc(39), was funktionieren sollte,
      liest den Eingang 7 ein.
      Schreib und poste doch mal einen einfachen code, der zB den Wert vom adc(15) printet. Ich spiel den dann auf meinen mega und probier' aus.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • ich hab keinen Chip hier Das sollte gehen:

      Quellcode

      1. $regfile = "m2560def.dat"
      2. $crystal = 160000
      3. $hwstack = 128
      4. $swstack = 128
      5. $framesize = 64
      6. Config Portb.7 = Output
      7. Config Com1 = 2400 , Parity = None , Stopbits = 1 , Databits = 8
      8. Dim Zyklus As Dword
      9. Dim Ana As Word
      10. Dim Ah As Byte At Ana + 1 Overlay
      11. Dim Al As Byte At Ana Overlay
      12. Dim A As Byte
      13. Dim B As Byte
      14. Dim Dummy As String * 10
      15. 'Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56
      16. 'Start Adc
      17. Do
      18. For A = 0 To 7
      19. Ana = Getadc(a)
      20. Waitms 1
      21. Print A;
      22. Print "=";
      23. Print Ana;
      24. Print ", ";
      25. Next
      26. Print
      27. Adcsrb = 8
      28. For A = 0 To 7 '8-15
      29. Admux = $40 Or A
      30. Adcsra = $c6
      31. B = A + 8
      32. Waitms 2
      33. Al = Adcl
      34. Ah = Adch
      35. Print B;
      36. Print "=";
      37. Print Ana;
      38. Print ", ";
      39. Next
      40. Print
      41. Loop
      42. End
      Alles anzeigen
      PS Der Crystal und die Baud müssen angepasst werden.
    • Quellcode

      1. $regfile = "m2560def.dat" ' specify the used micro
      2. $crystal = 16000000 ' used crystal frequency
      3. $baud = 19200
      4. $hwstack = 64 ' default use 32 for the hardware stack
      5. $swstack = 20 ' default use 10 for the SW stack
      6. $framesize = 80 ' default use 40 for the frame space
      7. Config Lcdpin = Pin , Db4 = Portg.5 , Db5 = Porte.3 , Db6 = Porth.3 , Db7 = Porth.4 , E = Porth.6 , Rs = Porth.5
      8. Config Lcd = 16 * 2 'configure lcd screen
      9. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      10. Start Adc
      11. Dim Spannung As Integer
      12. Do
      13. Spannung = Getadc(39)
      14. Locate 2 , 12 : Lcd " "
      15. Locate 2 , 12 : Lcd Spannung
      16. Wait 6
      17. Waitms 300
      18. Spannung = Getadc(39)
      19. Locate 2 , 12 : Lcd " "
      20. Locate 2 , 12 : Lcd Spannung
      21. Wait 4
      22. Loop
      23. End
      Alles anzeigen
      Ich hab mal alles rausgeschmissen.

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

    • BASCOM-Quellcode

      1. $regfile = "m2560def.dat"
      2. Const _crystal = 16000000
      3. $crystal = _crystal
      4. '------------------------------[ ADC ]---------------------------------------
      5. 'Config Adc = Single , Prescaler = Auto ', Reference = Avcc 'Config the ADC
      6. 'Start Adc
      7. Const Max_count = 8
      8. 'Declare Sub Adc_lesen(byval Adc_channel As Byte)
      9. Dim Adc_wert(max_count) As Word
      10. Enable Interrupts
      11. Dim Bytadmux_0 As Byte , Bytadmux_3 As Byte , Adc_aktiv As Byte
      12. Dim Bytadcsra As Byte , Admux_switch As Bit , Bytadchannel As Byte , Loop_1 As Byte
      13. Dim Loop_count As Byte
      14. 'Dim Wrdadc As Word
      15. Dim Bytadclo As Byte 'At Wrdadc Overlay
      16. Dim Bytadchi As Byte 'At Wrdadc + 1 Overlay
      17. Dim Wrdadc As Word At Bytadclo Overlay
      18. Dim I_adc As Word , Countadc As byte
      19. Dim Adc_funktion As Byte
      20. Adc_funktion.0 = 1
      21. '--------------------------------------------
      22. Bytadmux_3 = &B01001000
      23. Adcsrb = Bytadmux_3
      24. Bytadmux_0 = &B00100000
      25. Admux = Bytadmux_0
      26. Bytadcsra = &B00100111
      27. Adcsra = Bytadcsra 'Enable ADC, div. factor 128
      28. Set Acsr.acd 'Switch off the power to the Analog Comparator
      29. Reset Acsr.acbg 'Disable Analog Comparator Bandgap Select
      30. '-----
      31. On Adc Adc_isr 'Go to interrupt service routine
      32. Sreg.7 = 1 'Enable interrupts
      33. Reset Adcsra.adsc 'Stop ADC
      34. Reset Adcsra.aden 'Switch off ADC
      35. Admux_switch = 0
      36. Bytadchannel = 1 'First ADC channel
      37. Loop_count = 0
      38. Dim Adc_channel_ As Byte
      39. '-------------------
      40. Macro Analog_lesen
      41. Adc_funktion.1 = 0
      42. Adcsrb = Bytadmux_3 Or Adc_channel_
      43. Admux = Bytadmux_0 Or Adc_channel_ 'Set next MUX channel
      44. Set Adcsra.aden 'Switch on ADC
      45. Set Adcsra.adsc 'Start ADC again
      46. Set Adcsra.adie 'Interrupt aktivieren
      47. Loop_count = Adc_channel_ + 1 'Array Index
      48. Countadc = 0 oder Config Base = 0 alle bei 0 beginnen 'arrays start
      49. While Adc_funktion.1 = 0 'warten bis Bit auf high geht, dann ist ADC Wandlung fertig.
      50. Incr Countadc
      51. If Countadc = 255 Then Exit While
      52. Wend
      53. Shift Bytadclo , Right , 6
      54. Adc_wert(loop_count) = Makeint(bytadchi , Bytadclo)
      55. Adc_funktion.1 = 0
      56. End Macro
      57. '-----------------
      58. '----------------------------------------------------------------------------
      59. Do
      60. Adc_channel_ = 0 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      61. Adc_channel_ = 1 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      62. Adc_channel_ = 2 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      63. Adc_channel_ = 3 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      64. Adc_channel_ = 4 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      65. Adc_channel_ = 5 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      66. Adc_channel_ = 6 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      67. Adc_channel_ = 7 : Analog_lesen 'Channel=0 ergibt ADC_Wert=1 im Array
      68. Loop
      Alles anzeigen
      Gruß Holger
      link zu mir..
      forum.auto-steuerung.de
      ___
    • Ich weiß nicht, was ihr habt
      mega2560-adc.PNG
      hier seht ihr meinen Testcode und das Ergebnis im Terminal. Am adc8 hängt ein Poti zwischen 5V und gnd.
      Geht doch alles a_58_b54cfdb4
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Pluto25 schrieb:

      Und wo ist die Adc_isr ?
      Das funktioniert unter realen Bedingungen? Zeile 53 scheint mir ein Chaos zu verursachen.
      Sorry vergessen.

      BASCOM-Quellcode

      1. '--------------------------------------------------------------------------------------
      2. Adc_isr:
      3. Bytadclo = Adcl 'Read ADCL first...
      4. Bytadchi = Adch '... then ADCH
      5. Reset Adcsra.adsc 'Stop ADC
      6. Reset Adcsra.aden 'Switch off ADC
      7. Reset Adcsra.adie 'Interrupt deaktivieren
      8. Set Adc_funktion.1 'Conversion complete
      9. Return
      10. '--------------------------------------------------------------------------------------
      Alles anzeigen
      Gruß Holger
      link zu mir..
      forum.auto-steuerung.de
      ___