Das ist doch schon mal ganz gut
Du kannst die "250" mal zu einen Zähler machen, den kannst Du dann in jedem Schleifendurchlauf "bearbeiten". Das ist der Wert der das PWM darstellt.
Das "A" im Beispiel steht übrigens für den PORT an dem das Signal herauskommen soll. Wenn Du also nicht wirklich zufällig 101 PORT's hast, würde ich den nicht als Variable an der stelle hinter Pulseout benutzen. Direkt reinschreiben welches der Ausgebe Pin ist. Und für die Zahl 101 benötigt man keinen Long, da reicht ein Byte. Spart schon mal Platz. Falls Bascom das überhaupt intern so lässt.
Der "pulsein" Befehl macht auch was schönes, der zählt nämlich wieviel Pulse über Deinen Empfänger rein kommen. Nützlich, um eine proporzionale Steuerung zu erhalten. Denn benutzt Du hier allerdings leider noch nicht.
Code:
$regfile = "m328pdef.dat" 'mege328
'$crystal = 8000000 'Quarzfrequenz
$crystal = 20000000 'Quarzfrequenz
$hwstack = 32
$framesize = 64
$swstack = 32
'$baud = 19200
Ddrd.2 = 1 '1 = Output
'Config Portd.2 = Output
Portd.2 = 0 '0 = 0V
'
Ddrd.4 = 1 '1 = Output
'Config Portd.1 = Output
Portd.4 = 0 '0 = 0V
Ddrd.1 = 1
Portd.3 = 0
Ddrd.0 = 1
Portd.0 = 0
Config Portc.1 = Input
'PullUp's für Input's aktivieren (= 1) / deaktivieren (= 0):
Portc.1 = 1
'Variablen:
Dim Rc_1 As Byte
Dim F1 As Word
'Enable Interrupts
Do
Pulsein Rc_1 , Pinc , 1 , 1
'Print "Channel 1 = " ; Rc_1 ;
'Print " ";
If Rc_1 > 156 And Rc_1 < 160 Then 'F1 = 7000
Ddrd.1 = 0
Portd.1 = 1
Else
Ddrd.1 = 1
Portd.1 = 0
End If
If Rc_1 <= 156 And Rc_1 >= 111 Then
F1 = 158 - Rc_1
F1 = 51 * F1
F1 = 7000 - F1
'Print "F1 = " ; F1
End If
If Rc_1 >= 160 And Rc_1 <= 204 Then
F1 = Rc_1 - 158
F1 = 57 * F1
F1 = 7000 + F1
'Print "F1 = " ; F1
End If
'Pulseout Portd , 1 , F3 '7500 zu 158 bei 20MHz
Pulseout Portd , 1 , 7500
Loop
End
Der code ist nicht ganz sauber im Bereich der Config der Ausgänge weil ich es für Dich mal eben schnell gekürzt habe, damit Du siehst was ich meine.
Lesezeichen