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?)
Druckbare Version
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 :-k
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.