(wird vor der (Langzeit-) Messung auf 0 gestellt), entspricht zu 99,9% 'Blitzwarner2T13' mit AGC von B. Kainka
'1307-Blitz 10 mit Uhr-Motor (Verschlimmbesserung 1) von Heinz D.
'unter Verwendung des Gewitterwarner 2 von B. Kainka
'mit ### sind die zugefügten Zeilen markiert
'###############################################################################
' 1 /Reset/B5/Ad0
' 2 B3/Ad3 LED grün oder Motor
' 3 B4/Ad2 LED gelb oder Motor
' 4 GND
' 5 B0/mosi/oc0a Pwm->TA7642
' 6 B1/miso/Int0/oc0b TA7642->In
' 7 B2/Sck/Ad1/T0 LED rot und Buzzer
' 8 +Vcc
Lrot Alias Portb.2
Mot0 Alias Portb.3
Mot1 Alias Portb.4
'###############################################################################
$regfile = "attiny13.dat"
$prog &HFF , &H6A , &HFF , &H00 '9,6MHz/8=1,2MHz
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
'Config Adc = Single , Prescaler = 2 , Reference = Avcc ' Pre 8...32
'Start Adc
'Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
'Open "comb.2:9600,8,n,1,INVERTED" For Input As #2
Config Portb = &B00011101
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up 'PWM B0
Start Timer0
Config Int0 = Rising 'INT0 B1
On Int0 Isrint0
Enable Int0
Dim I As Byte
Dim Count As Word
Dim Level As Word
Dim Decay As Word
Dim Motor As Byte '### odd/even-Merker
Count = 0
I = 0
Lrot = 1 'Portb.2 = 1
Do
I = I + 1
Pwm0a = I
Enable Interrupts
Waitms 50
Disable Interrupts
Loop Until Count > 200 'Ub einstellen
Lrot = 0 'Portb.2 = 0
I = I - 50
Pwm0a = I
Wait 2
Level = 0
Do
Count = 0
Enable Interrupts
Waitms 200 '1 s zählen
Disable Interrupts
If Count > 1 Then 'min 2 Impulse
Level = Level + Count 'Count
'### Uhr-Motor toggle
If Motor = 0 Then '###
Mot1 = 0 '###
Mot0 = 1 '### gerade Sekunde
Motor = 1 '###
Else '###
Mot0 = 0 '###
Mot1 = 1 '### ungerade Sekunde
Motor = 0 '###
End If '###
'### optisch/akustisch
Sound Lrot , 40 , 60 '### WAIT
Mot0 = 0 '###
Mot1 = 0 '###
Lrot = 0 '###
' Portb.3 = 1 'Blitz-LED B2
' Waitms 20
' Portb.3 = 0
' Waitms 20
End If
Decay = Level
Shift Decay , Right , 8
Level = Level - Decay 'Level nimmt ab
' If Level < 2000 Then Portb = &B00000000
' If Level > 2000 Then Portb = &B00001000 'grün
' If Level > 4000 Then Portb = &B00010000 'gelb
' If Level > 6000 Then Portb = &B00000100 'rot
Loop
Isrint0:
Count = Count + 32 'Software-Counter
If Count > 250 Then Count = 250
Return
End
Data "B l i t z 1 0 - M o t o r " 'Prog-Name
Erweiterung: Gewitterdetektor mit Reisewecker und POWERDOWN Für
den Powerdown-Mode muss die Versorgung des TA7642 vom PWM-Anschluss
getrennt und direkt an +3V gelegt werden. Ein Wochenende voller
Experimente hat folgendes erbracht: 2 kaputte TA7642, es gibt 'leise'
und 'laute' TA7642 und er arbeitet am besten bei (170uA-) 200uA. Ragc =
10k/+3V (8k2/+2,5V Akku) (2k2/+1,5V) (22k/+5V). Die 100uF-Kondensatoren
entfallen.
Stückliste (+3V):
470R x1, 10k x1, 100k x2, 1M x1
Lx= 220uH, Cx= 500pF, 100nF x4
TA7642, BC547C, LED, Tiny13
Wecker, Batteriehalter 3V, Gehäuse
Der gesamte Stromverbrauch liegt nun bei 0,4mA (T13V, der alte), Ziel erreicht.
Die
Stellung des Motors wird im EEPROM gespeichert. Auf den Begleit-Ton zur
LED wurde verzichtet, um Einstreuungen in den TA7642 zu minimieren. Je
nach Motor muss Waitms 50 ggf. etwas erhöht werden.
'1307-Blitz 10B mit Uhr-Motor und Powerdown von Heinz D.
'###############################################################################
$regfile = "attiny13.dat"
$prog &HFF , &H7A , &HFF , &H00 '9,6MHz
$crystal = 9600000
$regfile = "attiny13.dat"
$hwstack = 32
$swstack = 8
$framesize = 16
Ddrb = &B00011100
Lrot Alias Portb.2 : Mot0 Alias Portb.3 : Mot1 Alias Portb.4
Config Int0 = Rising
Enable Interrupts
Dim Motor As Byte 'toggle Switch
Do
'Uhr-Motor toggle
Lrot = 1 'Anzeige
Readeeprom Motor , 0 'EEPROM-Adr=0
If Motor = 0 Then 'gerade Sekunde
Mot0 = 1 : Motor = 1
Else 'ungerade Sekunde
Mot1 = 1 : Motor = 0
End If
Writeeeprom Motor , 0 'EEPROM-Adr=0
Waitms 50 'ggf. 100
'Stromsparen
Portb = 0 'alles aus
Enable Int0 :
Power Powerdown 'einschlafen
nop
Disable Int0 : 'wachgeworden?
Loop
End
Data "B l i t z 1 0 - B - M o t o r " 'Prog-Name
'dieses Programm dient Ausbildungszwecken
'###############################################################################
' 1 /Reset/B5/Ad0
' 2 B3/Ad3 Motor
' 3 B4/Ad2 Motor
' 4 GND
' 5 B0/mosi/oc0a aux
' 6 B1/miso/Int0/oc0b TA7642->Int0
' 7 B2/Sck/Ad1/T0 LED rot + 470R
' 8 +Vcc TA7642 Vcc ~200uA
'###############################################################################
(Hinweis
von B. Kainka: Ich habe zuerst gesucht, wo ist denn hier die
Interrupt-Routine? Dann hab ich es kapiert: es gibt keine. Der
Controller wird schlafen gelegt und wacht bei jedem Blitz einmal kurz
auf. Dann führt er einen Schritt aus und geht wieder schlafen.)
29.7.13: Gewittermelder
mit zu hoher Verstärkung, von Martin Müller
Habe letztens
den AGC-Gewittermelder mit Tiny13 auf dem
Steckbrett aufgebaut, zwei frische
1,5 V–Mignonzellen angeschlossen und
aufs Gewitter gewartet.
Als nach
wenigen Minuten Warnstufe Grün angezeigt wurde, konnte ich bei Blitzortung.org
das nächste Gewitter in ca. 80 km Entfernung lokalisieren.
Ganz schön
empfindliches Gerät, dachte ich. Wenige Minuten später wurde dann Warnstufe
Gelb und kurze Zeit später Warnstufe Rot
gemeldet. Am Himmel, war überhaupt kein Gewitter auszumachen, und auch die
Anzeige bei Blitzortung.org erschien nur wenig verändert. Irgend etwas konnte also nicht stimmen.
Habe mir also
das Signal an Pin 6 des Tiny angeschaut und folgendes
gesehen:
Signal an INT0 vor Hard- bzw. Softwareanpassung
Kein Wunder,
dass bei solchen Signalen Warnstufe Rot innerhalb kürzester Zeit erreicht wird.
Aber wie kommt es dazu?
Nachdem
externe Störeinflüsse ausgeschlossen werden konnten, wurde der PWM – Ausgang
des Tiny (Pin 5) beim Einschalten untersucht.
PWM0A am Ende der AGC-Reglung
Die
Periodendauer beträgt ca. 425 µs was einem PWM - Wert (Variabe
I) von 255 entspricht. Am Ende der Initialisierung beträgt die Impulsdauer ca.
50 µs was einem PWM – Wert von ca. 30 entspricht. Von diesem Wert 30 werden
dann im Programm 50 abgezogen. Im richtigen Leben landet man nun beim einem
Wert von – 20, bei dem gar nichts mehr passieren würde. In der Prozessorwelt
erreicht man jedoch den Wert 236, da der erste Wert der kleiner 0 ist, nicht -1
sondern 255 heißt.
Das lässt
sich leicht an folgenden Oszillogramm erkennen.
PWM0A nach AGC-Reglung
Bei diesem
Wert, ist die Versorgungsspannung für den TA 7642 deutlich höher als
erforderlich, so dass der ganze Analogteil des Gewittermelders übersteuert
wird, und die wilden Signale an Pin 6 des Tinys
hervorbringt.
Ich denke,
dass die eigentliche Ursache für dieses Phänomen in der Exemplarstreuung
von TA7642 und BC547 C zu suchen ist. Erwischt man hier Exemplare mit hoher
Verstärkung, stellt sich das beschriebene Phänomen ein.
Das Problem
lässt sich sowohl hard- als auch softwaremäßig
beheben.
Die
Hardwarelösung
Man erhöht
einfach die zum Siebglied an PWM0A gehörenden Widerstände von 470 Ohm auf 1k
bzw. von 1K auf 2,2k.
Die nun
abzuleitenden Oszillogramme sehen wie folgt aus:
PWM0A am Ende der AGC-Reglung
Hardwarelösung
PWM0A nach AGC-Reglung Hardwarelösung
Die
Softwarelösung
Man zieht am
Ende der AGC – Reglung nicht fest den Wert 50 von der Variablen I ab, sondern
reduziert die Variable I um z.B. 50%, weil das nämlich am einfachsten geht...
An
entsprechender Stelle wird:
I = I - 50
zu:
Shift I , Right
Die
Widerstände des Siebglieds bleiben dabei unverändert.
PWM0A am Ende der AGC-Reglung
Softwarelösung
PWM0A nach AGC-Reglung Softwarelösung
Signal an INT0 nach Hard- bzw.
Softwareanpassung
Nachtrag
Initial wurde
die Schaltung auf einem üblichen SYB-46 Steckbrett,
wie es in vielen Lernpaketen verwendet wird, aufgebaut und der o.g. Effekt
bemerkt. Da ich zunächst das Steckbrett in Verdacht hatte, habe ich dann die
Schaltung auf meinem „guten“ Laborsteckbrett aufgebaut, was auch keine Änderung
erbrachte.
Nachdem ich
von Herrn Kainka den Hinweis bekam, dass möglicherweise doch hohe
Übergangswiderstände an den Steckbrettkontakten die Ursache sein könnte, wurde
die Schaltung letztendlich auf einer Punktrasterplatine aufgelötet. Auch dies
führte zu keiner Funktionsverbesserung.
Es wäre
interessant zu erfahren, wer noch die Beobachtung gemacht hat, dass der
Gewittermelder Warnungen ausgibt ohne, dass dafür eine äußere Ursache erkennbar
ist.
Nachtrag von
B. Kainka: Diese Ergebnisse kann ich bestätigen. Nach diesem
Bericht habe ich meine Schaltung noch mal durchgemessen und konnte
sehen, dass die PWM-Impulse gefährlich kurz sind. Vermutlich habe ich
die letzten Einstellungen bei einer Batteriespannung knapp unter 3 V
vorgenommen. Wenn andere
Bauteile zufällig viel mehr Verstärkung haben und ganz frische
Batterien zum Einsatz kommen, muss die ursprüngliche Dimensionierung zum Problem führen. Die
Dimensionierung von Martin Müller ist wesentlich sicherer gegen
Bauteile-Streuungen.
Nachtrag von Martin Müller: Da der letzte Stand meiner Gewitterexperimente der Aufbau der Schaltung auf
der Lochrasterplatine mit den ursprünglichen Widerstandsdimensionierungen
war, läuft die Schaltung seitdem mit der Softwarekorrektur ohne Fehlalarme.
Hier im östlichen Rhein-Main-Gebiet bleibt man von Gewittern häufig
verschont, so dass das Gerät noch keine Chance hatte, ein echtes Gewitter zu
melden. Künstliche Blitze werden aber erkannt.
Hatte
zwischenzeitlich versucht die PWM mit 75% bzw. 62,5% vom Endwert der
AGC-Reglung zu betreiben. Bei 75% gibt es noch Fehlalarme, bei 62,5%
habe ich den Eindruck, dass die Schaltung wirklich sehr (evtl. zu)
empfindlich (für vernünftige Warnmeldungen) ist. Also bin ich wieder zu
den 50% zurückgekehrt.
Als Spule verwende ich aktuell die 220µH aus
"Transistorradio selber bauen". Hatte versuchsweise auch eine 220µH Spule
aus meinen Beständen ausprobiert, dabei aber keine wirklichen Unterschiede
feststellen können. Bei anderer Schwingkreisdimensionierung (nominal 390µH
und 330pF) hatte ich den Eindruck, dass die Schaltung empfindlicher wird,
dies aber nicht weiter verfolgt.
Power-Down-Betrieb von Frank Schacht
Ich habe den Gewitterdetektor mit Tiny13 auch nachgebaut (ebenfalls auf dem
kleinen Steckboard von z.B. Advendskalender). Direkt nach dem Anlegen der
Spannung (KEIN frischer Satz Batterien) leuchtete kurz die rote -LED, wie
erwartet. Doch danach fing sofort die Grüne an zu blitzen, und zeigte damit
Signale, kurz darauf wurden Level Grün, Gelb und auch Rot angezeigt. Mein
erster Test mit nem MW-Radio (Retro -Style auch mit TA7642) brachte keine
nennenswerten Ereignisse auf dem Frequenzband.--> Rätseln und Grübeln
brachte mich auf die Idee mal mit einem alten hochohmigen Kopfhörer die
Signale an zu hören. Beste Stelle, den Kollektorwiderstand mit dem Kh
brücken.
Ergebnis:
Es rauscht und prasselt! Kein Wunder! Ich hatte jedoch einen
entscheidenden Fehler beim Aufbau gemacht, da ich nur eine
Schottky-Diode BAT48 zur Hand hatte (anstatt der 1N4148) habe ich diese
verwendet, sie hat aber eine viel geringere Durchlassspannung! Nach
langem Suchen fand ich endlich den original-Typ damit ging es erstmal.
An neuem Batteriesatz und etwa einem Tag Dauerbetrieb, traten die
selben falschen Anzeigen wieder auf, und meine Rote LED war gestorben
(!!! Mit 3V und Rv=470Ohm!! Erst ganz dunkel und danach kmplett tot!)
Das nahm ich zum
Anlass den AtTiny noch etwas zum Stromsparen anzuregen. Und zwar setzte
ich einfach nach den Abfragen : IF Level >... einen kleinen Block ein
der wie folgt aussieht:
IF Level=0 then 'Nix zu tun
Enable
Interrupts
IDLE
End If
Dadurch spart der MC etwas Strom, wenn
er nix zu tun hat, aber das PWM0A bleibt an, und der Int0 wird sicher
ausgelöst! Nach kurzem Betrieb an einem frischen Satz Batterien erfolgte
wieder eine dauernde (fehlerhafte) Anzeige von Ereignissen, die nicht da
sind. Ich programmierte nun noch die Zeile I=I-50 in I=I-60 um (so dachte ich
bis eben, jedoch muss ich das nochmal überprüfen, da sich ein Tippfehler
eingeschlichen hatte. (anstatt I=I-60 stand da I=I-6-0 !) Aber seit dem hält
er Ruhe, selten blitzt die Grüne LED auf. (wohl durch irgendwelche Störungen
in der Atmosphäre) Der Kh-Test ergab ein leises Rauschen über dem
Kollektorwiderstand. Nun warte ich sehnlichst auf ein echtes Gewitter,
um den Detektor zu testen.
PS.: An
Übergangswiderständen im Board kann es wohl nicht liegen, da ich vor Kurzem
mit dem selben Board erfolgreich einen UKW-Pendler mit zwei NF-Transistoren
aufgebaut habe (Grundidee ist von Ihrer wunderbaren Seite! DANKE dafür!) Der
Aufbau auf einer Lochraster Platine war dann der totale Reinfall, aber das
ist eine andere Story!
Software-Update von Burkhard Kainka
Aus
den beiden letzten Vorschlägen habe ich meine neue "offizielle" Version
des Tiy13-Gewitterwarners gebaut: Mit 50%- PWM-Einstellung und
Power-Down. Diese Software läuft nun im Dauertest in meiner
Testschaltung (alte Dimensionierung der Widerstände mit 470 Ohm und 1
kOhm). Eine Überprüfung mit dem Oszilloskop zeigt, dass die
Empfindlichkeit genau richtig eingestellt wird. Mein Kriterium dafür
ist, dass mein Ohmmeter im Abstand von ca. 15 cm Impulse mit
Vollausschlag produziert, wenn die beide Messspitzen berühre. Das zeigt
das folgende Video:
Youtube-Video:
Funktion der ALC Download:
Blitzwarner2T13_2.zip
'Gewitterwarner 2 mit Erweiterungen von Martin Müller und Frank Schacht
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
'Config Adc = Single , Prescaler = 2 , Reference = Avcc ' Pre 8...32
'Start Adc
'Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
'Open "comb.2:9600,8,n,1,INVERTED" For Input As #2
Config Portb = &B00011101
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up 'PWM B0
Start Timer0
Config Int0 = Rising 'INT0 B1
On Int0 Isrint0
Enable Int0
Dim I As Byte
Dim Count As Word
Dim Level As Word
Dim Decay As Word
Count = 0
I = 0
Portb.2 = 1
Do
I = I + 1
Pwm0a = I
Enable Interrupts
Waitms 50
Disable Interrupts
Loop Until Count > 200 'Ub einstellen
Portb.2 = 0
Shift I , Right 'durch 2
Pwm0a = I
Wait 2
Level = 0
Do
Count = 0
Enable Interrupts
Waitms 1000 '1 s zählen
Disable Interrupts
If Count > 1 Then 'min 2 Impulse
Level = Level + Count 'Count
Portb.3 = 1 'Blitz-LED B2
Waitms 20
Portb.3 = 0
Waitms 20
End If
Decay = Level
Shift Decay , Right , 8
Level = Level - Decay 'Level nimmt ab
If Level < 2000 Then Portb = &B00000000
If Level > 2000 Then Portb = &B00001000 'grün
If Level > 4000 Then Portb = &B00010000 'gelb
If Level > 6000 Then Portb = &B00000100 'rot
If Level = 0 Then 'Nix zu tun
Enable Interrupts
Idle
End If
Loop
Isrint0:
Count = Count + 32 'Software-Counter
If Count > 250 Then Count = 250
Return
End
Fragen und Korrekturen, von Hans-Joachim Vogt
Mit
Interesse verfolge ich das Projekt Blitzerkennung mit AGC. Ich habe es
heute funktionstüchtig nachgebaut, zwei Sachen sind aber unklar:
Warum
wird beim PWM eigentlich die Diode eingesetzt? Das ist doch dann nur
noch ein "Spitzenwertgleichrichter", auf Grund der sehr geringen
Stromaufnahme des Empfängers sind die H-Impulse so extrem kurz.
Antwort:
Ohne Diode würde es auch funktionieren, allerdings mit mehr
Strombedarf. Mit der Diode verhält sich die Schaltung etwas mehr wie
eine Konstantstromquelle. Man kann es auch wie ein Poti betrachten. 25
% PWM macht aus dem 1-k-Widerstand effektiv 4 k.
Zweiter Punkt ist in der Software:
If Count > 1 Then 'min 2 Impulse
ist
meiner Ansicht nicht richtig, Count wird ja in Isrint0 generell um 32
erhöht. Wenn man nach dem Kommentar geht, müsste doch eigentlich >
32 stehen damit ein einzelner Impuls ignoriert wird.
Antwort:
Stimmt genau! Das hatte ich übersehen, als "mal 32" in die
Interruptroutine abgewandert ist. Jetzt wird mir auch klar, warum
der Controller zu empfindlich auf Störimpulse reagiert hat. Es müsste
also korrekt heißen:
If Count > 32 Then 'min 2 Impulse
Beobachtungen und Experimente von Martin Müller
Letzte Nacht gab es hier wohl ein Gewitter, von dem ich im Tiefschlaf leider nichts mitbekommen habe :(
Meine
Frau ist allerdings vom Donnergrollen aufgewacht. Der Gewittermelder (,
den ich zu Ihrer Begeisterung :-) im Schlafzimmer platziert hatte,)
habe allerdings lediglich Warnstufe "Grün" angezeigt.
Habe
deshalb die PWM wieder auf 62,5% erhöht. Bei diesem Wert gibt es
bislang auch keine Fehlalarme. Bin schon ganz gespannt darauf, falls es
hier dann mal wirklich gewittert und ich das Gewitter nicht wieder
verschlafe...
Zur Einstellung der PWM auf 62,5% wird im Listing eine Hilfsvariable "J" eingerichtet.
Dim J As Byte
.
.
.
J = I
Shift J , Right
Shift J , Right
I = I - J
Shift J , Right
I = I - J
Pwm0a = I
Leider
besitze ich nur ein Exemplar des TA7642 (bei Conrad in Frankfurt ist er
momentan nicht vorrätig), so dass ich keine direkten
Vergleichsbeobachtungen mit unterschiedlichen PWM-Einstellungen oder
unterschiedlichen Spulen bzw. Schwingkreisdimensionierungen machen
kann.
Noch einige Gedanken zur Spule:
Hatte mein Exemplar
der 220µH-Spule deswegen im Gewittermelder verwendet, um eine möglichst
gute Vergleichbarkeit mit Ihren Experimenten zu bekommen. Für das ein
anderes Projekt habe ich Spulen mit nominal 390 µH, die einen etwas
größeren Spulenkörper/Ferritkern besitzen. Es ist vorstellbar, dass
diese (Schwingkreis 390 µH / 330 pF) eine gute Alternative zu (220 µH /
470 pF) sein könnten.
29.7.13: Nachdem
der Gewittermelder ein lokales Gewitter in der Nacht von Samstag auf
Sonntag offensichtlich nicht ordentlich erkannt hat wurde am
Sonntag die PWM-Reglung von 50% auf 62,5% erhöht. Den Schaltungsaufbau
habe ich nicht verändert. Dann wurde auf die vorhergesagten Gewitter
gewartet. Am späten Sonntagnachmittag zog von Südwesten eine
Gewitterfront heran, wobei bei Betrachtung auf Blitzortung.org schon zu
vermuten war, dass sie meinen Wohnort nicht erreichen, sondern in
einigem Abstand südöstlich vorbeiziehen wird.
ab 17:43: wiederholtes Aufblinken der grünen LED Entfernung ca. 50 km
18:05 - 18:09: grüne LED leuchtet dauerhaft Entfernung ca. 35 km
18:10 - 18:24: wiederholtes Aufblinken der grünen LED Entfernung ca. 60 km bei den letzten Blitzen
Schade,
dass das Gewitter nicht näher kam und Stufe gelb und rot ausgelöst
hat... Stufe grün bei 35 km Entfernung finde ich eigentlich ganz gut.
(Meine
Einschätzung (B.K): Auch Stufe Grün bei 20 km Abstand finde ich
noch passend. Es kann sein, dass hier die Sonne scheint und 20 km
weiter ein lokales Gewitter steht oder einfach vorbeizieht. 35 km
könnte in der Praxis vielleicht schon zu empfindlich sein, d.h. mit zu
häufiger Warnung, wenn später nichts passiert. )
Softwaremodifikationen für den Gewittermelder von Martin Müller
Nachdem
ich den Gewittermelder in der Version „Blitzwarner2T13_2“ aufgebaut
habe, sind mir noch einige Softwaremodifikationen eingefallen. Zur
Hardware: Ich habe inzwischen noch ein paar TA7642 auftreiben können,
und so noch einige Versuche mit dem Gewittermelder durchgeführt.
Die primär verwendete 220µH-Spule scheint wirklich mit
Abstand die am besten geeignete zu sein. Vergleiche mit anderen
Spulen/Schwingkreisen, kommen, bei ansonsten identischer Schaltung und
Lichtschalterblitzen, schlechter weg.
LevelbegrenzungLetztens
gab es ein ziemlich großes Gewitter, dessen Beginn ich, weil unterwegs,
leider nicht mit dem Gewittermelder beobachten konnte. Als ich mitten
im Gewitter nach Hause kam, leuchtete erwartungsgemäß die rote LED der
Schaltung. Auch nachdem das Gewitter schon deutlich weiter gezogen war,
blieb die rote LED noch für eine gefühlte Ewigkeit angeschaltet.
Wahrscheinlich wurden während dieses Gewitters exorbitant hohe
„Level-Werte“ erreicht, so dass ich mich entschlossen habe, an
geeigneter Stelle die Zeile
If Level > 7000 Then Level = 7000
einzufügen. Warnstufe „rot“ wird ab Level > 6000 erreicht, und röter als rot geht sowieso nicht.
Reduktion der Stromaufnahme durch Änderung der TaktfrequenzBeim
Gewittermelder konnte ich in der o.g. Version bei 3 V Betriebsspannung
eine Stromaufnahme (wenn keine LED leuchtet) von ca. 900 µA
messen. Damit würden 2 Mignon-Zellen theoretisch ca. 3 Monate im
Dauerbetrieb durchhalten. Der Tiny wird dabei mit einer Taktfrequenz
von nominal 1,2 MHz betrieben. Ändert man die entsprechenden
Fusebits, kann man die interne Frequenz auf 128 kHz reduzieren.
Durch
die verringerte Taktfrequenz braucht der Tiny z.B. beim Abarbeiten von
Zeitschleifen deutlich weniger Taktzyklen, was die Stromaufnahme
reduziert. Natürlich muss man Bascom mitteilen, dass man die
Taktfrequenz geändert hat. Aus
$crystal = 1200000
wird
$crystal = 128000
Wenn
man Fusebits ändert, sollte man ziemlich genau wissen was man tut.
Ansonsten ist es möglich, dass man den Tiny „verfused“ und nur noch mit
einem sogenannten „HV-Programmer“ auf ihn zugreifen kann. Jedenfalls
hat sich nach Reduktion der Taktfrequenz die Stromaufnahme von ca. 900
µA auf ca. 470 µA verringert. Damit würden die Mignon-Zellen länger als
5 Monate durchhalten.
Die beiden genannten Änderungen wurden in Version „Blitzwarner2T13_2a“ berücksichtigt.
AGC-DynamisierungDie
Definition der einzelnen Warnstufen ist die wahrscheinlich schwierigste
Entscheidung in der Softwaregestaltung beim Gewittermelder. Die
Festlegung der Betriebsspannung für den TA7642 (über Pwm0a) beeinflusst
ebenfalls, wann welche Warnstufe erreicht wird. Durch Erhöhen von Pwm0a
erhöht sich auch die Empfindlichkeit der Schaltung. Abhängig von
Einsatzmöglichkeit und persönlichen Präferenzen gibt es hier sicher
viele Variationen.
Möchte man den Gewittermelder nicht nur
stationär betreiben, sondern auch als Begleiter für Wanderungen oder
Radtouren verwenden, kann es vorteilhaft sein, Warnstufen oder
AGC zu dynamisieren.
Die Idee der vorgestellten
Softwaremodifikation ist es, Warnstufe „grün“ schon bei etwas weiter
entfernten Gewittern (ca. 40 km) zu aktivieren. Stufe „gelb“ und „rot“
sollen aber erst aktiviert werden, wenn man dem Gewitter wirklich
deutlich näher kommt. Ist man also unterwegs, und alle LEDs sind aus,
braucht man sich keine Gedanken zu machen. Leuchtet die grüne LED und
geht sie wieder aus, kann man entspannt zur Kenntnis nehmen, dass es im
weiteren Umkreis gewittert. Stufe „gelb“ fordert dann schon dazu auf,
sich einen „gewitterfesten Unterschlupf“ zu suchen.
Abweichend
von „Blitzwarner2T13_2“ wird der initiale Pwm0a-Wert auf 62,5% statt
50% vom Endwert der AGC-Reglung gesetzt. Dazu wird die Hilfsvariable
„J“ benutzt.
Dim J As Byte
.
.
.
Shift
I ,
Right
'durch 2
J = I
Shift J , Right , 2
J = J +
I
'PWM=62,5%
Pwm0a = J
Wenn Warnstufe „grün“ satt überschritten wurde, wird Pwm0a auf 50% reduziert.
If Level > 3000 Then Pwm0a = I 'PWM=50%
Wird Warnstufe „grün“ deutlich unterschritten, wird Pwm0a erneut auf 62,5% gesetzt.
If Level < 1000 Then Pwm0a = J 'PWM=62,5%
Idle-ModeIn „Blitzwarner2T13_2“ wurde der Idle-Mode durch
If
Level = 0
Then
'Nix zu tun
Enable Interrupts
Idle
End If
aktiviert.
Optimierungsfähig
dabei ist, dass mit diesem Programmteil der Idle-Mode nur nach dem
(Neu-)Start des Tinys solange „Level = 0“ jungfräulich ist, erreicht
werden kann. Wurden die ersten Blitze detektiert, so kann durch
die verwendete Binärarithmetik
Decay = Level
Shift Decay , Right , 8
Level = Level -
Decay
'Level nimmt ab
die Variable „Level“ nicht mehr den Wert 0 erreichen.
Besser ist es den Idle-Mode durch
If
Decay = 0
Then
'Nix zu tun
Enable Interrupts
Idle
End If
zu aktivieren.
Weiterhin kann es günstig sein , der Variablen „Level“ am Programmanfang nicht den Wert 0 sondern z.B. 255 zuzuordnen.
Die genannten Modifikationen sind, ebenso wie die Korrektur von Herrn Vogt in „Blitzwarner2T13_2b“ berücksichtigt.
Power-Down-ModeMöchte
man die Stromaufnahme noch weiter reduzieren, kann man überlegen, statt
des Idle-Modes den Power-Down-Mode zu verwenden. In
„Blitzwarner2T13_2c“ wird der Gewittermelder zunächst für 30 Messungen
a 1 Sekunde angeschaltet. Wird in dieser Zeit kein Blitz erkannt, geht
der Tiny dann für gute eineinhalb Minuten in den Tiefschlaf. Dabei wird
auch die Versorgungsspannung für den TA7642 ausgeschaltet. Realisiert
werden „Wach- und Schlafphase“ durch 2 For-Next-Schleifen. Natürlich
kann es sein, dass erste Blitze sich die im Power-Down-Modus entladen
nicht erkannt werden. Die auch in dieser Modifikation bestehende
AGC-Dynamisierung kann das genannte Phänomen eventuell kompensieren.
Jedenfalls sinkt die Stromaufnahme im Power-Down-Modus auf ca. 100 µA.
Gemittelt kommt man so auf eine Stromaufnahme von ca. knapp 200 µA,
womit die erwähnten Mignon-Zellen ein ganzes Jahr (wenns nicht
dauergewittert) durchhalten könnten.
Zu überlegen wäre, ob man
„Blitzwarner2T13_2c“ noch um einem täglichen „Zwangsreset“
erweitert, damit sich im Dauerbetrieb, bei schwächer werdenden
Batterien, die Pwm0a-Werte automatisch anpassen können.
Download:
Blitzwarner2T13_2abc.zip'Gewitterwarner 2 mit reduzierter Taktfrequenz, Levelbegrenzung und AGC-Dynamisierung
$regfile = "attiny13.dat"
$crystal = 128000 'Taktfrequenz
$hwstack = 16
$swstack = 16
$framesize = 16
'Config Adc = Single , Prescaler = 2 , Reference = Avcc ' Pre 8...32
'Start Adc
'Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
'Open "comb.2:9600,8,n,1,INVERTED" For Input As #2
Config Portb = &B00011101
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Up 'PWM B0
Start Timer0
Config Int0 = Rising 'INT0 B1
On Int0 Isrint0
Enable Int0
Dim I As Byte
Dim J As Byte
Dim Count As Word
Dim Level As Word
Dim Decay As Word
Count = 0
I = 0
Portb.2 = 1
Do
I = I + 1
Pwm0a = I
Enable Interrupts
Waitms 50
Disable Interrupts
Loop Until Count > 200 'Ub einstellen
Portb.2 = 0
Shift I , Right 'durch 2
J = I
Shift J , Right , 2
J = J + I 'PWM=62,5%
Pwm0a = J
Wait 2
Level = 255
Do
Count = 0
Enable Interrupts
Waitms 1000 '1 s zählen
Disable Interrupts
If Count > 32 Then 'min 2 Impulse
Level = Level + Count 'Count
Portb.3 = 1 'Blitz-LED B2
Waitms 20
Portb.3 = 0
Waitms 20
End If
Decay = Level
Shift Decay , Right , 8
Level = Level - Decay 'Level nimmt ab
If Level < 1000 Then Pwm0a = J 'PWM=62,5%
If Level < 2000 Then Portb = &B00000000
If Level > 2000 Then Portb = &B00001000 'grün
If Level > 3000 Then Pwm0a = I 'PWM=50%
If Level > 4000 Then Portb = &B00010000 'gelb
If Level > 6000 Then Portb = &B00000100 'rot
If Level > 7000 Then Level = 7000 'Levelbegrenzung
If Decay = 0 Then 'Nix zu tun
Enable Interrupts
Idle
End If
Loop
Isrint0:
Count = Count + 32 'Software-Counter
If Count > 250 Then Count = 250
Return
End
Energiesparmodus, von Joris Müller
Ich
habe das Programm bezüglich der Stromaufnahme noch etwas
optimiert, in dem ich den Analog-Komparator (ca. 70 µA) und
den Analog-Digital-Wandler (ca. 210 µA) abschalte. Damit reduziert
sich die Ruhestromaufnahme in meiner Schaltung auf ca. 205 µA
(davon ca. 160 µA für den TA7642). Rein rechnerisch ergäbe sich
damit bei 2 Mignon-Zellen mit einer jeweiligen Kapazität von 2000
mAh eine reine Empfangslaufzeit von 407 Tagen (natürlich
ohne Gewitter / Störungen).
$regfile = "attiny13.dat"
$crystal = 128000
$hwstack = 16
$swstack = 16
$framesize = 16
Stop Ac 'Analogkomparator deaktivieren -> Energie sparen (ca. 70 µA)
Stop Adc ' Analog-Digital-Wandler deaktivieren -> Energie sparen (ca. 210 µA)
Stop Watchdog 'Wchdog-Timer deaktivieren -> Energie sparen (nur zur Sicherheit, ist
normalerweise schon 'off' per fuse default, aber evtl. nicht bei jedem)
Config Portb = &B00011101
...
Bastelaktivität im Rahmen der Nachwuchsarbeit beim Ortsverband Goch L06, Rolf Hoymann, DL1EA.
Unsere
seit mehreren Jahren bestehende Elektronik-Bastelgruppe, bestehend aus
ca. 10 Jugendlichen, hat den Gewittermelder mit ATiny 13 und AGC
nachgebaut. Dazu wurde eine Platine entworfen und gefertigt, sodass der
Aufbau relativ zügig erfolgen konnte.
Da
alle Jugendlichen bereits über Löterfahrung verfügten bereitete der
Aufbau trotz einiger sehr feiner Lötpunkte keine Schwierigkeiten.
Bereits nach einer Baustunde war die erste Platine bestückt und konnte
in die Funktionsprobe gehen. Alle bestückten Platinen funktionierten
einwandfrei, eine jedoch erst nach intensiver Fehlersuche. Eine defekte
LED war der Grund und nachdem sie ersetzt war konnte auch sie die
Funktionsprobe bestehen. Getestet wurden die fertigen Melder mit
einem Blitzgenerator und den Funken eine Piezogasanzünders. Wir hatten
eine kleine Bastelmappe geschrieben, in der wir in einfachen Worten und
leicht zu verstehen die Funktion des Gewittermelders dargestellt haben,
sowie einige grundlegende Informationen zur Entstehung von Blitzen und
Gewittern beschrieben haben.
Übereinstimmend
konnten wir feststellen, dass sich dieses Projekt sehr gut für eine
Elektronik Bastelgruppe eignet, dazu kommt auch, dass so ein
Gewittermelder eine echte Anwendungsmöglichkeit bietet.
Gewitterwarner mit PIC von Friedrich Ramser
Wir
haben nun Ihren Gewitterwarner auf einen PIC portiert. In Zuge dessen
haben wir gleich ein paar Änderungen einfliesen lassen, welche
z.Bsp. Energie sparen.
https://www.ramser-elektro.at/potzblitz-der-gewitterwarner/
Gewitterwarner Arduino-Shield von Friedrich Ramser
Nach einem Jahr Pause, haben wir einen neuen Bausatz für einen Arduino Shield entwickelt.
https://www.ramser-elektro.at/blitz-o-shield-der-gewitter-detektor/
SMD-Version mit Tiny13 von Christian Herden
Den Gewitterwarner habe ich nachgebaut, erst auf der Steckplatine (der
bekam selbst ein Gewitter direkt über uns nicht mit), dann erstellte
ich eine Platine mit dem Direkt-Toner-Verfahren. Beim ersten Gewitter
blinkte die grüne LED erst bei Blitzen im Umkreis von 15 km. Kurz
nachgedacht und alle Geräte auf dem Schreibtisch ausgestellt und den
Gewitterwarner noch mal gestartet - nun funktioniert er hervorragend.
Gestern zogen zwei Gewitter direkt drüber uns und eines im Abstand von
30 km vorbei. Alle wurden erkannt und angezeigt bis hin zur roten LED.
Blitz-O-Shield für den Arduino Nano von Friedrich Ramser
In der Zwischenzeit habe ich einen Blitz-O-Shield für den Arduino Nano und einen Blitzsimulator entworfen.
https://www.ramser-elektro.at/blitzsimulator-blitz-gewittersimulator