nover
20.03.2006, 23:41
Ich möchte mit einem Drehimpulsgeber eine PWM Steuern in meinem test hat das nicht so geklappt wie ich wollte und nun habe ich den Code riesig gemacht und das wirt immer noch nichts se wirt immer zwei Impulse gegeben (das heißt zweimal + oder – 5 ) und er zählt ni den negativen bereich oder über den maximal bereich [-(
Das ist der Code
$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Quarz: 3,6864 MHz
$baud = 9600 '9600 Baud
'
On Timer0 Ontimer 'Timer0-Interruptroutine
Dim Helligkeit As Integer 'Timer0-Zeitwert
Dim B As Integer
Portb = &B11 'port B 0und 1 als eingang
Ddrd.5 = 1 'Pin PD5 ist Ausgang
Tccr0 = &B00000100 'Timer0: Bits210=100: Quarz/256
Timsk.toie0 = 1 'Timer0-Overflow-Interrupt ein
Config Timer0 = Timer , Prescale = 256
Enable Timer0 'Overflow-Interrupt ein
'----------------------------------------------------------
Helligkeit = 200 'Initial LED hell
Sreg.7 = 1 'Interrupts global einschalten
Do 'Hauptschleife
B = Encoder(pinb.0 , Pind.1 , Links , Rechts , 2) 'Drehimpulsgeber
Waitms 10
Print Helligkeit
Print B
If Helligkeit = 0 Then 'ist der wert auf 0 soll port D5 auf 0
Portd.5 = 0
End If
If Helligkeit = 256 Then 'ist der wert auf 256 soll port D5 auf 1
Portd.5 = 1
End If
Loop
'----------------------------------------------------------
Links:
Helligkeit = Helligkeit + 5 'der wert soll um 5 angehoben werden
Waitms 10
Return
Rechts:
Helligkeit = Helligkeit - 5 'der wert soll um 5 abgesengt werden
Waitms 10
Return
'----------------------------------------------------------
Ontimer:
Portd.5 = Not Portd.5 'LED wechselnd an/aus
If Portd.5 = 1 Then 'Wenn LED gerade an
Timer0 = 256 - Helligkeit 'Timer zählt vorwärts!
Else 'Wenn LED gerade aus
Timer0 = Helligkeit 'Komplementäre Zeit
End If
Return
danke euch im voraus
Das ist der Code
$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Quarz: 3,6864 MHz
$baud = 9600 '9600 Baud
'
On Timer0 Ontimer 'Timer0-Interruptroutine
Dim Helligkeit As Integer 'Timer0-Zeitwert
Dim B As Integer
Portb = &B11 'port B 0und 1 als eingang
Ddrd.5 = 1 'Pin PD5 ist Ausgang
Tccr0 = &B00000100 'Timer0: Bits210=100: Quarz/256
Timsk.toie0 = 1 'Timer0-Overflow-Interrupt ein
Config Timer0 = Timer , Prescale = 256
Enable Timer0 'Overflow-Interrupt ein
'----------------------------------------------------------
Helligkeit = 200 'Initial LED hell
Sreg.7 = 1 'Interrupts global einschalten
Do 'Hauptschleife
B = Encoder(pinb.0 , Pind.1 , Links , Rechts , 2) 'Drehimpulsgeber
Waitms 10
Print Helligkeit
Print B
If Helligkeit = 0 Then 'ist der wert auf 0 soll port D5 auf 0
Portd.5 = 0
End If
If Helligkeit = 256 Then 'ist der wert auf 256 soll port D5 auf 1
Portd.5 = 1
End If
Loop
'----------------------------------------------------------
Links:
Helligkeit = Helligkeit + 5 'der wert soll um 5 angehoben werden
Waitms 10
Return
Rechts:
Helligkeit = Helligkeit - 5 'der wert soll um 5 abgesengt werden
Waitms 10
Return
'----------------------------------------------------------
Ontimer:
Portd.5 = Not Portd.5 'LED wechselnd an/aus
If Portd.5 = 1 Then 'Wenn LED gerade an
Timer0 = 256 - Helligkeit 'Timer zählt vorwärts!
Else 'Wenn LED gerade aus
Timer0 = Helligkeit 'Komplementäre Zeit
End If
Return
danke euch im voraus