Jo Danke Danke
Ich werd´s mal ausprobieren.
Druckbare Version
Jo Danke Danke
Ich werd´s mal ausprobieren.
Hallo,
Ich schreib schon mal auf Verdacht; Rest per Tel, siehe PN O:)
puh, musste umdenken- hab zuletzt basic++ benutzt :-k
Bis Bald ... LutzCode:
'************************************************
' Test '573 als Porterweiteung bustest.bas *
' FriLu 06.10.06 *
' CCBasic V2.0 *
' ZUSÄTZLICH zum Schaltplan ein Poti, ca 10k, *
' Wert unkritisch, an ad1 anschliessen *
' dito an ad2 :) *
' oder ad1 erstmal an gnd *
'************************************************
' --- PORTs ---
define bus byteport[1]
define byteport2 byteport[2]
define latch1 port [9]
define latch2 port[10]
define latch3 port[11]
define led25 port[16]
define eingabe ad[1]
define tempo ad[2]
' --- Variable ---
define gruppe1 byte ' led 1 - 8
define gruppe2 byte ' led 9 - 16
define gruppe3 byte ' led 17 - 24
define auswahl byte
define i byte
define speed byte ' :)
'************************************************
' --- Hauptprogramm ---
' --- Init ---
speed = 5
bus = off ' ports als ausgänge
latch1 = off ' und '573 löschen
latch2 = off
latch3 = off
led25 = off
pulse latch1
pulse latch2
pulse latch3
' --- Schleife ---
#HauptLoop
gosub WasMachen
'gosub WieSchnell ' Kommentar entfernen für Geschw-ändern
on auswahl gosub lp1, lp2, lp3, lp4 ' erstmal nur lp1
goto HauptLoop
' --- Ende Schleife ---
'************************************************
' --- Unterprogramme ---
#WasMachen
auswahl= eingabe / 64 ' ergibt 0-3 für on gosub, erweiterbar
' stattdessen auch zufallswert einsetzbar
return
#WieSchnell
speed= (tempo / 32) + 3 ' ergibt 3-10 als pausenwert
return
'************************************************
' --- ab hier Lichtshow ---
#lp1 ' schiebt eine einzelne led=on durch
gruppe1= 1
for i = 0 to 8
bus = gruppe1
pulse latch1
pause speed
gruppe1 = gruppe1 shl 1
next
gruppe2= 1
for i = 0 to 8
bus = gruppe2
pulse latch2
pause speed
gruppe2 = gruppe2 shl 1
next
gruppe3= 1
for i = 0 to 8
bus = gruppe3
pulse latch3
pause speed
gruppe3 = gruppe3 shl 1
next
led25 = on
pause speed
led25 = off
return
'------------- ab hier eigeninitiative
#lp2
return
'-------------
#lp3
return
'-------------
#lp4
return
'************************************************
end
' --- Tabellen ---
' sorry, selbst ist der freak :))
Hallo,
Mithilfe deines Programms (danke schonmal) bin ich jetzt schon ein stück weiter (die LED´s leuchten zum teil).
Wie mach ich das, dass zum Beispiel nur LED 8 und 16 an sind?
Also:
Laut deinem Bauplan werden auch die Ports 1 bis 8 benutzt, müssen die nicht im Programm definiert werden?Code:#loop
LED8 = on
LED16 = on
Pause 50
LED8 = off
LED16 = off
Pause 50
Goto loop
Hallo speed,
die Ports 1-8 werden als Byteport[1] angesprochen, einzeln ist nicht notwendig da immer 8 bit ( der gesamte Port ) in die '573er geschrieben werden.
Wenn du die Leds gezielt ein/ausschalten willst, müssen wir den defineteil etwas umschreiben:
Übrigens, was heisst " leuchten zum Teil" ?; Die müssen alle!Code:
' --- Variable ---
define gruppe1 byte [1] ' led 1 - 8
define led1 bit [1]
define led2 bit [2]
define led3 bit [3]
define led4 bit [4]
define led5 bit [5]
define led6 bit [6]
define led7 bit [7]
define led8 bit [8]
define gruppe2 byte [2] ' led 9 - 16
define led9 bit [9]
define led10 bit[10]
define led11 bit[11]
define led12 bit[12]
define led13 bit[13]
define led14 bit[14]
define led15 bit[15]
define led16 bit[16]
define gruppe3 byte [3] ' led 17 - 24
define led17 bit[17]
define led18 bit[18]
define led19 bit[19]
define led20 bit[20]
define led21 bit[21]
define led22 bit[22]
define led23 bit[23]
define led24 bit[24]
define auswahl byte
define i byte
define speed byte ' :)
' statt der "kurzversion" ins prog kopieren,
' so kannst du jede led gezielt ansprechen.
' bit[1] und byte[1] belegen einen teil des RAMs gemeinsam,
' das ist gewollt!
' wenn du jetzt eine ledx ein/oder ausschaltest, tust du das
' nur im Speicher!, zur anzeige musst du die gruppe der ent-
' sprechenden led noch ausgeben, z.b.:
' bus = gruppe1
' pulse latch1
' wenn du eine/mehrere/alle leds1-8 geändert hast.
' alternativ kannst du auch bitbefehle auf die gruppe anwenden:
' x steht für 1,2 oder 3
' die binäre 1 steht für die entsprechende led der gruppe,
' es geht auch mehrere/ alle, im Dezimal oder Hexformat ...
' gruppex = gruppex xor &b00001000
' schaltet >led nr4 der gruppe< UM, ohne änderung der anderen
' gruppex = gruppex or &b00001000
' schaltet >led nr4 der gruppe< EIN, ohne änderung der anderen
' gruppex = gruppex and &b11110111
' schaltet >led nr4 der gruppe< AUS, ohne änderung der anderen
' programmtechnisch gesehen kannst du nichts kaputt machen,
' also ruhig etwas probieren :)
' schau mal, wie man tabellen erstellt/ausliest, schreib ein ( oder
' mehrere ) muster in tabellen und gib es aus. :):)
' P.S. eine Tastatur mit Spracheingabe wär nicht schlecht, ich
' tipp mir hier die Finger wund... :):):)
'************************************************
Hi,
wie mach ich das, dass die LED´s im Speicher geschaltet werden? (gibt es dafür bestimmte befehle)?
Um LED´s zu schalten kenn ich nur die Befehle On/Off und 1/0.
Einige LED´s leuchten gar nicht, andere „glimmen“ nur leicht und der Rest leuchtet dauerhaft.Zitat:
Übrigens, was heisst " leuchten zum Teil" ?; Die müssen alle!
Hi,
oO, Fehlersuche...
Also erstmal, mein prog ist ein Lauflicht über alle 25 LEDs O:)
Wichtig: dazu muss ad[1] erstmal an Gnd! (oder an den mittelabgriff eines Potis, ein "ende" vom poti an Gnd, das andere an kontrollerbetriebssp., schleifer an Gnd-anschlag)
Betriebsspannung/ Gnd an '573 angeschlossen? ( hatte in einem anderen Thread schon mal jemand vergessen O:) )
Das vom 573er nach dem einschalten die ausgänge zufällige stellungen haben, ist leider normal, das korrigiert das programm, so es denn losläuft...
Was mir sorgen macht ist, das einige LEDs nur glimmen, das ist definitiv ein Fehler :(
das du nach dem übertragen d. Prog/nach anlegen der spannung den startpin kurz auf Gnd ziehen musst, damit das Prog startet weisst du ?
-> kurz reicht, jumper setzen geht auch.
Hmm, mir fällt nichts mehr ein...
MfG LutzCode:zur bitmanipulation:
z. b.: define led8 bit[8] gibt der Speicherstelle bit[8] den namen led8.
die befehle ändern also den inhalt der speicherstelle bit[8]
1.) led8 = on
2.) gruppe1 = gruppe1 or &b10000000
gruppe1 = gruppe1 or &h80
gruppe1 = gruppe1 or 128
3.) looktab tab1, gruppe1, 0
bewirkt also immer, das bit[8] auf 1 gesetzt wird...
table tab1 ' sinnfreies beispiel!
128
tabend
Hi FriLu,
Das Lauflicht geht fast.
Ist es richtig das normalerweise alle LED´s an sind,
sie dann aber nacheinander (per lauflicht) kurz ausgehen sollten?
Wenn AD[1] an GND ist dann leuchten fast alle Lampen auf.
Ich habe davon ein Foto gemacht (nicht gerade die beste Qualität weil es mit einem Handy gemacht wurde)
Bild hier
Alle LED´s funktionieren aber ! O:)
Und der 573 hat Betriebsspannung und GND.
Wenn ich das Programm starte (mit dem Jumper) dann gehen die LED´s Aus die vorher An wahren und die die An wahren gehen Aus. Aber alles per lauflicht!
Liegt es vielleicht daran das nicht alle Eingänge des 74HCT573 mit dem Programm angesprochen werden?:-k
Der 573 hat doch 8 Eingänge (D0 – D7)
Mit dem Lauflicht Programm werden aber doch nur 2 benutzt
bus byteport[1]
und
byteport2 byteport[2]
Und
latch1 port [9]
latch2 port[10]
latch3 port[11]
hängen an den LE Eingang des Ic´s.
Hi, Speed
ich nehme mal an, du hast den Conrad-Editor, da gibts einen simulations-modus.
Unter "ansicht" das Fenster Digitalports aufmachen, evtl auch analogports.
Programm kompilieren, dann kommen 2 buttons mit blauen Pfeilen in der Werkzeugleiste.
Den linken, "ausführen", kannst du leider vergessen, das Prog läuft zu schnell.
Der rechte, "einzelschritt" will jedesmal angeklickt werden (bis zum KRAMPF im Finger), aber man kann schön die befehle und die auswirkungen verfolgen, versuchs mal.
O:) O:) Ich hab' nen Kumpel, dem versuch ich schon seit Jahren den Unterschied zwischen Bits und Bytes beizubiegen, leider nur begrenzter Erfolg O:) O:)
>>Ein Byte besteht aus 8 Bit, demzufolge ein Byteport aus 8 Ports.<<
Bei der Unit: Byteport1 aus ports 1-8, Byteport2 aus port 9-16.
Wie bei den LEDs kannst du auch die ports einzeln definieren, z.b.
define bus1 port[1] ... define bus8 port[8]
Wenn du viel schreiben willst, schreib so:
bus1=on
bus2=off
bus3=off
bus4=off
bus5=off
bus6=off
bus7=off
bus8=off
ich schreib :
bus=1
das ist funktionell das gleiche, erklärung siehe oben. O:)
bei gruppex ists auch so, entweder jede led einzeln oder alle 8 zusammen... (gruppex ist ein aus 8 bits bestehendes Byte)
Hmm ¿¿ 8-[Zitat:
Wenn ich das Programm starte (mit dem Jumper) dann gehen die LED´s Aus die vorher An wahren und die die An wahren gehen Aus. Aber alles per lauflicht!
Das mit ad1 auf grund hat nur den sinn, das das Prog immer durch den lp1-teil läuft, mehr gibts ja (erstmal) nicht.
Ich hab das ganze nur im simulator probiert, sehe aber keinen fehler :( :-k
::die '573er nennt man auch Latch, die an p9-11 angeschlossenen leitungen sind Latch-Enable, also Latch "ausgewählt"
die ports sind normal off (Latch gesperrt), der pulse befehl schaltet den port kurz auf "on", das daran angeschlossene Latch übernimmt die Daten vom Bus und gibt sie aus, bis zum nächsten puls. siehe auch bus_mit573.jpg.
Ich seh' grad noch:
wenn die leds nach+ angeschlossen sind, dann: Ja.Zitat:
Ist es richtig das normalerweise alle LED´s an sind,
sie dann aber nacheinander (per lauflicht) kurz ausgehen sollten?
Das Prog gibt ja ein einzelnes ON aus (und 7 mal OFF)
sollte das so sein, geht das einfach zu ändern:
ändere die drei zeilen : bus = latch1 (2,3)
in : bus = not latch1 (2,3), also NOT einfügen, das dreht die "Bits" um :D
so, erstmal Schluss für heute.
MfG Lutz
Danke für die Hilfe.
Ich werde mal weiter rumprobieren.