Blitzerkennung mit AGC          

             
Elektronik-Labor  AVR  HF  Projekte 



Die Verstärkung und Empfindlichkeit eines TA7642 ist sehr stark von der Betriebsspannung abhängig. Deshalb war die Verstärkung selten genau richtig. Ein neues Verfahren zur optimalen Verstärkungseinstellung (Automatic Gain Control AGC) verwendet einen PWM-Ausgang des Controllers. Die PWM-Ausgangsspannung wird in zwei Stufen geglättet und als Versorgungsspannung für den Empfänger verwendet. So gelingt es die Verstärkung optimal einzustellen. Und damit wird es nun sogar möglich, eine kleine Festinduktivität als Ferritantenne für den Blitzempfänger einzusetzen.  Zusammen mit dem Zwischenverstärker erreicht man die gleiche Empfindlichkeit wie mit einer normalen Ferritantenne.



Beim Start des Programms wird die optimale Einstellung gesucht. Dazu fährt die Controller den PWM-Ausgang langsam hoch, bis das Eigenrauschen des Empfängers einen Pegel erreicht, der den Zähler erhöht. Danach muss nur noch ein gewisser, experimentell ermittelter Betrag subtrahiert werden. Das Ergebnis hat sich als langzeitstabil erwiesen. Das Verfahren berücksichtigt auch andere Einflüsse z.B. der Temperatur oder eines erhöhten Störnebels durch Schaltnetzteile oder ähnliches. Wenn man an einem neuen Ort Fehlmeldungen erhält, muss man den Controller nur einmal neu starten.

Download: Blitzwarner32EEtimer0n3.zip


Config Timer2 = Pwm , Pwm = On , Compare = Clear , Prescale = 1
' 8 Bit PWM Ausgang Portd.7

Timer0 = 0
Pwm = 80

Do
Pwm = Pwm + 1
Pwm2 = Pwm
Waitms 50
Loop Until Timer0 > 30

Pwm = Pwm - 45
Pwm2 = Pwm

Waitms 100


Das Programm für den Mega32 verwendet den Timer2 als PWM-Ausgang. Alle weiteren Programmteile bleiben unverändert. Deshalb kann der Verlauf des Warnlevels auch nachträglich in Ruhe angesehen werden. Das folgende Bild zeigt zwei kurze Phasen mit vielen Sferics.  Und all das mit der extrem kleinen Antenne. Das ursprüngliche Ziel ist damit fast erreicht. Nur die Warnschwellen müssen noch besser angepasst werden.





Blitzwarner mit HT47F46



Die gleiche Empfängerschaltung wurde auch an einem Holtek-Controller ausprobiert. Als Basis diente eine Platine aus dem Lernpaket Modellbahn-Beleuchtung. Das Lochrasterfeld reichte gerade aus.  Auch hier dient die kleine Festinduktivität als Ferritantenne. Der Kern des Bascom-Programms konnte leicht in C übertragen werden. Diesmal gibt es drei Warnstufen. Beide Systeme laufen jetzt immer gleichzeitig. Wenn dann ein Gewitter kommt, kann ich Vergleiche ziehen, welche Warnschwelle besser passt.

	_tmrc = 0x50; //timer mode 3: Event counter
_pbc = 0xff;
_pac = 0x10; //set port A to output port, PA4 I Impuls-Eingang
_pa = 0; //zero port A (all light on)
_pdc0 = 0; //PC0 Ausgang
_pd0 = 1; //PWM einschalten
_pwm = 0; //PWM-Ausgabe 0...255
_eadi = 0; //Kein Interupt
level = 0;

i= 80;
_ton = 0; //Timer starten
_tmr = 0; //Timerregister loeschen
_ton = 1; //Timer starten
while (_tmr < 10) {
i = i + 1;
_pwm = i;
_delay(30000);
}
i = i - 40;
_pwm = i;
mydelay(10);

while (1){
_ton = 0; //Timer stoppen
_tmr = 0; //Timerregister loeschen
_ton = 1; //Timer starten
mydelay(10); //1000 ms
count = _tmr;
if (count > 0){
_pa = 128;
_delay(50000);
_pa = 0;
}
count = count << 5; //*32
level = level + count;
if (level > 60000) {level = 60000;}
decay = level >> 8;
level = level - decay;
if (level < 2000) {_pa = 0;}
if (level > 2000) {_pa = 2;}
if (level > 4000) {_pa = 4;}
if (level > 8000) {_pa = 8;}
}



AGC-Gewittererkennung mit Tiny13



Die automatische Feineinstellung der Betriebsspannung des AM-Empfängers hat sich bewährt. Eine Platine mit dem Holtek-Controller läuft im Dauerbetrieb. Es gab auch über mehrere Tage keinen Fehlalarm. Einmal wurde die gelbe Warnstufe erreicht. Zu der Zeit konnte man einen hohen Wolkenturm sehen, aus dem ein Gewitter hätte werden können. Ich vermute, in der Wolke gab es bereits die typischen Vorentladungen. Besonders die Möglichkeit, eine kleine Festinduktivität als Ferritantenne zu verwenden, macht diese Technik attraktiv. Nun soll auch der Tiny13 zum Einsatz kommen, damit möglichst viele Leute sich an den Versuchen beteiligen können.



