Pages

mercredi 3 septembre 2014

Using ADC with DMA on STM32 micrcontroller


The most received cry of help that I get form many people is about how using DMA with ADC for a continuous conversion of analog sensors inputs. So I made the decision to share the needed steps to configure it ( and also to avoid the duplication of my answer each time).

I will take advantage of STM32Cube project to make it easy and I admit that you have already STM32CubeMX software tool and the installed STM32CubeF4 Firmware. If it is ok, let's start then and for other people they can follow links to setup the tool and the firmware.







 Open STM32CubeMX tool and click on 'new project' I chose STM32F439BITx microcontroller from the list. You can chose your own if you are using a specific board. I guess that all ADCs in STM32 microcontrollers have this feature.













After that, form the Pinout view of the tool expand ADC peripheral and select the three internal channels (Temperature / Vref and Vbat ). You can select your own but I used these three channels as a demonstration in this tutorial.

In the second case, all what you have is to connect your analog inputs to the channels pins. Selected channel are colored in green in the microcontroller or you can operate conversely by selecting first your pin as ADC input by a right click on it. (exp PA0)















Now it's time to configure the ADC to operate as we want, (yes yes and the DMA too ;) ). So Click on ADC and add three regular channel configuration to be converted. Also don't forget to enable Scan Mode and continuous mode to have a continuous conversion of the three configured channels.











 Switch now to the 'DMA Settings' tab, add a DMA request by selecting the stream and the priority. Also enable the increment of the memory because we will store all converted values in a array. The used mode is the circular mode because we will have a continues transfer of a word (data width).





Click Ok, generate a project and open it (I use IAR wokbench you have the possibility to chose Keil or TrueSTUDIO too). We will add some extra code to complete our demo: In the main.c file we will declare a 32 bit array and we will start the ADC and the DMA by calling HAL_ADC_Start() and HAL_ADC_Start_DMA(). After each conversion the value is transferred form the data register of the ADC to the array and the DMA will increment the index automatically.
1:  /* USER CODE BEGIN PFP */  
2:  uint32_t ADC1ConvertedValues[1024];  
3:  /* USER CODE END PFP */  
4:  int main(void)  
5:  {  
6:   /* MCU Configuration----------------------------------------------------------*/  
7:   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  
8:   HAL_Init();  
9:   /* Configure the system clock */  
10:   SystemClock_Config();  
11:   /* Initialize all configured peripherals */  
12:   MX_GPIO_Init();  
13:   MX_DMA_Init();  
14:   MX_ADC1_Init();  
15:   /* USER CODE BEGIN 2 */  
16:   // -- Enables ADC and starts conversion of the regular channels.  
17:   if( HAL_ADC_Start(&hadc1) != HAL_OK)  
18:    return 0;  
19:   // -- Enables ADC DMA request  
20:   if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1ConvertedValues, 2048) != HAL_OK)  
21:    return 0;  
22:   /* USER CODE END 2 */  
23:   /* Infinite loop */  
24:   while (1){}  
25:  }  

All converted values are transferred and stored in ADC1ConvertedValues which is an array of 1ko of size. Values are stored in the order of conversion ( Temp sensor then Vref then Vbat ).

This is a Live watch of ADC1ConvertedValues array while demo execution.

jeudi 14 février 2013

The new STM32F4DISCOVERY extension board

STMicroelectronics has announced a set of three boards expands the functionality of the STM32F4 Discovery Kit. As an embedded system developer have worked in many projects based on STM32 microcontroller, I find these board very useful to expand all features of the microcontroller and  helpful to custumers to create their projects based on STM32 Disccovery kits.


STMicrocontronics fllow the path of the open hardware project Arduino to support their product, specially their microcontroller Discovery board and open the horizon for the junior developer and hobbyist to build theirs system.

As indicate in the official web site: The packet is based on main board, connected to the STM32F4 Discovery provides Ethernet connectivity, a micro SD Card slot and extension connectors for the two other boards, and provides easy access to features such as UART, SPI, CAN and so on.

The second bord is a digital camera board featuring a 1.3 Megapixel CMOS sensor and the third board is a 3"5 LC with touch screen capability connect to the main board to form a complete system.

For more information about the product visit element14 link. and you can see also this video of a demo build with assembling three boards.




Then if you have one STM32F4 Discovey kits and you want to try one of these features:



  • Internet connection
  • LCD Display
  • Camera Capture
  • USB connection
  • Micro SD storage
It's maybe time to get one STM32F4DIS-EXT to help you to realize these functions.

The pictutre in ARMkits site present the connectors and interfaces on base board.


