Hallo Forum ja ich wieder

Thorsten_Sch

Mitglied
31. Okt. 2010
152
0
16
47
HH
Sprachen
  1. BascomAVR
Hallo Forum und Bastler
Ich hab da mal ne frage volgende Daten Vohrab
Controller ATtiny2313
Mit 13x Ausgängen und 2x Eingänge
Code Hier
Lauflicht Programm


CodeBox BascomAVR
'---------------------------------------------------------------
$regfile = "2313def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32

'---Ausgaenge----
Config Portb.0 = Output                                     'K
Led_k Alias Portb.0
Config Portb.1 = Output                                     'A
Led_a Alias Portb.1
Config Portb.2 = Output                                     'T
Led_t Alias Portb.2
Config Portb.3 = Output                                     'Z
Led_z Alias Portb.3
Config Portb.4 = Output                                     'E
Led_e Alias Portb.4
Config Portb.5 = Output                                     'N
Led_n Alias Portb.5
Config Portb.6 = Output                                     'P
Led_p Alias Portb.6
Config Portb.7 = Output                                     'E
Led_e1 Alias Portb.7
Config Portd.0 = Output                                     'N
Led_n1 Alias Portd.0
Config Portd.1 = Output                                     'S
Led_s Alias Portd.1
Config Portd.2 = Output                                     'I
Led_i Alias Portd.2
Config Portd.3 = Output                                     'O
Led_o Alias Portd.3
Config Portd.4 = Output                                     'N
Led_n2 Alias Portd.4
'---Ausgänge-------------
Declare Sub Pro_1()                                         'Buchstabe für Buchstabe
Declare Sub Pro_2()                                         'Von Links und Rechs zur Mitte
Declare Sub Pro_3()

Dim I As Byte

Do
I = Rnd(3)
  Select Case I
    Case 0 : Gosub Pro_1
    Case 1 : Gosub Pro_2
    Case 2 : Gosub Pro_3
End Select

Waitms 150

Loop

Sub Pro_1()
Led_k = 1
Wait 1
Led_a = 1
Wait 1
Led_t = 1
Wait 1
Led_z = 1
Wait 1
Led_e = 1
Wait 1
Led_n = 1
Wait 1
Led_p = 1
Wait 1
Led_e1 = 1
Wait 1
Led_n1 = 1
Wait 1
Led_s = 1
Wait 1
Led_i = 1
Wait 1
Led_o = 1
Wait 1
Led_n2 = 1
Wait 1
Portb = &B00000000
Portd = &B00000000
Waitms 400
Led_n2 = 1
Wait 1
Led_o = 1
Wait 1
Led_i = 1
Wait 1
Led_s = 1
Wait 1
Led_n1 = 1
Wait 1
Led_e1 = 1
Wait 1
Led_p = 1
Wait 1
Led_n = 1
Wait 1
Led_e = 1
Wait 1
Led_z = 1
Wait 1
Led_t = 1
Wait 1
Led_a = 1
Wait 1
Led_k = 1
Wait 1
Portb = &B00000000
Portd = &B00000000
Waitms 400
End Sub

Sub Pro_2()
Led_k = 1 : Led_n2 = 1
Wait 1
Led_a = 1 : Led_o = 1
Wait 1
Led_t = 1 : Led_i = 1
Wait 1
Led_z = 1 : Led_s = 1
Wait 1
Led_e = 1 : Led_n1 = 1
Wait 1
Led_n = 1 : Led_e1 = 1
Wait 1
Led_p = 1
Wait 1
Portb = &B00000000
Portd = &B00000000
Waitms 400
Led_p = 1
Wait 1
Led_n = 1 : Led_e1 = 1
Wait 1
Led_e = 1 : Led_n1 = 1
Wait 1
Led_z = 1 : Led_s = 1
Wait 1
Led_t = 1 : Led_i = 1
Wait 1
Led_a = 1 : Led_o = 1
Wait 1
Led_k = 1 : Led_n2 = 1
Wait 1
Portb = &B00000000
Portd = &B00000000
Waitms 400
End Sub

Sub Pro_3()
Portb = &B11111111
Portd = &B00011111
Wait 5
Portb = &B00000000
Portd = &B00000000
Wait 1
End Sub

Return


So was muss man da eingeben wenn ich am Portd.5 Taster gegen GND schalte Gleich darauf ansprint inmoment muss man ja warten bis der ablauf zu ende ist.
Kann da mir jemand Helfen Bitte
--------------------------------------------------------------------------------------------------------------------
Ach Vohr ich das vergesse die 3 programme sollen standart sein ( Pro_1 / Pro_2 / Pro_3 )
--------------------------------------------------------------------------------------------------------------------

Und die neuen Programm Pro_4 Lampen Test, taste Drücken Pro_1/Pro_2/Pro_3 Aus und dafür die lampen An Schalten bis Taste wieder gedrückt wurden ist.

