altRobots
/robotigs/icons/actuator.pngActuatoren
/robotigs/icons/printboards.pngAlgemeen
/robotigs/icons/chassis.pngChassis
/robotigs/icons/florigs.pngFlorigs
/robotigs/icons/interfacing.gifInterfacing
/robotigs/icons/microphone_icon.pngMuziek
/robotigs/icons/musicKey_icon.pngMuzikanten
/robotigs/icons/shield.pngSchildjes
/sys/icons/sensors.pngSensors
/robotigs/icons/languages.pngTalen
/robotigs/icons/battery.pngVoedingen
/sys/icons/microController.pngµControllers
altContact
RS232"); echo ("  "); } ?>  "); /* echo (""); echo (" "); //Show pencil as button */ ?> alt  

Deze pagina is verouderd. Ga naar de vernieuwde pagina.

"); $counter = 0; $aantal = str_word_count($pict_list, 0, "0123456789"); $lijst = str_word_count($pict_list, 1, "0123456789"); while($counter < $aantal){ $pictkey = $lijst[$counter]; $qryy1 = ("SELECT * FROM illustrations WHERE ill_id = $pictkey ;"); $resulty1 = pg_query($con1, $qryy1); while($row = pg_fetch_array($resulty1)){ //Fields accesible by their name foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } } $image = ("/robotigs/documentatie/plaatjes/$ill_name"); $pictfull = str_replace('_small', '', $image); //Pictfull=biggest version $alt = ("Just wait till your 57...."); $txtname = get_txt($con1, 18, $koekje[2], $ill_id); //Robot illustrations subtitles echo (""); echo (''. $alt .'
'); $nummer = $counter + 1; $txtAfb = get_txt($con1, 9, $koekje[2], 3865); //Pic Afb if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo ("$txtAfb $nummer: "); echo ("$txtname"); echo ("
"); echo ("Ontkoppelen "); if ($counter==0){ echo ("Up "); }else{ echo ("Up "); } if ($nummer == $aantal){ echo ("Down"); }else{ echo ("Down"); } }else{ //Else of if Meaning the current useer is logged in echo ("$txtAfb $nummer: $txtname"); } echo ('

'); //End of this picture $counter++; //Prepair for next picture } echo (''); //All pictures are printed } //End of if there are 1 or more pictures to be printed ---------------------- ?>

RS232 (wiki) is één van de oudste interface technieken. Het is een serieel protocol dat werkt met 3 draden, namelijk een aarde en 2 draden (zenden en ontvangen). Het is relatief simpel en zeer compatibel. Op de pc is het verdrongen door het snellere USB, maar in robotica wordt het nog veelvuldig gebruikt. Veel µcontrollers, o.a. zowel AVR als Pic, hebben er standaard hardware voor aan boord.

  • Arduino
  • Let op: Standaard werkt het RS232 protocol op 12Vdc. Een Arduino werkt echter op 5Vdc en als deze verbonden worden zal uw Arduino met zekerheid beschadigen.

    Iedere Arduino kan met een USB kabel worden aangesloten op een pc. In de IDE is een Seriële Monitor geïntegreerd.

    Bij het verbinden van 2 seriële apparaten moet de TX van het ene apparaat met de RX van het andere apparaat worden verbonden.

Een overzicht van diverse protocollen voor seriële data netwerken.

Op de PC is er een zogenaamd terminalprogramma nodig, zoals bijvoorbeeld Ubuntu Serial Port Terminal of minicom en bijvoorbeeld Windows Realterm of Bray terminal. Je kan onder Windows ook gewoon met het ingebouwde Hyperterm beginnen, maar het is er niet voor bedoeld. Het kan bijvoorbeeld geen binaire of hexadecimale output geven, maar in veel gevallen voldoet het. ANSI escape sequences worden wel begrepen door Hyperterm.

