EV3-Basic - erste Schritte: Fragen und Antworten

NXC, C/C++, Lejos, pbLua, RobotC...

Moderator: Moderatoren

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

I2C Kommunikation EV3Basic <--> Arduino

Beitragvon c0pperdragon » 24. Sep 2015 10:40

Noch eine Ergänzung zu der 5V - 3.3V - Thematik:
Gerade bei I2C dürfte das kein Problem sein.

Die elektrische Beschaltung sieht ja vor, die Leitungen im Ruhezustand mit einem relativ großen Widerstand auf hohem Pegel gehalten werden (wenn man ganz korrekt arbeitet, dann mit einem 82K-Widerstand gegen 5V) und von den Kommunikationspartnern bei Bedarf auf 0 runtergezogen werden müssen. Durch diesen hohen Widerstand kann dem Arduino eigentlich nichts passieren, und 5V wird er sicher auch dann als "high" erkennen, wenn er nur mit 3.3V rechnet. Der aktive Pegel (ziemlich knapp an 0V) ist auch bei beiden gleich und leicht zu erkennen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon HaWe » 24. Sep 2015 10:43

ok, danke, das erklärt dann auch, warum Xander Soldaat (RobotC-Entwickler) für den EV3 von 3.3V I2C Signal-Leveln sprach, bei Dexter Industries aber ein Uno mit 5V Leveln mit dem EV3 zusammen läuft.
Das beruhigt schon mal ;)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon HaWe » 24. Sep 2015 11:14

wie kann ich die Hilfe-Datei herunterladen?
Ich will sie mir unabhängig von Basic mal anschauen

HaWe hat geschrieben:hallo,
wie bekomme ich eine Übersicht über die API-Funktionen?

wenn ich
https://github.com/c0pperdragon/EV3Basi ... dbuch.html
öffne, erhalte ich nichts wirklich lesbares...
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon c0pperdragon » 24. Sep 2015 21:37

Wiederum auf der releases-Seite. Da kannst du die Datei komplett laden und dann mit den Browser deiner Wahl anschauen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon HaWe » 25. Sep 2015 07:49

ach so geht das, alles klar, danke! :)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon HaWe » 26. Sep 2015 10:30

Noch 3 Fragen:

1.) wie kann man per EV3Basic komplette Arrays einander zuweisen?
ähnlich wie in C
memcpy(target, source, sizeof(source) )
?

2.) Wenn immer flaots als Speichereinheit pro array-"Zelle" verwendet werden:
Ist es dann richtig, dass EV3Basic beim Empfang von Daten-Bytes diese dann immer in 32-bit-Werte (float) umwandelt statt als 8-Bit-Int-Wert (byte) abspeichert?

3.) wie sendet dann EV3Basic Daten-arrays als einzelne Bytes, wenn es sie als Floats gespeichert hat ?
sendarray[30]={256, 1, 33, 8, 5, 6, 7, 8, 19, 20, 21, 22, 33, 34, 35, 36, 47, 48, 49, 50, 121, 122, 133, 134, 145, 146, 157, 158, 169, 170 }
Dann DOCH als 8-bit-Werte ? werden dann also die gespeicherten 32-bit-floats automatisch zu 8-bit-Bytes umkonvertiert?

( Floats sind ja per
"1bit_sign + 8bit_exponent + 23bit_fraction"
auf Bit/Byte-Ebene ganz anders repräsentiert, doch der Arduino empfängt und sendet sie immer als uint8_t Bitmuster)
(Anm.: bei NXC hatte ich diese Probleme nicht, denn da kann ich ja Datentypen wie (u)Char, (u)Int, (u)Long, Float explizit deklarieren)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon c0pperdragon » 26. Sep 2015 11:35

1. Arrays kann man als ganzes zuweisen: X = Y
2. Ja.
3. Jede Zahl wird gerundet und auf den Wertebereich 0-255 eingeschränkt und dann wird das entsprechende Byte geschickt.

