Hello World !
Par MiGaNuTs, lundi 15 août 2011 à 14:43 :: PIC et PIC et Colegram :: #190 :: rss
Ou pourquoi K2008 n'avance pas beaucoup en fait :D
Il y'a quelques temps déjà j'ai découvert une alternative aux PIC (quelquepart au Tetalab de Toulouse, a cause de poto Freemac et des gens de Snootlab).
Cette alternative s'apelle Arduino ! et elle cumule pleins de details super pratique par rapport aux pics (surtout les 16F pour lequels il faut etre un peu maso en fait).
En vrac :
- Un IDE vraiment multiplateforme, le pied qd on veux develloper sur MAC
- Le "flasheur" USB est intégré, et on peut s'en servir pour communiquer avec l'IDE. top pour debuger au début, et gros potentiel par la suite (qd on est devenu bon en microcontroleur)
- C'est pas cher, et bien prémaché (alors que les pic c'est gratos, mais relou a mettre en oeuvre). 25€ le arduino uno, c'est moins cher qu'un pickit 2 !
Et sur ebay c'est dingue le nombre de trucs pas chers que vendent les chinois pour l'arduino :D - C'est simplifié a mort ! L' IDE prémache les code avant la compilation, ce qui permet de s'épargner (entre autre) les déclarations de fonction qui me saoulent d'habitude.
La mise en oeuvre de pleins de fonctions du micro sont prémachées aussi (com USB, PWM, entrées ANA, timers et surement d'autres) - La communauté arduino est un peu moins anarchique que celle des utilisateurs de pics. On trouve au moins autant de trucs sur le net, mais c'est plus organisé et donc plus simple de trouver des infos, des trucs tout faits et surtout de l'aide.
Du coup j'ai "porté" une bonne partie du code de K2008 sur arduino, et modifié un peu ma facon de gerer l'alim a découpage.
Mais il me faut vraiment un oscillo a mémoire pour pouvoir avancer sur la regul du découpage et la commande des lampes a décharge :/ Faut que je gagne au loto pour investir :D
En attendant, petite vidéo pour se mettre en jambes :
Arduino, Deuxieme Run par MiGaNuTs
et code source, pour la route.
#include// necessaire pour pouvoir appeller une fonction toutes les x ms //#define DEBUG1 //#define DEBUG2 const int led=13;// led de visualisation du temps passé dans l'interruption, pour l'oscillo. volatile int tensionflash = 0; // definie en tps que globale pour pas declancher les thyristors // si pas de jus const int pattetension = A0; const int pattepwm = 10; // patte 9 ou 10 car ca permets de changer le frequence du pwm sans mettre le dawa // dans les timings de l'interruption ni dans la fonction delay (enfin, normalement. a tester a l'oscillo) const int pattevitesse = A1; //const int pattechoixmode = A2; const int vitessemini=50; // La on attaque le coté chiant d'arduino "propre" :/ // déclarer les pattes :/ du chenillard une par une // L'avantage c'est que du coup on peut cabler tout dans le desordre :D // Ce qui tombe bien car les pattes 0 et 1 sont utilisées pour la com USB. const int led0=12; const int led1=8; const int led2=2; const int led3=3; const int led4=4; const int led5=5; const int led6=6; const int led7=7; // il reste plus que les pattes 10 et 11 de dispo ! // Et quelques entrées ana, mais comme elles servent aussi pour l'i2c // En fait si je rajoute un ecran LCD, il en restera plus bcp non plus. void setup() { pinMode(led, OUTPUT); pinMode(pattepwm, OUTPUT); // suite du coté chiant pinMode(led0, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); /*Pins 9 and 10: Setting Divisor Frequency 0x01 1 31250 0x02 8 3906.25 0x03 64 488.28125 0x04 256 122.0703125 0x05 1024 30.517578125 TCCR1B = TCCR1B & 0b11111000 | ; */ //TCCR1B = TCCR1B & 0b11111000|0x02 MsTimer2::set(1, InterruptTimer2); // appelle l'interruption toutes les x ms MsTimer2::start(); // active Timer 2 #if defined(DEBUG1) || defined (DEBUG2) || defined (DEBUG3) || defined (DEBUG4) || defined (DEBUG5) Serial.begin(115200); // pour debug via l'usb #endif } void loop (){ unsigned int tempo=65000; byte leds = 1; while (1){ while(leds<128){ AllumeLeds(leds); leds=leds<<1; tempo=(analogRead(pattevitesse)/2)+vitessemini; delay(tempo); #ifdef DEBUG1 Serial.print("\ndelay:"); Serial.print(tempo); Serial.print(" leds:"); Serial.print(leds,DEC); #endif } while(leds>1){ AllumeLeds(leds); leds=leds>>1; tempo=(analogRead(pattevitesse)/2)+vitessemini; delay(tempo); #ifdef DEBUG1 Serial.print("\ndelay:"); Serial.print(tempo); Serial.print(" leds:"); Serial.print(leds,DEC); #endif } } } void InterruptTimer2() { const int seuiltension = 800; const int seuiltensionintermediare=600; int ratiopwm; digitalWrite(led, HIGH); //on allume la led pour montrer qu'on est dans la boucle d'interruption tensionflash=analogRead(pattetension); if (tensionflash seuiltension) { analogWrite(pattepwm,0); } else { // c'est la que ca se complique analogWrite(pattepwm,50); } } digitalWrite(led,LOW); // on coupe la led pour montrer qu'on a rendu la main. // nickel pour un debug a l'oscilloscope :D } void AllumeLeds (byte leds) { // Ca aussi c'est le coté relou d'arduino du coup :/ digitalWrite(led0,leds & 1); #ifdef DEBUG2 Serial.print("\n"); Serial.print(leds & 1,BIN); #endif digitalWrite(led1,(leds & 2)>>1); #ifdef DEBUG2 Serial.print((leds & 2)>>1,BIN); #endif digitalWrite(led2,(leds & 4)>>2); #ifdef DEBUG2 Serial.print((leds & 4)>>2,BIN); #endif digitalWrite(led3,(leds & 8)>>3); #ifdef DEBUG2 Serial.print((leds & 8)>>3,BIN); #endif digitalWrite(led4,(leds & 16)>>4); #ifdef DEBUG2 Serial.print((leds & 16)>>4,BIN); #endif digitalWrite(led5,(leds & 32)>>5); #ifdef DEBUG2 Serial.print((leds & 32)>>5,BIN); #endif digitalWrite(led6,(leds & 64)>>6); #ifdef DEBUG2 Serial.print((leds & 64)>>6,BIN); #endif digitalWrite(led7,leds>>7); #ifdef DEBUG2 Serial.print(leds>>7,BIN); #endif }
Commentaires
1. Le lundi 15 août 2011 à 14:50, par MiGaNuTs
2. Le lundi 15 août 2011 à 15:16, par freemac
3. Le lundi 15 août 2011 à 15:20, par MiGaNuTs
4. Le lundi 15 août 2011 à 19:06, par freemac
5. Le lundi 15 août 2011 à 19:09, par freemac
6. Le lundi 15 août 2011 à 19:10, par freemac
7. Le lundi 15 août 2011 à 20:13, par MiGaNuTs
8. Le mardi 16 août 2011 à 19:34, par MiGaNuTs
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.