logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA 128],wysyłanie unsigned int po RS232 w C

arek4ever 26 Lis 2008 02:28 2662 4
REKLAMA
  • #1 5784358
    arek4ever
    Poziom 2  
    Witam. To mój pierwszy post na tym forum.
    Jestem początkujący jeśli chodzi o AVR i programowanie w C...
    Mam problem,gdyż nie wiem,jak wysłać zmienną typu unsigned int po RS232. Czytałem,że służy do tego funkcja itoa (char* itoa (int __val, char * __s, int __radix).
    Chciałbym się dowiedzieć,co oznaczają podkreślniki przy val,s,radix oraz co to jest ten "radix". Jeżeli macie konkretne przykłady zastosowania tej funkcji(najlepiej wraz z bibliotekami do wysyłania po rs232),to proszę o zamieszczenie ich na forum.
    Z góry dziękuję za pomoc.
  • REKLAMA
  • #2 5784446
    Dr.Vee
    VIP Zasłużony dla elektroda
    http://www.google.com/search?q=itoa

    Nigdy nie wysyłasz liczby, tylko jej reprezentację. Jak napiszesz, o jaką reprezentację Ci chodzi, to będzie możliwa odpowiedź na Twoje pytanie.

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #3 5784966
    arek4ever
    Poziom 2  
    Potrzebuję wysyłać po RS232 wartości : volatile unsigned int narastanie,opadanie,które są tymczasowymi wartościami rejestru ICR1. Są to czasy pojawienia się odpowiednio zbocza narastającego i opadającego w trybie input capture,ktory próbuję od jakiegoś czasu uruchomić,ale beż efektów.W tym trybie chcę mierzyć czas trwania impulsów,jakie pojawiają się na modelarskim odbiorniku RC(czasu od 1ms do 2 ms powtarzane co 20ms). Mając te czasy trwania,chcę odtworzyć impulsy PWM sterujące serwem i silnikiem( najpierw występuje impuls dla serwa,a jak się skończy,zaczyna się dla silnika).Załączam moj niedziałający kod.Może znajdziecie co robię nie tak,bo ja już jestem bezsilny:cry: a mam tylko 2 dni na uruchomienie tego.Proszę o pomoc-jest bardzo potrzebna.

    Pozdrawiam arek4ever.
  • REKLAMA
  • #4 5785167
    Dr.Vee
    VIP Zasłużony dla elektroda
    Nie odpowiedziałeś na moje pytanie. Między czym a czym wysyłasz te liczby? Jeśli między jednym uC a drugim, to możesz tak:
    typedef union {
      uint16_t u16;
      uint8_t u8[2];
    } twobyte_t;
    
    void uart_send_u16(uint16_t data) {
      twobyte_t tmp;
      tmp.u16 = data;
      UART_send(tmp.u8[0]);
      UART_send(tmp.u8[1]);
    }
    
    uint16_t uart_recv_u16(void) {
      twobyte_t tmp;
      tmp.u8[0] = UART_recv();
      tmp.u8[1] = UART_recv();
      return tmp.u16;
    }


    PS. posprzątaj trochę ten kod, bo marnie widzę uruchamianie czegokolwiek ;)

    PPS. co do Twojego pytania w innym wątku - typy [u]int{8,16,32,64}_t są zdefiniowane w nagłówku stdint.h. Ten nagłówek jest również dołączany przez inttypes.h.

    Pozdrawiam,
    Dr.Vee
  • #5 5786447
    arek4ever
    Poziom 2  
    Już podaję między czym a czym te integery wysyłam-między atmegą a komputerem. Pozdrawiam
REKLAMA