Wie schon früher gesagt: Basic ist ja als Anfängersprache konzipiert man kann schnell einfache Sachen machen, ohne sich um Bits & Bytes Gedanken zu machen. Diese I2C-Kommunikation ist natürlich jenseits des Anfängerlevels und wenn man das verwenden will, muss man schon über die Details der Implementierung Bescheid wissen. Etwas genauere Kenntnisse des I2C-Protokolles wären dann auch nicht verkehrt (http://i2c.info/).

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon HaWe » 26. Sep 2015 12:05

naja, die praktischen Grundlagen zu I2C reichen mir (für Arduinos und für NXC), und das muss auch reichen. Wann da welches Byte mit High oder Low geschrieben wird samt Bus-Neustart ist eher uninteressant, das wird ja gerade auch bei EV3 extrem versteckt und verkapselt.

Wie könnte denn jetzt so ein EV3Basic Programm aussehen....
wie schreibe ich meine Checksum funktion in EV3Basic um damit sowohl die chksum von recvarray als auch sendarray zu berechnen?

Code: Alles auswählen

uint8_t  calcchecksum(uint8_t array[]) {
  int32_t  sum=0;
  for(int i=4; i<30; ++i) sum+=(array[i]);
  return (sum & 0x00ff);
}


Code: Alles auswählen

'// Sub calcchecksum- Funktion  .... ????


MSGSIZE = 30
I2CPORT = 4          '// EV3 sensor port 4
I2CSLVADDR = 4 * 2   '// devaddr=0x04,  shiftleft for 7bit -> 8bit addr

sendarray= Vector.Init(MSGSIZE , 0)
recvarray= Vector.Init(MSGSIZE , 0)

LCD.StopUpdate()
LCD.Clear()

While "True"
   
   sendarray[0] = 255          // start sync byte
   sendarray[2] = I2CSLVADDR   // receiver (slave) check
   sendarray[3] = 1            // error flag
   
   sendarray[4] = sendarray[4]  +1 '// test increment in each loop
   
    ' // sendarray[1] = calcchecksum(sendarray).... ????? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  ??????

  recvarray= Sensor.CommunicateI2C( I2CPORT, 8, MSGSIZE , MSGSIZE ,  sendarray )
 
  '// if recvarray[1] != calcchecksum(recvarray) ... ????? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  ??????
  '//     LCD.Text(1,  0, 60,  1, "CHKSUM ERROR" ) .... ????? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  ??????
  '// else LCD.Text(1,  0, 60,  1, "            " )  ... ????? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  ??????
 
  Program.Delay(1)   '// yield()
 
EndWhile


geht das so in etwa ?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon c0pperdragon » 26. Sep 2015 14:59

Ist schon nicht schlecht. Leider gibt es in Small Basic keine selbstdefinierten Funktionen mit Aufrufparametern. Das muss man alles über globale Variablen in die Unterprogramme schicken. Würde dann eventuell so aussehen (wieder mal ungetested):

Code: Alles auswählen

datapacket = Vector.Init(30,0)   '  eingabewert
checksum = 0                     '  ausgabewert
sub calculatechecksum
  checksum = 0
  For i=4 To 29
     checksum = checksum + datapacket[i]   
  endfor 
  checksum = Math.Remainder(checksum,256)
endsub

datapacket = sendarray
calculatechecksum()
sendarray[4] = checksum

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon HaWe » 26. Sep 2015 20:24

wenn ich SmallBasic 1.0 neu installiere, läuft dieses zunächst problemlos.
Wenn ich die Files aus dem EV3BASIC zip-File hinein kopiere (manuelle Installation)

Code: Alles auswählen

https://github.com/c0pperdragon/EV3Basic/releases/download/v1.0.7/manual_installation.zip

https://github.com/c0pperdragon/EV3Basi ... lation.zip
dann crasht SmallBasic beim Start.

Was ist falsch?

ps,
es gibt auch keinen Unterordner
SmallBasic\lib
in den man es hineinkopieren könnte, der einzige Unterordner heißt "Samples" -
oder muss einen Ordner "lib" erstellen ?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon c0pperdragon » 26. Sep 2015 21:05

Naja, immer allerschlimmsten Falle geht zumindest der EV3Explorer ganz ohne Small Basic auch. Damit könntest du die Programme direkt aufs Gerät kompilieren ohne sie zuvor in der PC-Umgebung testen zu können. Da müsstest du einen eigenen Editor zum Programme schreiben verwenden.
Aber natürlich ist die ganze Sache nicht so gedacht gewesen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I2C Kommunikation EV3Basic <--> Arduino (Due 3.3V) I2C

Beitragvon HaWe » 26. Sep 2015 21:07

eigener Editor geht sicher nicht, aber vlt fällt dir ja noch ein, woran es liegen könnte - und vlt hast du ja selber Lust, den Code vorher schon mal zu testen ;)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon c0pperdragon » 26. Sep 2015 21:13

Anscheinend hatte ich das falsch in Erinnerung. Dann leg auf jeden Fall einen lib/- Ordner im SmallBasic-Order an und entpacke alles da hinein.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon HaWe » 26. Sep 2015 21:21

Test code läuft! :prima:

Code: Alles auswählen

LCD.Clear()
LCD.Write(40,40, "Hello EV3")
Program.Delay(10000)


Morgen geht's weiter! 8-)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3-Basic - erste Schritte: Fragen und Antworten

Beitragvon HaWe » 29. Sep 2015 13:56

ist eine formatierte Zahlenausgabe auf dem Display möglich, insb. feste Stellenzahl + aufgefüllt mit Leerzeichen?
Wenn man zur Zeit erst die Zahl 111 an eine Stelle (x,y) schreibt und hinterher die Zahl 5, dann steht auf dem Display 511.

Und geht es auch, dass man per Aufzählung mehrere Variablen gleichzeitig zum Schreiben übergibt?
Das würde eine tabellenartige Ausgabe erleichtern, da man eine komplette Zeile auf einmal schreiben könnte.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E


Zurück zu „textbasierte Programmiersoftware“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss