Danke
Für dein Script.
Werde es heute Abend testen und weiters schreiben.
mfg
Enterprise
Du kannst mit dem Programm ja Sekunden zählen und in der Routine die Sekunden bis 60 hochzählen lassen. Bis 60 Erreicht ist dann die LED leuchten lassen.
Nach 60 Sekunden halt ausschalten.
Du kannst ja durch erneutes drücken des Tasters die Sekunden wieder auf 0 setzen.
Jetzt einen Code zu geben (der auch für alle anderen passt, die sowas in der Art machen wollen) ist schwer, ohne zu wissen, was das Programm evtl sonst noch können soll.
$regfile = "m16def.dat"
$crystal = 3686400
Config Timer1 = Timer, Prescale = 64
Config Pinc.2 = Output
Led3 Alias Portc.2
On Timer1 Timer_irq
Const Timervorgabe = 7936
Dim Sekunden as Byte
Enable Timer1
Enable Interrupts
Do
If Sekunden <60 then Set LED3
Reset LED3
Loop
Timer_irq:
Timer1 = Timervorgabe
Incr Sekunden
Return
Das Programm sollte bei 3,86MHz wie du sie auch hattest nach dem Start eine Minute die LED leuchten lassen.
If PIND.2 = 0 Then Enable Timer1
würde den Timer erst starten wenn der Taster gedrückt wurde. Allerdings musst du die Zeile vorher im Code wo er schon gestartet wird entfernen.
Soviel muss als Hilfestellung reichen. Mehr geht nur wenn man genau weiss, was das Programm machen soll. Der Taster wird ja auchnicht dauerhaft abgefragt wenn das Programm größer ist. Evtl ist ein Interrupt notwendig. Aber ohne es genau zu wissen muss dir das zum üben erstmal reichen.
Danke
Für dein Script.
Werde es heute Abend testen und weiters schreiben.
mfg
Enterprise
Der Timer ist spitze.
Habe nun das Script etwas verändert.
Ich möchte mit dem drücken des Taster auf Pind.5 die Minute Starten
um die LED zum leuten bringen.
Nach der Minute kann ich die Taste drücken so oft ich will das Programm wird nicht mehr gestartet.
Was muss ich im Script ändern.
Dass ich wieder die Minute starten kann.
mfgCode:'########################################################################### $regfile = "m8def.dat" $crystal = 3686000 Declare Sub Tastendruck Config Timer1 = Timer , Prescale = 64 Ddrd = &B01000000 Portd.5 = 1 Config Pinc.2 = Output Led3 Alias Portc.2 Config Pinc.3 = Output Led4 Alias Portc.3 On Timer1 Timer_irq Const Timervorgabe = 7936 Enable Timer1 Enable Interrupts Dim Sekunden As Byte '--------------------------------------------------------------------------- Do Debounce Pind.5 , 0 , Tastendruck , Sub Loop '--------------------------------------------------------------------------- Timer_irq: Timer1 = Timervorgabe Toggle Led3 Incr Sekunden Return '-------------------------------------------------------------------------- Sub Tastendruck ' Portd.6 = Not Portd.6 Do If Sekunden < 60 Then Set Led4 Reset Led4 Loop End Sub End
Enterprise
Der Timer bringt deine LED3 ans blinken und zählt den Wert für Sekunden hoch.
Deine Routinen für die Tasten schaltet LED4, allerdings nicht sehr sinnvoll.
Wenn Sekunden < 60 wird LED4 gesetzt und sofort wieder zurückgesetzt.
Da Sekunden eine Byte-Variable ist, und in deinem Programm immer nur hochgezählt wird, läuft sie bei 256 über.
Dein Taster wird zwar in einer Endlosschleife abgefragt, sobald du ihn drückst, springt die Routine aber in eine andere Endlosschleife die deine LED4 einige tausend mal pro Sekunde ein- und wieder ausschaltet. So schnell kann kein Mensch gucken.
Dein Taster wird danach gar nicht mehr abgefragt, ist also egal wie oft du da drauf rumdrückst.
Insgesamt ergibt das Ganze für mich recht wenig Sinn.
Ich befürchte fast alles. Erst mal ein bischen Basic lernen wäre dafür bestimmt recht hilfreich. Guck dir z.B. mal in der Bascom-Hilfe die Befehle Do, Loop, Sub, Return usw. an.Was muss ich im Script ändern.
Wenn du in deinem Programm in eine Unterroutine verzweigst, sollte es in der Regel irgendwann aus dieser wieder zurückkommen.
Das "End SUB" in deiner Routine Tastendruck wird aber gar nicht erreicht, weil davor ein "Loop" steht und die Routine daher zum "Do" darüber zurückspringt.
Ist nicht böse gemeint, aber ich glaube, wenn dir jemand das fertige Programm postet nutzt dir daas wenig. Versuch lieber erst mal zu verstehen, was in deinem Programm passiert und probier selber ein bischen rum.
Wunderbar, es hat geklappt. Ich meine damit nicht das das Programm läuft, sondern die Einsicht, das das alles nicht mal ebend so ist.Nach der Minute kann ich die Taste drücken so oft ich will das Programm wird nicht mehr gestartet.
Was muss ich im Script ändern.
Dass ich wieder die Minute starten kann.
Wie recycle schon schrieb. Da hängt noch so einiges mehr dran.
Selbst wenn man soweit ist, das im Gedanken der Programmablauf steht und man weiss, was man will, wird man zu Anfang noch feststellen, das es dann doch nicht immer so klappt wie man es sich denkt.
Es müssen ggf. einige Taster Vorrang gegenüber anderen tastern haben.
Z.B. ein Not-Aus-Taster muss immer funktionieren. Egal an welcher Stelle das Progamm grade steht. Und wenn man Not-Aus drückt, gedrückt hält und noch einen zweiten Taster dazu drückt, darf das Programm nicht wieder anlaufen.
Wie es im Leben so ist, muss man alles erst erlernen.
http://www.rowalt.de/mc/index.htm
Arbeite am besten man den Kurs da durch. Ach wenn es auf dem ersten Blick nicht so aussieht, aber es geht da um AVR's und Bascom.
Wenndu die Möglichkeit hast, drucke dir die Seiten aus. Ich glaube es sind do um die 20 Seiten.
Da kannst du schnell die Zusammenhänge und Grundeigenschaften lernen. Und es ist kostenlos im Gegensatz zu Büchern.
Wie ich schon weiter oben geschrieben habe, musst du dir erstmal genau überlegen, was dein Programm können soll.
1. Soll in den 60 Sekunden ggf. noch was anderes passieren?
2. Wenn 1. Ja: Braucht man dafür auch einen Timer? Wenn Ja, welche Zeiten muss der haben. Wie kann ich beide auf einen Nenner bringen.
3. Was soll passieren, wenn der Taster 62 Sekunden lang gedrückt wird? Sollen die 60 Sekunden dann nochmal anfangen abzulaufen oder erst wenn der Taster mind. einmal losgelassen wurde.
4. Was soll passieren, wenn der Taster vor Ablauf der Zeit nochmal gedrückt wird? Soll dann die Zeit verlängert werden? Soll das Zeit abgebrochen werden. Also quasi ausschalten.
5. Soll dreimal drücken bewirken, das die Zeit 3 Minuten läuft? Wenn ja, in welcher Zeit soll das drücken akzeptiert werden.
Das klingt alles sehr hart, ist es auch
Beim Programmieren (egal ob Mikrocontroller oder PC) Sollte ein Großteil der Zeit für die Planung beansprucht werden. Somit hat man es später einfacher.
Fang erstmal klein an. Arbeite den Kurs durch. Dann überlege dir selbst Aufgabenstellungen die du lösen willst. Wenn du Hilfe brauchst, such hier im Forum ob schonmal jemand das Problem hatte und die Lösung dir hilft.
Wenn nicht, kannst du immer noch fragen. Wie du hier auch schon gesehen hast, bekommst du ja Hilfe. Aber es bringt wirklich nichts, wenn du jetzt einen fertigen Code bekommst, ihn aber nicht verstehst.
Lesezeichen