PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : need help .. tut was es will !!



Julian
03.04.2005, 11:06
Hi !!

Ich bin gerade dabei mein erstes projekt mit einem avr controler zu verwirklichen, und hab zu dem zweck in bascom mein programm geschrieben ...


Es handelt sich um eine fersteuerung mittels modifiziertem pc joystick, und um quasi eine kalibrierung zu verwirklichen hab ich mal folgendes kleines programm geschrieben:


$regfile = "m8def.dat"
$crystal = 11059200
$baud = 9600

Dim Adcx As Integer
Dim Adcy As Integer
Dim Wertx As Integer
Dim Werty As Integer

Config Adc = Single , Prescaler = Auto
Start Adc

Do

Waitms 100

Printbin 27 ; 91 ; 50 ; 74

Adcx = Getadc(0)
Adcy = Getadc(1)

Adcx = Adcx / 4
Adcx = Adcx - 127
Adcy = Adcy / 4
Adcy = Adcy - 127

Select Case Adcx
Case Is > 15 : Wertx = Adcx - 15
Case Is < -5 : Wertx = Adcx + 5
Case Else : Wertx = 0
End Select

Select Case Adcy
Case Is > 17 : Werty = Adcy - 17
Case Is < -5 : Werty = Adcy + 5
Case Else : Werty = 0
End Select

If Wertx > 100 Then Wertx = 100
If Wertx < -100 Then Wertx = -100

If Werty > 100 Then Werty = 100
If Werty < -100 Then Werty = -100

Print "Y-Achse" ; Werty
Print "X-Achse" ; Wertx

Loop


End

im simulator funktioniert es einwandfrei, und ich weiß auch sonst keinen grund warum es in der hardware nicht klappen sollte, aber (sont würd ich ja nicht um hilfe bitten *ggg*) sobald ich die If bedinnungen bezüglich -100 am ende des programms einbaue spinnt die software ohne ende ... und zwar funktioniert dann die ausgabe am terminal nicht mehr richtig .. je nach dem ob man die print befehle wonaders hinsetzt, oder die if bedinnungen kommt unterschiedlicher schwachsinn daher ! .. ohne die besagten if bedinnungen klappt es wunderbar !

habe bis jetzt immer mit CC1m oder CC2 gearbeitet .. mit großem erfolg .. hat immer prima geklappt !!

vielen dank im vorraus für die hilfe .. also ist das nicht mein erster kontakt mit µc's und elektronik !

mfg Julian

ps. Proggen tu ich mit ponny prog, und ich hab auch schon die neueste bascom demo aus dem web

Julian
03.04.2005, 12:44
Hi nochmal

... hab jetzt eine ältere version von bascom installiert ... da funkt der code von vorher ... guter dinge hab ich weitergeschrieben ...

wie vorher +var definition für kettel und ketter

If Wertx > 100 Then Wertx = 100
If Wertx < -100 Then Wertx = -100

If Werty > 100 Then Werty = 100
If Werty < -100 Then Werty = -100
'-----------------------------------------------------------neu:
Kettel = Werty - Wertx
Ketter = Werty + Wertx

If Kettel > 100 Then Kettel = 100
If Ketter > 100 Then Ketter = 100

If Kettel < -100 Then Kettel = -100
If Ketter < -100 Then Ketter = -100



Print "Y-Achse: " ; Werty
Print "X-Achse: " ; Wertx
Print "--------------"
Print "L: " ; Kettel ; " R: " ; Ketter

Loop

End


und der gleiche #+*§"$§$% wie vorher ... allerdings gibt mein avr jetzt gar keine verwertbaren daten an den pc ab !! außer ich entferne die if bedinnungen für kettel/r < -100 .. dass komt mir so irgendwie bekannt vor !!

is bascom so labil ???? was soll der blödsinn ... wie soll man da jemals ein programm schreiben das länger als 10 zeilen is ??

ps .. sorry das ich den code immer so lange einfüge, aber ich check irgendwie nicht wie ihr das scroll fenster hinbekommt !!

mfg Julian

Marco78
03.04.2005, 13:22
Hast du die Fusebits auf einen externen Quarz eingestellt?

Also mehr als ein paar Zeilenhabe ich schon erfolgreich geschrieben ;)

Das Scrollfenster kannst du mit Code einfügen. Einfach den Button klicken, den Text danach schreiben und nochmal den Button klicken um Code anzuschliessen.

Felix G
03.04.2005, 13:27
ps .. sorry das ich den code immer so lange einfüge, aber ich check irgendwie nicht wie ihr das scroll fenster hinbekommt !!

das geht mit
bla bla bla

vish
03.04.2005, 15:35
Hallo Julian!

Jede If-Schleife muss mit "End If" beendet werden. Vielleicht liegt es daran. Also so:

If [bedingung] Then
[anweisung]
End If

Grüße,
Jonas

Marco78
03.04.2005, 15:46
Er hat ja keine IF-Schleife.
Das hätte BASCOM ja schon bemängelt.

Julian
03.04.2005, 15:51
Hi !!

wenn die fuses nicht passen würden würde es ja gar nicht laufen ...

