Blitzmessung mit dem Zähler        


Elektronik-Labor  AVR  HF  Projekte 





Blitze nur zu zählen bewährt sich anscheinend nur bei einer geringen Reichweite des Empfängers. Bei großer Reichweite ist dagegen der Alarm zu empfindlich. Deshalb wird hier nach einem neuen Verfahren gesucht.

Die bisherige Auswertung mit dem AD-Wandler hat einerseits relativ viel Rechenzeit gekostet und konnte andererseits den Pegelunterschied nicht gut abbilden. Dagegen scheint das folgende Verfahren besser geeignet: Das verstärkte Signal des Empfangskreises wird direkt an den Eingang eines Zählers gelegt. Je nach Höhe des Impulses werden mehr oder weniger viele Schwingungen gezählt. Das Zählergebnis ist proportional zum Logarithmus der Anfangsamplitude, weil der Schwingkreis exponentiell ausschwingt. Damit kann ein großer Bereich unterschiedlicher Pegel ausgewertet werden. Dass die größeren Pegel den Verstärker bereits übersteuern spielt keine Rolle.



Das folgende Oszillogramm zeigt eine Impulsantwort am Ausgang des Verstärkers.  Der Impuls wurde  durch Entladen eines 100-nF-Kondensators mit 5 V über eine Drahtschleife in der Nähe der Empfangsspule erzeugt. In diesem Fall wurden 9 Impulse gezählt. Das entspricht einem durchschnittlichen Blitz in einer Entfernung von 100 km.  



Zusätzlich zur Spulenantenne könnte man noch eine Stabantenne anschließen, was die Empfindlichkeit und das Rundstrahlverhalten verbessert. Gleichzeitig steigt damit aber auch die Empfindlichkeit gegen technische Störungen im Haus. Die reine Magnetantenne hat dagegen einen sehr guten Störabstand und zeigte in zwölf Stunden keinen einzigen falschen Störimpuls.

Die Impulse werden hier mit einem ES-M32 über den Timer0 des Mega32 erfasst. Nach jeder Messung wird der Timer wieder auf Null gesetzt. Die Daten werden Bye-weise im EEPROM gespeichert, sodass sie später ausgelesen werden können. So können bis zu 1023 Blitze registriert werden. Außerdem läuft auch eine einfache Auswertung der Warnstufe.

Download: Blitzwarner32EEtimer0.zip

'Blitzdatenlogger, ES-M32 mit LCD und EEPROM

$regfile = "m32def.dat"
$crystal = 11059200
$hwstack = 16
$swstack = 32
$framesize = 128

Baud = 9600


Dim N As Word
Dim U As Word
Dim D As Word
Dim A As Byte 'Adresse
Dim Trigger As Byte
Dim Sta As Byte 'Startadresse , Trigerpunkt

Dim Eeadr As Word
Dim Ramadr As Byte
Dim I As Byte
Dim J As Byte
Dim B As Byte
Dim Ticks As Word 'Zeitmessung
Dim Ticks2 As Word
Dim Level As Word

Dim Daten(8) As Byte

S1 Alias Pind.2
S2 Alias Pind.3
S3 Alias Pind.6
S4 Alias Pind.7

Config Portd = &B00110000
Portd.2 = 1
Portd.3 = 1
Portd.6 = 1
Portd.7 = 1

Out1 Alias Portd.4
Out2 Alias Portd.5

Config Adc = Single , Prescaler = 8 , Reference = Off
Start Adc

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2

Initlcd
Cls

Open "com1:" For Binary As #1

Config Timer0 = Counter , Edge = Falling

