Hy Leude,

ich bin grad frisch in die AVR Geschichte eingestiegen weil ich etwas versuchen wollte. Da ich weder vom Hardwareaufbau noch von der Software so richtig Ahnung habe hoffe ich auf eure Hilfe.
Ich besitze ein Lernboard von Amazon, welches einen ATmega88 beherbergt.
Aufgabenstellung

Board wird von Netzteil mit 5V betrieben.
Am AD Eingang ADC0 liegt eine Spannung an, zwischen 0-5V.
Diese Spannung soll gemessen und bearbeitet wieder ausgegen werden, d.h. wenn z.B. 2,4V anliegen soll der ATmega 2,2V ausgeben über die Timer Funktion am Ausgang PB1 oder PB2.
Wichtig hierbei der Controller muss sofort aus Spannungsänderungen an ADC0 reagieren.

Hier mein Programm bis jetzt.
Code:
$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim Zaehler As Long
Dim Kurve As Byte
Dim Rawinp As Word
Dim Rawout1 As Word
Dim Converter As Integer
Dim Calc As Single
Dim _step As Single
Config Pinb.1 = Output
Config Pinb.2 = Output
Zaehler = 0

Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Enable Timer1
Enable Interrupts

Do
   Rawinp = Getadc(0)
   Gosub _kurve_3
   Pwm1a = Rawout1
   Pwm1b = Rawout1
   Incr Zaehler
   If Zaehler = 10000 Then
      Print "inp:" ; Rawinp ; ":out:" ; Rawout1
      Zaehler = 0
   End If
Loop
End

_kurve_3:
   Select Case Rawinp
      Case Is >= 881
         Rawout1 = 880

      Case 717 To 880
         Calc = 880 - 717
         Calc = 31 / Calc
         _step = Rawinp - 717
         _step = _step * Calc
         _step = Round(_step)
         Converter = _step - 31
         Rawout1 = Rawinp + Converter

      Case 635 To 716
         Calc = 716 - 635
         Calc = 10 / Calc
         _step = Rawinp - 635
         _step = _step * Calc
         _step = Round(_step)
         Converter = _step - 41
         Rawout1 = Rawinp + Converter

      Case 574 To 634
         Calc = 634 - 573
         Calc = 10 / Calc
         _step = Rawinp - 573
         _step = _step * Calc
         _step = Round(_step)
         Converter = _step - 51
         Rawout1 = Rawinp + Converter

      Case 513 To 573
         Calc = 573 - 513
         Calc = 10 / Calc
         _step = Rawinp - 513
         _step = _step * Calc
         _step = Round(_step)
         Converter = _step - 61
         Rawout1 = Rawinp + Converter

      Case 451 To 512
         Calc = 512 - 451
         Calc = 10 / Calc
         _step = Rawinp - 451
         _step = _step * Calc
         _step = Round(_step)
         Converter = 0 - 51
         Converter = Converter - _step
         Rawout1 = Rawinp + Converter

      Case 400 To 450
         Calc = 450 - 400
         Calc = 10 / Calc
         _step = Rawinp - 400
         _step = _step * Calc
         _step = Round(_step)
         Converter = 0 - 41
         Converter = Converter - _step
         Rawout1 = Rawinp + Converter

      Case 349 To 399
         Calc = 399 - 349
         Calc = 18 / Calc
         _step = Rawinp - 349
         _step = _step * Calc
         _step = Round(_step)
         Converter = 0 - 23
         Converter = Converter - _step
         Rawout1 = Rawinp + Converter

      Case 287 To 348
         Calc = 348 - 287
         Calc = 10 / Calc
         _step = Rawinp - 287
         _step = _step * Calc
         _step = Round(_step)
         Converter = 0 - 10
         Converter = Converter - _step
         Rawout1 = Rawinp + Converter

      Case 185 To 286
         Calc = 286 - 185
         Calc = 10 / Calc
         _step = Rawinp - 185
         _step = _step * Calc
         _step = Round(_step)
         Converter = 0
         Converter = Converter - _step
         Rawout1 = Rawinp + Converter

      Case Is <= 184
         Rawout1 = Rawinp
   End Select
Return
Probleme:
Spannugnssignal wird über ein regelbares Netzteil simuliert (ohne Masseanschluß wird immer max. Wert ausgegeben).
Starke Schwankungen, mit diesem Controller hab ich nur 1024 verschiedene Möglichkeiten aber da gibt es Schwankungen bis hin zu 25 Schritten.
Auch wenn ich den Amperwert am Netzteil um 1mA hochnehme wird sofort der maximale Wert angezeigt.

So jetzt ist erstmal alles zum aktuellen Stand bekannt, fällt vielleicht jemanden ein was ich noch verändern muss damit es wie gewünscht funktioniert (egal ob Soft- oder Hardwareseitig)?

Vielen Dank