PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was empfehlt ihr einem Anfänger?



Zacard
31.12.2004, 18:04
Ich würde gerne von euich wissen, was ihr einem völligem Anfänger in Basic eher empfehlt: Gleich probieren und sich durchbeißen oder erst Drip and Drop. Weil bei D & D lernt man ja nicht Basic...

Dirk
01.01.2005, 15:12
Hallo Zacard,

mit der grafischen Oberfläche kann man zwar etwas einfacher starten, es hilft einem aber später auch nicht, besonders wenn man andere uC kennenlernen möchte. Man muss dann doch noch eine Programmiersprache lernen.
Mein Vorschlag:
Geh den zunächst schwierigeren Weg und lerne CCBASIC.
Die Einführung in der Anleitung reicht fürs erste, um die Beispiele zu analysieren. Mach Dir von den wesentlichen Demos Ausdrucke und versuch zu verstehen, was da passiert. Versuch dann, z.B. die LED-Demo zu verändern und einzelne LEDs durch ein eigenes Programm ein-/auszuschalten. Alle Befehle sind ja unter "Hilfe/Hilfethemen/CCBASIC-Befehle" nachschlagbar.
Wenn Du dann die Progs erfolgreich verändern kannst, lade Dir meine "Leerprogramme" (LEERPROGRAMM.bas) herunter. Das ist ein "Gerüst" für ein eigenes Programm mit allen Deklarationen und Unterprogrammen und Erklärungen.

Viel Erfolg!
Gruß Dirk

P.S.: Man kann hier auch alles fragen, wenn's dann nicht so klappt!

Zacard
02.01.2005, 18:27
danke für die Antwort

ich hätte noch eine Frage:

Wozu sind diese Kommentare gut?

ACU
02.01.2005, 19:19
Wenn du Kommentare im Quelltext meinst:
Die sind zur besseren Verständlichkeit des Codes.
Sollte man sich angewöhnen, damit man später noch weiß, wofür welcher Anweisungsblock da ist.

Zacard
05.01.2005, 17:24
Aha, danke.

Ich hbae nochmal ne Frage ich hbae die Beispiele und die Anleitung schon 4mal durchgelesen und habe das Gefühl nicht schlauer zu sein.

Denkt ihr es wäre das richtige es so wie Vokabeln zu lernen.

Zacard
06.01.2005, 14:10
Könnt ihr mir sagen ob ich 002.bas richtig interpretiert habe?
thx


'Programmtitel ausgeben
print "C-Control/BASIC 002.BAS"
print "============================"
print

goto abc

' noch eine Leerzeile ausgeben und Programmende
#ende
print

end

#defg
print "DEFG";
goto hijklmn

#uvwxyz
print "UVWXYZ"
goto ende

#opq
print "OPQ";
goto rst

#abc
print "ABC";
goto defg

#rst
print "RST";
goto uvwxyz

#hijklmn
print "HIJKLMN";
goto opq


Also soll das heißen: Gut Programmtitel, dass habe ich verstanden, aber warum wird darunter print "========================" gemacht?
Was bringt es, dass ==== übertragen wird?

Wieso kommt dann darunter schon Ende?

UNd weshalb schreiben die #defg
print "defg"; (bis hierhin ist es mir klar)
aber dann goto hijklm?
In der Anleitung stand doch, dass es der Reihe nach abgearbeitet wird.

thx für das Beantworten der Fragen.

mfg Zacard

jonas
06.01.2005, 16:49
das "print"======"" is nur da, damits en bisschen schöner aussieht.
das programm zeigt, wie die jump befehle funktionieren. am anfang steht "goto abc", also springt das programm zum label "#abc" und schreibt "ABC" wegen dem print befehl, dann kommt wieder ein sprungbefehl zu "#defg", der "DEFG" ausgibt usw. Am ende müsste dann das abc hintereinander zu sehen sein.

Zacard
06.01.2005, 17:47
Ja aber wieso kommt erst end und dann das andere?

abc usw. sollen hier doch als befehl stehen oder?

Garret
07.01.2005, 00:32
Hier läuft das Programm mal nicht der Reihe nach! Er springt ja schon bei der ersten Zeile sofort zum Label abc. Dann gehts der Reihe nach bis er zum Label defg springen muss, usw. Am Ende springt er zum Label ende und dann stoppt das Programm. Er hätte genau so gut das end in der letzten zeile schreiben können, ich glaube hier wollte er auch nur den goto - Befehl zeigen.

Zacard
07.01.2005, 11:02
Danke,
aber normalerweise macht man es nicht!?!


x = abs(x) ' x = 1234

das stand unter: "ein paar Berechnungen"

