plop plop
Olivier MATZ a écrit :
>> j'ai fait un printf comme ça (dans le main ):
>>
>> printf("%lu %u\n",(unsigned long)sec,(unsigned int)nbre_tours);
>>
>> en déclarant sec comme "seconds" et j'ai quand même un débordement sur
>> 16bits.
>>
>
> ça devrait marcher pourtant. Par défaut je mets "%ld" mais je pense que
> c'est pareil. Sinon rebalance le code ;)
>
Ci-joint.
>
>> ps : Sinon comment on fait pour arrêter "tip" ? parce que pour
>> l'instant je suis obliger de le killer via une autre console ! pour info
>> mon tip vient du projet uLinux là :
>> http://svn.digium.com/view/aadk/uClinux/trunk/uClinux-dist/user/tip/tip.c?view=markup&sortby=log&pathrev=13
>>
>
> je sais plus si c'est ^. ou ~. sur la version de base.
>
c'est ~.
Sinon, j'ai du mal à comprendre comment marche tout le bousin. Je
voudrai utiliser le timer0 pour avoir un rapport cyclique variable sur
OC0, est-ce que c'est possible de le faire tout en ayant le scheduler
sur le même timer ?
Merci.
FabM, on finira tous à vélo
ps : saloperie de BS170 qui qui a un pinout différent en fonction de sa
version (Dmos ou mosfet).
/*activation des ports. LED : ready !*/
//cbi (port, bit) = clear port
//sbi (port, bit) = set port
#include <aversive.h>
#include <aversive/wait.h>
#include <aversive/timers.h>
#include <uart.h>
#include <scheduler.h>
#include <time.h>
//#include <pwm.h>
//#include <adc.h>
//#include <scheduler.h>
#define VENT1 2
#define VENT2 3
#define LED_BLEUE (1<<4)
#define LED_JAUNE (1<<5)
volatile static uint16_t nbre_tours;
void transmettre(seconds date){
volatile unsigned long secondes;
if(nbre_tours != 0){
secondes = date;
printf("%lu %u\n",secondes,(unsigned int)nbre_tours);
}
nbre_tours = 0;
}
void commute(void * pouet){
static char etat=0;
if(etat==0){
etat = 1;
PORTB |= (1<<3);
}else{
etat=0;
PORTB &= ~(1<<3);
}
}
int main(void)
{
volatile seconds date;
volatile char etat_prec,etat;
volatile char transmis;
/******************/
/* initialisations*/
/******************/
uart_init();
scheduler_init();
time_init(200);
sei();
// truc bizarre pour faire marcher printf
fdevopen((int(*)(char))uart0_send,(int(*)(void))uart0_recv,0);
// initialisation du logger
scheduler_add_periodical_event(commute,NULL,1);
/* les flags sont sur le GIFR bit 6 et 7 */
DDRD = LED_BLEUE | LED_JAUNE; //pind 4 et 5 en sortie (led)
DDRA = 0; //adc en entrée
DDRB |= 1<<3; //portb 3 en sortie (PWM)
printf("StationMeteo a bootee\n");
PORTD = LED_BLEUE | LED_JAUNE; // extinction des leds
etat=0;etat_prec=0;nbre_tours=0;
while(1){
/* clignotement de la led bleue a chaque tour de
* l'anÃmomÃtre */
if(PIND & 0x0C)
PORTD &= ~LED_BLEUE;
else
PORTD |= LED_BLEUE;
/* detection des fronts montants sur les pin 2 et 3 */
etat = ((PIND&0x0C)==0)?1:0;
if(etat != etat_prec)nbre_tours++;
etat_prec = etat;
/* envoi des donnees toutes les 10 secondes */
date = time_get_s();
if(date%10 == 0){
if(transmis==FALSE){
transmis = TRUE;
transmettre(date);
}
}else{
transmis = FALSE;
}
}
return 0;
}
_______________________________________________
Avr-list mailing list
[email protected]
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog