рд╣рд▓рдХреЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрдгрдирд╛ рдХреА рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЖрд░рд╕реА-рдХрд╛рд░ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рдордпред рднрд╛рдЧ 2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ AMB20 рдФрд░ AMBRc

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рдХреИрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рд╕реЗ рд╣рд╡рд╛ рдореЗрдВ рдбрд┐рдХреЛрдбрд░ рддрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдореИрдВ рдпрд╣рд╛рдБ rctech.net рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рд╣реИ

рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ

рдФрд░ рдмрд┐рдирд╛ рд╕реЛрд▓реНрдбрд░ рдХрд┐рдП рдЗрд╕реЗ рдмреНрд░реЗрдбрдмреЛрд░реНрдб рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ: рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП: резред atmega16 (рдореЗрд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ atmega32 рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ) 2ред USART 7.3728MHz рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рд░реНрдЯреНрдЬред (рдореЗрд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ - 16.59 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ) 3ред 32 kHz рдкрд░ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рд╕рдордпред 4ред USB-RS232 рдПрдбрд╛рдкреНрдЯрд░ 5ред рдПрд▓рдИрдбреА, рдмрдЯрди рдФрд░ рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ред рдПрдордХреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕реНрдирд╛рди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рднрд░реЗрдВред рдорд╣рд╛рди рд▓реЗрдЦ easyelectronics.ru рдкрд░ рд╣реИред рдареАрдХ рдпрд╣реА рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдмреВрдЯрд▓реЛрдбрд░ рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓рдИрдбреА рдФрд░ рдПрдХ рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реИрдк рд╕рдордп рдХреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдбрд┐рдХреЛрдбрд░ рдХреА рдЕрдкрдиреА рдШрдбрд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐, рдмрд╕ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрд╕ рд╕рдордп рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬрдм рдЗрд╕реЗ рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдПрд▓рдИрдбреА рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдмреВрдЯрд▓реЛрдбрд░ рд▓реЛрдб рд╣реИред рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рд╡рд╣ рдмрд╕ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдкрд▓рдХ рдЭрдкрдХрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдмрдХреБрдЫ рдШрдбрд╝реА рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╣реИред рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде, рд╣рдо рд▓реВрдк рдХреЗ рдКрдкрд░ рдореЙрдбрд▓ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рдкрд╕рдВрджреАрджрд╛ FT232RL рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП USB-Rs232 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдХреЛ рдиреНрдпреВрдирддрдо рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рднреА USB-RS232 рдПрдбреЗрдкреНрдЯрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдкреНрд░реЛрдЯреНрд░реВрд╢рд┐рдпрдВрд╕ рдореЗрдВ рд╕рд░реНрдХрд┐рдЯ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ:

AMB20

рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдФрд░ рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдФрд░ рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рд╕рд╛рд░рдгред
рд╕рдордп рдХреА рдЧрд┐рдирддреА
32kHz рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рд╡рд╛рд▓рд╛ рдПрдХ рдЯрд╛рдЗрдорд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рдмрд╛рд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
interrupt [TIM2_OVF] void timer2_ovf_isr(void) { char i; if (++GlobalS==60) { if (++GlobalM==60) { GlobalH++; GlobalM=0; } GlobalS=0; } LED=!LED; } 
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдкреНрд░реЛрдЧреНрд░рд╛рдо COM рдкреЛрд░реНрдЯ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдЖрд░рдЯреАрдПрд╕ рдХреЛ рдЬрдореАрди рдкрд░ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ INT0 рдкрд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИред рд░реБрдХрд╛рд╡рдЯ рд╕реЗ, рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ @ 00000001 рдХрд╛рд░реНрдпрдХреНрд░рдо рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рдордп рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
 delay_ms(100); printf("@00000001\r\n"); GlobalH=0; GlobalM=0; GlobalS=0; GlobalMs=0; 