Der Tiny13 hat nur einen Timer. Weil dieser als PWM-Ausgang benötigt wird, muss für das Zählen der Blitzimpulse eine andere Lösung gesucht werden. Hier wurde deshalb ein Softwarezähler gebildet, der über die steigende Flanke des Signals am Interrupteingang Int0 getriggert wird. Der Zähler wird übrigens nicht in Einerschritten erhöht sondern jeweils um 32, weil damit eine Multiplikation an anderer Stelle eingespart werden kann.

Die AGC besteht auch hier aus einer Schleife, in der die Betriebsspannung kontinuierlich hochgefahren wird, bis der Zähler durch das verstärkte Rauschen des Empfängers anspricht. Während des Suchvorgangs geht die rote LED an, was eine Funktionskontrolle erlaubt. Die optimale Einstellung wird zwischen einer Betriebsspannung zwischen 2,8 V und 3,2 V gefunden.

Zum Test laufen hier inzwischen zwei Systeme (Holtek und Tiny13) parallel, dazu noch ein Mittelwellenradio. So kann ich ganz nebenbei besondere Ereignisse erkennen und die Auswertung beobachten. Manchmal gibt es starke Einzelimpulse. Sie können von einem weit entfernten Blitz oder vom Lichtschalter des Nachbarn stammen. In der Auswertung werden deshalb Einzelimpulse verworfen ( If Count > 1 ). Gestern gab es ein Geräusch, das wohl von einer alten Klingel mit Spule, Anker und Unterbrecher stammte. Offensichtlich hat jemand zweimal geklingelt. Mein Holtek-Controller ging auf Warnstufe Gelb, aber der Tiny13 blieb ohne Warnung. Der Unterschied liegt in der Begrenzung auf acht Impulse.  Zweimal Klingeln bringt zwar so viele Impulse wie ein nahes Gewitter, die Begrenzung bringt aber die nötige Selektivität. Das Gewitter hat einfach mehr Ausdauer als der Briefträger. Die Methode hilft auch gegen frisierte Mopeds mit modifizierter Zündspule und entstörungsfreiem Kerzenstecker. Die Regel "zwei bis acht Impulse pro Sekunde" hat sich aus vielen Versuchen herauskristallisiert und entspricht erstaunlich genau dem, was Heinz D. ganz am Anfang schon im Zusammenhang mit seinem Blitzgenerator vorgeschlagen hat.


Download: Blitzwarner2T13.zip

'Gewitterwarner 2, Tiny13
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16

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 'LED B2, rot
Do
I = I + 1
Pwm0a = I
Enable Interrupts
Waitms 50
Disable Interrupts
Loop Until Count > 200 'Ub einstellen
Portb.2 = 0
I = I - 50
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 B3, grün
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 'max 8 Impulse
Return

End



Gewitterdetektor mit Reisewecker, von Heinz D.

(wird vor der (Langzeit-) Messung auf 0 gestellt), entspricht zu 99,9% 'Blitzwarner2T13' mit AGC von B. Kainka



Man nehme den Blitzwarner2T13 und einen Wecker für'n Euro. Nach der Obduktion des Weckers werden die Spulenanschlüsse nach außen verlegt und festgelegt, damit sie nicht dauernd abreißen. Der Impulszähler verbraucht zur Anzeige keinen Strom und kann bis 43200 Impulse summieren. Der gesamte Stromverbrauch liegt bei 1,1mA(T13) + 0,3mA(TA7642) = 1,4mA.   Das ist etwas mehr, als ich dachte. Nun kann ich versuchen mit der gegebenen Hardware, Int0 und POWERDOWN zu experimentieren. Eine Version mit Taschenrechner als Anzeige ist in Vorbereitung. Damit sollte der Stromverbrauch deutlich unter 1mA bleiben (vielleicht demnächst).



Die Schaltung: an den PortB.3+4 ist der Motor angeschlossen. Meine Motoren haben 82Ohm (bis 120 Ohm), das hält der T13 aus. Parallel zur roten LED kann ein Piezo geschaltet werden.

Download:  blitz10-motor-bas-hex.zip

P.S. Eine Langfristige Versorgung sollte mit einer Solarzelle gelingen, da ein Betrieb auf der Fensterbank ohnehin günstig ist. Übrigens: Falls der Motor rückwärts läuft, ist das Metall-U verkehrt herum drin.

'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.

Download: blitz10B-motor.zip

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.


Levelbegrenzung

Letztens  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 Taktfrequenz

Beim 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-Dynamisierung

Die 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-Mode

In „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-Mode

Mö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.



Elektronik-Labor  AVR  HF  Projekte