Huh,schlecht geschlafen oder warum heulste mich an ? :wink:
Druckbare Version
Huh,schlecht geschlafen oder warum heulste mich an ? :wink:
ach ratber... keine sorge, mir gehen nur extra-sensible aufn geist ^^
so, hier iss das programm so wies gehen würde:
ich hoffe es geht auch ^^Code:'###################################################
'#Lauflichtsteuerung mit 3 Verschiedenen Programmen#
'###################################################
$regfile = "M8def.dat"
$crystal = 3686400
Ddrd = &B11100000 'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100 'PullUps von PD2, PD3 Aktivieren
Dim Zler As Byte
Dim Pr1_3 As Byte
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64 'Timertakt = Crystal / 64
Enable Timer1 'Timer1 einschalten
Enable Interrupts 'Interrupts Global einschalten
Const Timervorgabe = 36736 'Hat mir rnAVR so berechnet
'###Deklarationen###
Led_gr Alias Portd.7 'LED Grün
Led_ge Alias Portd.6 'LED Gelb
Led_ro Alias Portd.5 'LED Rot
Prwata Alias Pind.3 'Programmwahltaster
Declare Sub Pr_1
Declare Sub Pr_2
Declare Sub Pr_3
'###Hauptschleife###
Do
Debounce Prwata , 0 , Pr_wechs , Sub 'Programmwahltaster entprellen und zu Pr_wechsel springen
Gosub Pr_wechsel
Loop
'###OnTimer1###
Ontimer1:
Timer1 = Timervorgabe
If Zler = 10 Then 'Wenn Zler = 9 dann...
Zler = 1 '...Zler = 0
End If
Incr Zler 'Zler + 1
Return
'###Unterprogramme###
Pr_wechs:
Incr Pr1_3
Gosub Pr_wechsel
Return
Pr_wechsel:
If Pr1_3 = 3 Then 'Wenn Pr1_3 = 2 dann...
Pr1_3 = 0 '...Pr1_3 = 0
End If
If Pr1_3 = 0 Then 'Wenn Pr1_3 = 0 dann...
Gosub Pr_1
End If '...zum Sub PR_1 springen
If Pr1_3 = 1 Then 'Wenn Pr1_3 = 1 dann...
Gosub Pr_2 '...zum sub PR_2 springen
End If
If Pr1_3 = 2 Then
Gosub Pr_3
End If
Return
'----------------
Pr_1:
Return
'---------------
Pr_2:
Return
'---------------
Pr_3:
Return
Martin
Erst mal vielen dank für die gute hilfe :) Ich werde es heute abend testen, habe leider immoment keine Zeit. Ich werde dann berichten wie es läuft.
juhuuu es läuft nun :)
Hier mal der fertige Code:
Code:'###################################################
'#Lauflichtsteuerung mit 3 Verschiedenen Programmen#
'###################################################
$regfile = "M8def.dat"
$crystal = 3686400
Ddrd = &B11100000 'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100 'PullUps von PD2, PD3 Aktivieren
Dim Zler As Byte
Dim Pr1_3 As Byte
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64 'Timertakt = Crystal / 64
Enable Timer1 'Timer1 einschalten
Enable Interrupts 'Interrupts Global einschalten
Const Timervorgabe = 36736 'Hat mir rnAVR so berechnet
'###Deklarationen###
Led_gr Alias Portd.7 'LED Grün
Led_ge Alias Portd.6 'LED Gelb
Led_ro Alias Portd.5 'LED Rot
Prwata Alias Pind.3 'Programmwahltaster
Declare Sub Pr_1
Declare Sub Pr_2
Declare Sub Pr_3
'###Hauptschleife###
Do
Debounce Prwata , 0 , Pr_wechs , Sub 'Programmwahltaster entprellen und zu Pr_wechsel springen
Gosub Pr_wechsel
Loop
'###OnTimer1###
Ontimer1:
Timer1 = Timervorgabe
If Zler >= 3 Then 'Wenn Zler = 10 dann...
Zler = 0 '...Zler = 1
End If
Incr Zler 'Zler + 1
Return
'###Unterprogramme###
Pr_wechs:
Incr Pr1_3
Gosub Pr_wechsel
Return
Pr_wechsel:
If Pr1_3 >= 3 Then 'Wenn Pr1_3 = 2 dann...
Pr1_3 = 0 '...Pr1_3 = 0
End If
If Pr1_3 = 0 Then 'Wenn Pr1_3 = 0 dann...
Gosub Pr_1
End If '...zum Sub PR_1 springen
If Pr1_3 = 1 Then 'Wenn Pr1_3 = 1 dann...
Gosub Pr_2 '...zum sub PR_2 springen
End If
If Pr1_3 = 2 Then
Gosub Pr_3
End If
Return
'----------------
Pr_1:
If Zler = 1 Then
Led_ro = 1
Led_ge = 1
Led_gr = 1
End If
If Zler = 2 Then
Led_ro = 0
Led_ge = 0
Led_gr = 0
End If
If Zler = 3 Then
Led_ro = 0
Led_ge = 1
Led_gr = 0
End If
Return
'---------------
Pr_2:
If Zler = 1 Then
Led_ro = 1
Led_ge = 0
Led_gr = 1
End If
If Zler = 2 Then
Led_ro = 0
Led_ge = 1
Led_gr = 0
End If
If Zler = 3 Then
Led_ro = 1
Led_ge = 1
Led_gr = 1
End If
Return
'---------------
Pr_3:
If Zler = 1 Then
Led_ro = 1
Led_ge = 0
Led_gr = 0
End If
If Zler = 2 Then
Led_ro = 0
Led_gr = 1
Led_ge = 0
End If
If Zler = 3 Then
Led_ro = 0
Led_gr = 0
Led_ge = 1
End If
Return
Ahhja :wink:Zitat:
Zitat von x-ryder
Eine Frage habe ich aber noch.
Wie kann ich nun die geschwindigkeit mit einem Taster erhöhen? von -100% - +100%
Am besten in 10% Schritten. Wenn er bei +100% angekommen ist Springt er auf -100% und geht dann wieder in 10% Schritten hoch.
Ich habe versucht die "const Timervorgabe" zu ändern aber das geht nicht. Gibts da einen anderen Trick?
Timervorgabe nich als Konstante sondern als Variable zu deklarieren.
Dim Timervorgabe As Interger
z.B.
Konstanten haben immer einen festen Wert. Deshlab geht es nicht. Der Rest deines Programmes wie du es abgeändert hast kennt ja noch keiner, aber ich denke du bist auf dem richtigen Weg!
Warum nehme ich denn z.B Interger und nicht Word? Das hab ich irgentwie noch nie verstanden.
Hier mal der Code wie es immoment aussieht. Aber das geht nicht weil ich Timervorgabe keinem Wert zugewiesen habe und ich wiess auch echt nicht genau wie und wo ich das machen soll.
Code:'###################################################
'#Lauflichtsteuerung mit 3 Verschiedenen Programmen#
'###################################################
$regfile = "M8def.dat"
$crystal = 3686400
Ddrd = &B11100000 'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100 'PullUps von PD2, PD3 Aktivieren
Dim Zler As Byte
Dim Pr1_3 As Byte
Dim Schneller As Byte
Dim Timervorgabe As Double
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64 'Timertakt = Crystal / 64
Enable Timer1 'Timer1 einschalten
Enable Interrupts 'Interrupts Global einschalten
'###Deklarationen###
Led_gr Alias Portd.7 'LED Grün
Led_ge Alias Portd.6 'LED Gelb
Led_ro Alias Portd.5 'LED Rot
Prwata Alias Pind.3 'Programmwahltaster
Speed Alias Pind.2
Declare Sub Pr_1
Declare Sub Pr_2
Declare Sub Pr_3
'###Hauptschleife###
Do
Debounce Prwata , 0 , Pr_wechs , Sub 'Programmwahltaster entprellen und zu Pr_wechsel springen
Debounce Speed , 0 , S_change , Sub
Gosub Pr_wechsel
Loop
'###OnTimer1###
Ontimer1:
Timer1 = Timervorgabe
If Zler >= 3 Then 'Wenn Zler = 10 dann...
Zler = 0 '...Zler = 1
End If
Incr Zler 'Zler + 1
Return
'###Unterprogramme###
S_change:
If Schneller = 3 Then
Schneller = 0
End If
Incr Schneller
If Schneller = 0 Then
Timervorgabe = 7936
End If
If Schneller = 1 Then
Timervorgabe = 36736
End If
If Schneller = 2 Then
Timervorgabe = 46336
End If
Return
Pr_wechs:
Incr Pr1_3
Gosub Pr_wechsel
Return
Pr_wechsel:
If Pr1_3 >= 3 Then 'Wenn Pr1_3 = 2 dann...
Pr1_3 = 0 '...Pr1_3 = 0
End If
If Pr1_3 = 0 Then 'Wenn Pr1_3 = 0 dann...
Gosub Pr_1
End If '...zum Sub PR_1 springen
If Pr1_3 = 1 Then 'Wenn Pr1_3 = 1 dann...
Gosub Pr_2 '...zum sub PR_2 springen
End If
If Pr1_3 = 2 Then
Gosub Pr_3
End If
Return
zb. direkt vor den "Deklarationen" mit "Timervorgabe = 100" (oder nem beliebigem Startwert deiner Wahl)
Ja das war das erste was ich ausprobiert habe, blos nimmt der das irgentwie nicht an. Ich bekomme trotzdem noch den selben Fehler wie vorher beim Compilieren...