Kleiderschrankbeleuchtung

dino03

Aktives Mitglied
27. Okt. 2008
6.760
20
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo zusammen,

das soll nun mein erstes Projekt des Jahres 2011 sein was ich dann auch mal
hoffentlich nicht aus Zeitmangel beiseite lege :rolleyes:

Also ... da man beim Kleiderschrank ja meißtens mit dem Hintern :p zur
Lichtquelle des Zimmers steht und dadurch schlecht sieht was sich im Schrank
so an Sachen tummelt hab ich mir überlegt etwas Licht ins Dunkel zu bringen.

Dafür hab ich mir bei ELV ein paar schöne LED-Leisten besorgt. Einschalten
wollte ich die ursprünglich über ganz normale Türkontakte für Schränke. Also
alles rein Elektrisch ohne hochgezüchtete Elektronik. Nur beim Anblick der
Türkontakte kam ich dann so ins grübeln ... so ein toller neuer Schrank und
dann soll ich den mit solchen ollen Schaltern verschandeln ? ... Nee ! Nix da !!

Also hab ich mir überlegt das ich Reed-Kontakte (20mm x 3mm Durchmesser)
versteckt einbaue (natürlich mit kleinen Magneten). Nur die haben einen
Nachteil. Bei offenen Türen sind die Kontakte geöffnet. Also kein Licht.
Außerdem können die kleinen Kontakte nicht sehr viel Strom ab. Also muß
eine Elektronik her ...
- normale Relais (brauchen viel Spulenstrom und sind beim schalten laut)
- Halbleiterrelais (SolidState Relais) :D die Lösung

Da aber die Anzahl der Türen ungleich der Anzahl der LED-Leisten und das
über normale Elektronik alles nicht frei definierbar ist hab ich den Entschluß
gefaßt es mit nem Controller zu machen. Zu erst hab ich an einen Tiny2313
gedacht. Beim durchrechnen der IO-Ports und der angeschlossenen Kontakte
und SolidStates wurde es aber recht eng. Also hab ich jetzt schweren Herzens
nen ATmega8 verwendet (was für eine Verschwendung :p ).

Hier mal ein paar erste Bilder der Platine ...
P1050760.JPG P1050761.JPG

Ich hab heute morgen erst damit angefangen. Es existiert auch noch kein
Schaltplan oder irgendetwas anderes. Die Bauteile wurden so "on the fly"
auf die Platine gelötet wie es am besten gepaßt hat :eek: :rolleyes:

Der Trafo ist in "Durchsteck-Version" :D Weil er anders von der Höhe nicht
ins Gehäuse paßt.

Gruß
Dino
 
Hm...

und das alles ohne Farbdisplay (Touch-screen), Schnittstelle zum PC (evtl. über einen Internetzugang, dann kann man mit 'nem Browser drauf) und Betriebsdatenerfassung mit statistischer Erhebung der Öffnungshäufigkeit und Dauer?

Die Kontakte sollten unbedingt zweikanalig ausgelegt werden, um dort Fehler auszuschließen bzw. festzustellen. Damit kommt dann natürlich noch ein Störmeldesystem (unterschiedliche Prioritäten) zum Einsatz, was eine genaue Uhrzeit (DCF77 oder mindestens Echtzeituhr) benötigt.

Da wäre es eigentlich nur konsequent, eine Bedienerdatenbank mit zu integrieren, damit Bedienfehler zugeordnet werden können (Cassio hat da etwas mit RFID gemacht, dann muss sich niemand vor dem Öffnen einer Tür umständlich einloggen). Nur so kann sicher festgestellt werden, bei welchen Personen bzgl. der Schranktürenbedienung noch Schulungsbedarf besteht.

Ich will doch hoffen, dass Du wenigstens eine umgebungslichtabhängige Dimmung vorsiehst.
Temperaturüberwachung der einzelnen LEDs und USV zumindest für die Logik setze ich jetzt mal voraus.

Tut mir leid, Dir das jetzt sagen zu müssen, aber mit dem ATmega8 wirst Du nicht weit kommen.

Sorry für OT, mir ist langweilig :p

Schlemischen Gruss
Markus
 
Hallo,

Ich hoffe dass ich hier kommentieren darf, wenn nicht, dann löscht es einfach.

Ein sehr schönes Projekt hast du da angefangen. Du erinnerst mich gerade an das was ich meinem Kleiderschrank noch antun sollte :) . Du könntest ja dem ganzen noch ein Lcd und einen Dimmodus usw. verpassen falls du (Milch-)Glasscheiben an den Schränken hast.

Edit: Da war einer schneller :D

Mfg,
Flo
 
