Ruppi
19.07.2005, 09:05
Hallo,
das nachfolgende Programm sendet mit etwa 1000Hz Messwerte des AD-Wandlers eines Mega8 an den PC. Hierbei gibt es auch noch keine Probleme. Jetzt würde ich aber gerne die Abtastfrequenz während des Programmlaufs durch Übermittlung eines Bytes ändern, was leider nicht funktioniert. Die Interruptroutine wird auf jeden Fall aufgerufen, aber der neue Wert wird scheinbar nicht übernommen, d.h. Value scheint immer gleich zu bleiben. Kann mir jemand helfen?
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 115200 '9600
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'3,686400MHz/8 = 460,8kHz -> 2,1701us
Config Timer1 = Timer , Prescale = 8
On Timer1 Ontimer:
Enable Timer1
Config Pinb.0 = Output
On Urxc Onrts:
Enable Urxc
Enable Interrupts
Dim Messwert As Word , Lbyte(2) As Byte At Messwert Overlay , L As Word
Dim B As Byte , Value As Word , I As Word
Value = 65000
'Timer-Interrupt
Ontimer:
Timer1 = Value
Messwert = Getadc(0)
Printbin Lbyte(1) ; Lbyte(2) 'Messwert an den PC senden
Return
'Interrupt für den Zeichenempfang
Onrts:
B = Udr
L = B * 100 'max 255*100 = 25500
Value = 65000 - L '65000-25500 = 39500
For I = 1 To 500
Printbin B ; 0 'Wert eine Sekunde lang zurücksenden
Waitms 2
Next I
Return
End
das nachfolgende Programm sendet mit etwa 1000Hz Messwerte des AD-Wandlers eines Mega8 an den PC. Hierbei gibt es auch noch keine Probleme. Jetzt würde ich aber gerne die Abtastfrequenz während des Programmlaufs durch Übermittlung eines Bytes ändern, was leider nicht funktioniert. Die Interruptroutine wird auf jeden Fall aufgerufen, aber der neue Wert wird scheinbar nicht übernommen, d.h. Value scheint immer gleich zu bleiben. Kann mir jemand helfen?
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 115200 '9600
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'3,686400MHz/8 = 460,8kHz -> 2,1701us
Config Timer1 = Timer , Prescale = 8
On Timer1 Ontimer:
Enable Timer1
Config Pinb.0 = Output
On Urxc Onrts:
Enable Urxc
Enable Interrupts
Dim Messwert As Word , Lbyte(2) As Byte At Messwert Overlay , L As Word
Dim B As Byte , Value As Word , I As Word
Value = 65000
'Timer-Interrupt
Ontimer:
Timer1 = Value
Messwert = Getadc(0)
Printbin Lbyte(1) ; Lbyte(2) 'Messwert an den PC senden
Return
'Interrupt für den Zeichenempfang
Onrts:
B = Udr
L = B * 100 'max 255*100 = 25500
Value = 65000 - L '65000-25500 = 39500
For I = 1 To 500
Printbin B ; 0 'Wert eine Sekunde lang zurücksenden
Waitms 2
Next I
Return
End