Attiny441 mit differential ADC benutzen

    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!

    • Attiny441 mit differential ADC benutzen

      Ich habe es gemacht mit ein ATtiny861 und es functioniert.
      du must in die registern schreiben und lezen um die wert zu kriegen.
      Ich muste en ACS712 T auslezen, ein strom sensor, er gibt bij 0A 2,5V, bei positiver strom steigt die spannung mit 185mv/A und bij negativer strom verringert die wert mit 185 mv/A.
      ich leze die wert 64x und sumiere sie, dan schiebe ich die letzte 6 bits out .




      mein sub

      Sub Read_adc_stroom()
      Local Adc_low As Byte , Adc_high As Byte
      adc_plusT =0

      for x= 1 to 64
      Adcsra = &B10100111
      Adcsrb = &B00000000
      Admux = &B10001100 'READADC DIFF ADC0-ADC1 1x
      Adcsra.adsc = 1 'SPANNING OP acs712 >2,5 V
      Bitwait Adcsra.adsc , Set
      Adcsra.adsc = 0
      Adc_low = Adcl
      Adc_high = Adch
      Adc_plus = Adc_high * 256
      Adc_plus = Adc_plus + Adc_low
      adc_plust = adc_plusT + adc_plus
      next x
      shift adc_plusT,Right,6

      Waitms 50
      adc_mint = 0
      for x = 1 to 64
      Adcsra = &B10100111
      Adcsrb = &B00001000
      Admux = &B10100011 'READADC DIFF ADC1-ADC0 1X
      Adcsra.adsc = 1 'SPANNING OP ACS712 <2.5V
      Bitwait Adcsra.adsc , Set
      Adcsra.adsc = 0
      Adc_low = Adcl
      Adc_high = Adch
      Adc_min = Adc_high * 256
      Adc_min = Adc_min + Adc_low
      adc_mint = adc_mint +adc_min
      next x
      shift adc_mint,right,6
      end sub
    • Mit Adc_plus = Getadc(12) geht es nicht? ;(
      Bei jedem Programm steht "Warnigs: ADCD not used" Vielleicht geht Adc_plus = ADCD (Geht vermutlich auch nicht beim Nutzen von Registern)
      Diese Zeilen:
      Adc_plus = Adc_high * 256
      Adc_plus = Adc_plus + Adc_low
      und die entsprechende Zeit/Fash kannst Du einsparen mit
      Dim Adc_low as Byte at Adc_plus overlay
      Dim Adc_high as Byte at Adc_plus+1 Overlay

      Bei Differenzieller Messung können negative Werte auftreten (Integer). Die darf nicht per Shift dividiert werden (wenn sie negativ ist) und kann mit 64 überlaufen. Besser nur 32 und adcmint = adcmint/32