Du könntest ja dem ganzen noch ein Lcd und einen Dimmodus usw. verpassen falls du (Milch-)Glasscheiben an den Schränken hast.
Die SolidStates haben Nullspannungsschalter. Also nix mit Dimmer. Dafür
schalten sie dann auch schön "sanft" die Last ein. Das ist ein ganz normales
Schalt-Stecker-Netzteil für die LED-Leisten.

Im Endeffekt werden also 6 Kontakte für die Türen, 2 für Schubladen und
ein Tretschalter für die Außenbeleuchtung sein. Im Schrank sind 3 LED-Leisten
für die Kleiderstangen und 2 LED-Leisten für die Spiegel in den Türen (damit
man sieht was man sich da angezogen hat).

Es sind also 6 Lastzweige und 9 Reeds/Schalter die in einer Matrix miteinander
kompiniert werden. Außerdem soll über einen DS18S20 die Temperatur der
SolidStates bzw des Trafos gemessen werden und notfalls die Last abgeschaltet
oder über ne LED im Tretschalter Temperaturalarm gegeben werden. Mehr
an sich nicht. Evtl mach ich noch ne Debug-Ausgabe über den UART im
Mega8. Also nix spektakuläres. Eigentlich schon Verschwendung von nem
Mikrocontroller ;)

Gruß
Dino
 
Hi Dino,

Eigentlich schon Verschwendung von nem
Mikrocontroller ;)
warum das denn?
Jede andere Lösung wäre von den Bauteilen her deutlich teurer. Insofern genau die richtige Entscheidung. Ein Mikrocontroller muss ja nun nicht immer an der Grenze dessen betrieben werden, was er kann. Er kann sogar sinnvoll sein, wenn er lediglich 10 Zeilen Code enthält.

Schönen Gruss
Markus
 
Hi,

sowieso nicht. Ich ärger ja lieber selber ;)

Gegenüber den Fotos ist jetzt schon ein 78L05 drauf und ich plane grad die
optimale Position von 6 Kontroll-Leds für die SolidStates (in Reihe damit)
und die der Transistoren und des Atmels. 20mA pro SolidState für die
Ansteuerung der Eingangsseite möchte ich dem Atmel nicht mehr antun.
Ich werde aber wohl auf ca 15mA Pro SolidState runtergehen.

Es sind welche von Sharp (S202S02).
Datenblatt : Anhang anzeigen S202_Sharp_SolidStates.pdf

Gruß
Dino

und nun gehts ... :sleep:
 
Hi dino,
also ich denke mal, dass trotz all der Lästerei der lieben Forumkollegen
das Projekt ein interessantes Lehrstück gerade auch für BASCOM-Einsteiger
werden wird.
Und wer Dich kennt weiss, dass da ein schön übersichtlicher, gut kommentierter und somit leicht verständlicher Code rauskommt :rolleyes:.
Und egal wie sinnvoll diese Anwendung auch sei - :cheers: -
irgendwer kann dabei bestimmt was dazu lernen - hoffe ich jedenfalls :D.

Übrigens wie wär's mit ner audiomäßigen WAV-wiedergabe, ich denke da
so an Geräusche wie die Türen auf der Enterprice, oder die bei dem Film
"Per Anhalter durch die Galaxis" waren auch nicht schlecht :D.

Grüssle
Wolfgang
 
Die SolidStates haben Nullspannungsschalter. Also nix mit Dimmer.

Hhmm, was ist denn mit Phasenabschnittsteuerung, müsstes ja eh bei Schaltnetzteilen oder irre ich mich da gerade :confused: .

Aber hast recht, meist reicht dazu schon die kleine "Einschaltverzögerung" der LED-Netzteile.

Meine nächste LED-Umbauaktion wird meine Kühlschrankbeleuchtung sein, leuchtet ja den ganzen Tag:p

LG Guido
 
Hei Guido!

Meine nächste LED-Umbauaktion wird meine Kühlschrankbeleuchtung sein, leuchtet ja den ganzen Tag

Was für einen Kühlschrank hast Du? Meiner macht das Licht selbständig aus, wenn ich die Kühlschranktür schließe. Oder kühlst Du mit Deinem Kühlschrank Deine Küche und hast die ganze Zeit die Tür auf?

Ich meine, die Ostfriesen haben ja anscheinend auch keinen Kühlschrank weil sie nicht glauben, dass beim Schließen der Tür das Licht ausgehet.

Grüße,
Markus
 
Hi,

Hhmm, was ist denn mit Phasenabschnittsteuerung, müsstes ja eh bei Schaltnetzteilen oder irre ich mich da gerade :confused: .