Als u µcontrollers onderling wilt laten communiceren via het RS232 protocol dan kunnen de betreffende pennen van beide µcontrollers rechtstreeks met elkaar worden verbonden. De werkspanning is dan gelijk aan de voedingsspanning van de controllers, meestal 5Vdc. Een RS232 verbinding met een ander apparaat zoals bijvoorbeeld een PC heeft echter een werkspanning van 12Vdc. Daardoor kan er een vrij grote afstand (maximaal 15m - 100m) worden overbrugd zonder storingen. U hoeft echter geen 12Vdc tot uw beschikking te hebben in uw project, want voor die omzetting zorgt een MAX232 chip. Deze chip moet u tussen de µcontroller en de PC monteren. De STK500 heeft standaard al een extra MAX232 geinstalleerd waardoor u enkel nog deze extra seriële poort hoeft aan te sluiten op uw PC en een 2-polig kabeltje op uw STK500. Maar ook het zelf bouwen van een RS232 interface is niet bijzonder ingewikkeld. Dit kan zelfs op een breadboard. De benodigde schakeling staat tot in de kleinste details beschreven in de datasheet.

Het is voor het functioneren van een µcontroller niet noodzakelijk om een extern kristal te monteren, maar het is nauwkeuriger in de timing en kan de snelheid van uw µcontroller verhogen ten aanzien van de interne oscillator. Echter indien u uw µcontroller via RS232 wilt laten communiceren, dan is een extern kristal altijd beter, omdat de interne oscilator niet nauwkeurig genoeg is. Het bereiken van hoge snelheden wordt onder andere beperkt door de foutmarge in de timing van de controller. Indien u met hoge snelheden (> 57k6 baud) via een RS232 interface wilt communiceren dan is het zelfs beter om een kristal te nemen, waarvan de frequentie precies aansluit bij de RS232 realtime snelheden. Deze foutmarges worden tot in het detail beschreven in de datasheets van Atmel. Mijn ervaring is dat 2,0% de uiterste grens is en die grens is snel bereikt. Echter bij een kristalfrequentie van 14,7456 mHz is de foutmarge van de controller slechts 0,0% tot en met 230k4 baud. Deze kristallen zijn standaard verkrijgbaar.

Indien u enkel data wilt communiceren gebruikt u slechts 2 draden en een aarde. Maar de RS232 standaard kent veel meer pinnen die oorspronkelijk bedoeld waren om een modem aan te sturen.

Maxim the MAX220–MAX249 family of line drivers/receivers datasheet
Maxim Application Note 83: Fundamentals of RS-232 Serial Communications
Atmel AVR042 Hardware design considerations
Atmel AVR303 SPI-UART Gateway
Atmel AVR313 Interfacing the PC AT Keyboard
Atmel VR244 AVR UART as ANSI Terminal Interface

Als beginner bent u nu aardig op weg geholpen. U weet hoe u een programma op een µcontroller kunt krijgen en u heeft nu een mogelijkheid om een simpele debugging te doen. Voordat u nu zelf aan de gang gaat is het handig om eerst de volgende pagina door te nemen.


$val ){ $$key = stripslashes( $val ); } $jaar = substr($changeddate,0,4); $maand = substr($changeddate,5,2); $dag = substr($changeddate,8,2); $lastupdate = ("$jaar $maand $dag"); $prtsrttxt = get_txt($con1, 26, 1, $idsrtodd); $jaar = substr($createddate,0,4); $maand = substr($createddate,5,2); $dag = substr($createddate,8,2); $create_stamp = ("$dag $maand $jaar"); //GENERAL INFO FOR EVERY USER ************************************************** echo ("

