unsigned char swap_byte(unsigned char bajt)

{

return( ((bajt & 0x0F)<<4) | ((bajt & 0xF0)>>4) );

};
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Analityk: testowałem już chyba wszystko i najlepiej mi podchodzi codeblocks. Właśnie dzisiaj odkryłem, że atmel udostępnia najnowszy avrtoolchain w wersji pod linuxy i muszę potestować.
  • Odpowiedz
@miszczo997: Już ogarnąłem - pomyliłem PINB z PORTB...

Zawsze się robi głupie błędy :)

Apropo 2 przerwań naraz - przerwanie od przycisku ma niższy priorytet, więc sobie nie wadzą nawzajem
  • Odpowiedz
#programowanie #cpp #arduino #avr

Czy można jakoś zwiększyć dokładność i maksymalną długość zmiennych typu float i double na ATmega328 (arduino uno)?

Aktualnie mam taki fail, że np. 2 + 0,001 = 2,000999

Jeśli się nie da, to zostaje mi pisanie funkcji które rozbiją stringi (czynniki) na mantysę i część całkowitą i ulepią z tego trzeciego (suma) :|
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@vifon_pikantny: używając floatów nie da się mieć dokładnych ułamków.

Tak jak w systemie dziesiętnym nie da się zapisać dokładnie 1/3 (zawsze będziesz miał 0,333333(3), tak w systemie binarnym nie da się zapisać dokładnie liczb w stylu 1/5 czy 1/10 czy x/1000 (rozwinięcie binarne jest nieskończone, więc zawsze będzie zaokrąglone w którąś stronę).

Możesz użyć tego modułu http://docs.python.org/2/library/fractions.html albo zaimplementować liczby wymierne samemu (trik polega na pamiętaniu licznika i mianownika jako oddzielne lcizby
  • Odpowiedz