RS232, UART – Timing. Jak na oscyloskopie określić baudrate.

Załóżmy, że na oscyloskopie zobaczyliśmy coś takiego jak powyżej. Jest to 1 paczka danych z UART badanego urządzenia.
uart_timing

Bit STOP ma wartość 1 i jest niewidoczny, jeżeli odbieramy tylko jeden bajt na raz, ponieważ „zlewa się” ze stanem wysokim linii, który występuje w stanie spoczynku.

Dla transmisji 8N1 (8 bitów danych, bez bitu parzystości, 1 bit stopu), zależności czasowe wyglądają tak:

Baudrate – Długość ramki z rysunku – Długość jednego bitu:

  • 1200 – 7,480ms – 831,11μs
  • 2400 – 3,740ms – 415,56μs
  • 4800 – 1,870ms – 207,78μs
  • 9600 – 936,0μs – 104.167μs

(Wyniki uzyskane eksperymentalnie) Jak widać, jeżeli czas trwania jednego bitu jest okresem, to Baudrate jest częstotliwością. Np. 1/9600 [Baud] = 104,16(6)μs

Ponieważ na jedną ramkę przypada 10 bitów razem z bitem STOP, to przy Baudrate=9600 można przesłać 960B/s użytecznych danych.

 

Definicja i inicjalizacja struktury w C

Definicja typu:

typedef struct
{
	volatile uint8_t *port;
	uint8_t pin_bm;
	volatile uint16_t pulse_high;
	volatile uint16_t pulse_low;
} aparat;

Użycie:

aparat canon = {&PORTC, _BV(PC3),100,200};

Lub w postaci tablicy:

aparat aparaty[4] = {
		{&PORTC, _BV(PC3),10,100},
		{&PORTC, _BV(PC2),20,100},
		{&PORTC, _BV(PC1),30,100},
		{&PORTC, _BV(PC0),40,100}
	};

Źródło: http://stackoverflow.com/questions/2641473/initialize-static-array-of-structs-in-c

Optiboot bootloader i Atmega88 – wgranie, używanie, kompilacja.

TL;DR dla Atmega88(PA), F_CPU=16MHz upload baudrate: 115200:
1. Wgraj hex’a programatorem z Fusebitami: LOW = 0xFF; HIGH= 0xDF; EXT= 0xFC; optiboot_atmega88
2. Odpal upload.bat z paczki, wgrywając wcześniej do niej swój program jako firmware.hex, oraz ustawiając w pliku upload.bat odpowiedni port szeregowy optiboot_upload

Kompilacja Optiboot z konsoli w folderze z Arduino:

C:\Program Files (x86)\Arduino\Arduino ERW 1.0.5\hardware\arduino\bootloaders\optiboot
omake AVR_FREQ=16000000UL LED_START_FLASHES=0 atmega88

Kostka Rubika – kilka sekwencji

Notacja:
M – ruch środkową ścianką pomiędzy prawą i lewą tak jak ruch L
E – ruch środkową ścianką pomiędzy górną i dolną tak jak ruch D
S – ruch środkową ścianką pomiędzy przednią i tylną tak jak ruch F
X – obrót całą kostką w taki sam sposób jak ruch R
Y – obrót całą kostką w taki sam sposób jak ruch U
Z – obrót całą kostką w taki sam sposób jak ruch F

Superkostka 3x3x3 orientacja środków:

  • Środek u x 2: R’ L’ U’ R L U2 R’ L’ U’ R L U2:
    3x3x3_supercube_u2x
  •  Środek u’ i b’: (L’ R U L R’ U’) X 5
  • Środek u i b: (L’ R U’ L R’ U) X 5

Emokwiatek; 4 krzyże + biedronka:
3x3x3_emoflower

Szybkie scramble: L R U D L R 2U 2D

Wąż: U R B’ R’ D U’ B D’ F B’ L D L’ F’:
3x3x3_snake

Odwrócony róg: F L F U’ R U 2F 2L U’ L’ B D’ B’ 2L U

 

Kostka 5x5x5:

(Rr)’ F’ (Ll)’ (Rr) U (Rr) (U)’ (Ll) (Rr)’:
5x5x5_1

(Rr) U (Rr)’ U (Rr) U2 (Rr)’:
5x5x5_2

(Dd) R U R’ F R’ F’ R (Dd)’:
5x5x5_3

(Dd)’ L’ U’ L F’ L F L’ (Dd):
5x5x5_4

Błąd parzystości

Rr2 B2 U2 Ll U2 Rr’ U2 Rr U2 F2 Rr F2 Ll’ B2 Rr2

 

Grafiki wykonałem w programie sketchup z użyciem pliku: https://3dwarehouse.sketchup.com/model.html?id=b1d74f23627344317f01c23a4d8b8e38

 

Największa dotychczas poznana liczba pierwsza

W styczniu 2016 projekt GIMPS ( Great Internet Mersenne Prime Search) ogłosił odnalezienie rekordowej liczby pierwszej. Jak i poprzednie rekordy, ta także jest liczbą Mersena. W tej postaci prezentuje się tak:

274,207,281 − 1

Jeżeli chcemy poznać jak wygląda ona naprawdę w notacji dziesiętnej, należy ją obliczyć. Można to wykonać na przykład skryptem w języku Python:

file_ = open('biggest_prime.txt','w')
file_.write(str(pow(2,74207281)-1))
file_.close()

Użyłem języka Python, ponieważ ma on wbudowaną obsługę tzw. dużych liczb. Skrypt na moim komputerze wykonywał się kilka godzin, a więc nie jest to jakiś niesamowicie długi czas.

Wygenerowany plik tekstowy zawierający podaną liczbę umieszczam tutaj do pobrania:

biggest_prime (22 338 618B)

74HC595 w Eagle – opisy pinów „po ludzku”

Przedstawiam grafikę z etykietami pinów takimi, do jakich się przyzwyczaiłem z protokołu SPI:
74hc595

Opis tekstem:

  • 9 QH* – MISO
  • 10 SCL – /RESET (aktywowany stanem niskim; jeżeli nie używasz, podepnij do VCC)
  • 11 SCK – CLK
  • 12 RCK – LATCH /CS (zbocze na tym pinie powoduje przepisanie stanu rejestru na wyjścia)
  • 13 G – /OE (ustaw stan niski, jeżeli chcesz żeby wyjścia działały; można podpiąć na stałe do GND)
  • 14 SER – MOSI