Aber hast recht, meist reicht dazu schon die kleine "Einschaltverzögerung" der LED-Netzteile.
Die SolidStates haben TRIACs drin. Daher würde sowieso nur eine PhasenANschnitt
gehen. Da er aber nen Nullspannungsschalter dran hat kann er nur beim
Nulldurchgang gezündet werden (ok .. sehr kurz danach). Also kann man auch
keine Phasen anschneiden. Es geht also nur volle Halbwellen durchschalten oder
nicht. Also nur ne Schaltfunktion. Reicht mir aber auch.
Durch den Nullspannungsschalter werden die Netzteile der LED-Leisten
sanft eingeschaltet. Die Elkos der Stecker-Schaltnetzteile laden sich also
nicht mit nem Stromstoß auf. Das war mir wichtig.

also ich denke mal, dass trotz all der Lästerei der lieben Forumkollegen
das Projekt ein interessantes Lehrstück gerade auch für BASCOM-Einsteiger
werden wird.
das bischen Lästerei stört mich nicht weiter :D
Das Programm wird bei dem bischen Funktion recht einfach bleiben. Also
für Anfänger wird das bestimmt ne schöne Fundgrube ;)

Und wer Dich kennt weiss, dass da ein schön übersichtlicher, gut kommentierter und somit leicht verständlicher Code rauskommt :rolleyes:.
Das mach ich alleine schon aus dem Grund, damit ich nach nem Jahr auch
noch durchfinde.

Und egal wie sinnvoll diese Anwendung auch sei - :cheers: -
irgendwer kann dabei bestimmt was dazu lernen - hoffe ich jedenfalls :D.
Hoffe ich auch mal ;)

Übrigens wie wär's mit ner audiomäßigen WAV-wiedergabe, ich denke da
so an Geräusche wie die Türen auf der Enterprice, oder die bei dem Film
"Per Anhalter durch die Galaxis" waren auch nicht schlecht :D.
Ich könnte mir auf den Kleiderschrank ne große 7Segment-Anzeige mit
42
draufbauen :eek: :p

Gruß
Dino
 
Hi,

der Mega8 ist auf der Platine, der 78L05 sitzt auch schon mit ein wenig
Kondensatorgebamsel drauf, Die Treiber und Kontroll-Leds für die SolidStates
sind verlötet und hängen am Mega8 und ein wenig Reset-Zeugs ist auch
fertig. Ich werd wohl die nächsten Tage mal ein aktuelles Foto hochladen.

Gruß
Dino
 
Übrigens wie wär's mit ner audiomäßigen WAV-wiedergabe, ich denke da
so an Geräusche wie die Türen auf der Enterprice, oder die bei dem Film
"Per Anhalter durch die Galaxis" waren auch nicht schlecht :D.



Gute Idee, ich bringe meiner Betty gerade das Sprechen über Sprachsynthese via TTS bei.

Grüße,
Markus
 
Hallo,

die zentrale Hardware ist fertig ...

P1050804.JPG P1050805.JPG

Der Trafo wird auch kaum warm (Gruß an Cassio ;) )

Also es sind 6 SolidStates von Sharp (S202S02) mit Nillspannungsschalter
verbaut. Der Trafo hat 6V/1VA (166mA). Die Gerätesicherung sollte erst mal
mit T2.5A für die LED-Leisten reichen. Der Mega8 läuft im Moment mit internem
Takt. Bei evtl auftretenden Problemen kann ich aber noch nen Quarz anschließen.
Für die Temperaturkontrolle und Notabschaltung hab ich nen DS18S20
zwischen den SolidStates und dem Trafo postiert. Für die Stabilisierung
hab ich nen 78L05 Regler genommen (100mA). Der versorgt aber eigentlich
nur den Mega8 und den DS18S20. Der Rest wird direkt aus den gesiebten
10V (Spannung nach der Gleichrichtung und Siebung) versorgt. Für die
Programmierung über ISP ist von außen ein MicroMatch-Verbinder mit 6 Pins
und für das Debugging über TTL-UART ein MicroMatch mit 4Pins zugänglich.
In Reihe mit den SolidState-LEDs habe ich noch Kontroll-LEDs gelegt. Der
Strom fließt sowieso. Ob ich den Rest der Spannung nun mit Widerständen
verbrate oder etwas kleinere Widerstände und zusätzlich Kontroll-LEDs
nehme bleibt sich gleich. Ich hab aber so noch ne Möglichkeit zu sehen,
welches der SolidStates angesteuert wird.

Jetzt fehlt noch die Software ...

Schaltplan werde ich demnächst mal reinstellen ...

Gruß
Dino
 
Hallo,

und hier mal der Schaltplan ...

Kleiderschrankbeleuchtung_v2.gif

ACHTUNG !! Hier ist Netzspannung im Spiel !! Die Steuerung ist zwar galvanisch
vom Lastteil getrennt, aber das heißt nicht das man dann unvorsichtig sein darf.

Diese Schaltung ist KEIN PROJEKT FÜR BASTEL-ANFÄNGER !

Ich habe für sämtliche Isolierungen temperaturfeste Isolierschläuche und
Gewebeschläuche verwendet. Außerdem sind auf der Platine zusätzliche
Isolierfelder zwischen der Niederspannungs- und der Netzspannungsseite
angefertigt worden. Die Schaltung wird noch vor dem entgültigen Einbau
mit einer Temperatursicherung versehen um gegen jegliche Überaschungen
abgesichert zu sein.

EDIT : Im Schaltplan hat sich ein Rechenfehler eingeschlichen. Die Widerstände
für die LEDs/SolidStates waren mit 180 Ohm etwas klein. Ich habe mit 5V als
Betriebsspannung gerechnet und sie aber nachher an die unstabilisierte 10V
angeschlossen. Also zuviel Strom der die Spannung zusammenbrechen lassen
hat. Richtig sind 470 Ohm ! Siehe Berechnung ...
10V - 1,2V (SSR) - 1,2V (LED) = 7,6V Rest
7,6V / 0,015A = 506 Ohm.
Da die SolidStates so um die 15-20mA brauchen hab ich mich für 470 Ohm
entschieden.

Das ganze hat sich folgendermaßen ausgewirkt ...
Die Spannung am Trafo der nur 166mA liefern kann ist stark zusammengebrochen.
Der Regler hat dadurch teilweise nur noch 4,1V geliefert. Mit einer Einstellung
von 2,7V für den BrownOutDetector im Atmel hat er zwar keinen Reset gemacht.
Aber wenn man nun den AVRISPmk2 angeschlossen hat, dann wurde der Atmel
ab und zu (im Rhytmus der Schwankungen) zurückgesetzt. Ohne den AVRISPmk2
lief alles sauber durch.

Gruß
Dino
 
Die Basisstruktur des Programms ist jetzt auch fertig. Also die Definition der
Ports mit den Einstellungen der Portregister und ein wenig Kleinkram. Morgen
werde ich dann wohl mal ein wenig die Kontroll-LEDs blinken lassen um zu sehen
ob alles lebt ;)

Gruß
Dino
 
Das erste Testprogramm ...

Hi,

also hier ein erstes Testprogramm mit ein wenig Portgeblinke ...


CodeBox BASCOM

' #################################################
' ##### Kleiderschrankbeleuchtung mit ATmega8 #####
' #################################################
' (c) 20.08.2010 by Dino
'
' Mega8-Kleiderschrankbeleuchtung (Steuerung)
'
'


' Prozessor ATmega8 - Definitionsdatei fuer internen uC-Aufbau
$regfile = "m8def.dat"
' 8,000MHz interner Takt
$crystal = 8000000
' 16,000MHz Quarztakt
'$crystal = 16000000

' Groesse des Hardwarestacks fuer Ruecksprungadressen (SUBs/ISRs/...)
$hwstack = 40
' Groesse des Softwarestacks fuer Adressen von Uebergabeparameter an SUBs
$swstack = 32
' Speichergroesse fuer Uebergabeparameter an Unterprogramme, lokale Variablen
' und temporaere Werte
$framesize = 32
' Wenn man die Variablen selber sauber setzt kann man sich den Code von
' BASCOM fuer eine Speicherreinigung sparen.
$noramclear


' ################################
' ##### DEFINITION DER PORTS #####
' ################################
'
' PB0 ------- nix
' PB1 -- 1Wire Dallas DS18S20
' PB2 ------- nix
'
' PB3 -- Reed-Gruppe 1 -- MOSI |
' PB4 -- Reed-Gruppe 2 -- MISO | ISP-Port
' PB5 -- Reed-Gruppe 3 -- SCK |
'
' PB6 -- XTAL1 | Systemquarz
' PB7 -- XTAL2 | 16,000MHz
'
' ===== PortB =================================================================
' I=7= I=6= I=5= I=4= I=3= I=2= I=1= I=0= => 00000000 => DDRB (In/Out)
' XTAL2 XTAL1 RGp3 RGp2 RGp1 ---- 1Wir ---- => 00111000 => PORTB (PullUp/init)
' x x | | | | | |
'
Ddrb = &B0000_0000
Portb = &B0011_1000
'
'
'
' PC0 -- Last 1 SSR1
' PC1 -- Last 2 SSR2
' PC2 -- Last 3 SSR3
' PC3 -- Last 4 SSR4
' PC4 -- Last 5 SSR5
' PC5 -- Last 6 SSR6
' PC6 -- RESET | ISP-Port
'
' ===== PortC =================================================================
' I=7= I=6= O=5= O=4= O=3= O=2= O=1= O=0= => 00111111 => DDRC (In/Out)
' ---- Reset SSR6 SSR5 SSR4 SSR3 SSR2 SSR1 => 00000000 => PORTC (PullUp/init)
' x x | | | | | |
'
Ddrc = &B0011_1111
Portc = &B0000_0000
'
'
'
' PD0 -- RxD
' PD1 -- TxD
' PD2 ------- nix
' PD3 ------- nix
' PD4 -- Reed Zeile 1
' PD5 -- Reed Zeile 2
' PD6 -- Reed Zeile 3
' PD7 -- Reed Zeile 4
'
' ===== PortD =================================================================
' O=7= O=6= O=5= O=4= I=3= I=2= O=1= I=0= => 11110010 => DDRD (In/Out)
' RZe4 RZe3 RZe2 RZe1 ---- ---- TxD RxD => 11111101 => PORTD (PullUp/init)
' | | | | | | | |
'
Ddrd = &B1111_0010
Portd = &B1111_1101
'
'






