Liste der Anhänge anzeigen (Anzahl: 1)
Versteh ich nicht...
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:
Zitat:
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
Liste der Anhänge anzeigen (Anzahl: 1)
2. Versuch
Noch mal heute:
Also ich hab mal ein Testprogramm geschrieben um das Wurzeln mal konkret zu versuchen:
Code:
'------------------------------------------------------------
' ATTINY26 Wurzel Test D.H. 2006-02
'------------------------------------------------------------
$regfile = "at26def.dat" 'ATTiny Definitionen
$crystal = 1000000 ' default the internal osc runs at 1 MHz
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
Dim B1 As Byte
Dim B2 As Byte
Dim W1 As Word
Dim W2 As Word
Dim I1 As Integer
Dim I2 As Integer
Dim L1 As Long
Dim L2 As Long
'Problem: Dim S1 As Single 'nicht genügend Speicherplatz
'Problem: Dim S2 As Single 'nicht genügend Speicherplatz
'Problem: Dim D1 As Double 'Unknown DATA TYPE (DOUBLE)
'Problem: Dim D2 As Double 'Unknown DATA TYPE (DOUBLE)
B1 = 66
B2 = Sqr(b1)
W1 = 6600
W2 = Sqr(w1)
I1 = 6600
I2 = Sqr(i1)
L1 = 660000
L2 = Sqr(l1)
'Problem : S1 = 660000 'nicht genügend Speicherplatz
'Problem : S2 = Sqr(s1) 'nicht genügend Speicherplatz
'Problem : D1 = 660000 'Unknown DATA TYPE (DOUBLE)
'Problem : D2 = Sqr(d1) 'Unknown DATA TYPE (DOUBLE)
Cls 'LCD-Display leeren
Locate 1 , 1 'Am Anfang der ersten Zeile positionieren
Lcd "b" ; B2 ; "w" ; W2 ; "i" ; I2 ; "l" ; L2 'Das sollte ergeben: 'b8w81i81l812'
'Ausgabe ist wirklich: 'b8w0i81l812'
Locate 2 , 1 'Am Anfang der zweiten Zeile positionieren
Lcd "" 'Das sollte ergeben: '' ; (Double und Single wurde entfernt)
End
- Leider konnte ich schon mal kein Double benutzen, da er den Datentyp nicht kennt. Er steht auch nicht unter den 'Elementary Data Types' der Hilfe.
Dann hatte ich eine Speicherplatzbelegung von 110% deswegen hab ich den Single herrausgenommen. Damit hatte ich nur noch 54%.
Nun auch als ich diese Probleme beseitigt hatte gab er mir nicht das Richtige Ergebniss: Das heißt so viel wie:[list:c8a82e988a]Byte = 8
Word = 0
Integer = 81
Long = 812
Das heißt dass das Word (was ich sonst immer benutzt habe [s.o.]) nicht richtig funktioniert :cry: .[/list:u:c8a82e988a]
mfG, Ringelkrat