Hallo liebes Forum, ich wollte eine alarmanlage bauen, die einen gehegezaun auf hütespannung und unterbrechung überwacht. Natürlich mit Akkupufferung, Sabotage und mit einer großen Sirene :) das klappt eig alles schon ganz gut, nur bei der unterbrechungserkennung komm ich einfach nicht weiter. ich hab mal die schaltung gepostet. Mit der 16V wechselspannung wird der trafo t1 an der sekundärwicklung angeschlossen. die primärwicklung schickt dadurch dann einen wechselstrom in die gehegezaunschleife, die dadurch auch galvanisch von der alarmanlage getrennt wird. spannung vom weidezaungerät ist ca 5000 V oder so. Wenn jezt jemand herkommt und den gehegezaun durchschneidet oder wenn ein baum drauffällt, dann wird diese schleife ja unterbrochen >> der widerstand in der sekundärwicklung wird größer >> durch den shunt-widerstand t1 fliest weniger strom (naja shunt ist übertrieben eher ein spannungsteiler)>> spannung sinkt >> alarm wird ausgelöst. das problem ist, das es nicht funktioniert weil der spannungsunterschied zu klein ist. ich hab für t1 einen 0815 printtrafo hergenommen. Welcher trafo könnte da besser gehen? oder hat jemand eine idee wie man das anders messen kann? danke schon mal für die antworten
mit optokopler ist der operationsverstärker gemeint? das geht nicht, da der operationsverstärker die Spannung vom weidezaungerät nicht aushält
Wie wärs mit nem Relais in der Schleife? Wenn kein Strom mehr fließt, fällt das Relais ab und aktiviert den Alarm.
an so ein relais habe ich auch schon gedacht, da wären allerdings einige probleme: - wer weis wie oft so ein relais kaputt geht (mechanik...) - ein relais hat schon ein bisschen leistung und wenn die alarmanlage 24 stunden am tag läuft... - außerdem kann ich so keinen wert einstellen, ab welcher schwelle (also widerstand von der schleife) der alarm ausgelöst werden soll wenn mir sonst nichts mehr einfällt werd ichs wohl trotzdem so machen :)
Bist du sicher, dass die Spannung an den Eingängen des Operationsverstärkers immer sauber innerhalb der Betriebsspannung des OPs liegt? Ist mir nicht ganz klar. Wenn nicht, könnte das der Grund für die Fehlfunktion sein. Eigentlich müsste sich der Wechselstromwiderstand an der Sekundärseite des Trafos bei Lastabwurf drastisch ändern. Es sei denn r1 ist viel zu groß, dann fällt in beiden Fällen fast alle Spannung an r1 ab. Ich würde aber ebenfalls zu Winfrieds Vorschlag tendieren: vergess den OP, schalte in Serie zu r1 die Diodenstrecke eines Optokopplers. Nimm einen Koppler mit zwei antiparallen Dioden oder schalte eine externe Diode antiparallel hinzu. Außerdem schalte ein Poti parallel zur Diode, um bei offem Primärkeis des Trafos den Dunkelstrom des Optokopplers abzuleiten. Pass auf, dass du den Optokoppler nicht durch zu hohen Diodenstrom zerstörst.
Die Schaltung oben könnte schon ein paar Probleme haben: Wenn die Wechselspannungsquelle einen DC Anteil hat, kann der Trafo in die Sättigung gehen. Ein normaler Trafo könnte von der Isolierung nicht ausreichen und stellt für die Weidezaumspannung ggf. auch schon eine relativ große kapazitive Last da. Der OP bekommt eine Wechselspannung mit veränderlicher Spannung und Phase, aber wirklich stabil 0 wird die Spannung nicht. Wo jetzt der OP eingezeichnet ist, müsste man schon erst einen Differenzverstärker, dann eine Art Gleichrichtung haben und dann an Hand er Amplitude und ggf. auch Phase entscheiden. So wie gezeigt wird der OP eigentlich immer ein Rechtecksignal am Ausgang abgeben. Eine einfache Alternative wäre es ggf. direkt am Weidezaun eine LED einen kleinen Strom durch die Schleife in einen Lichtleiter schicken zulassen. Das ganze gespeist von einem kleinen Akku, direkt auf Potential des Weidezauns. Aus Stromspargründen wird man da wohl einen Konstanten Strom nehmen sondern eher Pulse etwa alle 100 ms (nur nicht gerade die Frequenz vom Weidezaungerät). Sparsam aufgebaut könnte man da in den Bereich kommen, dass 2 AA Zellen 1 Jahr halten. Die Empfängerseite kontrolliert dann halt die Impulse.
ok neuer plan neues glück XD da ich keine batterie einbauen will wird wieder durch den trafo ein prüfstrom eingespeist. der optokopler überträgt dann das signal (sind ja dann halbwellenimpulse) und der kondensator danach soll bewirken dass vom optokopler das signal 3, 4 halbwellen aus bleiben muss, damit der alarm an das speicherflipflop weitergegeben wird. da aber die möglichkeit besteht, das irgend ein teil vom stromzaun die erde berührt, kann es ja sein das am trafo+optokoppler eine hohe spannung anliegt, die evtl. dann was kaputt macht. deswegen dachte ich an einen kondensator der diese überbrückt und mit dem trafo quasi einen l-c hochpass bildet. meint ihr das funzt so? muss ich nur noch schaun ob in meiner ausschlacht-platinen-sammlung i-wo ein optokopler verbaut ist :)
Ulrich schrieb: > direkt am Weidezaun eine LED Stromschleife mit LED/Optokopper überwachen klingt schön, aber jeder lange Draht ist auch eine wunderbare Antenne. Was ihr dabei alles einsammelt kommt ganz auf den jeweiligen Tatort an. Spätestens beim nächsten Gewitter leuchet diese LED 1x ganz hell? :-) Übrigens findet die Suchfunktion hier bestimmt noch viele interessante Artikel zum Thema Weidezaungerät.
Wenn man schon beim Trafo bleibt, kann man auch auf der Primärseite überwachen. Man muss nur auf die Qualität der Isolierung achten und die Überwachung des Stromes nicht zu empfindlich machen. Durch den Kurzschuss über den Draht auf der Sekundärseite ändert sich die Impedanz schon ganz deutlich - das sollte sich ohne größere Problem Detektieren lassen.
also doch plan 1? ich probier mal einen anderen trafo aus vll ein übertrager aus nem ela lautsprecher
das mit dem op-verstärker: die mess-spannungen können doch auch über vcc liegen oder? http://www.produktinfo.conrad.com/datenblaetter/150000-174999/155600-da-01-en-OP_VERST_LM358N_STM.pdf ^^zumindest bei dem, nur mal interesse halber
Hallo M.M. ich denke ein Optokoppler dürfte am betriebsichersten sein, da hast du eine doppelte galvanische Trennung: einmal wichtig wegen der Hochspannungspulse des Weidezauns, zum anderen beim Gewitter. Gut, beim Direkteinschlag ist alles hin, aber ein mehrere 100m langes Kabel fängt auch so genug ein. Ich habe mal ein wenig gemessen. Einmal die vom Vorposter angesprochene kapazitive Belastung der Hochspannungspulse durch den Messtrafo. Habe drei Printtrafos getestet, siehe Bild. Alles 2x6V-Trafos, Kapazität beide Sek. gegen Primär: 7 Watt, der Blaue: 40pF 1,1 Watt: 17pF 0,35 Watt: 22pF Ich denke die Kapazität wird die Hochspannung nicht sehr belasten. Habe anschliessend eine kleine Testschaltung aufgebaut. Der mit 6V speisende Trafo ist der Blaue, der Messtrafo der 1,1Watt Trafo. Ich habe dessen Primärwicklung in Serie geschaltet, so dass sich im Primärkeis im Kabelbruch-Fall eine ungefährliche Spannung einstellt. Am 47-Ohm Widerstand zwischen den beiden Trafos greift man die Messspannung ab. Ergebnis: offener Weidezaunkreis: 1,1V geschlossener Kreis : 3,4V Wobei auch ein 100 Ohm Leitungswiderstand im Weidezaunkreis wie ein Kurzschluss wirkt. Sollte so auch erwünscht sein. Mit den Messwerten sollte auch die Optokopplerschaltung funktionieren, die ich aber nicht aufgebaut und überprüft habe. Übrigens, Optokoppler findet man oft in Schaltnetzteilen. MfG
ey cool, danke für die antwort :) ich hab selber nochmal rumprobiert mit meinem 1. plan und hab festgestellt dass wegen dem hohen messwiderstand (1k) fast keine spannung an meinem messtrafo abgefallen ist. den widerstand hab ich absichtlich so hoch gewählt, weil ich so wenig leistung wie möglich verbraten wollte... jetzt hab ich die schaltung nochmal gebaut aber mit 50 ohm und siehe da: es funktioniert :))) die zehnerdiode ist da weil sie wahrscheinlich den optokoppler schützen soll oder? und nochmals danke, muss ich den beitrag i-wo als gelöst makieren?
So gut kenne ich micht im Forum nicht aus, glaube kaum dass man einen Betrag auf "gelöst" setzen kann/muss. Zum Stromverbrauch: in meiner Anordnung wird 3,4V/47Ohm*6V = knapp 0,5Watt im Kurzschlussfall, also Kabel ok, verbraucht. Das läßt sich verringern. Einen Schritt habe ich bereits unternommen, nämlich nur 6V~ in die 12V~ (6V+6V)Messwicklung eingespeist. Eine noch größere "Untersetzung" reduziert den Strombedarf weiter. Grenzen setzt vor allem der Widerstand der Weidezaunleitung, der ja den Kurzschlußstrom reduziert und damit das Messergebnis auf der Primärseite unschärfer macht. Zur EMV: ob die Schaltung im freien Feld wirklich dauerhaft funktioniert muss sich erst zeigen. Ja, die Z-Diode soll den Optokoppler schützen. Das reicht vermutlich nicht. Ein Kondensator von ca 1uF (Keramic oder Folie) sollte ebenfalls noch parallel zur Diodenstrecke am Optokoppler. Außerdem noch ein Serienwiderstand von 100 Ohm zur Diodenstrecke, falls man sich mit dem Poti vertut. Und auf der Transistorseite des OK muß ein Tiefpass, da der Optokoppler nur mit 50Hz-Halbwellen aus der Wechselspannung gespeist wird. Das gleiche gilt für deine Operationsverstärker, die werden einen Feldeinsatz ohne Schutz nur kurzzeitig überleben. Tiefpässe aus RC-Gliedern und vor jedem OP-Eingang eine Doppeldiode zur Versorgungsspannung nach dem Schema +Ub--|<--Eingang--|<---GND bzw -Ub sind das Mindeste. MfG
Holler schrieb: > Zum Stromverbrauch: Wer fordert den daß 100% der Zeit ein Strom fließen muß? Wenn man jede Sekunde 1x prüft sollte man auch ein Ergebnis bekommen?
Klar, wenn man eh einen Controller verwendet, kann der Stromverbrauch nochmals um Zehnerpotenzen gesenkt werden. Wird nur alles etwas komplexer. Man muss z.B. die Wechselspannung schalten. Mit einem Relais?
Man kann auch Wechselspannung mit einem Optpokoppler und einem Grätzgleichrichter potentialfrei schalten.
Winfried J. schrieb: > mit einem Optpokoppler ... soweit die Theorie. Bleibt nur die kleine Frage, ob Dein Optokoppler mit dieser Schaltung und diesem Aufbau einen Tag am Elektrozaun überlebt??
Natürlich im 6 V Kreis einzubauen nicht im HV kreis und bei höheren Leistungen mit Darlingtonstufe
da kommt mir eine idee: mit dieser schaltung könnte man ja auch eine beliebige frequenz amplitudenmodulieren. Ich kenn bis jezt nur am-schaltungen wo danach nochmal ein schwingkreis nachgeschaltet ist, damit das wieder ein sauberer sinus wird. Dieser schwingkreis muss aber auf die trägerfrequenz abgestimmt sein. jezt brauch ich nur noch einen spannungsgeregelten oszillator von 1MHz bis sagen wir mal 400MHz Achja und einen Verstärker
Kobalt schrieb: > jezt brauch ich nur noch einen spannungsgeregelten oszillator von 1MHz > bis sagen wir mal 400MHz Kommen solche Vorschäge von der GEZ, damit künftig auch jeder Esel noch gebührenpflichtig wird??? :-)
Kobalt schrieb: > da kommt mir eine idee: > mit dieser schaltung könnte man ja auch eine beliebige frequenz > amplitudenmodulieren. > Ich kenn bis jezt nur am-schaltungen wo danach nochmal ein schwingkreis > nachgeschaltet ist, damit das wieder ein sauberer sinus wird. Dieser > schwingkreis muss aber auf die trägerfrequenz abgestimmt sein. > > jezt brauch ich nur noch einen spannungsgeregelten oszillator von 1MHz > bis sagen wir mal 400MHz > > Achja und einen Verstärker Aandere Baustelle, aber einen Modultor mit ähnlicher Architektur findest du hier. http://scz.bplaced.net/t217.html#t217-1 Meine Optokopplerschaltung meintest du hoffentlich nicht? Die macht deine Wunschrequenz nicht mit und verreist auch jede Linearität. MfG
warum eig nicht, wenn die oszillatorspannung relativ groß gegenüber der spannung im nichtlinearen bereich der diode ist, 0,2V oder so, dann könnte das doch hinhaun XD
hallo, da ich die Messungen gepulst machen möchte und es keinen spass macht tausend transen zusammenzulöten habe mich nun doch entschlossen einen mikrocontroller herzunehmen. Es soll ein ATTINY2313 sein. Da ich das erste mal so ein "gruseliges" teil Verwende, wollte ich fragen ob bitte wer den angehängten schaltplan überfliegen könnte. Ich bin mir vor allem nicht sicher ob die isp-schnittstelle richtig ist. (die spannung für den controller kommt ja eig auch beim programmieren von meiner schaltung und nicht vom pc. fallen da nicht GND und VTG vom isp-stecker weg?) danke schonmal für antworten :)
und die platine wollte ich auch machen lassen, und nicht mit der toner-murkser methode basteln. kann da wer einen hersteller empfehlen?
M. M. schrieb: > kann da wer einen hersteller empfehlen? Ein paar gibt's hier zur Auswahl: http://www.mikrocontroller.net/articles/Platinenhersteller
Hallo M. M., schwer zu lesen,der Schaltplan. Bleistift auf Butterbrotpapier ist unübersichtlich :-) Der erste Schritt zu einer Platine wäre die Übertragung in ein CAD-Tool. Ich persönlich empfehle Eagle, mit der Freewareversion kann man Stromlaufpläne zeichnen und bis zur 1/2 Europlattengröße (10cm x 8cm) doppelseitig layouten. Müßte für dein Gerät genügen. Die ISP-Schnittstelle ist so richtig angeschlossen. Du brauchst auch GND und Vcc, sonst beschwert sich das Programmiergerät. Wie willst du die SW entwickeln und debuggen? Wenn du einen ICE mit debugWire verwendest, ist auch die Reset-Leitung des ATtiny wie in deinem Plan erstmal ohne C richtig angeschlossen. Später im Betrieb würde ich einen Kondensator im nF-Bereich nach GND vorsehen, sonst Gefahr unbeabsichtigter Resets. Generell solltest du an alle ICs, bes. die digitalen wie den uC einen 100nF-Kondensator (keramik) dicht am IC von Vcc nach GND vorsehen. MfG
hallo ich layoute grad die platine mit target3001. der keramik konsendator an der versorgung ist auch schon drin :-). ist statt einem kondensator am reset-pin ein pull-down widerstand (push-down ... ka) gemeint? sonst hängt ja das signal immer noch in der luft? und das programmiergerät (ich hab ein usb-gerät von conrad gekauft) wird also von meiner platine versorgt, wenn ich das richtig verstehe? und wenn man aber selber einen ISP-RS232-Adapter mit widerständen und z-dioden zusammenlötet, braucht man dann nur GND (also kein Vcc)? die software mach ich mittels assembly und spiel sie einfach aufm mc. debuggen tu ich da nix, das muss dann einfach gehen (hab ich zumindest vor). und danke für die aufschlussreichen antworten :-)
Den ISP Programmer von der Zielplatine aus zu versorgen ist möglich und auch üblich. Die Version mit Widerständen und ZD am RS232 Port braucht ggf. die Spannung nicht - schaden tut sie aber auch nicht. Die Resetleitung hat intern schon einen Pullup Widerstand. Weil der in gestörter Umgebung eher etwas groß ist, macht man oft noch einen externen Widerstand dazu oder alternativ einen kleinen Kondensator oder ggf. auch beides. Dies dient dazu um die Gefahr für einen Reset durch Störungen zu reduzieren, bzw. Teils aus Gewohnheit, denn einige der ersten AVRs brauchen den Widerstand noch.
Hallo, ich habe die Platine gelayoutet. Wenn wer möchte kann er mal drüberschaun, das wär nett :-). Aber eig müsste sie passen. Nur eine Frage hätte ich noch: ich hab in das datenblatt vom ATtiny2313 gesehen, und da standen bei den Pins so kürzel z.B. PB3. Das soll warscheinlich heissen Port B 3. Kann ich jeden Port extra als eingang oder als ausgang benutzen oder nur Gruppe A, B, C, D extra? Und wo stell ich das ein?
M. M. schrieb: > Alarmanlage.PNG > > 6,6 MB, 15 Downloads ähm hast du schon mal was von Bildformate gehört? Ich mein ja nur 6,6Mb für einen einfachen Schaltplan... Mfg
da ich nach email-anfrage an einen hersteller keine rückmeldung bekommen habe und ich keine lust hatte einen anderen zu suchen und zu warten, hab ich die platine nun doch selber geätzt. Siet zwar nicht so schön aus, funktioniert allerdings :) Ich bin grad dabei mit dem assembly-tutorial meinen attiny zu programmieren. Hab ich das richtig verstanden bzw. gelesen, dass ein Interrupt nur von Port D1 oder D2 ausgelöst werden kann? (bein attiny2313). Und ja ich hab das datenblatt gelesen, wollte es nur besätigt bekommen ;-).
Ich polle die eingänge jezt, und wenn der hochspannungs-impuls zu kurz ist löte ich noch einen kleinen kondensator parallel neben den Eingang. Hier mal mein erstes Programm falls es i-wen interessiert: /* * Alarmanlage_AVR.asm * Softwareversion beta 1.5 * Created: 11.03.2012 02:24:12 * Author: MM */ .include "tn2313def.inc" ;# Definitionsdatei für Attiny2313 Einbinden ;# Interruptvektoren setzen .org 0x000 ; bei Reset rjmp Reset .org OC1Aaddr ; bei Timercompare 1A rjmp Zehntelinterrupt Reset: ;# Start bei Reset .def Zehntel = r18 ;# Variablen festlegen .def Sekunden = r19 .def Minuten = r20 .def Zehntelcounter1 = r21 ; Blinkfrequenz LED-Alarm im Paramet / Klickzeit in Betrieb .def Zehntelcounter2 = r22 ; Abfallverzögerung Hütespannung im Paramet .def Sekundencounter1 = r23 ; Schwellwertzeit Hütespannung in Betrieb .def Sekundencounter2 = r24 ; Zeiten in Betrieb LED-Unterbrechung .def Merker1 = r25 .def Merker2 = r26 ldi r16, RAMEND ;# Stackpointer initialisieren out SPL, r16 ldi r16, 0x00 ;# Ein- und Ausgänge festlegen out DDRA, r16 ldi r16, 0b00000111 out DDRB, r16 ldi r16, 0b01111110 out DDRD, r16 ldi r16, (1<<WGM12)|(1<<CS12) ;# Timer konfigurieren: Vorteiler 256 + mit Timecomparer verbinden out TCCR1B, r16 ldi r16, (1<<OCIE1A) ;# Interrupt bei Timer Compare 1A erlauben out TIMSK, r16 ldi r16, high(3125-1) ;# 16-Bit Timecomparer einstellen out OCR1AH, r16 ldi r16, low(3125-1) out OCR1AL, r16 clr Zehntel ;# Variablen Resetten clr Sekunden clr Minuten clr Zehntelcounter1 clr Zehntelcounter2 clr Sekundencounter1 clr Sekundencounter2 clr Merker1 clr Merker2 Main: ;# Hauptprogramm sei ; Interrupts allg. erlauben sbis PINA, 0 ; Testet ob Klick Sabo ldi Merker1, 1 sbis PINA, 0 rjmp Weiter cpi Merker1, 1 brne ParametrierungOFF cpi Zehntelcounter1, 3 ; Klickzeit in zehntel sek brsh ParametrierungOFF rjmp Parametrierung ParametrierungOFF: clr Zehntelcounter1 clr Merker1 Weiter: ;########### Betrieb sbi PORTD, 2 ; LED-Betrieb Einschalten sbic PIND, 5 ; LED-Alarm geht mit Relais 1 los sbi PORTD, 3 sbis PIND, 5 cbi PORTD, 3 sbis PIND, 0 ; Flip Netzausfall sbi PORTD, 6 sbic PINB, 4 ; LED-Hütespannung < clr Sekundencounter1 cpi Sekundencounter1, 5 ; Zeit in der ein impuls kommen muss brlo EndeHutespannung sbi PORTB, 0 EndeHutespannung: ; LED Unterbrechung cpi Sekundencounter2, 10 ; Zeit zwischen den Schleifenmessungen brlo WeiterU clr Sekundencounter2 ldi Merker2, 1 sbi PORTD, 1 WeiterU: cpi Merker2, 1 brne WeiterM cpi Sekundencounter2, 1 ; Zeit der Messung brlo WeiterM sbic PINB, 3 sbi PORTB, 1 clr Merker2 clr Sekundencounter2 cbi PORTD, 1 WeiterM: sbic PINA, 0 ; Flip Sabotage sbi PORTB, 2 sbic PORTB, 2 ; Relais 1 Geht bei LEDs Sabo, Imp. oder Hütes. an rjmp Relais1An sbic PORTB, 1 rjmp Relais1An sbic PORTB, 0 rjmp Relais1An cbi PORTD, 5 ; PORTD AUS rjmp EndeRelais1 Relais1An: sbi PORTD, 5 EndeRelais1: sbis PIND, 6 ; Relais 2 Geht bei LED Netzausfall an cbi PORTD, 4 sbic PIND, 6 sbi PORTD, 4 Revisionsschleife: ; Rücksetzen der Ausgänge bei Drücken Taster Revision sbis PINA, 1 rjmp Keinerevision ldi r16, 0b00 out PORTB, r16 ldi r16, 0b000000100 out PORTD, r16 rjmp Revisionsschleife Keinerevision: rjmp Main Parametrierung: ;########## Parametriermodus cpi Zehntelcounter1, 2 ; Blinkfrequenz LED-Betrieb im Parametriermodus brlo ToggleBetriebOff in r16, PIND ldi r17, 0b00001000 eor r16, r17 out PORTD, r16 clr Zehntelcounter1 ToggleBetriebOff: sbic PIND, 0 ; Anzeige von Netzausfall cbi PORTD, 6 sbis PIND, 0 sbi PORTD, 6 sbic PINB, 4 ; Anzeige von Hütespannung clr Zehntelcounter2 cpi Zehntelcounter2, 8 ; abfallverz. 1 sec brsh WeiterParamHuteAus cbi PORTB, 0 rjmp WeiterParamHute WeiterParamHuteAus: sbi PORTB, 0 WeiterParamHute: sbi PORTD, 1 ; Anzeige von Unterbrechung sbic PINB, 3 sbi PORTB, 1 sbis PINB, 3 cbi PORTB, 1 sbic PINA, 0 ; Anzeige Sabotage sbi PORTB, 2 sbis PINA, 0 cbi PORTB, 2 sbic PINA, 1 ; Beenden von Parametriermodus durch Revision rjmp Reset rjmp Parametrierung Zehntelinterrupt: ;# Uhr: Interrupt von Timercomparer 1A inc Zehntel inc Zehntelcounter1 inc Zehntelcounter2 cpi Zehntel, 10 ; Wenn dies nicht der 10. Interrupt brne RetiUhr ; ist, dann zu RetiUhr ... clr Zehntel inc Sekunden inc Sekundencounter1 inc Sekundencounter2 cpi Sekunden, 60 brne RetiUhr clr Sekunden inc Minuten cpi Minuten, 60 brne RetiUhr clr Minuten RetiUhr: reti
Ich polle die eingänge jezt, und wenn der hochspannungs-impuls zu kurz ist löte ich noch einen kleinen kondensator parallel neben den Eingang. Hier mal mein erstes Programm falls es i-wen interessiert:
1 | /* |
2 | * Alarmanlage_AVR.asm |
3 | * Softwareversion beta 1.5 |
4 | * Created: 11.03.2012 02:24:12 |
5 | * Author: MM |
6 | */ |
7 | |
8 | .include "tn2313def.inc" ;# Definitionsdatei für Attiny2313 |
9 | Einbinden |
10 | |
11 | ;# Interruptvektoren setzen |
12 | .org 0x000 ; bei Reset |
13 | rjmp Reset |
14 | .org OC1Aaddr ; bei Timercompare 1A |
15 | rjmp Zehntelinterrupt |
16 | |
17 | Reset: ;# Start bei Reset |
18 | |
19 | .def Zehntel = r18 ;# Variablen festlegen |
20 | .def Sekunden = r19 |
21 | .def Minuten = r20 |
22 | .def Zehntelcounter1 = r21 ; Blinkfrequenz LED-Alarm im |
23 | Paramet / Klickzeit in Betrieb |
24 | .def Zehntelcounter2 = r22 ; Abfallverzögerung Hütespannung im |
25 | Paramet |
26 | .def Sekundencounter1 = r23 ; Schwellwertzeit Hütespannung in |
27 | Betrieb |
28 | .def Sekundencounter2 = r24 ; Zeiten in Betrieb |
29 | LED-Unterbrechung |
30 | .def Merker1 = r25 |
31 | .def Merker2 = r26 |
32 | |
33 | ldi r16, RAMEND ;# Stackpointer initialisieren |
34 | out SPL, r16 |
35 | |
36 | ldi r16, 0x00 ;# Ein- und Ausgänge festlegen |
37 | out DDRA, r16 |
38 | ldi r16, 0b00000111 |
39 | out DDRB, r16 |
40 | ldi r16, 0b01111110 |
41 | out DDRD, r16 |
42 | |
43 | |
44 | ldi r16, (1<<WGM12)|(1<<CS12) ;# Timer konfigurieren: Vorteiler |
45 | 256 + mit Timecomparer verbinden |
46 | out TCCR1B, r16 |
47 | ldi r16, (1<<OCIE1A) ;# Interrupt bei Timer Compare 1A |
48 | erlauben |
49 | out TIMSK, r16 |
50 | |
51 | ldi r16, high(3125-1) ;# 16-Bit Timecomparer einstellen |
52 | out OCR1AH, r16 |
53 | ldi r16, low(3125-1) |
54 | out OCR1AL, r16 |
55 | |
56 | clr Zehntel ;# Variablen Resetten |
57 | clr Sekunden |
58 | clr Minuten |
59 | clr Zehntelcounter1 |
60 | clr Zehntelcounter2 |
61 | clr Sekundencounter1 |
62 | clr Sekundencounter2 |
63 | clr Merker1 |
64 | clr Merker2 |
65 | |
66 | Main: ;# Hauptprogramm |
67 | |
68 | sei ; Interrupts allg. erlauben |
69 | |
70 | sbis PINA, 0 ; Testet ob Klick Sabo |
71 | ldi Merker1, 1 |
72 | |
73 | sbis PINA, 0 |
74 | rjmp Weiter |
75 | cpi Merker1, 1 |
76 | brne ParametrierungOFF |
77 | cpi Zehntelcounter1, 3 ; Klickzeit in zehntel sek |
78 | brsh ParametrierungOFF |
79 | rjmp Parametrierung |
80 | ParametrierungOFF: |
81 | clr Zehntelcounter1 |
82 | clr Merker1 |
83 | Weiter: |
84 | |
85 | |
86 | ;########### Betrieb |
87 | sbi PORTD, 2 ; LED-Betrieb Einschalten |
88 | |
89 | sbic PIND, 5 ; LED-Alarm geht mit Relais 1 los |
90 | sbi PORTD, 3 |
91 | sbis PIND, 5 |
92 | cbi PORTD, 3 |
93 | |
94 | sbis PIND, 0 ; Flip Netzausfall |
95 | sbi PORTD, 6 |
96 | |
97 | |
98 | sbic PINB, 4 ; LED-Hütespannung < |
99 | clr Sekundencounter1 |
100 | cpi Sekundencounter1, 5 ; Zeit in der ein impuls kommen muss |
101 | brlo EndeHutespannung |
102 | sbi PORTB, 0 |
103 | |
104 | EndeHutespannung: |
105 | |
106 | |
107 | ; LED Unterbrechung |
108 | cpi Sekundencounter2, 10 ; Zeit zwischen den |
109 | Schleifenmessungen |
110 | brlo WeiterU |
111 | clr Sekundencounter2 |
112 | ldi Merker2, 1 |
113 | sbi PORTD, 1 |
114 | WeiterU: |
115 | cpi Merker2, 1 |
116 | brne WeiterM |
117 | cpi Sekundencounter2, 1 ; Zeit der Messung |
118 | brlo WeiterM |
119 | sbic PINB, 3 |
120 | sbi PORTB, 1 |
121 | clr Merker2 |
122 | clr Sekundencounter2 |
123 | cbi PORTD, 1 |
124 | WeiterM: |
125 | |
126 | |
127 | sbic PINA, 0 ; Flip Sabotage |
128 | sbi PORTB, 2 |
129 | |
130 | |
131 | sbic PORTB, 2 ; Relais 1 Geht bei LEDs Sabo, Imp. oder |
132 | Hütes. an |
133 | rjmp Relais1An |
134 | sbic PORTB, 1 |
135 | rjmp Relais1An |
136 | sbic PORTB, 0 |
137 | rjmp Relais1An |
138 | |
139 | cbi PORTD, 5 ; PORTD AUS |
140 | rjmp EndeRelais1 |
141 | |
142 | Relais1An: |
143 | sbi PORTD, 5 |
144 | |
145 | EndeRelais1: |
146 | |
147 | |
148 | sbis PIND, 6 ; Relais 2 Geht bei LED Netzausfall an |
149 | cbi PORTD, 4 |
150 | sbic PIND, 6 |
151 | sbi PORTD, 4 |
152 | |
153 | |
154 | Revisionsschleife: ; Rücksetzen der Ausgänge bei Drücken |
155 | Taster Revision |
156 | sbis PINA, 1 |
157 | rjmp Keinerevision |
158 | ldi r16, 0b00 |
159 | out PORTB, r16 |
160 | ldi r16, 0b000000100 |
161 | out PORTD, r16 |
162 | rjmp Revisionsschleife |
163 | Keinerevision: |
164 | |
165 | rjmp Main |
166 | |
167 | |
168 | Parametrierung: ;########## Parametriermodus |
169 | |
170 | cpi Zehntelcounter1, 2 ; Blinkfrequenz LED-Betrieb im |
171 | Parametriermodus |
172 | brlo ToggleBetriebOff |
173 | in r16, PIND |
174 | ldi r17, 0b00001000 |
175 | eor r16, r17 |
176 | out PORTD, r16 |
177 | clr Zehntelcounter1 |
178 | ToggleBetriebOff: |
179 | |
180 | sbic PIND, 0 ; Anzeige von Netzausfall |
181 | cbi PORTD, 6 |
182 | sbis PIND, 0 |
183 | sbi PORTD, 6 |
184 | |
185 | sbic PINB, 4 ; Anzeige von Hütespannung |
186 | clr Zehntelcounter2 |
187 | cpi Zehntelcounter2, 8 ; abfallverz. 1 sec |
188 | brsh WeiterParamHuteAus |
189 | cbi PORTB, 0 |
190 | rjmp WeiterParamHute |
191 | WeiterParamHuteAus: |
192 | sbi PORTB, 0 |
193 | WeiterParamHute: |
194 | |
195 | sbi PORTD, 1 ; Anzeige von Unterbrechung |
196 | sbic PINB, 3 |
197 | sbi PORTB, 1 |
198 | sbis PINB, 3 |
199 | cbi PORTB, 1 |
200 | |
201 | sbic PINA, 0 ; Anzeige Sabotage |
202 | sbi PORTB, 2 |
203 | sbis PINA, 0 |
204 | cbi PORTB, 2 |
205 | |
206 | sbic PINA, 1 ; Beenden von Parametriermodus durch |
207 | Revision |
208 | rjmp Reset |
209 | |
210 | rjmp Parametrierung |
211 | |
212 | |
213 | Zehntelinterrupt: ;# Uhr: Interrupt von Timercomparer 1A |
214 | |
215 | inc Zehntel |
216 | inc Zehntelcounter1 |
217 | inc Zehntelcounter2 |
218 | cpi Zehntel, 10 ; Wenn dies nicht der 10. Interrupt |
219 | brne RetiUhr ; ist, dann zu RetiUhr ... |
220 | |
221 | clr Zehntel |
222 | inc Sekunden |
223 | inc Sekundencounter1 |
224 | inc Sekundencounter2 |
225 | cpi Sekunden, 60 |
226 | brne RetiUhr |
227 | |
228 | clr Sekunden |
229 | inc Minuten |
230 | cpi Minuten, 60 |
231 | brne RetiUhr |
232 | clr Minuten |
233 | |
234 | RetiUhr: |
235 | |
236 | reti |
Hab alles zusammengebaut und programmiert. Haut ganz wunderbar hin. Mein gerät hat jezt ca. 2 Wochen test im Felde bestanden, ohne Fehlalarme etc. Allerdings ist noch kein Gewitter gekommen aber da bin ich zuversichtlich das auch das hinhaut. Und Dank sei dem Forum, sonst hätt ich das wahrscheinlich nicht so schnell zum laufen gebracht :)))
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.