' ###############################################
' ##### Hauptschleife Start #####################
' ###############################################
Do


Portc = &B0011_1111 ' Alle Bits am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_0000 ' Alle Bits am Port auf 0 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_0001 ' Bit0 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_0010 ' Bit1 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_0100 ' Bit2 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_1000 ' Bit3 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0001_0000 ' Bit4 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0010_0000 ' Bit5 am Port auf 1 setzen
Waitms 200 ' 200ms warten

Portc = &B0000_0000 ' Alle Bits am Port auf 0 setzen
Waitms 200 ' 200ms warten

Loop
' ###############################################
' ##### Hauptschleife Ende ######################
' ###############################################



' ###############################################
' ##### Programm Ende ###########################
' ###############################################
End

das ganze "LED blinken lassen" ist also doch nicht so unsinnig ;)
Man kommt immer wieder darauf zurück :D

Gruß
Dino
 
Vorwiderstände geändert ... / AVRISPmk2-Reset

Hallo,

das Phänomen wäre was für Cassio, Markus, Knickohr und Dirk ;)
Im Beitrag #15 ist es beschrieben. Es tritt nur mit dem
AVRISPmk2 auf, hat aber auch mit der Spannungsversorgung der Schaltung
zu tun. Kurzzeitige Spannungseinbrüche der Versorgungsspannung können
dazu führen das der AVRISPmk2 eine kleine Zeit später den Atmel resettet.
Hattet ihr da nicht mal ein Phänomen ?

Könnte es daran liegen das er die Spannungsversorgung seiner Ausgangstreiber
nach der Messung der Versorgungsspannung des Targets neu einstellt ?

Gruß
Dino
 
Die Software läuft ...

Hallo zusammen,

wenn man mal ein wenig Zeit hat, dann bekommt man auch was fertig :D

Also hier ist sie, die Software zum Projekt (wegen dem Forum um einige
Bemerkungen gekürzt) ...


CodeBox BASCOM

' #################################################
' ##### Kleiderschrankbeleuchtung mit ATmega8 #####
' #################################################
' (c) 15.01.2011 by Dino
'

' Prozessor ATmega8 - Definitionsdatei fuer internen uC-Aufbau
$regfile = "m8def.dat"
' 8,000MHz interner Takt
$crystal = 8000000
' 16,000MHz Quarztakt
'$crystal = 16000000

' Groesse des Hardwarestacks fuer Ruecksprungadressen (SUBs/ISRs/...)
$hwstack = 32
' Groesse des Softwarestacks fuer Adressen von Uebergabeparameter an SUBs
$swstack = 32
' Speichergroesse fuer Uebergabeparameter an Unterprogramme, lokale Variablen
' und temporaere Werte
$framesize = 32
' Wenn man die Variablen selber sauber setzt kann man sich den Code von
' BASCOM fuer eine Speicherreinigung sparen.
$noramclear


' ####################################
' ##### DEFINITION DER VARIABLEN #####
' ####################################
'
' Array fuer den 1Wire-Sensor
Dim Ds18s20(9) As Byte

' Variablen fuer DS18S20 Temperatur
Dim Ds_temp As Integer ' 2 Bytes : -32768 bis +32767
Dim Ds_count As Byte '
Dim Temperatur As Single ' 4 Bytes : 1.5 x 10^-45 bis 3.4 x 10^38

' ne Zaehlervariable
Dim Count As Byte
Dim Lpcnt As Byte ' Schleifenzaehler / LoopCounter

' Variablen fuer Reed-Scan
Dim Reed_out As Byte
Dim Reed_tmp As Byte
Dim Reed_in1 As Byte
Dim Reed_in2 As Byte
Dim Reed_ch1 As Byte
Dim Reed_ch2 As Byte
Dim Reed_in1_alt As Byte
Dim Reed_in2_alt As Byte
Dim Reed_open1 As Byte
Dim Reed_open2 As Byte

