Gast
#2818878
Hallo, ich bin neu hier und habe vor ca. 1 Woche mit dem Programmieren von Mikrocontrollern über Bascom angefangen. Zuerst habe ich einige Beispiele des "kleinem Bascom AVR Kurs" durchgearbeitet und auch eigene Sachen ausprobiert. Hier zu meinem Problem: Das Programm soll eine Temperatur über einen NTC abfragen und die berechnete Temperatur ca. alle 5 sek über die serielle Schnittstelle zum PC senden. Dies Funktioniert auch, aber in unregelmäßigen Abständen bleibt die Hauptschleife einfach stehen. Der Interrupt wird weiter ausgeführt, jedoch wird nichts mehr gerechnet, sondern alle 5 sek die gleichen Werte über die RS232 gesendet. Hier das Programm: $regfile = "m8adef.dat" $crystal = 8000000 $hwstack = 100 $swstack = 100 $framesize = 100 $baud = 4800 Config Portb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1 Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer0 = Timer , Prescale = 1024 On Ovf0 Ir_tmr0 Enable Ovf0 Enable Interrupts Start Adc Dim Messergebnis As Word Dim Temperatur As Single Dim A As Single Dim B As Single Dim Rntc As Single Dim Spannung As Single Dim Pwm As Word Dim Pwm_temp As Single Dim Z As Integer Dim A_spannung As Single Dim A_widerstand As Single Dim A_temperatur As Single Dim A_pwm As Word Dim K As Integer Z = 0 Do 'Spannung Berechnen Messergebnis = Getadc(0) Spannung = Messergebnis / 1024 '----------------------------------------------- 'K=13 Spannung = Spannung * 5.08 A_spannung = Spannung 'Widerstand berechnen Rntc = 5.08 / Spannung Rntc = Rntc - 1 Rntc = 1200 / Rntc A_widerstand = Rntc 'Temperatur berechnen A = 25 + 273.15 A = 1 / A B = Rntc / 1500 B = Log(b) B = B / 3975 Temperatur = A + B Temperatur = 1 / Temperatur Temperatur = Temperatur - 273.15 Temperatur = Temperatur - 1 A_temperatur = Temperatur 'PWM berechnen Pwm_temp = Temperatur - 20 Pwm_temp = Pwm_temp / 10 Pwm = Pwm_temp * 255 A_pwm = Pwm Compare1a = A_pwm Loop End Ir_tmr0: Timer0 = 0 If Z = 153 Then Z = 0 Print "Messwert" ; Getadc(0) Print "Spannung: " ; A_spannung Print "Rntc: " ; A_widerstand Print "Temperatur: " ; A_temperatur Print "" Else Z = Z + 1 End If Return An der Stelle wo ich Striche eingefügt habe bleibt meiner Meinung nach die Hauptschleife hängen, ich habe eine Variable "K" definiert und diese mit verschiedenen Werten zwischen alle Befehle gesetzt. Bei K = 13 war schluss. Ich hoffe das ich hier auf Hilfe treffe, denn im Netz finde ich nichts passendes, oder ich verwende die falschen Suchbegriffe :D Vielen Dank Stefan