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.
Probleme: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
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







Zitieren

Lesezeichen