'
Reed01 Alias Reed_open1.2
Reed02 Alias Reed_open1.5
Reed03 Alias Reed_open1.1
Reed04 Alias Reed_open1.4
Reed05 Alias Reed_open1.0
Reed06 Alias Reed_open1.3
Reed07 Alias Reed_open2.2
Reed08 Alias Reed_open2.5
Reed09 Alias Reed_open2.1
Reed10 Alias Reed_open2.4
Reed11 Alias Reed_open2.0
Reed12 Alias Reed_open1.3
Last1 Alias Portc.0
Last2 Alias Portc.1
Last3 Alias Portc.2
Last4 Alias Portc.3
Last5 Alias Portc.4
Last6 Alias Portc.5

' ################################
' ##### DEFINITION DER PORTS #####
' ################################
'
' PB0 ------- nix
' PB1 -- 1Wire Dallas DS18S20
' PB2 ------- nix
'
' PB3 -- Reed-Gruppe 1 -- MOSI |
' PB4 -- Reed-Gruppe 2 -- MISO | ISP-Port
' PB5 -- Reed-Gruppe 3 -- SCK |
'
' PB6 -- XTAL1 | Systemquarz
' PB7 -- XTAL2 | 16,000MHz
'
' ===== PortB =================================================================
' I=7= I=6= I=5= I=4= I=3= I=2= I=1= I=0= => 00000000 => DDRB (In/Out)
' XTAL2 XTAL1 RGp3 RGp2 RGp1 ---- 1Wir ---- => 00111000 => PORTB (PullUp/init)
' x x | | | | | |
'
Ddrb = &B0000_0000
Portb = &B0011_1000
'
' ===== DS18S20 Temperatursensor =====
Config 1wire = Portb.1
'
'
' PC0 -- Last 1 / SSR1 (SolidStateRelais1)
' PC1 -- Last 2 / SSR2
' PC2 -- Last 3 / SSR3
' PC3 -- Last 4 / SSR4
' PC4 -- Last 5 / SSR5
' PC5 -- Last 6 / SSR6
' PC6 -- RESET | ISP-Port
'
' ===== PortC =================================================================
' I=7= I=6= O=5= O=4= O=3= O=2= O=1= O=0= => 00111111 => DDRC (In/Out)
' ---- Reset SSR6 SSR5 SSR4 SSR3 SSR2 SSR1 => 00000000 => PORTC (PullUp/init)
' x x | | | | | |
'
Ddrc = &B0011_1111
Portc = &B0000_0000
'
'
'
' PD0 -- RxD
' PD1 -- TxD
' PD2 ------- nix
' PD3 ------- nix
' PD4 -- Reed Zeile 1
' PD5 -- Reed Zeile 2
' PD6 -- Reed Zeile 3
' PD7 -- Reed Zeile 4
'
' ===== PortD =================================================================
' O=7= O=6= O=5= O=4= I=3= I=2= O=1= I=0= => 11110010 => DDRD (In/Out)
' RZe4 RZe3 RZe2 RZe1 ---- ---- TxD RxD => 11111101 => PORTD (PullUp/init)
' | | | | | | | |
'
Ddrd = &B1111_0010
Portd = &B1111_1101
'
' ===== UART (TTL) initialisieren =============================================
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 16
Open "com1:" For Binary As #1
Clear Serialin

'

' ======= Porttest in der Startphase =======
Portc = &B0000_0000 ' Alle Bits am Port auf 0 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_0001 ' Bit0 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_0010 ' Bit1 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_0100 ' Bit2 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_1000 ' Bit3 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0001_0000 ' Bit4 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0010_0000 ' Bit5 am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_0000 ' Alle Bits am Port auf 0 setzen
Waitms 200 ' 200ms warten
Portc = &B0011_1111 ' Alle Bits am Port auf 1 setzen
Waitms 200 ' 200ms warten
Portc = &B0000_0000 ' Alle Bits am Port auf 0 setzen
Waitms 200 ' 200ms warten
' ======= Porttest Ende =======

' ===== Startmeldung auf dem UART ausgeben =====
Print #1 , "Start"






Lpcnt = 0
' ###############################################
' ##### Hauptschleife Start #####################
' ###############################################
Do


Waitms 50 ' 100ms warten

If Lpcnt > 40 Then
Gosub Ds18s20_temp ' Temperatur einlesen
Gosub Ds18s20_mess ' Messung starten
Lpcnt = 0
If Temperatur > 75 Then
Print #1 , "Uebertemperatur! Notabschaltung!"
End If
End If
Incr Lpcnt

Gosub Reedscan



If Temperatur > 75 Then
Portc = &B0000_0000 ' Notabschaltung ! Alles SolidStates ausschalten
Else


' ========== Linke Seite ==========
' ===== Reed-Kontakt 01 verarbeiten =====
' ===== Reed-Kontakt 07 verarbeiten =====
If Reed01 = 1 Then
Last1 = 1
Elseif Reed07 = 1 Then
Last1 = 1
Else
Last1 = 0
End If

' ========== Mitte und Laden ==========
' ===== Reed-Kontakt 02 verarbeiten =====
' ===== Reed-Kontakt 03 verarbeiten =====
If Reed02 = 1 Then
Last2 = 1
Elseif Reed03 = 1 Then
Last2 = 1
Elseif Reed05 = 1 Then
Last2 = 1
Elseif Reed06 = 1 Then
Last2 = 1
Else
Last2 = 0
End If

' ===== Spiegelleuchte Mitte/Links =====
If Reed02 = 1 Then
Last4 = 1
Else
Last4 = 0
End If

' ===== Spiegelleuchte Mitte/Rechts =====
If Reed03 = 1 Then
Last5 = 1
Else
Last5 = 0
End If

' ========== Rechte Seite ==========
' ===== Reed-Kontakt 04 verarbeiten =====
' ===== Reed-Kontakt 08 verarbeiten =====
If Reed04 = 1 Then
Last3 = 1
Elseif Reed08 = 1 Then
Last3 = 1
Else
Last3 = 0
End If

' ========== Beleuchtung Aussen (Konsole) ==========
' ===== Reed-Kontakt 09 verarbeiten =====
If Reed09 = 1 Then
Last6 = 1
Else
Last6 = 0
End If

End If


Loop
' ###############################################
' ##### Hauptschleife Ende ######################
' ###############################################



' ============================================
' ===== Sub fuer DS18S20 Messung starten =====
' ============================================
Ds18s20_mess:
1wreset ' 1Wire-Bus zuruecksetzen
1wwrite &HCC ' Alle 1Wire-Devices ansprechen
1wwrite &H44 ' Temperaturmessung starten
Return



' ================================================
' ===== Sub fuer DS18S20 Temperatur einlesen =====
' ================================================
Ds18s20_temp:
1wreset ' 1Wire-Bus zuruecksetzen
1wwrite &HCC ' Alle 1Wire-Devices ansprechen
1wwrite &HBE ' Scratchpad einlesen

For Count = 1 To 9
Ds18s20(count) = 1wread() ' Scratchpad in Array uebertragen
' Print #1 , Count ; " - " ; Ds18s20(count)
Next

If Ds18s20(9) = Crc8(ds18s20(1) , 8) Then ' Wenn CRC8 korrekt dann Berechnung starten

Ds_temp = Makeint(ds18s20(1) , Ds18s20(2)) ' LSB und MSB zu 16Bit-Integer zusammensetzen

' ===== Ab hier eine genaue Berechnung =====
' Bemerkungen wegen Forum weggekürzt

' ===== oder eine Berechnung auf 0,5 Grad genau =====
Temperatur = Ds_temp / 2 ' Nachkommateil erzeugen

Print #1 , "Temperatur : " ; Temperatur ; "deg"
Else
Print #1 , "DS18S20 Messfehler"
End If

Return



' ===============================
' ===== Eingaenge abscannen =====
' ===============================
Reedscan:
' PD.7 , 6 , 5 , 4 => Ausgaenge zu den Dioden
' PB.5 , 4 , 3 => Eingaenge mit PullUps
'
' Reeds sind bei geschlossenen Tueren geschlossen (Eingang = 0)
'
'
Portd.4 = 0 ' Ports fuer die erste Aktion definieren
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1
Waitms 1 ' Ports beruhigen lassen
Reed_tmp = Pinb ' Einlesen
Shift Reed_tmp , Right , 3 ' Bits 5-3 auf 2-0 schieben (3 Positionen nach rechts)
Reed_in1 = Reed_tmp Or &B1111_1000 ' geschlossene Reeds als 0 uebrig lassen

Portd.4 = 1 ' Ports fuer die naechste Aktion definieren
Portd.5 = 0
Waitms 1 ' Ports beruhigen lassen
Reed_tmp = Pinb Or &B1100_0111 ' Einlesen und geschlossene Reeds als 0 uebrig lassen
Reed_in1 = Reed_in1 And Reed_tmp ' die ersten 3 Reeds mit den naechsten zusammenfuegen

' === die ersten 3 Stecker mit 6 Reeds sind fertig. Nun die naechsten 3 Stecker mit 6 Reeds einlesen