рд▓реЗрдмрд▓ рд▓реВрдк рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд▓реЗрдмрд▓ рд▓реВрдк рд╕реЗ рдЧреБрдЬрд░рд╛ рд╣реИ, рдЙрд╕реЗ рдлрд╝реЙрд░реНрдо рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: @ AABBCCDDEE рдЬрд╣рд╛рдБ AA - рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдирдВрдмрд░ 1 рд╕реЗ 99BB рддрдХ - рдШрдВрдЯреЗ CC - рдорд┐рдирдЯ DD - secondsEE - рдПрдХ рд╕реЗрдХрдВрдб рдХрд╛ рд╕реМрд╡рд╛рдВ рднрд╛рдЧ
 Trans=1; MS=GlobalMs_Timer/2.56; H=GlobalH; M=GlobalM; S=GlobalS; printf("@%02u%02u%02u%02u%02u\r\n",Trans,H,M,S,MS); 
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: @ 0102030405 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирдВрдмрд░ 01 рдХреЗ рд╕рд╛рде рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдиреЗ 2 рдШрдВрдЯреЗ 3 рдорд┐рдирдЯ 4 рд╕реЗрдХрдВрдб рдФрд░ 50 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдкрд╛рд╕ рдХрд┐рдпрд╛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб
 /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator ┬й Copyright 1998-2010 Pavel Haiduc, HP InfoTech srl http://www.hpinfotech.com Project : Version : Date : 01.04.2013 Author : Company : Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 7,372800 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #ifndef RXB8 #define RXB8 1 #endif #ifndef TXB8 #define TXB8 0 #endif #ifndef UPE #define UPE 2 #endif #ifndef DOR #define DOR 3 #endif #ifndef FE #define FE 4 #endif #ifndef UDRE #define UDRE 5 #endif #ifndef RXC #define RXC 7 #endif #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART Receiver buffer #define RX_BUFFER_SIZE 32 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE <= 256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif // This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index++]=data; #if RX_BUFFER_SIZE == 256 // special case for receiver buffer size=256 if (++rx_counter == 0) { #else if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; #endif rx_buffer_overflow=1; } } } #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index++]; #if RX_BUFFER_SIZE != 256 if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #endif #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif // USART Transmitter buffer #define TX_BUFFER_SIZE 256 char tx_buffer[TX_BUFFER_SIZE]; #if TX_BUFFER_SIZE <= 256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif // USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) { if (tx_counter) { --tx_counter; UDR=tx_buffer[tx_rd_index++]; } } #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index++]=c; ++tx_counter; } else UDR=c; } #pragma used- #endif // Standard Input/Output functions #include <stdio.h> #include <delay.h> char GlobalH,GlobalM,GlobalS,GlobalMs; float TempFloat; #define GlobalMs_Timer TCNT2 #define LED PORTD.7 unsigned int Trans; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { delay_ms(100); printf("@00000001\r\n"); GlobalH=0; GlobalM=0; GlobalS=0; GlobalMs=0; } interrupt [EXT_INT1] void ext_int1_isr(void) { char H,M,S,MS,Trans; Trans=1; MS=GlobalMs_Timer/2.56; H=GlobalH; M=GlobalM; S=GlobalS; printf("@%02u%02u%02u%02u%02u\r\n",Trans,H,M,S,MS); } interrupt [EXT_INT2] void ext_int2_isr(void) { } interrupt [TIM0_OVF] void timer0_ovf_isr(void) { } interrupt [TIM2_OVF] void timer2_ovf_isr(void) { char i; if (++GlobalS==60) { if (++GlobalM==60) { GlobalH++; GlobalM=0; } GlobalS=0; } LED=!LED; } void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0b1001100; DDRD=0x80; TCCR0=0x05; TCNT0=0x00; OCR0=0x00; ASSR=0x08; TCCR2=0x05; TCNT2=0x00; OCR2=0x00; GICR|=0xE0; MCUCR=0x0A; MCUCSR=0x00; GIFR=0xE0; TIMSK=0x41; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0xD8; UCSRC=0x86; UBRRH=0x00; UBRRL=0x2F; #asm("sei") while (1) { } } 
рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ - рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рд╕рдВрдЦреНрдпрд╛ 99 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

AMBRC

рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдПрдордХреЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВред рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдбрд┐рдХреЛрдбрд░ рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рд▓реЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдХреА рд╕реНрдерд┐рддрд┐ред
рдкреНрд░рд╛рд░рдВрдн
рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рда рдХреЛ рдбрд┐рдХреЛрдбрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ ";?; 0; 0; 0;" рдФрд░ рдмреИрдХрд╕реНрд▓реИрд╢ рд░рд┐рдЯрд░реНрди (clcf) рдмрд╛рдЗрдЯреНрд╕ - (0x0D, 0x0A)ред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдХреЛрдбрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рдкрд░ рдмрд╛рдЗрдЯ 0x0A рд╣реИ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░реЗрдВ (рдЭрдВрдбреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
 interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index++]=data; if (data==0x0A) {TimeToInit=1;} //       #if RX_BUFFER_SIZE == 256 // special case for receiver buffer size=256 if (++rx_counter == 0) { #else if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; #endif rx_buffer_overflow=1; } } } 
рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ, рд╣рдо рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ:
  if (TimeToInit) { putchar(1); printf("$\t%i\t7\t0\t1\t1\t",decoderid); putchar(0xF8); putchar(0xF9); printf("\r\n"); GlobalS=0; GlobalMs_Timer=0; sequence_number=0; TimeToInit=0; } 
рдореБрдЭреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЖрдВрд╢рд┐рдХ рдкрд╛рдпрд╛ред COM рдкреЛрд░реНрдЯ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рддрд░рд╣ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛:
01 24 09 31 30 30 09 37 09 30 09 31 31 09 F8 0D 0A
рдпрд╣рд╛рдБ рдбрд┐рдХреЛрдбрд░ рд╕рдВрдЦреНрдпрд╛ 100 рд╣реИред рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдмрд╛рдЗрдЯ (0x01) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж $ рдЪрд┐рдиреНрд╣ рдЖрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЗ рдмреАрдЪ рд╕рд╛рдЗрди рдЯреИрдм (0x09) рд╣реИред рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдПрдХ рдЧрд╛рдбрд╝реА рд╡рд╛рдкрд╕реА (0x0D 0x0A) рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЦреИрд░, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рд╕рдордп рдФрд░ рдХреНрд░рдо_рдирдВрдмрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрд░рдо_рдирдВрдмрд░ рдкрд╛рд░реНрд╕рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕рд▓ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдИ рдЧрдИ рд╣реИред
рд╡рд┐рдХреЛрдбрдХ рд╕реНрдерд┐рддрд┐
рд╣рд░ 4 рд╕реЗрдХрдВрдб рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдкреИрдХреЗрдЬ рджреГрд╢реНрдп:
# 100 980 0 x06BA
рдмрд╛рдЗрдЯреНрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:
режрез реирей реж реп рейрез рейреж рейреж реп рейреж рейреж рейреи рей реп режрей рейреж реж реп рек 39 рекреи рек реп рек реп реж рдбреА реж рдП реж
рдпрд╣рд╛рдВ рдЖрдк рдбрд┐рдХреЛрдбрд░ рд╕рдВрдЦреНрдпрд╛, рдЕрдиреБрдХреНрд░рдо_рдирдВрдмрд░, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢реВрдиреНрдп (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рд╣реИ) рдФрд░ рдЪреЗрдХрд╕рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдкреБрдЪрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ:
 void putchar(char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") crcwork = (crcTable[(crcwork >> 8) & 0xff] ^ (crcwork << 8) ^ c); //      if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index++]=c; ++tx_counter; } else UDR=c; #asm("sei") } 
crcTable рддрд╛рд▓рд┐рдХрд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рдлреНрд▓реИрд╢ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int crcTable [256] = {0.4129.8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,55567677,57806,61935,4,57,528,12915,879,27373111173111173 , 17044.29431.25302.37689.33560.45947.41818.54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,29755,21637,41637,42346,44011,40153,58868,6862868272272272 рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред , 50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242 , 14371.51660.55789.59790.63919.35144.39273.43274.47403.23285.19156.31415.27286.6769.2640.14899.1077066317.52188,64447,60318,39801,35672,4767231/4380231 , 27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439 , 61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784 , 41979.46042.49981.54044.58239.62302.689.4752.8947.13010.16949.21012.25207.29270.46570.46543.48343.38312.341852830.58703.54 572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941, 22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026, 19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215, 65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920};
рд╕реНрд╡рдпрдВ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
  if (TimeToSendAmbStatus) { sequence_number++; putchar(1); crcwork=0xFFFF; printf("#\t%i\t%i\t0\t",decoderid,sequence_number); printf("x%02X%02X\r\n",((crcwork>>8)&0xff),(crcwork&0xff)); TimeToSendAmbStatus=0; } 
рдпрд╣рд╛рдБ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ sequece_number рдмрдврд╝рд╛рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, 0x01 рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ crcwork = 0xFFFF рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЗрд▓рдореЗрдЯ рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЪреЗрдХрд╕рдо рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рдЪреЗрдХрд╕рдо рдФрд░ рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдХреЛ рднреЗрдЬрдирд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рд░ рдЪрд╛рд░ рд╕реЗрдХрдВрдб:
 interrupt [TIM2_OVF] void timer2_ovf_isr(void) { static char times; if (++times==4) { TimeToSendAmbStatus=1; times=0; } GlobalS++; LED=!LED; } 
рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп
рдпрд╣реАрдВ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдЯреНрд░рд╛рдВрд╕рдкреЛрдВрдбрд░ рдХреЗ рд╕рдордп рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ USART рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдХреЛ рднреЗрдЬрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрднрдЧ 300ms рдХрд┐рд╕реА рднреА рддрд░рд╣ рдереЗ) рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рд╕реАрдзреЗ рдХреБрдЫ рднреА рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдЪреАрдЬ рдХреЛ рдореБрдЦреНрдп рд▓реВрдк рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдмрдлрд░ рдФрд░ рдХреБрдЫ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 #define TranspondersCountMax 20 unsigned long int Transponders[TranspondersCountMax]; unsigned long int TranspondersTimeS[TranspondersCountMax]; unsigned int TranspondersTimeMS[TranspondersCountMax]; char TransponderNeedToSend, TranspondersCountInt, TranspondersCountMain; 
рдмрдлрд░ рдЪрдХреНрд░реАрдп рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣рдо рдмрдлрд░ рдХреЛ рднрд░реЗрдВрдЧреЗ:
 interrupt [EXT_INT1] void ext_int1_isr(void) { unsigned long int S; unsigned int MS; MS=GlobalMs_Timer*3.90625; S=GlobalS; if (TransponderNeedToSend<TranspondersCountMax) { TransponderNeedToSend++; Transponders[TranspondersCountInt]=1234567; TranspondersTimeS[TranspondersCountInt]=S; TranspondersTimeMS[TranspondersCountInt]=MS; if (++TranspondersCountInt==TranspondersCountMax) TranspondersCountInt=0; } } 
