Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décodeur morse avec ATMEGA 8

    13 février 2019 à 15:45:47

    Bonjour, 

    J'essaie de faire un decodeur morse avec un atmega 8. J'arrive actuellement à savoir si le signal récu est un "." ou un "-". Mais je ne sais pas comment faire pour dire que c'est la fin du mot. J'ai pensé a faire que lorsque le temps est à 0 je mets un "/" dans ma  chaine de caractère. Mais ce n'est pas possible car entre un . et un - il y a tfacon 0 dans la variable tPulse. 

    Est ce que vous pouvez m'aider ? 

    #include <avr/io.h>
    #include <stdlib.h>
    #include  <util/delay.h>
    #include <avr/interrupt.h>
    #define F_CPU 8000000UL
    #include "dj_tools_lcd_V2.h"
    volatile uint16_t tPulse,time, tStart;
    
    ISR(TIMER1_CAPT_vect)
    {
    
    
        uint16_t t = ICR1 /8;
        if (TCCR1B & (1<<ICES1)) { // Si front montant
    
    
            tStart = t;
            TCCR1B &= ~(1<<ICES1); //front descendant en suite
    
        } else {
    
    
            time = t ;
            tPulse = time - tStart;
            TCCR1B |= (1<<ICES1); //front montant ensuite
        }
    }
    int main()
    {
        char chaine[100];
        char test[100];
        test[0]='a';
        int i=0;
        int a=1;
        int input;
        uint16_t temps[10];
    
    
        lcd_set4bit();    //initialise le mod 4 bits
        lcd_init();
        lcd_clear();
        DDRC = 0xFF;//PORT C en sortie
        DDRD=0x00;
        TCNT1=0;
        TIMSK=(1 << TICIE1); // input capture
        TCCR1B |= (1 << CS12) | (1 << CS10)  ; //prédiviseur par 1024
        TCCR1B |= (1 << ICNC1) | (1<<ICES1) ; //noice canceler + front montant sur ICP1
        sei(); // activer les interruptions
        while(1)
        {
            input=(PIND&0x01);
            dtostrf(tPulse,7,3,temps);
    
            if (tPulse < 0x23 && tPulse > 0x0A && tPulse != 0x00) {
                lcd_ligne(1,1);
                lcd_write_text(".");
                chaine[i]='.';
                tPulse=0;
                lcd_ligne(3,a);
                lcd_write_char(chaine[i]);
                i=i+1;
                a=a+1;
                i=i+1;
            }
    
            if (tPulse > 0x23 )
            {
                lcd_ligne(1,1);
                lcd_write_text("-");
                chaine[i]='-';
                tPulse=0;
                lcd_ligne(3,a);
                lcd_write_char(chaine[i]);
                i=i+1;
                a=a+1;
    
            }
            if(input>=0x01)
            {
                i=0;
                a=1;
                lcd_clear();
            }
    
    
    
        }
    
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2019 à 10:17:47

      ce qui compte ça va être la durée du zéro,

      . 1 temp

      - 3 temps

      entre deux symboles 1 temp

      entre deux lettres 3 temps

      entre deux mots 5 temps mins ( 7 recommandé )

      Vu que tu sais reconnaitre les durés des "1", il va falloir faire pareil pour les "0"

      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

      Décodeur morse avec ATMEGA 8

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown