Blame view

site/upload/binaire.c 2.43 KB
19ae2416   jnduwamu   MAJ du site
1
2
3
  #include <avr/io.h>			// for the input/output register
  #include <avr/interrupt.h> 	
  #include <util/delay.h>  
19ae2416   jnduwamu   MAJ du site
4
  #include <string.h>
19ae2416   jnduwamu   MAJ du site
5
  #include <stdio.h>
1334aed2   root   Site lie au git
6
  #include <stdlib.h>
19ae2416   jnduwamu   MAJ du site
7
8
  #define PRESCALER 1024
  #define TIME_SLOT 20
19ae2416   jnduwamu   MAJ du site
9
10
  #define BAUDRATE	103
  
1334aed2   root   Site lie au git
11
12
  #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
19ae2416   jnduwamu   MAJ du site
13
  
1334aed2   root   Site lie au git
14
15
  char Donnee[24];
  float temp;
19ae2416   jnduwamu   MAJ du site
16
17
18
19
20
21
22
23
24
  
  void init_serial(void)
  {
  	/* ACHTUNG : we suppose UBRR value < 0xff */
  	/* Not true in all case */
  	uint8_t baudrate = BAUDRATE;
  	/* Set baud rate */
  	UBRR0H = 0;
  	UBRR0L = baudrate;
19ae2416   jnduwamu   MAJ du site
25
26
27
  	/* Enable transmitter *///task_led_red();
        //task_send_serial('A');
  	UCSR0B = (1<<TXEN0);
19ae2416   jnduwamu   MAJ du site
28
29
30
31
32
  	/* Set frame format */
  	UCSR0C = 0x06;
      
  }
  
1334aed2   root   Site lie au git
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  void send_serial(unsigned char c)
  {
  	loop_until_bit_is_set(UCSR0A, UDRE0);
  	UDR0 = c;
  }
  
  
  void send_msg2(char Donnee[]){
   
      while (( UCSR0A & (1<<UDRE0))  == 0){};
              
              for (int i = 0; i < strlen(Donnee); i++){ 
                  while (( UCSR0A & (1<<UDRE0))  == 0){};
                  UDR0 = Donnee[i]; 
                  if (i == (strlen(Donnee) - 1)){
                      send_serial('\n');
                      send_serial('\r');
                  }
              } 
  }
  
  void send_msg(char Donnee[]){
          int i=0;
        for(i=0; i<strlen(Donnee); i++){
            if (i==strlen(Donnee)-1){
                send_serial(Donnee[i]);
                send_serial('\n');
                send_serial('\r');
          }
            else{
                send_serial(Donnee[i]);
          } 
          _delay_ms(100);
          }
  }
19ae2416   jnduwamu   MAJ du site
68
  
1334aed2   root   Site lie au git
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  
  // équivalent de analogueRead()
  int analogReadNew(uint8_t pin) {
    /*
    // Définition de la référence de tension
    ADMUX |= (1 << REFS0);
    // On sélectionne notre pin
    ADMUX |= pin & 0x07;
    
    // On lance la conversion
    sbi(ADCSRA, ADSC);
  
    // Le bit sera désactivé à la fin de la conversion
    while(bit_is_set(ADCSRA, ADSC));
  
    // Lire ADCL en premier est obligatoire, sinon l'ADC se bloque
    uint8_t low = ADCL;
  
    // Récupérer le résultat
    return ((ADCH << 8) | low);
    */
    ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
    ADMUX |= (1<<REFS0)|(1<<ADLAR);
    ADMUX = (ADMUX&0xf0)|pin;
    ADCSRA |= (1<<ADEN);
    
    ADCSRA |= (1<<ADSC);
    while(bit_is_set(ADCSRA, ADSC));
    return ADCH;
  }
  
  int main()
19ae2416   jnduwamu   MAJ du site
101
  {
1334aed2   root   Site lie au git
102
     int reading;
19ae2416   jnduwamu   MAJ du site
103
104
     init_serial();
     while(1){
1334aed2   root   Site lie au git
105
106
107
108
109
110
111
112
113
      reading=analogReadNew(0);
      temp = reading * 1.9607843;
      dtostrf(temp, 4, 1, Donnee);
      send_serial('T');
      send_serial('=');
      send_msg2(Donnee);
      _delay_ms(2000);
     }
     return 0;  
19ae2416   jnduwamu   MAJ du site
114
  }
1334aed2   root   Site lie au git