PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lauflicht mit Schieberegistern spinnt manchmal



BoondockDuck
15.03.2006, 20:07
guten morgen
das is jetzt eigentlich kein wahnsinnig hochkompliziertes problem, aber es wundert mich

ich hab ein einfaches lauflicht nach einem tutorial zusammengebastelt
http://www.moddingtech.de/tut_ledlauflicht1_01_de,59.html
das funktioniert soweit wie es soll. Nur wenn ich das lauflicht ausschalte und wieder einschalte dann läuft es zwar weiterhin wie es soll "auf- und abbauend von links nach rechts" nur dann ist es nicht so dass die leds gleichmäßig nebeneinander an sind sondern da is mal eine led an, eine aus, zwei an, eine aus, noch ein paar an usw... wenn ichs dann noch ein paar mal ein/ausschalte isses wieder normal

kann das an der stromversorgung liegen? ich benutzt bei 16 ultrahellen leds (ca. 0,32A) ein 300mA Netzteil 8-[

Madgyver
15.03.2006, 20:15
Ne, das liegt daran, dass beim ab und anschalten die einzelnen Registerelemente nicht alle auf "null" gehen, also noch irgend ein Mist darin "gespeichert" ist. Das liegt daran das die Eingänge ja eine Kapazität haben und wie ein Kondensator eine gewisse Zeit geladen bleiben können.

kalledom
15.03.2006, 21:07
Es liegt daran, daß der Pin 9 = Reset beim Einschalten nicht kurz auf Low gezogen wird, um alle Ausgänge auf 0 zu setzen.
Lösung: 100nF nach GND und 1kOhm nach Plus anschließen, dann gibt's beim Einschalten durch den leeren Kondensator kurz Low und damit Reset.

HPM
17.03.2006, 13:38
Hallo BoondockDuck,

ich weiß nicht, ob Du daran Interesse hast aber ich habe letzte Weihnachten für unseren Weihnachtsbaum vorm Haus so eine Steuerung mit einem Atmel Prozessor (AT90S2313) gebaut. Vom elektronischen Aufwand ist es nicht viel komplizierter, wie die Schaltung, die Du verwendet hast! Käme halt noch die Programmierung des Prozessors dazu.

Das Lauflicht läuft dann nicht nur in einer Richtung sondern Du kannst die verschiedensten Schaltfunktionen einfügen.
Bei mir läuft das Licht vorwärts normal, rückwärts normal, vorwärts invertiert, rückwärts invertiert, aller der Reihe nach an und dann wieder von hinten der Reihe nach aus u.s.w.

Dem Spieltrieb ist da keine Grenze gesetzt O:)

BoondockDuck
19.03.2006, 20:09
@hpm
danke, was meinst du mit interesse? also wenn du mir da mal ein paar infos drüber zuschicken könntest wäre das ganz nett von dir :)


Es liegt daran, daß der Pin 9 = Reset beim Einschalten nicht kurz auf Low gezogen wird, um alle Ausgänge auf 0 zu setzen.
Lösung: 100nF nach GND und 1kOhm nach Plus anschließen, dann gibt's beim Einschalten durch den leeren Kondensator kurz Low und damit Reset.bin ich dumm oder wieso bekomm ich das nicht hin?

also clear -> widerstand -> kondensator -> masse ?
wenn ja, dann entläd sich der elko doch nicht wieder nach dem erneuten ausschalten?

PICture
19.03.2006, 20:35
Hallo BoondockDuck!

Vielleicht hilft Dir die Skizze:



VCC
+
|....
| .
.-. |
10k| | - D
| | ^
'-' |
| .
+-------------> Reset Pin
|
10n ---
---
|
===
GND

Die Diode (D) beschleunigt nur das Entladen des C

(falls nötig).

MfG

kalledom
19.03.2006, 21:15
Genau wie PICture es gezeichnet hat. Die Diode brauchst Du nicht und ob Du 10nF mit 10k oder 100nF mit 1k nimmst ist Pott wie Deckel.

BoondockDuck
20.03.2006, 06:43
ok danke ... hab nen pott wie deckel gemacht :D