was mir jetzt aufgefallen ist ist das die variablen wertx und werty schon falsch angegeben werden und zwar mit -100 egal welcher wert am adc anliegt !

und die ärgenzung der if schleifen durch end if hat nichts gebracht ... laut meinen bascom büchern ist die ja auch nicht vorgeschrieben .. es sei denn man will mehr als eine instuktion an die if bedinnung knüpfen!

mfg Julian

ps. langsam aber sich geht mir bascom schwer auf die nerfen !! >:-(

Marco78
03.04.2005, 16:05
Im Simulator ging das obere Programm bei mir!
Je nachdem wie ich den ADC eingestellt habe, hatte X oder Y ein Wert von -100 bis 100 (man könnte denken, das sollte so ;) )

Das schöne an BASCOM ist ja, das es ein eine Menge arbeit abnimmt.
Ich stelle nur ein, welchen IC ich verwende und was für eine Taktfreuqenz der hat.
Alles zeitabhänige wird dann automatisch errechnet.
z.B. die Pausen nach LCD-Befehlen. Vorteiler für ADC, ...
Und RS232 ist auch eine Zeitabhänige Geschichte. Außerdem ist nicht jede Baudrate mit jeder Taktfrequenz möglich ;)

Wenn BASCOM jetzt in den Glauben gelassen wird, der Chip läuft mit 11MHz aber in wirklichkeit läuft er mit 1MHz können die errechneten Zeiten schon Auswirkungen haben. Auch der automatisch gewählte Vorteiler für den ADC.

Ich hab bloß noch mehrmaligen lesen noch nicht verstanden, ob das Programm im M8 läuft wenn auf die -100% verzichtet wird.
Die einzige Funktionskontrolle ist ja hier RS232 (zeitabhänige Sache!)

Julian
03.04.2005, 18:27
na ja ich hab die 11,059 Mhz genommen weil 0% baud fehler ... und wenn ich auf die -100% geschichte verzichte klappte es ja !!

und .. quarz rauslöten .. gar nix geht mehr .. also fuses 100000% ig richtig !

ps .. hab jetzt mittlerweile den pc neu aufgesetzt ... man weiß ja nie .. *fg*

pps. Welche bascom versionen verwendet denn ihr ?? (bitte nur dann angeben wenn auch alles funktioniert !! ;-))

Julian
03.04.2005, 22:29
jetzt funkt das vorherige .... aber wenn ich die ausgabe in

Print 255
Waitms 20
Print Kettel
Waitms 20
Print Ketter

änder so das der zweite µC das ganze auswerten kann bekomme ich im terminal fenster folgendes :

___________________________________

ketterketter255

kettel

ketter

___________________________________

wahhhhhhh was soll das nun wieder ? wenn ich den code ein wenig änder .. zb pausen erhöher/verkleiner .. dann geht es überhaupt nicht mehr !!

kann es sein das der chip was hat ? oder ist bascom einfach der schlechteste compiller seit menschengedenken ???????????????

ps. hab jetzt auch schon den quarz auf 8 mhz getauscht und ja hab es auch der software gesagt !

Julian
04.04.2005, 18:52
neuer chip eingebaut .. gleiches problem ... weiß keiner rat ?

mfg julian

Marco78
04.04.2005, 20:36
Setz doch mal ein paar Print als Debug ein. So siehst du, an welcher Stelle er grade ist und welchen Wert die Variablen haben.
Vielleicht hilft das weiter?! Im Simulator läufts, und vom logischen Verständnis her, sollte das ganze +-100% pro Richtung ergeben. Und das war bestimmt deine Absicht ;)

Julian
05.04.2005, 20:26
tja .. jedes weitere print komando verschlimmert die lage, (teilweiße nur mehr sonderzeichen im Terminal zu sehen .. bei 1200 baud wie bei 19200)

ich bin noch draufgekommen das das getadc Komando dann nicht mehr zu funktionieren scheint da die werte dann immer 0 sind ... d.h. das programm misst die analog signale nichtmal mehr !

mfg Julian

heinzi
12.12.2005, 19:07
hallo julian!
sag mal, hast du inzwischen deine joystick kalibrierung vollständig? <push nach oben>

ist ja doch etwas zeit vergangen...

super_castle
12.12.2005, 19:58
Setzt mal ein Waitms... zwischen die beiden Getadc.

Castle

Julian
12.12.2005, 20:03
ja .. es war was mit ponnyprog .. irgendwas hat bei der programmierung nicht hingehauen .. was das war weiß ich nicht mehr .. zu lange her aber es hat dann am ende gut funktioniert ..

mfg

heinzi
12.12.2005, 21:23
könntest du netterweise mal detailliert erläutern, wie du den joystick kalibrierst?
ich denke mal es handelt sich um einen analogen pc joystick (hast du den aufgemacht und bei den potis noch GND angeschlossen? oder etwa extern noch 100K angeschlossen?... siehe hier http://www.mikrocontroller.net/forum/read-1-125733.html SORRY ist ein anderes forum. aber sehr interessant!).

führst du bewegungen in alle 4 ecken aus? (so ähnlich als wenn man unter windows\spieloptionen kalibriert).


p.s... die print befehle sind doch dafür da um per rs232 daten an den pc zu senden oder?

gruß heinzi