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:Der scheinbar relevante 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 EndUnd das ist die Ausgabe auf dem LCD-Display:Code:$regfile = "at26def.dat" $crystal = 1000000 Dim Y As Word 'Position auf der y-Achse Dim Z As Word [...] Z = Y Y = Sqr(z) [...] EndHeißt also so viel wie Y=0 und Z=180.R=21 | Q=13
[18|0] 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







Zitieren

Lesezeichen