Tach ,
da das mein 1. Beitrag ist folgendes Vorweg.
Einige beschweren sich dass so wenig gefragt wird usw. . Da in diesem Superforum ja schon fast alles drin steht, bleiben eigentlich fast keine Fragen mehr übrig
Ich hab jetzt aber doch noch ein paar und deshalb leg ich jetzt los
Vor einiger Zeit hab ich mir ein STK500 zugelegt und bin dabei mir eine Wetterstation zu bauen. Es gibt zwar jede Menge auf dem Markt, aber was mir bei denen nicht gefällt ist, dass man die Anzeige nicht über große Entfernungen ablesen kann und dass z.B. die Windgeschwindigkeit nur alle Minute mal gemessen wird.
Ich hab also vor Eine zu bauen die 7 Segment LED Anzeigen hat und die Windgeschwindigkeit misst, sobald Wind da ist.
Am Anfang wollte ich eigentlich alles in Assembler machen und hatte auch schon erste Erfolgserlebnisse, aber dann kam die Temperaturmessung mit einem DS18S20 und da hab ich das Timing nicht hinbekommen. Bin dann auf BASCOM umgeschwenckt und innerhalb kürzester Zeit hatte ich Temperatur auf dem LCD - Display stehen . Mittlerweile hab ich es auch geschafft den Luftdruck noch anzuzeigen. Das LCD Display hab ich erstmal zu Testen drangehängt, weil ich noch nicht genau weiss wie ich die 7 Segmentanzeigen ansteuern soll, aber da steht ja auch einiges hier im Forum.
Achso, wenn's fertig ist soll Luftdruck, Temperatur und Wingeschwindigkeit gemessen und per Funk (RFM12) zur Anzeige gebracht werden.
Die Windgeschwindigkeit möchte ich so messen, dass ich die Anzahl der Impulse, die mir (ein noch zu bauendes) Windrad (Windsensor) am ICP1 Pin eines AtmegaX liefert, zähle und dann anhand der zugehörigen Daten (Durchmesser des Windrades usw.), in die Geschwindigkeit / Stunde umrechne.
Ich hab dafür jetzt ein Taster an ICP1 angeschlossen und mal folgenden Code eingeklappert:
------------------------------------------------------------------------
' ----------------------------------------------------------------
' Autor : Fuzzy
' Zeitmessung zwischen 2 Tastendrücken (Vorstufe für Windmesser)
' Signaleingang am ATmega8 = Pin PB.0 (ICP1)
' ----------------------------------------------------------------
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 4000000
$baud = 9600
$crystal = 4000000 'Quarzfrequenz
On Icp1 Oncapture 'Interruptroutine für Timer1
Declare Sub Warten
Dim I As Word
Dim Wind As Bit
Ddrb.0 = 0 'PB.0 als Input
Portb.0 = 1 'Pullup ein
Tccr1a = &B00000000 'kein compare Modus
Tccr1b = &B10000010 '
Timsk.ticie1 = 1 'Interrupt enable
Sreg.7 = 1 'Interrupts global einschalten
I = 0
Wind = 0
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20 * 2
Cursor Off Noblink
Cls
Locate 1 , 1 : Lcd "*Geschwindigkeit*"
Main:
If Wind = 1 Then
Warten
End If
Goto Main
Oncapture:
I = I + 1
Wind = 1
Return
Sub Warten
Wait 2
Cls
Locate 2 , 1 : Lcd I
I = 0
Wind = 0
End Sub
----------------------------------------------------
Er zählt jetzt auch schön die Impulse wenn ich den Taster drücke, nur wenn jetzt kein Wind da ist, also Taster für z.B. 5 Sekunden NICHT gedrückt, dann bleibt natürlich die alte Anzeige dauerhaft im Display stehen. Kann mir jemand einen Tipp geben wie ich die Anzeige bei, z.B. 5 Sekunden kein Wind, auf 0 setzen kann. Ich probier schon den ganzen Nachmittag mir fehlt aber die richtige Idee.
Vielleicht könnte man auch den Inhalt des TCNT1 Registers in eine Variable lesen und damit die Zeit zwischen 2 Imulsen bestimmen, um die Geschwindigkeit zu messen. Vielleicht hat jemand so was schon mal gemacht?
Ich hab zwar vor Jahren mal ein bisschen Visual Basic programmiert aber so der Crack bin ich leider noch nicht .
Wäre schön wenn mir jemand auf die Sprünge helfen könnte.
Danke schon mal
da das mein 1. Beitrag ist folgendes Vorweg.
Einige beschweren sich dass so wenig gefragt wird usw. . Da in diesem Superforum ja schon fast alles drin steht, bleiben eigentlich fast keine Fragen mehr übrig
Ich hab jetzt aber doch noch ein paar und deshalb leg ich jetzt los
Vor einiger Zeit hab ich mir ein STK500 zugelegt und bin dabei mir eine Wetterstation zu bauen. Es gibt zwar jede Menge auf dem Markt, aber was mir bei denen nicht gefällt ist, dass man die Anzeige nicht über große Entfernungen ablesen kann und dass z.B. die Windgeschwindigkeit nur alle Minute mal gemessen wird.
Ich hab also vor Eine zu bauen die 7 Segment LED Anzeigen hat und die Windgeschwindigkeit misst, sobald Wind da ist.
Am Anfang wollte ich eigentlich alles in Assembler machen und hatte auch schon erste Erfolgserlebnisse, aber dann kam die Temperaturmessung mit einem DS18S20 und da hab ich das Timing nicht hinbekommen. Bin dann auf BASCOM umgeschwenckt und innerhalb kürzester Zeit hatte ich Temperatur auf dem LCD - Display stehen . Mittlerweile hab ich es auch geschafft den Luftdruck noch anzuzeigen. Das LCD Display hab ich erstmal zu Testen drangehängt, weil ich noch nicht genau weiss wie ich die 7 Segmentanzeigen ansteuern soll, aber da steht ja auch einiges hier im Forum.
Achso, wenn's fertig ist soll Luftdruck, Temperatur und Wingeschwindigkeit gemessen und per Funk (RFM12) zur Anzeige gebracht werden.
Die Windgeschwindigkeit möchte ich so messen, dass ich die Anzahl der Impulse, die mir (ein noch zu bauendes) Windrad (Windsensor) am ICP1 Pin eines AtmegaX liefert, zähle und dann anhand der zugehörigen Daten (Durchmesser des Windrades usw.), in die Geschwindigkeit / Stunde umrechne.
Ich hab dafür jetzt ein Taster an ICP1 angeschlossen und mal folgenden Code eingeklappert:
------------------------------------------------------------------------
' ----------------------------------------------------------------
' Autor : Fuzzy
' Zeitmessung zwischen 2 Tastendrücken (Vorstufe für Windmesser)
' Signaleingang am ATmega8 = Pin PB.0 (ICP1)
' ----------------------------------------------------------------
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 4000000
$baud = 9600
$crystal = 4000000 'Quarzfrequenz
On Icp1 Oncapture 'Interruptroutine für Timer1
Declare Sub Warten
Dim I As Word
Dim Wind As Bit
Ddrb.0 = 0 'PB.0 als Input
Portb.0 = 1 'Pullup ein
Tccr1a = &B00000000 'kein compare Modus
Tccr1b = &B10000010 '
Timsk.ticie1 = 1 'Interrupt enable
Sreg.7 = 1 'Interrupts global einschalten
I = 0
Wind = 0
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20 * 2
Cursor Off Noblink
Cls
Locate 1 , 1 : Lcd "*Geschwindigkeit*"
Main:
If Wind = 1 Then
Warten
End If
Goto Main
Oncapture:
I = I + 1
Wind = 1
Return
Sub Warten
Wait 2
Cls
Locate 2 , 1 : Lcd I
I = 0
Wind = 0
End Sub
----------------------------------------------------
Er zählt jetzt auch schön die Impulse wenn ich den Taster drücke, nur wenn jetzt kein Wind da ist, also Taster für z.B. 5 Sekunden NICHT gedrückt, dann bleibt natürlich die alte Anzeige dauerhaft im Display stehen. Kann mir jemand einen Tipp geben wie ich die Anzeige bei, z.B. 5 Sekunden kein Wind, auf 0 setzen kann. Ich probier schon den ganzen Nachmittag mir fehlt aber die richtige Idee.
Vielleicht könnte man auch den Inhalt des TCNT1 Registers in eine Variable lesen und damit die Zeit zwischen 2 Imulsen bestimmen, um die Geschwindigkeit zu messen. Vielleicht hat jemand so was schon mal gemacht?
Ich hab zwar vor Jahren mal ein bisschen Visual Basic programmiert aber so der Crack bin ich leider noch nicht .
Wäre schön wenn mir jemand auf die Sprünge helfen könnte.
Danke schon mal