рдФрд░ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ:
 if (TransponderNeedToSend) { sequence_number++; putchar(1); crcwork=0xFFFF; printf("@\t%i\t%i\t%07lu\t%u.%03u\t130\t119\t2\t", decoderid, sequence_number, Transponders[TranspondersCountMain], TranspondersTimeS[TranspondersCountMain], TranspondersTimeMS[TranspondersCountMain]); //putchar('@'); //putchar(9); //printf("%i",decoderid); //putchar(9); //printf("%i",sequence_number); //putchar(9); //printf("%07lu",Trans); //putchar(9); //printf("%u.%03u",S,MS); //putchar(9); //printf("130"); //putchar(9); //printf("119"); //putchar(9); //printf("2"); //putchar(9); printf("x%02X%02X\r\n",((crcwork>>8)&0xff),(crcwork&0xff)); if (++TranspondersCountMain==TranspondersCountMax) TranspondersCountMain=0; TransponderNeedToSend--; } 
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣рддреА рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "@ \ t% i \ t% i \ t% 07lu \ t% uред% 03u \ t130 \ t119 \ t2 \ t" рдореЗрдВ рд╢реИрддрд╛рди рдЕрдкрдирд╛ рдкреИрд░ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдПрдХ рдЗрдХрд╛рдИ рднреЗрдЬрдирд╛, рдПрдХ рдЪреЗрдХрд╕рдо рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдбрд┐рдХреЛрдбрд░ рдХреА рд╕реНрдерд┐рддрд┐ рднреЗрдЬрдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред
@ 100 10 1234567 37.589 130 119 2 xEB94
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдЧреЛрдж рдЧрд┐рдирддреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж

рдХрдИ рдПрдПрдордмреА рд╕реЗрд░рд┐рдлрд╝ рд╕рдВрдЧрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд░рд╕реАрдПрдо рдмреЗрдЧрд┐рдирд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрдлрд╝реНрдд рд╣реИ, рд░реВрд╕реА рдореЗрдВ рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд░реВрд╕ рдореЗрдВ, RCM рдЕрд▓реНрдЯреАрдореЗрдЯ (рдЬреЛ рдЕрдЪрд╛рдирдХ рдФрд░ рдорд╣рдВрдЧреА рд╣реИ) рдореЙрдбрд▓рд░реНрд╕ рдХреЗ рдмреАрдЪ рдмреЗрд╣рдж рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред AMB20 рдФрд░ AMBRc рджреЛрдиреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдХреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп

CodeVision Avr рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдФрд░ рдкреНрд░реЛрдЯреАрд╕ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡реАрдбрд┐рдпреЛ рдХрд╛рдо:


Source: https://habr.com/ru/post/In196514/


All Articles