Portd.5 = 1 ' Ports fuer die naechste Aktion definieren
Portd.6 = 0
Waitms 1 ' Ports beruhigen lassen
Reed_tmp = Pinb ' Einlesen
Shift Reed_tmp , Right , 3 ' Bits 5-3 auf 2-0 schieben (3 Positionen nach rechts) ' Bits 5-3 auf 2-0 schieben (3 Positionen nach rechts)
Reed_in2 = Reed_tmp Or &B1111_1000 ' geschlossene Reeds als 0 uebrig lassen

Portd.6 = 1 ' Ports fuer die naechste Aktion definieren
Portd.7 = 0
Waitms 1 ' Ports beruhigen lassen
Reed_tmp = Pinb Or &B1100_0111 ' Einlesen und geschlossene Reeds als 0 uebrig lassen
Reed_in2 = Reed_in2 And Reed_tmp ' die ersten 3 Reeds mit den naechsten zusammenfuegen

Portd.7 = 1

' Change Eingang
' ---xor-- ---in---
' v v Reed geschlossen = 0
' 00000000 11111111
' 00010000 11101111 geaendert auf zu
' 00000000 11101111 ist jetzt zu
' 00010000 11111111 geaendert auf offen
' 00000000 11111111 ist jetzt offen
' 654321 654321

Reed_ch1 = Reed_in1 Xor Reed_in1_alt ' Bit bei Aenderung = 1 sonst 0
Reed_tmp = Reed_in1 Or Reed_ch1 ' Prellen (Aenderung wegen XOR auf 1) als Offen hinzufuegen
Reed_open1 = Reed_tmp And &B0011_1111 ' alle anderen Bits auf 0 setzen

Reed_ch2 = Reed_in2 Xor Reed_in2_alt ' Bit bei Aenderung = 1 sonst 0
Reed_tmp = Reed_in2 Or Reed_ch2 ' Prellen (Aenderung wegen XOR auf 1) als Offen hinzufuegen
Reed_open2 = Reed_tmp And &B0011_1111 ' alle anderen Bits auf 0 setzen

' Reed_open1 --> -- -- 02 04 06 01 03 05
' Reed_open2 --> -- -- 08 10 12 07 09 11

If Reed_in1_alt <> Reed_in1 Then
Print #1 , "-- -- 02 04 06 01 03 05 : " ; Bin(reed_open1) ; " " ; Bin(reed_ch1)
End If
If Reed_in2_alt <> Reed_in2 Then
Print #1 , "-- -- 08 10 12 07 09 11 : " ; Bin(reed_open2) ; " " ; Bin(reed_ch2)
End If

Reed_in1_alt = Reed_in1 ' Fuer naechsten Durchlauf sichern
Reed_in2_alt = Reed_in2 ' um Aenderungen erkennen zu koennen

Return




' ###############################################
' ##### Programm Ende ###########################
' ###############################################
End


Das Programm habe ich mit einer BASCOM-Demo v1.11.9.8 kompiliert und es
verbraucht 36% Flash. Ist also auch mit kostenloser Umgebung zu bearbeiten.

Hier nochmal vollständig als Download ... Anhang anzeigen Kleiderschrankbeleuchtung_110117.bas

Das ist der selbstgemachte Stecker für die UART-Debug-Schnittstelle.
P1050806.JPG P1050807.JPG
Da habe ich mich auf einen 4poligen MicroMatch festgelegt über den GND,
Vcc, RxD und TxD laufen. Damit ich auch längenmäßig durch das Gehäuse
komme mußte ich mir ein eigenes "Griffgehäuse" bauen das den Stecker
verlängert. Sonst ist es eher eine Art Pfostenstecker.

Und hier das gute Stück mal in zusammengeschraubter Version ...
P1050808.JPG

hardwaretechnisch ist es fertig (bis auf die Thermosicherung) und die
Software ist eigentlich auch zu 95% fertig. Es fehlt lediglich die Einbindung
des Fußschalters für die Konsolenbeleuchtung und die Ansteuerung der
Warn-LED bei Temperaturalarm.

Gruß
Dino
 
Hi Dino und Cassio,

na, Ihr Beiden, schöne Projekte in der von Euch gewohnten Qualität.

Eure Programme hab ich nur kurz überflogen, ich will da ja noch selber durch. Siehste Dino, nu biste voll in der Bascom- Welt angekommen.:rolleyes:

Was gäbe es da zu nörgeln? Vielleicht nur am Porttest. Entweder läuft der AVR oder nicht. Eine Pause von 200- 500ms nach dem kompletten Init ist jedoch sinnvoll, damit der, wenn auch schnelle, Atmel sich "sammeln" kann.;) mach ich jedenfalls so.


Grüsse,

Michael
 

Ü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)