Modifications

Programmation embarquée

2 200 octets ajoutés, 27 mars 2014 à 12:22
aucun résumé de modification
;ldi temp, 255; max
;clr temp
delay_loop:----------------------------------------------- dec temp | clr temp1 | delay_loop2:-------------------------------- | dec temp1 | | clr temp2 | |2x( 255 X 3 X 255 X 255) delay_loop3:------------------ |3X255X255 | dec temp2 |1X255 | | brne delay_loop3 ------------ | | brne delay_loop2 -------------------------- | brne delay_loop---------------------------------------
ret
le clignotement est apparent et dure à peu près la durée prévue. J'ai donc fait des erreurs de calcul?
 
====désynchronisation====
[[image:Blink.asm.gif]]
 
[[Fichier:Hello.ftdi.44.blink.asm.zip]]
===en C===
====délai variable====
Mon prgramme programme permettra de régler le rythme de clignotement de ma led à l'aide du bouton.
Pour cela, j'ai besoin de faire un délai variable.
Lorsqu'on appuie sur le bouton, on incrémente un compteur qui servira pour le délai de clignotement de la led :
<code lang=c>... while (1) { if (PINA & button_pin_in){//if button not pushed PORTB |= led_pin_out; // Turn LED on long_delay_ms(blink_delay); PORTB &= ~led_pin_out; // Turn LED off long_delay_ms(blink_delay); }else{//if button pushed
blink_delay=10;
while(!(PINA & button_pin_in)){
_delay_ms(10);
}
}
}
...</code>
Hélas, la La fonction de base "_delay_ms" est certes plus pratique à utiliser qu'en assembleur, mais elle ne prend que des constantes, pas de variables.
pour gérer un délai variable je me suis inspiré de cette page http://www.instructables.com/id/Honey-I-Shrunk-the-Arduino-Moving-from-Arduino-t/step2/Our-first-AVR-C-project-Hello-world-LED/ en créant une fonction long_delay :
}
</code>
 
[[Fichier:Hello.blink.button.44.zip|Mon programme]]
Mon programme fonctionne plutôt bien, mais pour qu'il fonctionne mieux, je devrais attacher une interruption au bouton, car lorsque la led est dans sa phase de clignotement, le bouton est inactif.
 
mais je manque de temps pour implémenter ça cette semaine
 
à suivre...
===avec arduino===
Comme récréation, j'essaye la librairie de [http://highlowtech.org/?p=1695 highlowtech] pour programmer les tiny directement depuis l'interface arduino.
 
====fondu de led réglable====
 
le but du programme est de régler la luminance de la led en appuyant plus ou moins longtemps sur le bouton :
 
<code lang=c>/*
set the value of the led by pushing the button more or less longtime
This example code is in the public domain.
led : 8
button : 7
*/
 
#define led 8
#define bton 7
 
int value;
 
 
void setup() {
value=0;
pinMode(led, OUTPUT);
pinMode(bton, INPUT_PULLUP);
 
}
 
void loop() {
if (digitalRead(bton)==LOW){
if (value!=0){
value=0;
}
else{
while(digitalRead(bton)==LOW){
if (value<255) {
value++;
analogWrite(led,value);
delay(40);
}
 
}
}
 
 
}
analogWrite(led,value);
delay(40);
 
 
}
</code>
 
j'ai constaté que le délai ne correspond pas tout à fait à ce qui est codé, comme si l'horloge était multipliée : mon délai de 40ms dure en pratique environ 200ms.
==tentative sur smoothieboard==
J'ai donc laissé là cette expérimentation. Cela-dit, cette recherche m'a permis de comprendre dans les grandes lignes comment fonctionne ce programme et comment contribuer au développement d'un logiciel libre (à savoir, notamment se tenir au courant des points sur lesquels travaillent les autres développeurs).
 
 
[[Catégorie:FabAcademy]]
[[Catégorie:Electronique]]
0
6 691
modifications