aber vom "s" stand da nichts :-s
oder entspricht auch etwas anderem so wie z=b? :?:
und wieso steht dahinter "(x)"?
Weil das müsste doch eigentlich "a mal b mal s heißen".
Nur vom" s" war da keine Rede.

(das stand unter 003.bas)

thx


mfg Zacard


edit// oder muss ich mir s selbst ausrechnen?

jonas
07.01.2005, 14:58
das "ABS" ist ein programmbefehl ("Den Absolutbetrag eines Integerwertes liefert die Funktion ABS(x).").
für x wird dann der wert 1234 eingesetzt ("x=1234").

Zacard
07.01.2005, 16:39
Hallo,
ersteinmal danke für die Antwort.
Nach langer Suche habe ich es endlich noch einmal komplett im Handbuch gefunden.

Was ich aber nicht gefunden habe ist folgendes:

y = -k3 ' y = 247, nicht -9 (Bytes sind immer positiv)

k3 ist 9.

Das Byes immer nur postivi sein können war mir schon klar.
Aber weshalb ist y 247?
Woraus geht das hervor?

Danke

mfg Zacard

OlliH
07.01.2005, 18:34
Ein Byte hat eine Rechweite von 0 - 255 (insgesamt 256 verschiedene Zahlen, ein Byte sind 8 Bit, 2^8 = 256).
Über und unter der Grenzen wiederholen sich die Zahlen von 0 - 255 einfach, da Bits nach dem 8. Bit nicht abgespeichert werden.
Also kommt unter der 0 für -1 die 255, für -2 die 254 usw.
Wenn man dann bis -9 weiterrechnet (Oder einfach 256 - 9) dann kommt 247 dabei raus.

Zacard
08.01.2005, 16:09
Danke für die Hilfe!

Ich wollte mal frage weshalb gerade das unten angezeigte Fehler sind, denn ich hätte Fehler an anderer Stelle erwartet:




REV L=on:REV_R=on:SYS PLM_SLOW

define leds byteport[2]

define k byte

leds = &B11111111
pause 50
leds = &B00000000
pause 50


deact leds
end


Und jetzt zeigt er mir an:

Fehler 1 Zeilende erwartet
Fehler 2 undefiniertes Label REV

Jwtzt weiß ich nicht so richtig was man mir damit sagen will?
Könnt ihr mir das sagen?

thx mfg Zacard

jonas
08.01.2005, 17:21
wahrscheinlich hast du REV vorher nicht definiert, sonst würde er das nicht als label ansehen.

Zacard
08.01.2005, 18:17
Hallo,

erstmal danke für dei Antwort. Ich habe jetzt definiert:
define REV byte

UNd jetzt habe ich wieder vergessen wie ich was definieren darf (also als was)
also bit, byte oder word.
Ist Byte richtig?
:-s

und jetzt sagt er mir Fehler
für die Zeile in der REV L=on:REV_R=on:SYS PLM_SLOW
erwartet

Und was soll erwartet heißen?
Habe ich nirgendwo gefunden.

Dirk
08.01.2005, 18:51
Hallo Zacard,


und jetzt sagt er mir Fehler
für die Zeile in der REV L=on:REV_R=on:SYS PLM_SLOW

Der Fehler liegt im fehlenden Unterstrich ("_") bei "REV_L".
Ein Bezeichner (=Name) für eine Variable darf kein Leerzeichen enthalten, dafür nehmen viele Programmierer den Unterstrich.
Du brauchst also NICHT "REV" neu zu definieren, sondern must nur den Unterstrich ergänzen.

Zu den Definitionen:
BIT -> 1 Bit ist ein 1/0 Zustand (d.h. An oder Aus)
BYTE -> Ein Byte besteht aus 8 Bits, dezimal 0..255 (256 = 2 ^ 8 )
WORD -> Ein Word sind 2 Byte oder 16 Bit, dezimal 0..65535 (= 256*256)

Da die CC1 nur 24 Byte Variablenplatz hat (= 12 Words) muss man mit Variablen sparsam umgehen.

Gruß Dirk

P.S.: Ich finde es übrigens klasse, wie Du Dich in CCBASIC reinfuchst! Weiter so!

Zacard
08.01.2005, 19:08
Hallo,

ich habe jetzt die definition weggenommen, so wie du meintest.

und habe jetzt dort stehen: REV_L=on:REV_R=on:SYS PLM_SLOW

,trotzdem zeigt er mir an

REV_L ist nicht als Variable definiert

wenn ich dass dann definiere [define REV_L byte], sagt er mir REV_R ist nicht definiert, und wenn ich, dass dann definiere [define REV_R byte], sagt er mir:
bei REV_L=on:REV_R=on:SYS PLM_SLOW erwartet er eine Konstante.

