Trol.co.nr.. Electronics&Computer Projects

 

Welcome to my site! I'm Karel Braeckman, student in Electronics Engineering. On my site you'll find my projects, some photo's and some other stuff too, have fun :-)

Verhuisd!

In Rest, 11 Jan 2009, 19:07


Ik heb besloten om nieuwe artikels vanaf nu te posten op een Wordpress-blog. Dit om wat tijd te besparen bij het schrijven. Dus vanaf nu zijn alle trouwe lezers welkom op http://kr3l.wordpress.com!

De nieuwe artikels zijn in het Engels, in de hoop een breder publiek aan te trekken :-)


 

Serial com-port communication with autoIt

In autoIt, 07 Dec 2008, 16:59


This weekend I found out how to read from / write to a com port with autoIt code. I created a file with some functions that read/write single characters or lines. To communicate with a com port, I use the CreateFile function from Kernel32.dll. This is my first script where I call dll functions from within autoIt, so perhaps the code can be cleaned up some more.

First, we"ll create a handle to the CreateFile function to open the com port (com2 in this example):

#include <WinAPI.au3>



;init DLL function, we need handle to call the function
$h = DllCall("Kernel32.dll", "hwnd", "CreateFile", "str", "\\.\COM2", "int", BitOR($GENERIC_READ,$GENERIC_WRITE), "int", 0, "ptr", 0, "int", $OPEN_EXISTING, "int", $FILE_ATTRIBUTE_NORMAL, "int", 0)
$handle=$h[0]


To write a single character, I created the writeChar function:

;write a single char
func writeChar($handle,$c)
$stString = DLLStructCreate("char str")
$lpNumberOfBytesWritten = 0
DllStructSetData($stString, 1, $c)
$res = _WinAPI_WriteFile($handle, DllStructGetPtr($stString, "str"), 1, $lpNumberOfBytesWritten)
if ($res<>true) then
ConsoleWrite ( _WinAPI_GetLastErrorMessage() & @LF)
EndIf
EndFunc


A struct that contains a single character is created first. On the third line the character is passed to this struct. Then the _WinAPI_WriteFile function is called with the struct as argument. If everything is ok, then the character is written to the com port! The other functions work in a similar manner, and can be found in the attachment.

This code is very usefull to communicate with microcontrollers, like a PIC uC for example. I was already able to communicate with Matlab (see my other article) which is very usefull for plotting sensor values. The autoIt communication is usefull for remote controlling Windows applications. A simple demo app to illustrate this:

autoIt Code:
#include "pcSide2.au3"

While 1
$data = readLineBlock($handle)
ConsoleWrite(">" & $data)
switch $data
case "L" & @LF
send("{MEDIA_PREV}")
case "R" & @LF
send("{MEDIA_NEXT}")
case "U" & @LF
send("{VOLUME_UP}")
case "D" & @LF
send("{VOLUME_DOWN}")
case "C" & @LF
send("{MEDIA_PLAY_PAUSE}")
EndSwitch
Wend

PIC code:
while (1) {

if (!(BUTTON_CENTER)) { //BUTTON_CENTER pressed
fprintf (_H_USART, "C\n");
while(!(BUTTON_CENTER)); //wait till button released
}
if (!(BUTTON_UP)) { //BUTTON_UP pressed
fprintf (_H_USART, "U\n");
while(!(BUTTON_UP)); //wait till button released
}
...
}

So the autoIt code just waits for characters to be sent. If one of the characters U,D,L,R or C is sent (the characters come from Up,Down,Left,Right,Center in case you"re wondering), autoIt will emulate a keypress of one of the Media functions.

The PIC code will send one of the characters when a certain button is pressed. So we are able to remote controll our media player (e.g. Windows Media Player) with our PIC uC!


 

Ondertitels en filminfo met autoIt ophalen

In autoIt, 10 Aug 2008, 08:51


Dit scriptje zal bij een film automatisch de ondertitels online gaan zoeken (op de site http://nlondertitels.com/). Daarnaast gebruikt het ook de site http://www.imdb.com/ om filminfo op te halen.

Het script werkt alsvolgt:

  1. Je selecteert een map waarin de film staat. De mapnaam moet de filmnaam bevatten.
  2. Het script verwijdert een aantal bogus-termen die vaak voorkomen in de bestandsnaam van films, en doet aan de hand hiervan een gok wat de filmtitel kan zijn. Deze kan je nog corrigeren.
  3. Het script opent Internet Explorer op de achtergrond en zoekt naar de filmtitel om op die manier het IMDB nummer te achterhalen (een uniek nummer dat de film linkt met een pagina op de imdb-site)
  4. Als er een imdb nummer gevonden wordt er een bestandje info.html in de filmmap aangemaakt met info die vanop imdb wordt gehaald. Er zal ook in Google Afbeeldingen naar een filmhoes worden gezocht die als mapafbeelding wordt gebruikt. Op de site nlondertitels.com worden alle overeenkomende ondertitelbestanden gedownload zodat je deze enkel nog moet unzippen en kijken welke versie de beste is. Als er geen IMDB nummer zou gevonden worden wordt er op nlondertitels.com niet op IMDB nummer maar op filmtitel gezocht waardoor de kans op fouten groter is.


Veel plezier met dit scriptje!


 

PIC ADC naar Matlab plot

In PIC uC, 23 Jun 2008, 15:30


Ik ben er onlangs eindelijk in geslaagd om de seriele communicatie van het PIC experimenteerbord met mijn laptop in orde te krijgen. Blijkbaar configureerde ik de UART steeds fout, maar nu werkt ze dus.
Dit is enorm handig voor het debuggen, want anders kan ik op geen enkele manier de waarde van variabelen of zo uitlezen (vermits ik geen LCD meer heb). Nu kan ik tenminste iets uitschrijven naar de buitenwereld :)

Ik heb in Matlab een script geschreven dat de sensorwaarden kan opvragen en plotten in een soort scope-venstertje. Het resultaat ziet er vrij cool uit:



De code is in de bijlage toegevoegd, in het PIC project moet je de pclink.c en pclink.h bestanden toevoegen. Alvorens de functies in dit bestand te gebruiken moet de USART geïnitialiseerd worden, bijvoorbeeld door de volgende code:


void USART_Init() {
TRISCbits.TRISC7=1; // RX
TRISCbits.TRISC6=0; // TX
SPBRG = 0x71;
SPBRGH = 0x02; // 0x0271 for 48MHz -> 19200 baud
TXSTA = 0x24; // TX enable BRGH=1
RCSTA = 0x90; // continuous RX
BAUDCON = 0x08; // BRG16 = 1
}


In Matlab start je dan het sensorPlot script dat elke tijdstap een aanvraag voor de sensorwaarden doet en elke tijdstap wacht op een antwoord van de PIC. Deze worden dan in een plotje getoond zoals in de figuur.

screenshot van het scope venstertje


 

PIC development in Eclipse

In PIC uC, 15 Jun 2008, 02:40


Ik speel al een tijdje met het idee om Eclipse te gebruiken om projectjes voor de PIC te maken. De standaardomgeving MPLAB van Microchip werkt me immers soms een beetje te stroef, en Eclipse ben ik al gewoon van bij mijn JAVA projectjes :-)

