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
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.
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
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
(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
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
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
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.
Ddrb = &B00011100
Lrot Alias Portb.2 : Mot0 Alias Portb.3 : Mot1 Alias Portb.4
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:
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.
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:
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.
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.
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:
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!
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:
Download: Blitzwarner2T13_2.zip
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
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
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:
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.
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.
(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. )
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.
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.
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.
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.
Wird Warnstufe „grün“ deutlich unterschritten, wird Pwm0a erneut auf 62,5% gesetzt.
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
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.
Download: Blitzwarner2T13_2abc.zip
$regfile = "attiny13.dat"
$crystal = 128000 'Taktfrequenz
$hwstack = 16
$swstack = 16
$framesize = 16
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
Loop
Isrint0:
Count = Count + 32 'Software-Counter
If Count > 250 Then Count = 250
Return
End
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
...
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.
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/
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/
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.
Elektronik-Labor
AVR
HF Projekte