Irgendwie weiß ich jetzt gar nicht was ich machen soll.

mfg Zacard

edit// wenn ich REV_L=on:REV_R=on:SYS PLM_SLOW weglasse überträgt er zwar alles, aber ich darf dann doch nicht starten, weil es laut Handbuch de, Roboter schadet.

Dirk
08.01.2005, 19:19
Hallo zacard,


REV_L=on:REV_R=on:SYS PLM_SLOW

Die Zeile ist jetzt o.k.

Im Kopf Deines Programms must Du deklariert haben:
define REV_L port[6]
define REV_R port[5]
define PLM_SLOW &H01C4

Gruß Dirk

Übrigens: Diese Deklarationen brauchst Du IMMER für alle Programme des Robby. Du must also nicht damit kämpfen!!!
Lad Dir mein Programm LEERPROGRAMM_RP5.bas herunter und verändere KEINE der Definitionen und Unterprogramme, sondern versuch NUR, beim Punkt ...
' PROGRAMM:
' Hier mit dem Programm beginnen!!!

... eigene Programmteile einzufügen.
Z.B.:
gosub LED1FLASH
gosub LED2FLASH
end
Damit blinkt LED1, danach LED2, dann ist Ende.

Zacard
08.01.2005, 19:22
Hallo,

ersteinmal danke! Dein Leerprogramm habe ich schon geladen. Dieses "Programm" habe ich als Probe gemacht auf "Basis" von 006.bas

mfg Zacard

Dirk
08.01.2005, 19:30
Hallo zacard,

... da nicht für!

Noch ein Hinweis: Die Beispiele 00x.bas im Verzeichnis EINFÜHRUNG_CCBASIC sind nicht direkt auf dem Robby lauffähig, sondern auf der CControl I allgemein.
Im Verzeichnis EINFÜHRUNG_CCRP5 stehen die eigentlichen Progs für den Robby, z.B. für seine LED-Ansteuerung.

Gruß Dirk

Zacard
08.01.2005, 19:46
Wie soll ich das nicht dafür interpretieren? :-s

Das mit den Programmen weiß ich. Nur im Handbuch steht ja, dass die (angeblich) für die geeignet sind, die noch kein CCBasic können.

Garret
09.01.2005, 01:16
Das sind einfach nur kleine Programme, damit man die (ich sag mal) Grundbefehle von CCBASIC kennen lernen kann. Das heißt, mit denen Beispielen kann Robby eigentlich wenig anfangen. Beim Robby kommen ja noch andere Sachen hinzu. Die Sensoren, das Mikro usw. UNd das wird alles in den Beispielprogrammen von CCRP5 erklärt. Ich denke das will er damit sagen.

Garret

Dirk
09.01.2005, 13:11
Hallo Zacard,


Das mit den Programmen weiß ich. Nur im Handbuch steht ja, dass die (angeblich) für die geeignet sind, die noch kein CCBasic können.
... ja, das stimmt! Aber die CC1 auf dem Robby befindet sich in einer ganz bestimmten Hardware-Umgebung (nämlich dem Robby), für die in den Programmen spezielle Initialisierungen (z.B. für Antrieb, ACS ...) nötig sind. Ohne diese Initialisierungen könnte der Robby Schaden nehmen (z.B. wenn die Zeile REV_L=on: REV_R=on .... fehlt). Dieser Schaden könnte auch eintreten, wenn Du eigentlich nur die Grundlagen (aus den Progs "00x.bas") testen willst und den Robby sonst eigentlich gar nicht nutzt.
Diese "Robby-Initialisierungen" macht LEERPROGRAMM_RP5.bas.
Wenn Du jetzt die Einführungsprogramme (00x.bas) ausprobieren willst,
würde ich das so machen:
1. LEERPROGRAMM_RP5.bas laden
2. Den Bereich 'PROGRAMM: 'Hier mit dem Programm beginnen!!! suchen
3. In einem 2. Fenster das Testprogramm 0xx.bas laden.
4. Das Testprogramm markieren und kopieren
5. Das Kopierte an der Stelle PROGRAMM (siehe 2.) einfügen
6. Anpassen der Testprogramme
Der Vorteil ist dabei, dass Fehlermeldungen beim Kompilieren nicht von den wichtigen Initialisierungen kommen können, sondern nur von dem Eingefügten.
Aber: Nicht alle 0xx.bas-Demos laufen im Original auf dem Robby! Wenn Du z.B. kein Terminalprogramm hast, sind alle Demos, die mit PRINT Ergebnisse über die serielle Schnittstelle an den PC ausgeben, nicht lauffähig.
Der Robby selbst (ohne LCD) kann nur Rechenergebnisse durch seine 4 LEDs ausgeben.
Wenn Du also Rechenoperationen testen willst, fehlt Dir die Ausgabemöglichkeit. Hierzu gibt es in LEERPROGRAMM das Unterprogramm #LEDBINOUT im Abschnitt 'UNTERPROGRAMME.
Du kannst es aktivieren, indem Du von der Zeile #LEDBINOUT bis zur Zeile "gosub LED2ON:pause 5:gosub LED2OFF:pause 5:return" die Apostrophs am Zeilenanfang entfernst.
Beim Kompilieren wird die Fehlermeldung gezeigt, dass Du noch die Variable VALUE definieren must (define VALUE byte).
Danach kannst Du mit gosub LEDBINOUT ein Rechenergebnis mit den 4 LEDs des Robby ausgeben. Das Rechenergebnis muss vorher in der Variable VALUE stehen. (Ist zwar mühsam, wird aber erst besser, wenn Du ein LCD hast).
Beispiel:
define VALUE byte
define aa byte
define bb byte