'For N = 0 To 50
' Readeeprom B , N
' Print #1 , B
'Next N
Ramadr = 1
Timer0 = 0
Do
B = Timer0
If B > 0 Then
Daten(ramadr) = B
Ramadr = Ramadr + 1
If Ramadr > 8 Then Ramadr = 1
If B > 80 Then
B = 80
Waitms 300
End If
If Eeadr < 1023 Then Writeeeprom B , Eeadr
Eeadr = Eeadr + 1
Print #1 , B
D = B
D = D * 100
Level = Level + D
If Level > 20000 Then Level = 20000
Timer0 = 0
End If
If Level > 10 Then
Level = Level - 1 '1 Blitz in 10 min vergessen
If Level > 2000 Then Level = Level - 9 '1 Blitz in 1 min vergessen
If Level > 6000 Then Level = Level - 20 '3 Blitze in 1 min vergessen
End If
If Level < 1000 Then Portd = &B11001100 'weniger als 1 Blitz in 10 min
If Level > 1000 Then Portd = &B11011100 '>10 Blitze pro min
If Level > 2000 Then Portd = &B11101100 '<1 Blitz pro min
If Level > 6000 Then Portd = &B11111100 '>3 Blitze pro min
Locate 2 , 1
Lcd Level
Lcd " "

