Hallo,
also ich hab mal meinen ganzen Programmcode durchforstet und nichts gefunden. Deswegen poste ich hier den code noch mal. Einmal in voller Version und einmal nur den Teil den ich für relevant halte.
Der gesammte Code:
Code:
'------------------------------------------------------------
' ATTINY26 D.H. 2006-02
'------------------------------------------------------------
$regfile = "at26def.dat"
' default the internal osc runs at 1 MHz
$crystal = 1000000
Const A = 30 'Die x-Achsenverschiebung des 2. Empfängers
Dim Zeitus As Byte
Dim S As Word
Dim E As Bit
Dim R As Word 'Radius des 1. Empfängers
Dim Q As Word 'Radius des 1. Empfängers
Dim X As Word 'Position auf der x-Achse
Dim Y As Word 'Position auf der y-Achse
Dim Z As Word
Dim Temp As Word 'temporäre Variable zur Berrechnung von Zwischenschritten
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , Rs = Porta.4 , E = Porta.5
Config Lcd = 16 * 2
Config Pinb.4 = Input 'US1
Config Pinb.5 = Input 'US2
Config Pina.6 = Input 'sofort
Zeitus = 0
E = 0
X = 0
Y = 0
Do
If E = 1 Then
E = 0
Else
E = 1
End If
Cls
Locate 1 , 1
Lcd "R=" ; R ; " | Q=" ; Q
Locate 2 , 1
Lcd "[" ; X ; "|" ; Y ; "] Z= " ; Z ; "|"
Zeitus = 0
S = 0
'Zuerst auf Startsignal warten
While Pina.6 = 0
'nichts
Wend
If E = 0 Then
'Nun zählen
While Pinb.4 = 0
Zeitus = Zeitus + 1 'Zählt 1 mehr
Wend
Else
'Nun zählen
While Pinb.5 = 0
Zeitus = Zeitus + 1 'Zählt 1 mehr
Wend
End If
'Nun Ausgabe
While Pina.6 = 1 'warte bis signal weg
'nichts
Wend
'Streckenberrechnung
S = 50 * Zeitus
S = S - 177
S = S / 81
If E = 0 Then
R = S
Else
Q = S
End If
'Lateration
X = A * A
Temp = R * R
X = X + Temp
Temp = Q * Q
X = X - Temp
Temp = 2 * A
X = X / Temp
Temp = R * R
Y = Temp
Temp = X * X
Y = Y - Temp
Z = Y
Y = Sqr(z)
Loop
End
Der scheinbar relevante Code:
Code:
$regfile = "at26def.dat"
$crystal = 1000000
Dim Y As Word 'Position auf der y-Achse
Dim Z As Word
[...]
Z = Y
Y = Sqr(z)
[...]
End
Und das ist die Ausgabe auf dem LCD-Display:
R=21 | Q=13
[18|0] Z=180|
Heißt also so viel wie Y=0 und Z=180.
@oe9vfj: Irgendwie sieht dein Code merkwürdig aus, da bei dir die Variablennamen klein bleiben, während sie bei mir immer mit Großbuchstaben geschrieben werden (automatische Änderung). Benutzt du vieleicht eine andere Version (BASCOM-AVR 1.11.7.4)?
Ein anderes Zeichen dafür dass es nicht funktioniert ist dass die Variable in der Funktion klein bleibt, wo Bascom bei mit üblicherweise alle Variablennamen groß anfängt (Sqr(z) anstatt Sqr(Z) wie erwartet)...
Naja, ich werde entweder das Wurzeln lassen oder aber die Wurzel mit einem eigenen Algorythmus ausrechnen.
mfG, Ringelkrat
Lesezeichen