aa=4:bb=7
VALUE=aa+bb
gosub LEDBINOUT
end

Ausgabe:
Nach dem Blinken der LED1 leuchten LED1,2,4 für kurze Zeit konstant, danach blinkt LED2 und keine LED leuchtet konstant.
Die Binär-Dezimal-Tabelle zeigt, dass die Bits 1011 bedeuten, dass dezimal 11 (4+7) angezeigt wird.

Der nächste Schritt könnte sein, dass Du die Helligkeit im Zimmer ausgibst und damit schon die Robby-Hardware nutzt:
define VALUE byte

VALUE=LIGHT_L
gosub LEDBINOUT
end

Der ausgegebene Wert ist die Helligkeit, die mit dem linken Helligkeitssensor des Robby detektiert wird.

Gruß Dirk

Zacard
09.01.2005, 13:38
Hallo Dirk,

jetzt habe ich es verstanden 8-[

Nur was meinst du jetzt schon wieder mit Terminalprogramm? :-s
Ich habe davon in der Anleitung gelesen, nur ich habe das anders verstanden.
(Nämlich, dass die IDE ein Terminalprogramm ist) :-s

Dirk
09.01.2005, 13:50
Hallo Zacard,

nein, die IDE dient nur dazu, die Progs vom PC in den Robby zu bringen.
Wenn der Robby etwas an den PC melden soll, braucht man auf dem PC ein Terminalprogramm zum Empfang dieser Daten.
Geh doch hier im Forum mal auf die Suche. Es gibt mehrere Threads, in denen die Leute sagen, welches Terminalprogramm sie getestet haben und auf welche Parameter es für den Robby eingestellt werden muss. Auch Windows hat ein Terminalprogramm, das man manchmal erst installieren muss.

Gruß Dirk

Zacard
09.01.2005, 14:11
Hallo Dirk,

nachdem ich gesucht habe, stand bei einem Treffer:

Das passende Kabel und Terminalprogramm sind ja beim Robby dabei. :-s

mfg Zacard

edit// Also bei mir auf Windows ist nichts. unter KOmmunikation.
Brauch ich denn unbedingt eins?

edit// ich habe mir jetzt terra term geholt

Dirk
09.01.2005, 16:38
Brauch ich denn unbedingt eins?

Nein, Du brauchst nur ein Terminalprogramm, wenn Du Ausgaben oder z.B. Meßdaten des Robby an den PC senden willst.
Wenn Du ohne solche Ausgaben auskommst, kannst Du auf ein Terminalprogramm verzichten. Das was beim Robby mitgeliefert wurde, heißt MINITERM.EXE und steht im Verzeichnis CCE.
Aber irgendeine Ausgabemöglichkeit für Zahlen oder Werte braucht man ja, wenn man mit CCBASIC experimentiert.
Das können die 4 LEDs des Robby sein oder die 8 LEDs der Basiserweiterung oder das LCD an der Basiserweiterung.

Gruß Dirk

HDSJCT
10.01.2005, 19:09
Ich brauche Hilfe:
ich möchte gerne zwei Akkupacks an meinem bot jeweils 6x1,2 2300mah
wenn ein Akkupack unter 6Volt kommt, sollte der andere aktiv werden.
vielleicht kann mir da jemand helfen-bin schon zu lange aus der Elektronik!
Meine Frage: wer kann mir da mal ein Schaltplan posten......
oder sollte ich die zwei Akkupacks Parallel schalten??! ](*,)