Op deze site staat een kort stappenplan dat uitlegt hoe Eclipse te gebruiken om PICs te programmeren (18F reeks). De CDT plugin is ondertussen wat gewijzigd zodat sommige benamingen van deze site niet meer terug te vinden zijn. Hier volgen de stappen die ik gevolgd heb om een bestaand project (in MPLAB aangemaakt) om te zetten naar Eclipse:

  1. Ga naar http://www.eclipse.org/downloads/ en download Eclipse IDE for C/C++ Developers. Dit is de nieuwste Eclipse versie met bijhorende CDT plugin. Deze laatste is noodzakelijk om in C te programmeren (ipv JAVA).
  2. Start Eclipse, sluit het welkomstvenster. Ga naar het menu File>New>C Project. Selecteer Makefile project en selecteer Other Toolchain. Geef ook een naam aan het project. Dit venster is getoond in de figuur.Klik op Next en dan op Finish.
    Een nieuw C project maken
  3. Klik met rechts op het project en selecteer Import. Nu importeer je via de optie Filesystem alle .C,.H bestanden en het linkerbestandje (.lkr).
  4. Nu maak je een makefile aan. Op de eerder vermelde site vind je een handig voorbeeldje van een makefile. Vergeet niet het type PIC naar jouw type te zetten. "FRC_library.lib" mag ook weggelaten worden bij de linkerargumenten, alsook de DEFINES. Zet ook de projectnaam naar de naam van je Eclipse project. Als je MCC18 folder niet onder program files staat moet je dit ook aanpassen.Importeer ook deze makefile in Eclipse, dan kan je hem van daar bewerken. Let op: de makefile geeft geen extensie (en noemt dus gewoon makefile). Onderaan kan je de makefile van mijn project downloaden.
  5. Ga nogmaals naar de project properties en ga naar C/C++ build -> Discovery Options. Onderaan rechts zie je Compiler Invocation Command. Browse hier naar mcc18.exe onder de bin folder in de MCC18 map. Ga ook naar C/C++ General en voeg in het tabblad Library Paths een verwijzing naar MCC18\lib toe. In het tabblad Includes voeg je onder GNU C de map MCC18\h toe, zodanig dat je vanuit Eclipse naar de bijgevoegde header bestanden kan springen.
  6. Normaal gezien kan je nu met Ctrl+B het project builden en wordt er een hex bestand gegenereerd. Via Run -> External Tools kan je programmas direct vanuit Eclipse runnen, wat handig is om bijvoorbeeld het programma waarmee je de PIC programmeert op te roepen.


Eén van de voordelen van Eclipse is dat je bij een functieoproep in de code direct kan springen naar de functiedeclaratie (misschien kan dit ook in MPLAB maar nog niet gevonden) door F3 in te duwen.

Screenshot van de Eclipse ontwikkelomgeving


 

Home


Electronics

PIC ADC naar Matlab plot
PIC development in Eclipse
Lichtzoekende robot
Scriptie: lokalisatie robot
Welek FM zendertje
Laserthingy
PIC 18f4455 USB Bootloader
Motorsturing met PIC Experimenteerbord
4Nec2 Tutorial
ARM LCD Game van Embedded Artists

Computer

Andere Projecten (4)
autoIt (5)
C en Cpp (3)
VB (6)
webdesign (9)

Photos @ Picasa

Projects with Erik

Club Seven
The Project 1
The Project 2
Ladros

Other Stuff

Rest (0)
Stuff (1)
shared Google Reader items
Blue Project (flash game)
Griekenland fotosite SMI
site TIGEM

 
   
URL Forwarding by
Free Domain Name - www.YOU.co.nr!