Working and Storage Temp.: 0~45°C
Power consumption: +5V@80mA (working without LCD)
Dimensions: 97.03mm x 83mm
LCD parallel interface, 16-bit, 8080 mode
4-wire resistive touch screen interface
Camera interface (support 1.3 megapixel Digital Camera, multiplex with UART6)
One RS232 Serial port (UART6, DB9 connector, multiplex with Camera interface, can be selected by jumpers JP1 and JP2)
One USB2.0 FS OTG/device/host port (12Mbps, Micro-AB type connector)
One 10/100Mbps Ethernet Interface
One 2.54mm pitch 2*20-pin expansion connector brought out below hardware peripherals:
- 5 Serial ports, TTL voltage (multiplex with some functions)
- 4-channel PWM
- 1-channel SPI
- 1-channel I2C
- 1 CAN2.0B interface (need to extend CAN transceivers)
- 6 GPIOs

So I wait to see many new projects similar to Arduino concept.
.


samedi 8 septembre 2012

Nurse robot "Spongebob"

Les services hospitaliers se sont dégradés remarquablement durant les dernières années.En effet, les tâches hospitalières sont de plus en plus complexes et le manque du personnel ne cesse de s’accentuer de jour en jour. Toutes ces contraintes ainsi que les proclamations incessantes des patients à propos du retard et du manque d’efficacité imposent l’emploie de méthodes modernes d’assistance dans le travail hospitalier. Avec le développement incessant de la technologie l’utilisation des systèmes robotisés devient de plus en plus répandue dans la majorité des domaines. Nous pouvons citer les systèmes de parking automatiques et les robots astronautes.

L’automatisation des tâches hospitalières par le biais de systèmes robotisés offre un grand nombre d’avantages pour les infirmiers responsables de tâches faciles et exigeantes en terme de temps. La livraison des pilules, à titre d’exemple, aux malades hébergés dans l’hôpital dans un temps précis et dans des endroits précis de l’hôpital correspond à ce type de tâches. C’est dans ce cadre que s’insère ce projet de développement et de conception (PCD || P2M) effectué au sein de l’Ecole Nationale des Sciences de l’Informatique (ENSI-Tunisie).


Notre projet consiste à construire un système permettant l’automatisation des tâches de livraison des médicaments au sein d’un hôpital. Ce système assurera la saisie de commandes de livraison par un utilisateur à travers une interface de commande. Il permettra aussi de réaliser ces commandes et d’aller livrer le médicament au malade concerné.




L’utilisateur utilise l’interface de commande pour saisir les commandes qui sont constitués des coordonnées des malades du type de leurs médicaments, de la date de prise du médicament et de la date de départ du malade. Ces données sont enregistrées dans une structure de données et sont sollicités lorsque la date de livraison est atteinte. Le robot qui prend ces données à partir de l’interface de commande se déplace dans l’hôpital jusqu’à atteindre l’emplacement du malade qui est donné dans la commande.

Pour la réalisation:


- Deux kits STM32VLDISCOVERY
- Écran LCD16*2 JHD126A
- Keypad 4*4
- Deux servomoteurs POWER HD 1501 MG

- Deux Mini servomoteurs POWER HD 1160A
- Deux PCB. (commande des servo & LCD )




Je tiens à remercier mes binômes, notre encadrent, toutes "la famille" du Club ROBOTIQUE ENSI ainsi tous qui ont contribué de près et loin à ce projet.



jeudi 29 décembre 2011

Programmer or Developer

I was part of a conversation the other day that really struck a nerve with me and has resonated in my mind since.  We were discussing Programmer versus Developerand what we were.  This lead to a more generalized conversation about programmers/developers.For now, I am going to use Programmer/Developer as interchangeable names/titles.  Both of these can be part of a large corporation, small company or self-employed.  Both of these titles are universally used and interchanged in job titles, want ads, resumes and regular day to day conversation.  Most probably don’t care what they are called or what their title is as long as they are getting paid what they want.


We can look at the dictionary definitions for these as well:


From Wikipedia:

A programmer writes computer software.  A developer may take part in design, computer programming…

Now, my opinion….

In the end, both Programmers and Developers write code and in that sense are very much the same.  The difference that I see and will argue about is everything else.  A Programmer is given the task of writing the code.  This might entail writing tests as well.  I picture the Programmer as a person in a large organization that is an assembly line worker ant.  They are given a task and expected to complete it.  The Programmer may never meet the client and may never see the final product.  The Programmer s one spoke in the wheel of the entire project.  The Programmer is never asked what they think or for suggestions, they just write code.  Good Programmers strive to learn more and to be Developers.  If I worked for a large company, I would just be a Programmer and there is absolutely nothing wrong with that at all.  I do not look down on or think that I am better than a Programmer.  Programmers are not Developers.

Developers on the other hand are also Programmers.  Large companies have Developers and they are responsible for the Programmers.  Small companies and self-employed, are mostly Developers.  A self-employed person cannot just program.  They interact with clients, they are part of the design process, they develope and they program.  The developer may be every spoke of the wheel or they may work closely with other developers.  Developers can take a clients idea and make it a reality.  Developers must be flexible and know when to offer the client advice and when not to.  Sometimes the client may not know what they really want and it is the Developers job to tell them. And in the end, the Developer sits down, puts on their Programmers hat and writes code.

