Forum Replies Created
-
AuthorPosts
-
Helmut WunderParticipantps, forgot:
visualization of cam object detection :
Helmut WunderParticipanthey,
thank you for contributing!
By these benchmarks now Mono/C# reached a new highscore !
😎ps, BTW:
here are 3 examples where graphic screen output was needed:Astar: http://www.mindstormsforum.de/viewtopic.php?f=70&t=6619&p=55745&
Speech recognition: http://www.mindstormsforum.de/viewtopic.php?f=70&t=6386&p=53924
PID regulation tuning: http://www.mindstormsforum.de/viewtopic.php?f=25&t=7521&p=62137#p61930
- This reply was modified 10 years ago by Helmut Wunder.
Helmut WunderParticipanthonestly, I think only one of the Mono devs can help. Or try Java instead…?
I also once wanted to start with Mono for an i2c device ( a Microinfinity inertial Gyro) but unfortunately got no help here in this forum so I had to abandon using Mono so far.
Helmut WunderParticipantabout the technical details of i2c I don’t know more than I already told you, and the Mono code is far too complicated for me to understand, so what you are actually doing in your C# source is far beyond me.
My skills just fit to use NXC and Sketch C.
In Sketch C I just have to use wire.write() and wire.read(),
and for display output I just use Serial.write() or TextOut() –
that’s it, and that’s why I can use both NXC and Sketch (and no Mono at all).
So for Mono you would need professional Mono helpers 😉
Helmut WunderParticipanthi,
you don’t need to address a register for R/W (it’s just register 0 then) –
maybe this helps:I2C Interface
I2C communication with this device is initiated by a master sending a start condition, a high-to-low transition on the SDA I/O while the SCL input is high.
After the start condition, the device address byte is sent, most-significant bit (MSB) first, including the data direction bit (R/W).
This device does not respond to the general call address.
After receiving the valid address byte, this device responds with an acknowledge, a low on the SDA I/O during the high of the acknowledge-related clock pulse.
The address inputs (A0–A2) of the slave device must not be changed between the start and the stop conditions.The data byte follows the address acknowledge. If the R/W bit is high, the data from this device are the values read from the P port. If the R/W bit is low, the data are from the master, to be output to the P port.
The data byte is followed by an acknowledge sent from this device. If other data bytes are sent from the master, following the acknowledge, they are ignored by this device. Data are output only if complete bytes are received and acknowledged.this is the (quite simple) NXC Code you might have a look at (it reads single muxed sensors, passed by it’s number “input”; nevertheless, you might also read and return the whole bitpattern by 1 reading instead of course for quicker readings :
int ReadPCF8574(char PCF8574Port, byte PCF8574ID, char input) { byte cnt = 0x02; byte I2CMsg[]; byte inbuf[]; byte Address = PCF8574ID; byte nByteReady = 0; int result = -1; int loop; ArrayBuild(I2CMsg, Address); Wait(8); while (loop == STAT_COMM_PENDING) { loop = I2CStatus(PCF8574Port, nByteReady); } if (I2CBytes(PCF8574Port, I2CMsg, cnt, inbuf)) { result = inbuf[1]; } if( result == (result | (1<<input-1)) ) { result = 0; } else { result = 1; } if(result==-1){ TextOut(0, LCD_LINE1, "Error: Check the"); TextOut(0, LCD_LINE2, " connection!"); Wait(500); ClearScreen(); } return result; }
- This reply was modified 10 years, 1 month ago by Helmut Wunder.
Helmut WunderParticipanthi Vlad,
a very good job – I’m honored to see that you took the challenge for completing the benchmark test!
as I wrote already here…: http://www.monobrick.dk/forums/topic/lcd-extensions/#post-4805 😉
Helmut WunderParticipantnice to see that the spirit of my ideas, my visions, and my challenging benchmark test leads the Mono team to new frontiers, growth, prosperity, and customer success.
😀
For further enhancements, don’t hezitate to contact me –
heading for new shores !!😎
Helmut WunderParticipanthi,
are there updates by the latest C#/Mono release plus missing display benchmarks ?
Helmut WunderParticipantas the EV3 flash got just 256 kB – for what purpose is a 4GB SD image designed for anyway?
Does it affect the performance opposite to, e.g., a 1 GB image?
As I only got 16GB SDHC cards – would there be a meaningful use for the unused space?
Helmut WunderParticipantyes, maybe that’s the point – I really do have issues working with OOP by programs like Java or C# – I’m used to program procedural, no local, no private, no encapsulated ones, just ANSI C-like, everything public and global.
Just by these ANSI C functions I also once wrote my neural nets for the NXT and my chess robot move generator.The OOP issues probably for those 100000 different classes and platforms also are one the reasons why I don’t get along with all those features of your IDEs which confuse me –
nevertheless, using Sketch C/C++ I dont’ have problems using the very simple stripped-down Sketch IDE, even for C++ objects. 😉
Helmut WunderParticipanthi,
here I listed the current most updated results:
http://www.mindstormsforum.de/viewtopic.php?f=71&t=8095&start=60#p64772and this is where I listed my ANSI C reference code for EV3 (gpp C/C++ plus John Hansen’s BricxCC brickOS API):
http://www.mindstormsforum.de/viewtopic.php?f=71&t=8095&start=60#p64494subsequently you can find different other programming platforms (partially some benchmark parts missing):
NXC code for NXT: code by myself,
C/C++ nxtOSEK code for NXT: ported by Martin Aumair,
RobotC code for NXT and EV3: ported by Xander Soldaat,
Java/leJOS code for NXT and EV3: ported by Andy Shaw
C#/Mono code for EV3: ported by Vlad Ruzov
Sketch C code for Arduino Due: ported by “ArduFe”- This reply was modified 10 years, 2 months ago by Helmut Wunder.
Helmut WunderParticipantsorry Anders, I should have made this issue more clear:
I (and people I know) don’t need the full potential of the .Net framework.We only want to program autonomous robots which are playing games (e.g., chess or cube solvers), or find ther way through labyrinths or even detect patterns by neural nets – and maybe have a USB connection to a 2nd or a 3rd brick for daisy-chaining.
For the EV3 I’ll never have the intention to access websites, send emails, and even make the robot post to Facebook – I even would never (!!) use .Net framework and/or Visual Studio if I ever tried to do that on my PC (and also no one else I know personally).
So we also never would use monster IDEs like Visual Studio or Eclipse for either purpose (and Xamarin actually looks very similar).So as any PC or Website programming (or even other targeted platforms) of Visual Studio to us are just useless confusing ballast which obscures the view to sensor and motor and EV3 system API functions, we just needed 1 single file to be compiled and uploaded to the Lego brick by a simple stripped IDE.
Helmut WunderParticipantthe code distributed with RC 4.10 which you have linked to is probably the 3.62 NXT version – is this correct?
// hw brickbench // benchmark test for NXT // PL: ROBOTC 3.62 for NXT
The EV3 version should be for the 4.10 EV3 version instead.
Is there a 2nd benchmark file additionally?
The EV3 version is supposed to have a firmware-based shellsort or quicksort routine which might be up to 100x faster.
Helmut WunderParticipant(edited)
thank you!
about the 4.25 samples files this is correct, it’s probably then on Xander’s homepage.
It actually was not meant to be distributed with RobotC releases because this is a commercial product.
Private distribution for private purposes of course is ok.
Helmut WunderParticipanthi Vlad,
I’ll add what you reported to the spreadsheet!
(actually Xamarin is not quite “small and made-to-measure” though, IMO, compared to BricxCC, RobotC, or the Sketch IDE)About RobotC, I’m curious where the code is to be found.
As I don’t use it – can you please post the benchmark sourcecode here please or link to a zip file instead?
I don’t have access to the file.
Is it still part of the 4.25 RobotC example files?thanks for your input!
Helmut -
AuthorPosts
Follow