Hallo!
Ich möchte mein erstes Programm einer Prüfung unterziehen lassen!
Folgender Hintergund:
Ich habe letztes Jahr ein Haus gekauft. Dies verfügt über einen Keller
mit Drainage. Diese kann man über einen Kontrollschacht erreichen, indem
auch eine Pumpe arbeitet.
Genau diese Pumpe hatte einen Defekt. Dadurch sammelte sich im Winter
viel Wasser in der Drainage an und ich sah es erst, als es fast zu spät
war. Nämlich erst am Mauerweg IM Keller...
Der Deckel des Schachts ist aus Beton. Nun hatte ich in diesen Deckel
ein Loch gebohrt und eine Duo-LED (rot/grün) eingeklebt. Verwendet habe
ich diesen Levelsensor
http://www.reichelt.de/Reedrelais-Magnete/LEVELSENSOR-1/index.html?;ACTION=3;LA=444;GROUP=C31;GROUPID=3291;ARTICLE=27690;START=0;SORT=preis;OFFSET=500;SID=11Tfcb6H8AAAIAABI2W@0fc838750c363042ba9d3fb67517d8182
als Schliesser und zwar 2x.
Diese sind so montiert, dass unterhalb eines Füllstands die rote LED
leuchtet und oberhalb des Füllstands die grüne LED leuchtet. Es liegen
somit immer unterschiedliche Schaltzustände vor (nicht ganz; es gibt
auch einen kurzzeitigen Füllstand da sind beide geschlossen).
Tja, die Schaltung war im Prinzip nur eine Leitungsunterbrechung durch
die beiden Schwimmschalter. Nicht besonders dolle!
Nun habe ich mir folgendes gedacht:
Sensoren bleiben wie gehabt, aber über einen ATmega8 oder ATtiny13 wird
das ganze vernünftig gesteuert.
Ich habe mich für das Anschliessen der Eingänge über
Pulldown-Widerstände entschieden, da ich der Meinung bin, dass die
aussagekräftige grüne LED nur dann leuchten sollte, wenn ein Strom
fliesst, also bei einer Unterbrechung der Leitung auf gar keinen Fall
die grüne LED leuchtet.
Ich möchte gerne was lernen und da dachte ich mir, dass dieses Projekt
nicht schlecht wäre! (Im Moment scheint meine momentane Schaltung nicht
mehr funktionieren zu wollen...)
Danke und Gruß
Christoph
Achja:
sensor1 (grüne LED) sensor2 (rote LED)
1 0 Wasser oberhalb
0 1 Wasser unterhalb
> Diese sind so montiert, dass unterhalb eines Füllstands die rote LED> leuchtet und oberhalb des Füllstands die grüne LED leuchtet
Cool.
D.h. wenn alles in Ordnung ist leuchtet es rot,
wenn die Pumpe arbeiten sollte nichts oder beide,
und wenn die Pumpe defekt ist und es nicht schafft,
dann die grüne.
> über einen ATmega8 oder ATtiny13 wird> das ganze vernünftig gesteuert.
Du meinst einen uC der jetzt ein dauernd an 230V angeschlossenes
Netzteil bekommt, daran ein Relais, und damit die Pumpe steuert, deren
Schwimmerschalter ausser Betrieb gesetzt wurde, weil nun deine Sensoren
und der (hoffentlich im Laufe des letztes Jahres wo er nur auf einen
Schalterwechsel wartete nicht abgestürzte) uC das kontrolliert.
Dir ist schon klar, daß im Laufe der Zeit (PC als Server, Gefrierschank
im Keller, Schwimmbad im Garten) die Stromrechnung zum grössten Klotz
der Hauskosten nach den Heizkosten wird ?
Und falls dir nicht ganz klar sein sollte, warum das gut ist: Damit die
Leute wenigsten EIN WENIG Gehirnschmalz auf's Energiesparen richten,
denn so lange es ihnen nicht an's Geld geht, merken die ja nix. Auch
wenn es nur einige Euros in den 30 Jahren sind, die deine Pumpe wohl
leben soll.
Hallo!
Ach nein. Das hätte ich natürlich noch anfügen müssen:
Die Pumpe (mit Schwimmschalter) tut ihren Dienst ganz normal. Wie jede
andere Pumpe auch!
Ich möchte die LEDs lediglich zur optischen überirdischen Kontrolle
haben!
Im Prinzip möchte ich mir das Aufhebeln des Betondeckels sparen um zu
überprüfen, ob die Pumpe vielleicht ausgefallen ist!
Der uC hat also nichts mit der Pumpe zu tun, lediglich mit der Anzeige
des Füllstandes. Und der ändert sich doch häufig wie ich festgestellt
habe.
Das hatte ich so leider nicht beschrieben, sorry!
Ziel soll sein:
grün = Wasser ist unter dem Pegel
rot = Wasser ist über dem Pegel
Naja, ich habe mir schon meine Gedanken gemacht!
Die Drainage ist aussen! Dort ist auch der Schacht. Diesen sehe ich
immer dann, wenn ich z. B. von der Arbeit nach Hause komme. Dann sehe
ich z. B. die grüne LED - alles i.O. sehe ich über einen längeren
Zeitraum die rote LED muss ich mal nachschauen.
Schaue ich allerdings 4 Wochen lang nicht nach und das Ding ist voll,
sehe ich es erst wieder am Mauerwerk...
Wie ich geschrieben habe ist die Installation bereits vorhanden. Nur die
"Steuerung/Schaltung" ist miserabel. Über den Winter lief das sehr gut
und ich erhielt einen Überblick über den Pegelstand.
Nun möchte ich ja lediglich die Steuerung über einen uC realisieren.
Danke,
Christoph
> Der Deckel des Schachts ist aus Beton. Nun hatte ich in diesen Deckel> ein Loch gebohrt und eine Duo-LED (rot/grün) eingeklebt.
Klebe dort ein Plastikreagenzklas mit der Öffnung anch unten ein.
Stecke in das Röhrchen einen am Ende rot lackierten Stab der 10 cm
kürzer ist als daß er bis zum Boden reicht. Steck das untere Ende des
Stabes in einen Schwimmkörper aus Styropor.
Fertig ist die Anzeige. Stromsparend. Funktioniert immer. Versteht
jeder.
Dann rennt der Hund dagegen und der Tierarzt möchte schön Kohle sehen!
Im ernst:
Die Schwimmschalter etc. sind montiert. Die Stromkosten werden nicht so
hoch sein, dass ich gegen das Kyoto-Abkommen verstosse.
Ich würde mich freuen, wenn man mir ernsthaft helfen könnte!
... oder wenns unbedingt was Elektronisches sein soll:
http://www.zabex.de/site/wassermelder.html hat da einige interessante
Ideen, z. B. den Zuckerwürfel.
Evtl. in eine Filmdose (Boden nach oben, unten offen), falls Regen o. ä.
von oben dran kann, und auf gewünschter Höhe einbauen. Paar Strippen
dran, MaWin's Summer und eine Batterie entsprechend weiter oben
anbringen, fertig.
Nicht vergessen, alle paar Jahre die Batterie zu erneuern.
Kenne ich schon. Zucker wurde auch im 2. Weltkrieg zum scharf machen von
Minen benutzt.
Ich gebe ja zu, dass ich mich im Anfangsthread nicht klar ausgedrückt
habe, aber ich möchte es genau so machen, wie beschrieben.
Ist ja auch schon alles montiert. Lediglich die Auswertung soll nun ein
uC übernehmen...
- Wasserstandssensoren sind schon da
- Drainage Schacht ist aussen, LED immer gut einsehbar
- Pumpe ist hiervon nicht betroffen
- dient nur der optischen Kontrolle
Also gut, ich versuch mal, ob ich den AVR-Assembler ausm Gedächtnis noch
zusammenkriege:
- (Hinweis: Du hast den Stackpointer nicht initialisiert. Brauchst Du
hier zwar nicht, da Du nur mit Registern arbeitest, hab ich aber
früher(TM) immer gern vergessen ;)
- Die AVRs haben bloß Pull-Up-Widerstände, keine Pull-Down-Widerstände.
D. h. sinnvollerweise schaltest Du Deine Sensoren zwischen Masse und
Eingang. Damit musst Du auch alle Abfragen im Programm invertieren.
1
in r16, PIND, 0
2
in r17, PIND, 1
muss
1
in r16, PIND
2
in r17, PIND
sein; Du liest ja ganze Bytes ein.
Damit passt das
1
cpi r16,0b00000001
2
brne sensor1_off
3
rjmp sensor2
natürlich auch nicht mehr; arbeite doch einfach mit "Skip if bit is
set"; z. B. so oder so ähnlich:
1
sbis r16,0
2
rjmp sensor1_off
3
rjmp sensor2
usw. (Achtung: Mit der Syntax bin ich mir jetzt nicht 100%ig sicher.
Siehe Tutorial und/oder Manual).
MfG
hat auch ein paar Macken: PB2..7 werden damit Tri-State-Eingänge und
floaten irgendwo rum; wenn nichts angeschlossen ist, mach einfach alle
zu Ausgängen, ansonsten schalte die Pull-Ups ein.
An PD0 und PD1 schaltest Du die Pull-Up-Widerstände eben NICHT ein, da
Du die Bits ja mit 0 beschreibst. Besser: 0b11111111 ;)
µC sind zwar schön und gut, aber für den Zweck würde ich dann doch eher
auf "analoge" Schaltungstechnik zurückgreifen ;-).
Sofern die Schwimmerschalter es schaffen eine LED zu schalten, sollte
das ganze Problem mit einem Transistor und ein paar Widerständen
erledigt sein. Anderenfalls sind es zwei Transistoren...
Hallo Patrick,
danke für deine Mühe. Ich setzte mich dran!
Man kann das sicher anders oder "passender" machen, aber ich denke, dass
das ein Einstieg für mich ist, wo ich dann auch was sehe.
Danke trotzdem!
ist die Drainage nicht an den Kanal angeschlossen oder wieso bleibt dort
überhaupt das Wasser stehen. Oder drückts evtl. sogar Wasser aus dem
Kanal zurück?
Ich würde 2 Schwimmschalter verschiedener Bauformen verwenden und eine
OR Schaltung aufbauen nicht das mal ein Schwimmer hängt und die Pumpe
läuft dann wieder nicht.
Hallo!
Die Drainage ist an den Kanal angeschlossen, der Zugang zum Kanal ist
aber sehr weit oben - ist auch gut so, damit es nicht ggf. vom Kanal
herdrückt.
Die Drainage ist ca. 3 Meter tief. Da unten steht grds. immer Wasser.
Durch die Pumpe wird es dann von unten in den Kanalzufluss gepumpt, der
diese übliche Tiefe (von Grasnarbe aus gesehen) von k. A. ca. 70 cm hat;
das Wasser ist ca. 2,30 Meter tiefer.
Bei der Pumpe handelt es sich auch um eine Baumarktpumpe mit
integriertem Schwimmschalter. Da will ich nicht viel ändern. Es ist ja
auch nicht so, dass mir das Haus in 4 Tagen volläuft.
Aber eine schnelle optische Kontrolle ist schon gut. Über eine
redundante Auslegung der Schwimmschalter der Pumpe habe ich auch schon
nachgedacht, allerdings wäre dann gleich eine 2. Pumpe sinnvoller...
Die von mir beschriebenen Schwimmschalter haben mit dem Schwimmschalter
der Pumpe nichts zu tun - diese sollen lediglich die LEDs oben im Deckel
schalten (2 Schwimmschalter, weil ich vorher so eine miserable Schaltung
hatte; eine einfache Unterbrechung von + für die rote und für die grüne
LED...)
Ich stelle mal heute abend Fotos hier rein. Ich habe mich leider
wirklich am Anfang missverständlich ausgedrückt.
Hier meine Änderungen, ich hatte da auch glaube ich noch zwei
Sprungmarken nach sensor1_on und sensor2 vergessen:
Ch Sp schrieb:> Im AVR Studio wird das "sbic" nicht blau eingefärbt !?
So lange beim Assemblieren kein Fehler auftritt, weist das bloß auf
einen Fehler im AVR Studio hin ;)
Wie herum hast Du Deine LEDs angeschlossen? Die LED-Ausgänge werden in
Deinem Code immer nur auf 1 gesetzt, aber nie wieder zurück auf 0...
Ich vermute, Du hast Deine LEDs zwischen VCC und den Portpin geschaltet?
Dann geht das Einschalten lediglich so schnell, dass Du es nicht siehst.
Guten Morgen!
Ja, Leds hängen mit Vorwiderstand zwischen VCC und Portpin.
Wenn ich das Einschalten aufgrund der Geschwindigkeit nicht sehen kann,
dann habe ich das alles noch nicht verstanden.
Das Programm ist ja im Prinzip eine Endlosschleife. Beim Starten ist
kein Taster gedrückt, also müsste doch bei sensor_alternative jeweils
ein High ausgegeben werden und da sich der Zustand nicht ändert, müsste
die Schleife wieder zu sensor_alternative kommen...
Du hast geschrieben, dass die LEDs nie auf 0 bzw. low zurückgesetzt
werden. Das versteh ich nicht?
Weiter oben hattest du den Stackpointer angesprochen. Auch nach Lesen
und Suchen habe ichs nicht begriffen...
Danke aber für die Hilfe und einen schönen Tag noch!
Also hier der weitere Code. Vielleicht kann mir jmd. einen Anstoss
geben!?
Die Schaltung soll:
- 2 Levelsensoren auswerten (einer zeigt über Pegel, der andere unter
Pegel an) -> hängen an PD0 und PD1 und würden gegen GND schalten
- 2 LEDs (DuoLED) hängen an PB0 und PB1 gegen VCC
-> bei unterschiedlichen Sensorschaltzuständen (1 und 0 oder 0 und 1)
leuchtet je nach dem die grüne oder rote LED. Bei 0 und 0 oder 1 und 1
leuchten beide -> orange Färbung... Soweit mein Vorhaben.
Patrick hat zwei Threads weiter oben eingeschrieben, dass das
Einschalten so schnell geht, dass ich es nicht sehen kann... Verstehe
das leider nicht.
Danke, Christoph
HI
Mach es dir doch nicht so kompliziert. Deine 2 Schalter können maximal 4
Zustände haben. In deinem Fall nur 3 da das Wasser nicht gleichzeitig
über dem oberen und unter dem unteren Schwimmer sein kann.
1
loop: in r16,PIND
2
andi r16,0b00000011
3
brne loop10
4
;PIND1:0 = 00
5
sbi/cbi PORTB, 0
6
sbi/cbi PORTB, 1
7
8
rjmp loop
9
10
loop10: cpi r16,1
11
brne loop20
12
;PIND1:0 = 01
13
sbi/cbi PORTB, 0
14
sbi/cbi PORTB, 1
15
16
rjmp loop
17
18
loop20: cpi r16,2
19
brne loop30
20
;PIND1:0 = 10
21
sbi/cbi PORTB, 0
22
sbi/cbi PORTB, 1
23
24
rjmp loop
25
26
loop30: sbi/cbi PORTB, 0 ;PIND1:0 = 11
27
sbi/cbi PORTB, 1
28
29
rjmp loop
Suche dir aus dem Code die richtigen Kombinationen aus und setze die
passenden Ausgänge (sbi/cbi PORTB, x).
MfG Spess
Hallo!
Danke! Das ist aber auf den ersten Blick saukompliziert und dann logisch
;-)
Mit dem Vergleich hatte ich mir am Anfang auch ein Konstrukt aufgemalt,
aber da habe ichs mir sehr kompliziert gemacht. So ist es einfach.
Was
1
brne
angeht muss ich noch lesen, dass habe ich nicht ganz verstanden. Was
hier im Code passiert kann ich -glaube ich- nachvollziehen!
Danke erst einmal. Einerseits freue ich mich und andererseits ist es
doch sehr kompliziert... und nicht von mir... :-(