About me

My name is Saad Ahmad and I'm from the University of Waterloo. I've graduated from Mechatronics Engineering and I can be contacted at saad@saadahmad.ca

While robotics is an interest of mine, programming has always been an interest of mine ever since I was introduced to it in Grade 10. My main programming language that I have coded is in C++, mainly due to wanting fast performance, however I have explored and use Matlab and Haskell from time to time. Since my introduction to programming, I have found a couple of areas that really interest me. Two of the main areas are Graphics and Image Processing.

My graphics interest was piqued when we were using Turing in Grade 10 and I found myself interested in 2D graphics. This interest expanded to 3D and found myself interested in 3D Rendering. This resulted in me creating a 3D graphics engine which would enable loading of simple files. Since then I have used OpenGL to render both 2D and 3D graphics and created some applications that utilised them.

My interest in Image Processing came from a random day when I found out about OpenCV and I found myself reading in my webcam and manipulating them through OpenCV. These led to some simple projects as a laser pointer based mouse which later progressed into a LED based touch screen. I then explored pattern recognition and created my hand gesture based mouse. During this I realised that image processing was slow and decided applications I wanted to make would require image processing to be done in real time. I found that my GPU was very useful for making performance realtime and I learned how to use CUDA. While playing with around I decided to make the functions I was testing into a GPU Accelerated Image Processing Library. Thus began my project that I have been working on for the last year which also merges with my passion for image processing and graphics. An example of an application of merging both was a 3D calibration demo that I made.

2 thoughts on “About me

  1. Dear Saad ....

    I'm interested in getting started with your lib for PWM usng the BBB C/C++ setup by Derek Molloy on youtube, and have a few questions. In your BasicPWMExample.cpp, I gather that fundamentally, you are using PWM2 as two independent single edge PWMs in Mode 4 (with a common time base, as per Ti TRM).

    Q1. Does your demo control two LEDs, while one fades ON, the other fades OFF? Is that correct?
    Q2. On the BBB, PWM2 seems to operate the eMMC, if I am not mistaken about my assumptions. Could there be a conflict, and if so, how do you resolve it?
    Q3. New to BBB, I am still unclear how the Modes work. How do I set the correct Mode for say PWM0 or PWM1, or do you do that transparently in your lib when I give simply you a pin number such as "P9_29" when I want to use PWM0B?
    Q4. In that respect, your lib might to change modes, likely temporarily to set up the device. Are there any conflicts during the mode change? Could you please add more insight on mode switching, if applicable?
    Q5. Is there a way I can change single-edge to double-edge in your lib calls?

    Kind regards,
    MAM Lab, Montreal.

    • A1) Yes that is correct
      A2) Can you elaborate what you mean by PWM2 operating the eMMC? Im not sure what you mean by this (I didnt look too much into eMMC)
      A3) As far setting the mode correctly it is handeled transparently (through the device overlay files) and so when you select P9_29 it should select the appropriate pwm mode for the pin
      A4) I achieve mode switching through the device overlay file. So far there really aren't any userspace methods I've seen to set pin modes. As of right now when you load in the pwm file for the specific pin that pin is set to pwm mode otherwise it is returned to what it originally was
      A5) There is no way to achieve it through the chip itself. What you can do is that since each PWM itself has 2 channels that are single edged, you can set one of the pins to output high and one to output low actively. Then you can and the signals and go from there.


Leave a Reply

Your email address will not be published. Required fields are marked *