Programm Pro_5 ( Lauflicht6 ) Taste Drücken, Pro_1/Pro_2/Pro_3 Aus , Lauflicht6 an bis taste wieder gedrückt wurden ist.

Danke
 
Nabend!

Was genau meinst du? Verstehe dein Problem nicht richtig. Prellt dein Taster? Oder möchtest du das "delay" verhindern?
Wenn letzteres der Fall sein sollte, solltest du dich mal mit dem Thema "Interrupts" beschäftigen.

Dort kannst du ganz einfach ein "delay" bauen, was du mit geschickten Abfragen erschlagen kannst.
 
Das eine programm läuft ja immer durch sehe Pro_1 - 3 und ich möchte gern noch dazzu haben
Pro_4 Dauer licht Per taster anschalten, erneutes drücken läuft das standart programm...
und Pro_5 Als ein anderes lauflicht.... taster drückenPro_5 Läuft bis man die taste wieder drückt, und das pro_1-3 Wiederläuft.

Vielen dank
 
Hallo Thorsten,

soweit ich dich richtig verstanden habe, hast du eine Lauflischtsteuerung mit drei Funktionen. Diese Funktionen möchtest du durch Drücken eines Tasters (PORTD.5) starten. Die Tasterabfrage sehe ich in deinem Programm noch nicht.
Die Subs dauern recht lange, somit kommt der Programmteil in Mainloop nicht ausreichend oft dran, um Tasten abzufragen.

Ich würde so vorgehen:

In mainloop eine Tastenabfrage machen und dann entsprechend eine Sub aufrufen.
In der Sub wartest du bis der Taster losgelassen wurde, danach die Lampen ansteuern.

In den Sub das wait 1 ersetzen, ggf. durch eine eigene Routine "waitsub". Du mittt in der pausenzeit Taste abfragen können. In dieser waitsub baust du eine Schleife ein (Zähler 100), darin eine pause 10ms (ö.ä.) und fragst dort den Taster ab (10msx100=1s Pause). Wurde der Taster in der waitsub gedrückt, kehrt diese mit einem "Abbruchsignal" zurück. Die Sub_Pro1 usw. brechen in dem Fall ab, es wird in Mainloop zurückgekehrt. Dort wartest du bis der Taster wieder losgelassen wird.

Da ich mich nicht so gut mit Bascom auskenne, kann ich dir hier leider nicht sehr viel weiter helfen. Aber vielleicht helfen diese Gedanken ja anderen Usern weiter, die sich mit Bascom besser auskennen. :)

Dirk :ciao:

EDIT:
Das eine programm läuft ja immer durch sehe Pro_1 - 3 und ich möchte gern noch dazzu haben
Pro_4 Dauer licht Per taster anschalten, erneutes drücken läuft das standart programm...
und Pro_5 Als ein anderes lauflicht.... taster drückenPro_5 Läuft bis man die taste wieder drückt, und das pro_1-3 Wiederläuft.
Jetzt verstehe ich, du möchtest mit einer Taste drei Effekte umschalten ...
(1) Sub_Pro1 bis Sub_Pro3
(2) Sub_Pro4
(3) Sub_Pro5
 
Die Subs dauern recht lange, somit kommt der Programmteil in Mainloop nicht ausreichend oft dran, um Tasten abzufragen.
Ja...
So was muss man da eingeben wenn ich am Portd.5 Taster gegen GND schalte Gleich darauf ansprint inmoment muss man ja warten bis der ablauf zu ende ist.
Wenn der Taster bei diesen Subroutinen in der Main-Loop gepollt wird, kann er auch nur zwischen zwei Subroutinen erkant werden.
Wenn er sofort erkannt werden soll, muß man entweder (die bereits erwähnten) Interrupts verwenden, oder das ganze Lauflicht-Konzept überdenken. "Pro_1" dauert fast 'ne halbe Minute, wo der Controller eigentlich nur Milliarden Takte vor sich hin wartet. Besser wäre, mit'nem Timer 'ne Zeitbasis zu generieren (100ms zb), und in der Main-Loop darauf zu reagieren, und das Lauflicht entsprechend des gewählten Programmes weiterzuschalten, und nebenbei auf die Taster zu reagieren (wobei die Zeitbasis dann auch zur Entprellung genutzt werden kann.
 
mit'nem Timer 'ne Zeitbasis zu generieren
Ja, so würde ich es auch machen. Eine Tabelle im Flash für die Zustandswerte der Lampen, dann lassen sich auch andere Effekte einfach erzeugen.

Anfangen würde ich zunächst damit, wie man einen Taster abfragt.:)

Dirk :ciao:
 
Eine Tabelle im Flash für die Zustandswerte der Lampen, dann lassen sich
Genau.
Unter ASM würde man die Adressen "günstig" wählen, um einfach den aktuellen Effekt-Zähler mit der gewählten Effekt-Nummer zu addieren, in Hochsprachen überläßt man das einem Array o.ä. und addiert einfach den Index zusammen...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)