"); echo (""); if ($codetext) { //Code like KY-026 or NA-41 echo (""); } //End of if ($codetext) $tmp = get_txt($con1, 9, $koekje[2], 3741); //Fieldname at screen if ($prijseurinclbtw > 0){ //Show price indication $prijs_formatted = number_format($prijseurinclbtw / 100, 2, ',', '.'); echo (""); echo (""); } //End of if ($prijseurinclbtw > 0) if ($sketchtext) { //Link to OWN SOFTWARE $tmp = get_txt($con1, 9, $koekje[2], 3738); //Fieldname at screen echo (""); } //End of if ($sketchtext) $tmp = get_txt($con1, 9, $koekje[2], 3744); //Fieldname at screen if ($pinouttext) { //Pinout echo (""); } $tmp = get_txt($con1, 9, 1, 3735); //Fieldname at screen $tmp2 = get_txt($con1, 26, 1, $row4[16]); //Group name in its language echo (""); if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates $tmp = get_txt($con1, 9, $koekje[2], 3918); //Fieldname at screen LANGUAGE if ($row4[26] == 1) {$imgname = "nederland.png";} if ($row4[26] == 2) {$imgname = "deutschland.png";} if ($row4[26] == 3) {$imgname = "uk.png";} if ($row4[26] == 4) {$imgname = "france.png";} echo (""); $tmp = get_txt($con1, 9, $row4[27], 3919); //Fieldname at screen $statuskey = get_status_key($con1, $status); $tmp2 = get_txt($con1, 61, $koekje[2], $statuskey); //Fieldname at screen echo (""); } $tmp = get_txt($con1, 9, 1, 3966); //Fieldname at screen echo (""); echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3923); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates echo (" (edit)"); } echo ("Algemene informatie test
"); $tmp = get_txt($con1, 9, $koekje[2], 3739); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //Class for colour }else{ //So you are not allowed to translate echo $tmp; //Show screenname of this field in user language } //End of If you want to translate this fieldname at screen echo (" "); if ($codelink) { echo ("$codetext"); }else{ echo ("$codetext"); } //End of if ($pinoutlink) echo ("
$tmp  "); if ($urlprijs){ echo ("€  $prijs_formatted"); }else{ echo ("€  $prijs_formatted"); } //End of if ($urlprijs > "") echo ("
$tmp  "); if ($sketchlink) { echo ("$sketchtext"); }else{ echo ("$sketchtext"); } //End of if ($sketchlink) echo ("
$tmp  "); if ($pinoutlink) { echo ("$pinouttext"); }else{ echo ("$pinouttext"); } //End of if ($pinoutlink) echo ("
$tmp  "); //MENU GROUP echo (""); echo ("$tmp2
$tmp"); echo ("flag.gif"); echo ("
$tmp  "); //STATUS echo ("$status $tmp2
$tmp  "); //LAST CHANGED $tmp = substr($changeddate, 0, 10); echo ("$tmp

"); return; //////////////////////////////////////////////////////////////////////////////// function get_status_key($con, $num){ $qry = ("SELECT id FROM status WHERE nr = $num ;"); $result = pg_query($con, $qry); $row = pg_fetch_array($result); return ("$row[0]"); } 0 AND software.rstid = 2 AND tblsystext.lanid = $koekje[2] AND tblsystext.txlid = 19 ORDER BY sftname ASC , controller ASC ;"); $result = pg_query($con1, $qry2); if (pg_num_rows($result)>0) { //Only if at least 1 program exists echo ('

'); echo (""); while($col = pg_fetch_array($result)){ $col[0] = ("$col[0]"); echo (""); echo (""); echo (""); if ($koekje[0] > 0 and $koekje[3]>0){ //User is logged in and translates echo (""); } echo (''); } echo ('
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3922); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$col[2]  $col[0]"); echo ("(Edit)
'); } ?> 0){ if ($header == 0) { echo ("

"); echo (""); $header++; } //End of if ($header == 0) echo (""); echo (""); } } if ($header > 0){ echo ("
"); //Header $tmp = get_txt($con1, 9, $koekje[2], 3879); //Fieldname at screen if ($koekje[3]=="1") { //If this user wants to translate then echo ("$tmp"); //If desired }else{ echo ("$tmp"); } //Else just show if no need to translate echo ("
$colbpp[2]"); //Show software van deze bot $qry=("SELECT software_basedir FROM farmbotversie WHERE id = $colbpp[0];"); $result = pg_query($con1, $qry); $col = pg_fetch_array ($result ,0); $dir1 = "/var/www/html/robotigs/software/$col[0]"; $arr1 = glob($dir1, GLOB_ONLYDIR); if (isset($arr1[0])){ $folder = $arr1[0]; $countertmp = 0; echo ("
    "); foreach (scandir($folder, 1) as $filename) { if ($filename<>"." AND $filename <>".."){ if ($countertmp == 0){ $countertmp++; } //End of if ($countertmp == 0) $tmp = "/"; $dir = substr($folder, 14) ."/"; $link = $tmp .$dir .$filename; $showname = substr($filename, 0 ,-4); echo ("
  • "); echo "$showname"; echo ("
  • "); } //End of if ($filename<>"." AND $filename <>".."){ } //End of foreach (scandir($folder, 1) as $filename) echo ("
      "); } //End of if (isset($arr1[0])) echo ("
"); } ?>
Warning: include(/var/www/html/robotigs/includes/wishlistperpart.php): Failed to open stream: No such file or directory in /var/www/html/robotigs/includes/parts_header.php on line 128

Warning: include(): Failed opening '/var/www/html/robotigs/includes/wishlistperpart.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/robotigs/includes/parts_header.php on line 128