Hallo ich hab ein kleines Problem mit dem setzen eines Timerflags. Hier erstmal das Programm: ######################################################################## #### $regfile = "m16def.dat" $crystal = 8000000 $baud = 38400 Config Portb.2 = Output Config Timer1 = Timer , Prescale = 256 Timer1 = 34285 'Vorladewert 8mhz / 256 = 31250 Der Zähler Würde Normal Von 0 Bis 65535 Zählen 'Wenn Er Jedoch Bei 34285 Beginnt Läuft Er Jede Sek über Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Dim Ad_w(25) As Word '25 Variablen als Word dimensioniert Dim Wert As Word 'Variable als Word Variable als Word dimensioniert Dim I As Byte 'Variable als Byte dimensioniert Dim Puffer As Single 'Variable als Single dimensioniert Dim Float As Single 'Variable als Single dimensioniert Float = 3.48 Dim Flag As Byte Enable Interrupts Enable Timer1 On Timer1 Isr_timer1 Do If Flag.1 = 1 Then Flag.1 = 0 For I = 0 To 24 'Beginn For-Schleife mit Zählen bis 24 Ad_w(i) = Getadc(0) 'Messen AD-Wert an Pin A0 Waitms 5 '5ms warten Next 'weiter wenn For-Schleife abgearbeitet ist For I = 0 To 24 'Beginn For-Schleife mit Zählen bis 24 Wert = Wert + Ad_w(i) 'addiere Wert mit dem AD-Wert der Variabele Ad_w entsprechend I Next 'weiter wenn For-Schleife abgearbeitet ist Wert = Wert / 25 'Bilden des Mittelwert durch division mit 25 Puffer = Wert 'Inhalt Variable Wert wird in Variable Puffer geschrieben Puffer = Puffer - 425 'Vom Puffer wird der 0 °C Offset abgezogen Puffer = Puffer / Float 'Berechung der Temperatur (5.3125 = Bit pro °C Änderung) Print "Temp " ; "; " ; Puffer ; " ; " ; " AD_Wert" ; "; " ; Wert 'Ausgabe der Variablen Puffer und Wert im Terminalprogramm Waitms 875 '875ms warten um Programmlaufzeit von 1s zu erreichen Wert = 0 End If Loop Isr_timer1: Flag.1 = 1 Timer1 = 34285 Return #################################################################### Das Problem liegt darin das der Timer nur einmal beim EInschalten oder Reset aufgerufen wird. Wenn ich das Programm ohne jede Berechnung ausführe sondern nur beim Flag den Adc ausgebe funktioniert es. Könnt ihr mir einen Tip geben?
der erste Fehler ist mal, das Bascom Arrays ab 1 beginnt nicht mit 0 also : an stelle von For I = 0 To 24 dann For I = 1 To 25 wozu das Waitms 875 ? du nutzt doch nen Timer, für das Flag, dann mach den Preload halt so groß, dass 1 Sekunde kommt.
Das ändert aber auch nichts an dem Problem das es nur geht wenn der ADC ausgelesen wird und das es nicht geht wenn man berechnet. Wäre für weitere Tips sehr dankbar.
OK es wird jetzt Sekündlich ausgegeben. Aber noch eine Frage wie kommt es das die Ausgabe bei Print nicht richtig Sauber ist bsp: Temp ; 15.804596898 ; AD_Wert; 480ŠTemp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480 Temp ; 16.091953276 ; AD_Wert; 481ŠTemp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480ŠTemp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480 ŠTemp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480 Temp ; 15.804596898 ; AD_Wert; 480 Also es wird nicht immer auf einer neuen Teile ausgegeben und manchmal kommen auch zusätzliche zeichen rein, habt ihr nen tip. die Baud, Pari etc sind alles identisch eingestellt.
hmmm 8MHz ... nimm entweder nen Baudratenquarz oder geh mit der Baudrate runter 19200 oder 9600
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.