finally, Software Engineer, Programmer and Developer, they all are different persons along their job titles each of them has it’s own set of skills and responsibilities. I think that’s main reason behind software crisis and software failure that we combine their jobs together and we think it’s same.

mercredi 21 décembre 2011

Participation du Club Robotique ENSI au RoboComp 2011

Le RoboComp : Un objectif fixé dés le début de l'année universitaire et le premier défit du Club Robotique ENSI.


Après 54 heures de travail dur à l'ENSI, nous avons pu, enfin, réaliser notre premier robot "BADR 1.0". Ce n'est pas aussi simple et facile comme vous le voyer faire son parcours sur chaine,notre nouveau né: ceci est un appui et une confirmation de ce que viens de dire un ami du Club robotique de l'ENIS .


Bref,notre robot "BADR 1.0" est bien là! Il est le fruit de l'effort et de la collaboration de toute la famille du Club Robotique ENSI : Six formations ont précédé cet art, de longues discussions de toutes les idées et de toute initiative innovante,une bonne organisation, un arrangement et une responsabilité mené par toute l'équipe motivée du Club Robotique ENSI. Ainsi,je veux par la présente,entre autres, remercier profondément  tous les membres qui ont coopéré à la réalisation de ce travail,en particulier mes collègues les plus proches et qu'avec j'ai passée des jours et des nuits bien froides au Club. Je les remercie d'avoir sacrifier leurs premiers jours de vacances, de l'agréable ambiance du travail qu'ils ont crée et des bons moments inoubliables!

La compétition est faite et on est 10/14. Pour certaines pensées et certains spécifiés je dis que ce n'est pas honteux du tout, au contraire ça fait un plaisir et une fiéreté d'avoir réussi notre travail et d'avoir participé à cette compétition au lieu de rester "banaka" cherchant à parler du n'importe quoi,à tort et à travers comme le font certains.

On est satisfait de notre effort et de notre travail,mais aucun membre n'est satisfait du résultat. On est pas satisfait du résultat dans la mesure qu'on est pas satisfait du jugement et du système de points! Il n'y' avait pas une bonne justice et s'été un système des points mal posé qui se résume comme suit:

- Si votre robot est construit manuellement vous aurez 15 points et si vous l'avez acheter prêt par exemple vous aurez seulement 5 points: C logique .
- Le problème été que: normalement le robot est "autonome" et on n'a pas le droit de le toucher! Or, le jury a permis de le toucher lorsqu'il dévie de la trajectoire et l’équipe sera pénalisé de - 4 points du score total !! Et Beinh ce n'est pas suffisant du tout parce que l'autonomie du robot est primordiale!!? Pour nous,notre robot est autonome à 100 pour cent et personne ne l'a touché vu qu'il n'a pas dévié de sa trajectoire.


Étant donné que le score se calcule de la manière suivante : (60 - le temps écoulé dans le parcours du trajectoire en seconde) * 10 + 50 points si vous avez réussi à passer d'un angle droit +10 points pour chaque angle non droit (sachant qu'il existe un seul angle droit et 10 angle non droit) + 100 points si le robot atteint le bout final de la trajectoire.

Donc, si vous touchez votre robots n fois vous aurez ( 100 - n*4) points ajouté au score final !! On a eu ce classement qui n'est pas mal du tout.

Sans oublier d'adresser mes remerciements à Mr Moncef TAJINA et Mme Chadlia JRAED pour leurs soutien et leurs encouragement pour le Club Robotique ENSI .



et voici le lien de notre particpation :


***  الحمد لله الذي هدانا إلى هذا وما كنا لنهتدى لو لا أن هدانا الله ***

samedi 1 octobre 2011

Un mois déjà !


Un mois déjà de retour à l'école, si on ne disait pas que c'est passé comme une année.

Un mois déjà ! Et on n’a pas encore tenu le bout du fil.

Un mois déjà, Un problème déjà : une histoire que leur écho à dépasser les frontières de l'école, que les personnes ne cessent pas jour après jour de les répéter comme si c'est un feuilletant à suivre !! Que d'autres, croyais en eux qu'il sont des juges pour rendre dignité au victime qu’au même temps la dignité d'un autre personne n’a pas de valeur pour eux.

Un mois déjà, et les choses commencent à  s'éclaircir et à s'organiser d'autre coté : une opportunité de laisser une trace, une équipe pleine de charge et d'énergie motivé d'atteindre le bout du chemin, minimiser les contraintes et travailler jour et nuit (bien entendu) a fin terminer avec un succès remarquable à l'échelle nationale cette année.

Un mois déjà, quatre événements assisté: politique, culturelle, High Tech… et dommage ça pourrais être le cinquième avec Tunis 2.0 ces jours…

Un mois, et le rythme s’accélère et upssss : les DS !!…

Un mois, et on se trouve face aux élections...

Un mois, et …

dimanche 6 février 2011

la création

ce blog est nouveau et espérons qu'il donne le plus et soit au niveau et qu'il soit le bon départ.