For Ticks = 1 To 10
J = Ischarwaiting(#1)
If J > 0 Then
Get #1 , J
If J = 100 Then
B = 0
For N = 0 To 1023
Writeeeprom B , N
Next N
End If
A = J * 128
For N = 1 To 128
Readeeprom B , A
Put #1 , B
A = A + 1
Next N
End If
Waitms 100
Next Ticks

For N = 0 To 7
D = N * 2
D = D + 1
Locate 1 , D
A = N + 1
D = Daten(a)
Lcd D
Next N
Loop
End

Die folgende Messung zeigt etwa 70 Blitze eines Gewitters, das von Frankreich nach Belgien zog und zwischen 150 km und 100 km entfernt war. Gegen Ende kam das Gewitter zwar näher, die Intensität der Blitze nahm aber leicht ab.




21 19 21 3 17 19 17 13 17 12 6 9 10 18 18 
18 5 5 6 12 7 18 18 9 8 2 9 7 2 10 8 3 10
9 8 8 8 9 8 1 9 8 1 10 5 3 10 8 9 4 6 10
9 10 2 3 3 2 2 2 2 2 3 2 3 5 3 1 2 4 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

Am Dienstagmorgen waren schwache Gewitterimpulse zu empfangen. Sie konnten einem Gewitter in Norditalien zugeordnet werden, das in einer Entfernung von ca. 800 km lag. Später gab es ein starkes Gewitter in Tschechien, etwa in einer Entfernung von 500 km. Die Blitze waren deutlich zu erkennen:

5 7 5 5 5 8 8 9 8 8 8 9 8 7 7 5 1 7 8 8 7 8

Einzelne Gewitter zogen dann immer näher, waren aber nicht zu messen. Am Abend zog ein ausgedehntes Gewitter vom Bodensee in Richtung München, aber nicht ein einziger Blitz konnte empfangen werden.  Ein kleineres Gewitter in etwa 100 km Entfernung im Sauerland blieb ebenfalls ganz ohne Messergebnisse.

Aus diesen Beobachtungen kann ich den Schluss ziehen, dass es leider nicht möglich ist aus der Intensität auf die Entfernung zu schließen. Anscheinend gibt es sehr große Unterschiede in der Intensität der Blitze, die größer ausfallen als die Unterschiede in der Entfernung.




Gewitter im Nahbereich



In der Nacht zum Mittwoch zog ein Gewitter direkt über Essen.  Ich wurde vom Donner geweckt.  Sofort ins Labor, was zeigen die Messungen. Große Enttäuschung: Die gezählten Blitze waren nicht besonders häufig und nicht besonders stark. Anscheinend stimmt der Gedanke nicht, dass nahe Blitze besonders hohe Intensitäten haben. Das Bild zeigt das abziehende Gewitter. Es liegt jetzt am Morgen über dem Münsterland und ist immer noch als deutliches Knistern im Radio zu hören.

Parallele Beobachtungen mit anderen Methoden zeigten folgendes: Das umgebaute Retroradio gab tatsächlich den korrekten Gewitteralarm. Aber auch der TA7542 zeigte bei weitem nicht jeden Blitz an. Bei diesem Gewitter gab es besonders viele relativ kleine Blitze, in vielen Fällen wohl zwischen den Wolken. Im Radio hörte man auf Mittelwelle das bekannte Knistern. Es fehlte oft eine deutliche Hauptentladung, die Blitze bestanden aus einer Serie kleinerer Entladungen.  Das Oszilloskop zeigte diese kleinen Blitze auch am Ausgang des TA7642, aber mit einer recht kleinen Amplitude, die unter der Auslöseschwelle lag.

Insgesamt war die Erkennung eines nahen Gewitters bei 500 kHz wesentlich besser als bei 10 kHz. Ich vermute, der 10-kHz-Empfänger reagiert nur deutlich auf große Blitze, vielleicht auch besonders lange Blitze aus hohen Wolken, weil dann die Frequenz besser stimmt. Für die Vorwarnung sind aber eventuell die vielen kleinen Entladungen wichtiger, deren Energiemaximum bei höheren Frequenzen liegt. Also doch wieder 500 kHz?


Sferics-Empfang mit Zähler,  TA7642 mit Zwischenverstärker



Hier ein Versuch mit dem TA7642 auf 500 kHz mit einem Zwischenverstärker. Der Transistor ist im Normalfall durchgesteuert. Nur Impulse ab einer bestimmten Pegel können den Transistor sperren und einen Ausgangsimpuls erzeugen. Wenn ein Mittelwellenradio läuft und das Oszilloskop am Ausgang angeschlossen ist erkennt man viele kurze Impulse, die zu den stärkeren Sferics gehören. Zu einem Blitz gehören immer mehrere Impulse. Wie viele es sind, hängt stark von der Entfernung ab. Wenn man sich mitten in einem Gewittergebiet befindet, knistert es unablässig auch wenn gerade kein Blitz zu sehen ist. Ein Gewitter in 100 km Entfernung erzeugt dagegen nur ab und zu mal einzelne Impulse. Die Empfindlichkeit kann in weiten Grenzen über den Basiswiderstand des Transistors beeinflusst werden.  Mit nur 100 k wird einiges an Verstärkung verschenkt. Mindestens 20 dB wären noch drin. Mit etwas Glück kommt am Ende heraus, dass man mit einer kleineren Ferritantenne auskommen kann.

2 4 2 1 3 1 10 1 4 2 2 1 1 3 4 1 1 3 1 1
4 1 3 1 3 2 1 1 3 1 1 1 2 1 4 1 2 1 2 1 4
3 2 1 2 1 1 1 2 1 1 1 1 1 2 1 3 3 1 2 1 2
1 1 1 2 3 1 1 3 1 1 3 3 1 2 1 3 1 1 1 2 1
1 1 2 1 1 2 2 2 1 2 1 1 2 2 1 1 2 1 2 1 1
1 2 2 1 3 1 1 5 1 1 1 1 2 1 1 1 1 1 6 1 1
1 3 2

Der Empfänger brachte eine korrekte Warnung bei einem Gewitter in ca. 30 km Entfernung. Die gezählten Impulse passen gut zu dem was im Radio zu hören ist. Starkes Knistern, immer mehrere Impulse pro Blitz. Man kann sehen, dass oft nur ein Impuls erkannt wurde, manchmal aber auch bis zu zehn Impulse in einer Sekunde. Insgesamt knistert es bei einem nahen Gewitter so stark, dass ein paar künstliche Störimpulse von Lichtschaltern usw. nicht ins Gewicht fallen. Die Summe macht’s, und deshalb hat man mit diesem Verfahren einen guten Störabstand, denn wenn ein nahes Gewitter knistert, dann richtig.

Die Auswertung wurde an den neuen Empfänger angepasst. Die in der Variablen Level aufsummierten Impulse werden diesmal exponentiell abgebaut, wie bei einer RC-Glättung mit einer Zeitkonstante von mehreren Minuten. Das Highbyte des aktuellen Levels wird nach jeweils einer vollen Minute ins EEPROM gespeichert. Man kann daher später nachsehen, wie sich die Blitze angesammelt haben und ob die Schwellwerte für die einzelnen Warnstufen günstig gewählt waren.  Den aktuellen Level kann man jederzeit auch im LCD ablesen. Im Moment z.B. wird durch ein Gewitter in etwa 100 km Entfernung ab und zu ein Level von 200 erreicht, was aber noch deutlich unter der ersten Warnstufe (1000) liegt. 

Download: Blitzwarner32EEtimer0n2.zip

'Blitzdatenlogger, ES-M32 mit LCD und EEPROM, Gezählte Sferics-Impulse

$regfile = "m32def.dat"
$crystal = 11059200
$hwstack = 16
$swstack = 32
$framesize = 128

Baud = 9600


Dim N As Word
Dim U As Word
Dim D As Word
Dim A As Word 'Adresse
Dim Trigger As Byte
Dim Sta As Byte 'Startadresse , Trigerpunkt

Dim Eeadr As Word
Dim Ramadr As Byte
Dim I As Byte
Dim J As Byte
Dim B As Word
Dim C As Word
Dim Ticks As Word 'Zeitmessung
Dim Ticks2 As Word
Dim Level As Word

Dim Blitze(10) As Word

Dim Daten(8) As Byte

S1 Alias Pind.2
S2 Alias Pind.3
S3 Alias Pind.6
S4 Alias Pind.7

Config Portd = &B00110000
Portd.2 = 1
Portd.3 = 1
Portd.6 = 1
Portd.7 = 1

Out1 Alias Portd.4
Out2 Alias Portd.5

Config Adc = Single , Prescaler = 8 , Reference = Off
Start Adc

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2

Initlcd
Cls

Open "com1:" For Binary As #1


Config Timer0 = Counter , Edge = Falling


'Dim D As Word
'Dim B As Byte
'Dim Level As Word
'Dim Eeadr As Word
'Dim N As Byte


'For N = 0 To 50
' Readeeprom B , N
' Print #1 , B
'Next N
Ramadr = 1
Timer0 = 0
Do
B = Timer0
If B > 0 Then
Daten(ramadr) = B
Ramadr = Ramadr + 1
If Ramadr > 8 Then Ramadr = 1
If B > 80 Then
B = 80
Waitms 300
End If
' N = B / 10
D = B
D = D * 30 '20 Entladungen auf einen Blitz?
Level = Level + D
If Level > 10000 Then Level = 10000
Timer0 = 0
End If

If Level > 1 Then Level = Level - 1 '1 Blitz in 10 min vergessen
D = High(level)
Level = Level - D 'exmonentielle Abnahme, T ca 5 min

Ticks2 = Ticks2 + 1
If Ticks2 >= 60 Then
Ticks2 = 0
Print #1 , D;
Print #1 , " ";
If Eeadr < 1023 Then Writeeeprom D , Eeadr
Eeadr = Eeadr + 1
End If

If Level < 1000 Then Portd = &B11001100 'kein Gewitter
If Level > 1000 Then Portd = &B11011100 'fern
If Level > 2000 Then Portd = &B11101100 'mittel
If Level > 4000 Then Portd = &B11111100 'nah
Locate 2 , 1
Lcd Level
Lcd " "

For Ticks = 1 To 10
J = Ischarwaiting(#1)
If J > 0 Then
Get #1 , J
If J = 100 Then
B = 0
For N = 0 To 1023
Writeeeprom B , N
Next N
End If
A = J * 128
For N = 1 To 128
Readeeprom B , A
Put #1 , B
A = A + 1
Next N
End If
Waitms 100
Next Ticks


For N = 0 To 7
D = N * 2
D = D + 1
Locate 1 , D
A = N + 1
D = Daten(a)
Lcd D
Next N

Loop
End
Ergebnisse für den Anfang des Gewitters am 20.6.13:

0 0 0 0 0 1 1 1 1 1 2 2 2
2 3 2 3 3 3 4 3 6 6 7 8 9
10 10 10 11 11 14 13 13 15
 17 20 27 28





Man sieht wie der Level kontinuierlich ansteigt.  Für den Tag waren schwere Unwetter angesagt. Hier ein Kurzprotokoll der Ereignisse mit Uhrzeit,  Entfernung des Gewitters, im LCD angezeigtem Level und LED-Warnstufe.

12:22: 60 km, Level 1000, Warnung 1
12:28: 50 km, Level 2000, Warnung 2
12:29: 30 km, Level 3000, Warnstufe 3
12:50:  Es wird sehr dunkel, Gewitter aber noch immer > 20 km entfernt
12:50: Die Grenze von 10000 ist erreicht und wird begrenzt, wahr wohl zu knapp gewählt ...
            Schneller Umbau, neue Grenze 50000 ...
12:57 Gewitter nur noch 10 km entfernt. Programm neu gestartet, Warnstufe schnell wieder auf 3, Level erreicht 10000 in kurzer Zeit
13:00 Leiser Donner ist aus der Ferne zu hören. Einzelne Blitze in 10 km Entfernung. Level 30 000
13:08 Erster Blitz ist zu sehen: Warnstufe konstant 3, Level 50000. Ich schalte den PC aus, das wird mir zu heiß...

Bis 14 Uhr gibt es ein heftiges Gewitter mit Blitzen, die teilweise weniger als 300 m entfernt einschlagen. Danach zieht das Unwetter langsam nach Norden ab. Um 16 Uhr ist wieder alles still, keine Warnung mehr.

Fazit dieses Gewitters:  Die Warnstufen waren sinnvoll gewählt. Man hatte etwa eine halbe Stunde Vorwarnzeit und konnte alles vorbereiten, Fernseher aus, Antenne abziehen, Telefonanlage trennen, usw.





Anstieg und Abfall des Levels in 128 Minuten



Hinweise von Heinz D. :

Das meiste, was Sie vermuten, vermute ich auch. In der Vergangenheit habe ich die Impulse zunächst differenziert und dann, ob stark, ob schwach (mangels Tiny) einfach auf einen Kondensator aufintegriert. Eine (Gleichrichter-) Diode hat das unvermeidliche Rauschen abgeschnitten. Ein hochohmiges Anzeigeinstument hat nicht nur angezeigt, sondern auch im Laufe einer Stunde den Kondensator entladen.

Mathematisch könnte man sagen: AM-Demodulation => Differziator => Schmitt-Trigger => Integrator (=> entladen). Das kann die Software auch.

Im Moment läuft:
CD2003 auf 500kHz: Referenz
CXA1191 auf 500kHz: wenig schlechter, fast gleich
MW-Retro 500kHz: sehr unempfindlich
SI4734 auf 2300kHz: sehr unempfindlich
SI4734 auf 153kHz: trotz DLF deutliche Impulse
Degen DE1103 auf 100kHz: deutliche Impulse, guter Rauschabstand und etwas besser als CD2003 und 20 mal so teuer.

Das lässt mich hoffen, dass ein (zwei) abgestimmter DCF77 Ferrit, ein T45 mit Vorverstärker x20, ein (zwei) ADC, Aref 1,1V DIREKT eine Anzeige (und eine Peilung) ermöglicht. Ggf. ein M16/32/64/128 mit Gain x200 und mehr Pins für eine Anzeige. Damit wäre ein M16-ADC im unteren uV-Bereich empfindlich. (auf ELEXS stand am 14.6.12 mal was mit Gain x200 ?)

Die Langzeitmessungen mit Spectrum Lab haben keine Hinweise auf besonders gut geeignete Frequenzbereiche ergeben. Vom reinen NF-Bereich habe ich mich ein wenig verabschiedet. Für einen Breitband-Empfänger 50-150kHz sehe ich noch Chancen.

Youtube-Film: MW-Radio als Blitzdetektor: http://youtu.be/-moXN55WfbA

Das ist meine Referenz CD2003+TDA2822: Tamashi LX5
Die Dinger gabs bei Saturn für 2,99 im Ausverkauf, da habe ich alle mitgenommen. ES IST SERIENMÄSSIG !!! nicht manipuliert !!! Die LED geht nur bei nahen Blitzen an , wie gerade um 13.30uhr


Pollin2313-Gewitter-Detector (Pollin-Spiel-1), von Heinz D. mit tatkräftiger Hilfe von Lukas (8)

(Diese Beschreibung ist knapp gehalten. Sie sollten erst alle anderen Beiträge lesen.)





Bei 1MHz verbraucht die Platine nur etwa 3mA. Die Platine haben wir nicht voll bestückt, deshalb eignen sich auch Lochraster-Aufbauten aus Tiny2313, LCD und LED. Als Empfänger eignet sich jedes MW-Radio (wg. 4,5V-Speisung fürs LCD). Im Beispiel wird die bekannte Schaltung mit TA7642 und BC548 als Differenzierer benutzt (zusammen unter 4mA). Die Antenne ist in der Pralinenschachtel bewusst weit weg vom T2313 montiert. Die Abschirmung ist ein Nussdosen-Deckel. Eine 5V-Solarzelle liegt auch bereit.



Pollinplatine (Umbauanleitung):



Der Eingang T0 ist an der linken, oberen Ecke (T4). Die Pulldown-Widerstände (R13+R12 für LED4) dürfen nicht bestückt werden, da die Software ist mit einem Pullup programmiert ist.

Der Buzzer (47 Ohm) verbraucht viel Strom, deshalb haben wir den Transistor nicht bestückt und eine LED von Kollektor nach Basis geschaltet. Außerdem muss R14 entfallen (spart 5mA).



Daraus ergibt sich dann eine Minimalbestückung: R1, R3, R4, C1, D1, 2313, LED, Buzzer, LCD.



Das Bascom-Programm:

Timer0 sammelt die Impulse ein. Damit er nicht überläuft wird nach 1s (einstellbar) der Wert abgeholt, aufsummiert und die Anzeige refrescht. Falls Impulse auftreten wird ein kurzer Ton (über die LED) ausgegeben. Mit höherer Warnstufe (von Herrn Kainka übernommen, einstellbar) wird der Ton höher. Am Schluss wird der Blitz-Zähler abwärts gezählt (einstellbar) um beim Ausbleiben der Blitze die Warnstufen langsam wieder zurück zu nehmen.

Die DATA-Zeile ganz oben scheint sinnlos zu sein. Hat man im Laufe der Zeit mehrere AVR rumliegen, vergisst man schnell was drauf war. Die DATA-Zeile ist im .hex-File in der ASCII-Darstellung im Klartext zu lesen und kann die Sucherei deutlich verkürzen.

Das Programm hat so viele Einstellmöglichkeiten (CONST), dass fast jeder Empfänger unterstützt werden kann. Außerdem können die LED1 bis 3 bestückt und herangezogen werden.

Damit es schneller geht wurden 50Hz eingespeist: Das Gerät in Youtube 

Download:  Pollin2313-Gewitter-bas-hex.zip


' Pollin Spiel T2313 mit Blitz-Empfänger an T0
Data "P o l l i n - T 2 3 1 3 G e w i t t e r D e t e c t o r"
' der Name ist im Klartext immer lesbar!
'###############################################################################
' 1 /Reset/ISP6 R1=10k 10k
' 2 D0/Rx/T1/LED1 R6=150/R7=33k (Rx) frei
' 3 D1/Tx/T2/LED2 R8=150/R9=33k (Tx) frei
' 4 A1/Xtal/LCD_RS LCD
' 5 A0/Xtal/LCD_E LCD
' 6 D2/Int0/T_On R5=33k frei
' 7 D3/Int1/T3/LED3 R10=150/R11=33k frei
' 8 D4/T0/T4/LED4 R12=150/R13=33k Eingang vom Empfänger
' 9 D5/T1/oc0b/Buzz R4=150/R14=1k/Tr1/D1 optische/akustische Anzeige
' 10 GND/ISP10+8+6 GND
' 11 D5/ICP/LCD_Vdd LCD
' 12 B0/Ain0/LCD_DB4 LCD
' 13 B1/Ain1/LCD_DB5 LCD
' 14 B2/oc0a/LCD_DB6 LCD
' 15 B3/oc1a/LCD_DB7 LCD
' 16 B4/oc1b/LCD_Vo R3=56/R2=10k LCD kann frei gemacht werden
' 17 B5/SDA/mosi/ISP1 frei
' 18 B6/Do/miso/ISP9 frei
' 19 B7/SCL/SCK/ISP7 frei
' 20 +5Vcc/ISP2 C1 +5V
'###############################################################################
Led1 Alias Portd.0 : T1 Alias Pind.0
Led2 Alias Portd.1 : T2 Alias Pind.1
T_on Alias Pind.2
Led3 Alias Portd.3 : T3 Alias Pind.3
Led4 Alias Portd.4 : T4 Alias Pind.4
Buzz Alias Portd.5

$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 32 '32
$swstack = 32 '8
$framesize = 32 '24
'$lib "mcsbyte.lbx"
'$baud = 19200
Const Empfangen = 1 'Senden-Empfangen Umschalter

Ddra = &B00000011 : Ddrb = &B00001111 : Ddrd = &B01000000 : Portd.6 = 1 'lCD=on
Ddrd.5 = 1 : Buzz = 1 'Buzz
Led4 = 1 'T0 pullup

Config Timer0 = Counter , Edge = Rising
Config Lcd = 16 * 2 , Chipset = Ks077 'Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Porta.0 , Rs = Porta.1
Initlcd : Cls

Dim Blitze As Word 'display
Dim Musik As Byte
Dim Temp As Byte
Dim Text As String * 8
Dim Zeit As Byte 'für entladen

Const Gelb = 1000 : 'fern
Const Rot = 2000 : 'mittel
Const Rotrot = 4000 'nah
Const Totzeit = 1000 'Anzeigezeit
Const Entladzeit = 2 't=entladen*totzeit
Const Entladwert = 2 'Entlade-Wert

Locate 1 , 1 : Lcd "Blitz- " : Locate 2 , 1 : Lcd "Detector" : Wait 2 : Locate 1 , 1 : Lcd " "

Do
#if Empfangen
'intgrieren
Waitms Totzeit : Temp = Timer0 : Timer0 = 0 : Blitze = Blitze + Temp

'anzeigen
Locate 1 , 1 : Lcd "BL " : Lcd Blitze : Lcd " "
If Blitze <= Gelb Then : Text = "LE GRUEN" : Musik = 15 : End If
If Blitze > Gelb Then : Text = "LE GELB " : Musik = 100 : End If
If Blitze > Rot Then : Text = "LE ROT " : Musik = 75 : End If
If Blitze > Rotrot Then : Text = " GEFAHR " : Musik = 60 : End If
Locate 2 , 1 : Lcd Text
If Temp > 0 Then Sound Buzz , 32 , Musik 'optisch/akustisch
Buzz = 1 'LED/Buzz aus
If Blitze > 65000 Then Blitze = 65000 'Fehlerbehandlung

'entladen
If Zeit = Entladzeit Then
If Blitze > Entladwert Then Blitze = Blitze - Entladwert
Zeit = 0
Else
Incr Zeit
End If
#else 'Sender
' Wait 2 : For Blitze = 1 To 5 : Buzz = 0 : Waitus 50 : Buzz = 1 : Waitms 50 : Next Blitze
Wait 2 : For Blitze = 1 To 5 : Buzz = 1 : Waitus 50 : Buzz = 0 : Waitms 50 : Next Blitze
#endif
Loop


Elektronik-Labor  AVR  HF  Projekte