www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Timer flag


Autor: Groedi2001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Groedi2001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Groedi2001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm 8MHz ... nimm entweder nen Baudratenquarz oder geh mit der Baudrate 
runter 19200 oder 9600

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.