Hallo,
habe mich jetzt heute nachmittag mit der Bascomumsetzung auseinandergesetzt, aber noch kein zufriedenstellendes Ergebnis erhalten.
Wenn ich aufsummiere dann rennt der AVR ja sehr schnell durch die Schleife mit seinen 16Mhz und ich habe wieder nur eine Momentaufnahme. Mit waitms zu arbeiten ist ja nicht sonderlich elegant, weil der ganze Controller währenddessen nichts macht.
Als ich noch ein paar Single oder Double Variablen zusätzlich deklariert habe kam auch schon die Fehlermeldung, dass ich an die Grenzen der Bascom Testversion hinsichtlich Codeumfang gestoßen bin. Kann das sein mit so einem kleinen Progrämmchen?
Ich würde nämlich noch gerne zusätzlich einen 1wire Temperaturfühler (Ds1820) implementieren. Das ganze soll später auf einem Mega8 laufen. Nur zum programmieren benutze ich der Schnittstelle wegen das RNControl mit Mega32.
Mein vermutlich höchst ineffizienter Code lautet bisher wie folgt:
Code:
$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
$hwstack = 64
$swstack = 64
Dim Aw As Integer 'Analogwert
Dim Men As Integer 'Menüvariable
Dim Volumen As Single
Dim Volint As Integer 'Volumen als Integer
Dim Hoehe As Single
Dim Prozent As Integer '
Dim Balken As Single 'Balkenanzeige LCD
Dim U As Integer 'Konvertierung Single Integer
Dim I As Integer
Dim X As Integer 'Zählvariable For Schleife
'Variable initialisieren:
Men = 1
'LCD:
Config Lcdpin = Pin , Rs = Portb.7 , E = Portb.6 , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2
Config Lcd = 16 * 2
Initlcd
Cursor Off
Cls
'ADC:
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Start Adc
Cls
Lcd "****Zisterne****"
Wait 2
Cls
Portd.2 = 0
Portd.3 = 0
Config Pind.2 = Output
Config Pind.3 = Input
Config Debounce = 10
Do
Gosub Berechnung
Debounce Pind.3 , 1 , Menuvar , Sub
Gosub Menu
Loop
End
'Volumenberechnung aus Analogwert
Berechnung:
Aw = Getadc(7)
Hoehe = Aw / 240
Hoehe = Hoehe * 23
Volumen = 176.714 * Hoehe
Volint = Volumen
Return
'Menü
Menuvar:
If Pind.3 = 1 Then
Waitms 500
If Pind.3 = 1 Then
Locate 2 , 1
Lcd " "
Incr Men
End If
End If
Return
'Menüauswahl
Menu:
Select Case Men
Case 1 : Lcd " "
Locate 1 , 1
lcd "Fuellstand:"
Locate 2 , 6
Lcd Volint ; " l"
Case 2 : Lcd " "
Locate 1 , 1
lcd "Fuellstand:"
Balken = 0.004 * Volumen
Balken = Round(balken)
U = Balken
For I = 0 To U Step 1
Locate 2 , I
Lcd Chr(0)
Next U
Case 3 : Lcd " "
Locate 1 , 1
lcd "Fuellstand:"
Locate 2 , 6
Prozent = Volumen / 40
Lcd Prozent ; " %"
Case 4 : Men = 0
Cls
Locate 1 , 1
Lcd "Temperatur"
End Select
Return
Explizit geht es um die Berechnungsroutine. Das Volint würde ich gerne auf einem LCD ausgeben und würde gerne verhindern, dass die Anzeige zu sehr schwankt. Aber ich bekomme wie schon gesagt keinen kompakten Code für dieses Problem auf die Reihe.
Vielleicht kann mir jemand den entscheidenden Tipp geben.
Besten Dank
Florian.
Lesezeichen