Re: [Avr-list] noob help ;-)

2007-06-30 Thread Fabien M
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 
#include 
#include 
#include 
#include 
#include 
//#include 
//#include 

//#include 

#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
Avr-list@droids-corp.org
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

Re: [Avr-list] noob help ;-)

2007-06-30 Thread Olivier MATZ
yop,

>>> 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.

Je vois pas l'erreur là. J'essayerai sur sur notre robot la semaine
prochaine parce que ça m'intrigue ;)

Essaye de regarder si un truc comme ça fonctionne :

long i=153548L;
printf("%ld\n", i);

Sinon, je pense pas que ce soit ça, mais dans le menuconfig, tu peux
choisir différents types de printf (dans generation options).

> 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 ?

Je pense que c'est possible... même si le module est pas vraiment prévu
pour.
Dans le cas où tu utilises le scheduler avec le timer0 (sans utiliser le
module hardware/timer), il va initialiser les registres de la manière
suivante :

sbi(TIMSK, TOIE0);
TCNT0 = 0;
TCCR0 = SCHEDULER_CK;

En gros, tu dois pouvoir changer la valeur de TCCR0 après
l'initialisation du scheduler pour utiliser le mode PWM du timer 0, tout
en gardant l'interruption overflow, utilisée par le scheduler.

a+
Olivier



___
Avr-list mailing list
Avr-list@droids-corp.org
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


[Avr-list] aversive CVS_LOG 2007-07-01

2007-06-30 Thread root
Commit from zer0 on branch b_zer0 (2007-06-30 15:27 CEST)
-

Factorisation of code for callback events.

  aversive  modules/comm/i2c/i2c.h  1.1.2.5
  aversive  modules/comm/i2c/i2c.c  1.1.2.4


---
aversive/modules/comm/i2c/i2c.h  (1.1.2.4 -> 1.1.2.5)
---

***
*** 15,21 
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   *
!  *  Revision : $Id: i2c.h,v 1.1.2.4 2007-06-24 19:55:54 zer0 Exp $
   *
   */
  
--- 15,21 
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   *
!  *  Revision : $Id: i2c.h,v 1.1.2.5 2007-06-30 13:27:57 zer0 Exp $
   *
   */
  
***
*** 79,84 
--- 79,86 
  #define I2C_STATUS_SLAVE_XMIT  0x08
  #define I2C_STATUS_SLAVE_RECV  0x10
  #define I2C_STATUS_OP_FINISHED 0x20
+ #define I2C_STATUS_NEED_XMIT_EVT   0x40
+ #define I2C_STATUS_NEED_RECV_EVT   0x80
  
  /**
   * mode is I2C_MODE_UNINIT, I2C_MODE_MASTER, I2C_MODE_MULTIMASTER or


---
aversive/modules/comm/i2c/i2c.c  (1.1.2.3 -> 1.1.2.4)
---

***
*** 1,5 
  /*  
!  *  Copyright Droids Corporation, Microb Technology, Eirbot (2007)
   * 
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
--- 1,5 
  /*  
!  *  Copyright Droids Corporation (2007)
   * 
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
***
*** 15,25 
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   *
!  *  Revision : $Id: i2c.c,v 1.1.2.3 2007-06-24 19:55:54 zer0 Exp $
   *
   */
  
! /* Author: Zer0, based on Tof old i2c module */
  
  #include 
  #include 
--- 15,30 
   *  along with this program; if not, write to the Free Software
   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   *
!  *  Revision : $Id: i2c.c,v 1.1.2.4 2007-06-30 13:27:57 zer0 Exp $
   *
   */
  
! /*
!  * Author : Olivier MATZ [EMAIL PROTECTED]
!  *
!  * Thanks to Tof for the old i2c module and to Serpilliere for
!  * testing.
!  */
  
  #include 
  #include 
***
*** 554,573 
  
case TW_MT_SLA_NACK:
/* the slave does not answer, send a stop condition */
!   if(g_send_event)
!   g_send_event(-1);
!   command |= (1<= g_send_size) {
!   if(g_send_event)
!   g_send_event(g_send_nbytes);
!   command |= (1<= g_send_size) {
!   g_status |= (I2C_STATUS_OP_FINISHED | 
I2C_STATUS_NEED_XMIT_EVT);
}
else {
TWDR = g_send_buf[g_send_nbytes++];
***
*** 578,587 
/* we transmitted data but slave sent us a NACK. 
 * Notify the number of bytes sent, including the one
 * that were not acked, and send a stop condition */
!   if(g_send_event)
!   g_send_event(g_send_nbytes);
!   command |= (1<> send stop */
!   command |= (1<> send stop ?? XXX */
!   g_status |= I2C_STATUS_OP_FINISHED;
break;
  
default :
!   /* default ... what can we do ? */
break;
  
}
***
*** 774,782 
/* if it is not a synchronous op, we should be aware
 * of next SLA+RW if we are a slave or multimaster */
  #ifdef CONFIG_MODULE_I2C_MASTER
!   if (g_mode != I2C_MODE_MASTER)
command |= (1