jetzt gehts so wie es gehen soll 8-[

HPM
20.03.2006, 14:43
Hi BoondockDuck,

"wenn Du interesse hast" Damit meine ich, dass ich erst meine alten Unterlagen mal sortieren muss um Das hier rein zu setzen!

Hier mal ein stück für den Anfang.

Ich habe mit dem Projekt mit µC Programmierung angefangen.



'************************************************* *****************************
'Name : Lauflicht5x.bas
'Purpose : Lauflicht für Weihnachtsbaum
'Version : V0.02
'Compiler : BasCom AVR 1.11.7.4
'
'Hardware (1) LED's bzw. Schaltverstärker
' an PB0 bis PB5
' (2) Schalttaster zur Hand/Auto- Steuerung
' an PD0 und PD1
'
'Chiptyp : AT90S2313
'************************************************* *****************************

$regfile = "2313def.dat" 'AT90S2313
$crystal = 4000000 'Quarz-Frequenz



Config Portb = Output 'PBx als Ausgänge
Config Portd = Input 'PDx als Eingänge

Dim W As Byte 'W= Werte in Lauflicht lesen
Dim I As Byte 'I= Schleife für 1 Durchgang
Dim J As Byte 'J= Vieviel mal Schleife

Dim Z As Byte 'Z= Zählerwert
Z = 1

Dim D As Byte
D = 20 'D= Anzahl der Schleifen

Dim T As Integer 'T= Taktzeit
T = 200

Portb = 63 ' alle Ports EIN
Wait 60 ' 60 sec Vorheizen

Auto:

Do

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Vor1
For I = 1 To 5
Read W
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Rueck1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Neg1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Neg2 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Add1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 10 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Wechs1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 12 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Kllauf1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 3 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J

For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Ende 'Zeiger auf Beginn der Daten setzen
For I = 1 To 2 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Wait 1
Next I
Next J

Loop

End




'+++++++++++++++++++++++++++++++++++++++++++
' Daten für verschiedene Lauflichtfunktionen
'+++++++++++++++++++++++++++++++++++++++++++


Vor1:
Data 33 , 34 , 36 , 40 , 48, '6 12345 einzenl vorwärts

Rueck1:
Data 48 , 40 , 36 , 34 , 33, '6 54321 einzeln rückwärts

Neg1:
Data 62 , 61 , 59 , 55 , 47, '6 12345 negiert einzeln

Neg2:
Data 47 , 55 , 59 , 61 , 62, '6 54321 negiert einzeln

Add1:
Data 32 , 33 , 35 , 39 , 47 , 63, '6 12345 addierend
Data 62 , 60 , 56 , 48 , '6 12345 subtrahierend

Wechs1:
Data 32 , 33 , 49 , 51 , 59 , 63, '6 1-15-152-1524-15243
Data 32 , 63 , 32 , 63 , 32 , 63, '6 3xalle

Kllauf1:
Data 37 , 42 , 52, '6 13-24-35

Ende:
Data 31 , 32, '6 12345 im Wechsel



Hand:

If Pind.1 = 0 Then
Goto Auto:
End If

If Pind.0 = 0 Then
Z = Z * 2
End If

If Z > 32 Then
Z = 1
End If

Portb = Z

Wait 1

Goto Hand:


Das ist der fertige Code, der bei mir im Steuergerät läuft.
Im Code ist eigentlich schon alles beschrieben.

Ich habe eine Doppelstockplatine gebaut.
Auf einer Platine ist der Prozessor und das 5V- Netzteil.

Auf der Anderen Platine ist das 230V Leistungsteil mit Solid State Relais. Damit habe ich die Kiste auf ein Minimum reduzieren können und die Verlustwärme hält sich in Grenzen.
Betrieben wird hiermit ein ca. 20m langer Lauflichtschlauch, der Weihnachten immer um den Weihnachtsbaum vorm Haus gehängt wird O:)

Lass dich nicht vom Code schrecken!
Als ich anfing war der Code vielleicht 10 Zeilen lang!

Das meinte ich mit Spieltrieb!!