hab alles auf doubel gesetzt und am ende trozdem 0 raus
den eeprom kann man ja 100.000 mal beschreiben wie schnell schaft man das erfahrungs gemäß? strat und zielpunkt speicher ich jetzt darauf und die zwischen punkte auf den sram (der hat keine grenze?)
hab alles auf doubel gesetzt und am ende trozdem 0 raus
Poste doch noch mal dein aktuelles Programm.
Dann brauchen wir nicht zu raten, wie es jetzt aussieht, sondern können es direkt austesten.
Gruß
Rolf
Code:$regfile = "m16def.dat" $crystal = 7372800 Dim A As Double Dim B As Double Dim C As Double Dim Comfeld(12) As Byte Dim X As Double Dim Y As Double Dim Z As Double Dim W As Double Dim K As Double Dim M As Double Dim N As Double Dim Auflosung As Double Dim Xstart As Integer Dim Ystart As Integer Dim Zstart As Integer Dim Xziel As Double Dim Yziel As Double Dim Zziel As Double Dim Zwischenwert1 As Double Dim Zwischenwert2 As Double Dim Zwischenwert3 As Double Dim Zwischenwert4 As Double Dim Zwischenwert5 As Double Dim Zwischenwert6 As Double Dim Aa As Double Dim Bb As Double Dim Xzwischenziel As Double Dim Yzwischenziel As Double Dim Zzwischenziel As Double Dim Realposx As Integer Dim Realposy As Integer Dim Realposz As Integer Dim Stposx As Double Dim Stposy As Double Dim Stposz As Double Dim Motoraus As Double Dim Absx As Double Dim Absy As Double Dim Absz As Double Dim Pc1alt As Double Dim Pc0alt As Double Dim F0 As Bit Dim F1 As Bit : Dim F2 As Bit : Dim F3 As Bit : Dim F4 As Bit Dim F5 As Bit : Dim F6 As Bit : Dim F7 As Bit : Dim F8 As Bit Auflosung = 2 Config Porta = Output Config Portd = Input 'Config Portd.6 = Output Config Portc = Input Config Portb.1 = Input Config Portb.0 = Output Realposx = 1 Realposy = 1 Realposz = 1 'Enable Xziel = 300 '10 umdreungen Yziel = 30 Porta = 255 Portc = 255 Stposx = 1 'Realposx Stposy = 1 'Realposy Stposz = 1 'Realposz For Aa = 0 To 2 Step 0.1 Bb = Aa - 2 Zwischenwert1 = Stposx * Bb Zwischenwert2 = Xziel * Aa Zwischenwert3 = Stposy * Bb Zwischenwert4 = Yziel * Aa Zwischenwert5 = Zwischenwert2 - Zwischenwert1 'zwischen punkt erechnungs zeug Zwischenwert6 = zwischenwert4 - Zwischenwert3 X = Zwischenwert5 / 2 'realpos damit ich immer vom wirklichen wert ausgehe und der fehler nicht größer wird Y = Zwischenwert6 / 2 'X = 50.5 Motoraus = 0 X = Int(x) X = X - Realpos If X = 0 Then : Porta.0 = 0 : Else : Porta.0 = 1 : End If 'test ob x null ist Do If Pinc.0 = 0 Then Pc0alt = 1 If Pinc.0 = 1 And Pc0alt = 1 Then : Pc0alt = 0 : X = X + 1 : Realposx = Realposx + 1 : End If 'pos holen If Pinc.1 = 0 Then Pc1alt = 1 If Pinc.1 = 1 And Pc1alt = 1 Then : Pc1alt = 0 : X = X - 1 : Realposx = Realposx -1 : End If 'pos holen If X = 0 Then : Porta.1 = 0 : Else : Porta.1 = 1 : End If Absx = Abs(x) If X > 0 Then : Porta.4 = 0 : Porta.5 = 1 : Waitus 50 : End If 'Pos anfahren If X < 0 Then : Porta.4 = 1 : Porta.5 = 0 : Waitus 50 : End If 'pos anfahre If Absx < 15 Then : Porta.4 = 0 : Porta.5 = 0 : End If If X = 0 Then Motoraus = Motoraus + 1 Loop Until Motoraus = 1000 'sicher gehen das der motor wirklich steht und keinen schwung mehr hat Next Aa Do Loop
das ist er gestern ging garnichts der test ob x null ist war positiv die led leuchtete jetzt gehts nur das der motor ein paar um drehungen mehr macht (schätze 10* soviele) noch was pinc0 bekommt die impulse der geberscheibe wenn der motor sich nach rechts dreht und pinc1 wenn er sich nach links dreht also die geber scheibe und die lichschranken haben auch noch eine logik die geht aber 100%ig
In Zeile 90 steht
X = X - Realpos
Realpos ist nicht definiert. Seltsamerweise beschwert sich der Compiler nicht. Habe ich bisher noch nie gehabt. In der Simulation hat Realpos den Wert 3, keine Ahnung warum.
Wahrscheinlich meinst du
X = X - RealPosx
Gruß
Rolf
ja meinte ich. tippfehler da kann ich mich ja doof und dämlich suchen der compiler brüllt bei allem außer eine variable ist nicht definiert. werd es mal testen
test fehlgeschlagen der fehler bleibt der selbe
x ist ja ein absolutes ziel und realposx mein absolute postion und um den weg zu erechnen mach ich ja X = X - Realposx trotzdem scheint er immer den weg immer wieder neu zu fahren als wäre meine absolute position immer noch 0 (versteht ihr was ich meine hab mein problem das zu beschreiben) der müsste 10 umdrehungen mach er macht aber über 70 dann wurd ich abgelenkt dauerte aber nicht mehr lange also müssten um die 100 gewesen sein
das geht aber zu machen oder hat da Bascom wieder ein problem damit z.B.
a as word
b as word
c as word
a=1
b=2
c=a/b
dann ist c 0
a=3
b=2
c=a/b
ist c 1 oder kann es sein das der auch auf die idee kommt 0 zu machen weil c eigentlich 1,5 ist und damit kein word und der wider eine datentyp umformung machen will
es geht hab zwar immer noch meine schwierig keiten mit den datentypen aber es geht hier der code der ist jetzt so gemacht das ich in der einen for next schleicf nicht merh +0.1 mach sondern nur noch ganzahlige wert sodas alles keine gleit kommas mehr brauch wer noch paar optimierungs vorschläge machen kann und will die mir nicht das ganze programm auf den kopfstelle.
Code:$regfile = "m16def.dat" $crystal = 7372800 Dim A As Double Dim B As Double Dim C As Double Dim Comfeld(12) As Byte Dim X As Long Dim Y As Long Dim Z As Double Dim W As Double Dim K As Double Dim M As Double Dim N As Double Dim Auflosung As Long Dim Xstart As Long Dim Ystart As Long Dim Zstart As Long Dim Xziel As Long Dim Yziel As Long Dim Zziel As Long Dim Zwischenwert1 As Long Dim Zwischenwert2 As Long Dim Zwischenwert3 As Long Dim Zwischenwert4 As Long Dim Zwischenwert5 As Long Dim Zwischenwert6 As Long Dim Aa As Long Dim Bb As Long Dim Xzwischenziel As Double Dim Yzwischenziel As Double Dim Zzwischenziel As Double Dim Realposx As Long Dim Realposy As Long Dim Realposz As Long Dim Stposx As Long Dim Stposy As Long Dim Stposz As Long Dim Motoraus As Long Dim Absx As Long Dim Absy As Long Dim Absz As Long Dim Pc1alt As Long Dim Pc0alt As Long Dim F0 As Bit Dim F1 As Bit : Dim F2 As Bit : Dim F3 As Bit : Dim F4 As Bit Dim F5 As Bit : Dim F6 As Bit : Dim F7 As Bit : Dim F8 As Bit Auflosung = 2 Config Porta = Output Config Portd = Input 'Config Portd.6 = Output Config Portc = Input Config Portb.1 = Input Config Portb.0 = Output Realposx = 1 Realposy = 1 Realposz = 1 'Enable Xziel = 120 '10 umdreungen Yziel = 30 Porta = 255 Portc = 255 Stposx = 1 'Realposx Stposy = 1 'Realposy Stposz = 1 'Realposz For Aa = 0 To 20 Step 5 Bb = Aa - 20 Zwischenwert1 = Stposx * Bb Zwischenwert2 = Xziel * Aa Zwischenwert3 = Stposy * Bb Zwischenwert4 = Yziel * Aa Zwischenwert5 = Zwischenwert2 - Zwischenwert1 'zwischen punkt erechnungs zeug Zwischenwert6 = Zwischenwert4 - Zwischenwert3 X = Zwischenwert5 / 2 'realpos damit ich immer vom wirklichen wert ausgehe und der fehler nicht größer wird Y = Zwischenwert6 / 2 X = X / 10 Y = Y / 10 'X = 50.5 Motoraus = 0 'X = Int(x) X = X - Realposx If X = 0 Then : Porta.0 = 0 : Else : Porta.0 = 1 : End If Do If Pinc.0 = 0 Then Pc0alt = 1 If Pinc.0 = 1 And Pc0alt = 1 Then : Pc0alt = 0 : X = X + 1 : Realposx = Realposx - 1 : End If 'pos holen If Pinc.1 = 0 Then Pc1alt = 1 If Pinc.1 = 1 And Pc1alt = 1 Then : Pc1alt = 0 : X = X - 1 : Realposx = Realposx + 1 : End If 'pos holen If X = 0 Then : Porta.1 = 0 : Else : Porta.1 = 1 : End If Absx = X 'abs(x) If X > 0 Then : Porta.4 = 0 : Porta.5 = 1 : Waitus 50 : End If 'Pos anfahren If X < 0 Then : Porta.4 = 1 : Porta.5 = 0 : Waitus 50 : End If 'pos anfahre If Absx < 15 Then : Porta.4 = 0 : Porta.5 = 0 : End If If X = 0 Then Motoraus = Motoraus + 1 Loop Until Motoraus = 1000 'sicher gehen das der motor wirklich steht und keinen schwung mehr hat Next Aa Do Loop
der neue atmega8 von pollin ist eigetroffen und da wollt ich jetzt wissen was ich machen muss das der atmega8 den externen 16MHz quarz verwendet und nicht den 1MHz internen rc oszilator.
Lesezeichen