Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wysłanie zmiennej typu float / double przez USART - ATmega

Fajfer2 24 Lip 2009 22:56 4782 4
  • #1 24 Lip 2009 22:56
    Fajfer2
    Poziom 20  

    No właśnie - jak wysłać zmienną typu float lub double przez port USART w mikrokontrolerze ATmega - program w AVR Studio - C
    ( nie zamieniając na ASCII ani inny typ zmiennej )

    0 4
  • #2 25 Lip 2009 08:49
    Fajfer2
    Poziom 20  

    Tak się robi z zmiennymi typu int, long int, jednak operacja shift na typie float daje błąd kompilacji :

    invalid operands to binary >> (have 'float' and 'int')

    1
  • Pomocny post
    #3 25 Lip 2009 12:41
    Demoman
    Poziom 17  

    zrób sobie unie:

    Code:
    union dane
    
    {
       float f;
       unsigned int i;
    };


    Zakładając, że float i uint mają ten sam rozmiar (sprawdź to) wpisując do float'a liczbe jaką chcesz, dostaniesz jej odwzorowanie bitowe w uint'cie.

    A dalej już jak wyżej.

    0
  • #4 25 Lip 2009 19:17
    Fajfer2
    Poziom 20  

    Dokładnie tak jak pisze " Demoman "
    float zajmuje 4 bajty, double w tym kompilatorze nie różni się od float
    int - to są 2 bajty, long int - 4 bajty.
    tak więc utworzyłem unie :

    Code:

    union dane
    {
      volatile float DataDouble;
      volatile unsigned long int DataInt;
    }PortUSART;


    Teraz mogę wpisać coś do " PortUSART.DataDouble "
    i wysyłać bajtami, tak jak poprzednik pisał.
    Dzięki - temat zamknięty

    0
  • Pomocny post
    #5 30 Maj 2010 23:48
    tmf
    Moderator Mikrokontrolery Projektowanie

    Fajfer2, zanim uznasz temat za zamknięty przejrzyj ten wątek:
    https://www.elektroda.pl/rtvforum/topic1680825.html
    Ze szczególnym uwzględnieniem uwag Freddiego i moich, bo może się okazać, że to co odbierasz na PC to będzie totalna kaszana. Prawda jest niestety bolesna i jeśli bez żadnych dodatkowych założeń chcesz przesyłać floaty na PC to najlepiej to zrobić w ASCII. Twój program powinien się już ładnie wykrzaczyć na 64-bitowych systemach, na wszystkich MACach i paru innych. W zależności od tego jak realizujesz odbiór danych być może wykrzaczy się na każdym systemie.

    0