рд▓рдЧрднрдЧ 3 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдХрдИ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреА рддрд░рд╣, рдореИрдВрдиреЗ рдЕрдкрдиреА рд░рд╛рдп рдореЗрдВ Atmega1280 рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд Arduino рдкрд░рд┐рд╡рд╛рд░ рд╕реЗ рд╕рдмрд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдмреЛрд░реНрдб, рдЕрд░реНрдерд╛рддреН Seeeduino Mega, рдЦрд░реАрджрд╛ред рдПрдХ рдШреВрд░реНрдгрди рд╕рд░реНрд╡реЛ-рдбреНрд░рд╛рдЗрд╡ рдФрд░ рдПрдХ рдирд┐рдорд┐рд╖ рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рдЗрддрдирд╛ рд▓рд┐рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: "рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдЦрд░реАрджрд╛?"ред
рдореИрдВ рдПрдХ рдмрдбрд╝реЗ рд╕реИрдиреНрдп рдЬрд╝реЗрд▓реЗрдиреЛрдЧреНрд░рд╛рдб рд╕рдВрдпрдВрддреНрд░ рдореЗрдВ рдЕрдЧреНрд░рдгреА рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдореЗрдЯреНрд░реЛрд▓реЙрдЬрд┐рдХрд▓ рдорд╛рдк рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд┐рдирд╛ рд╢реЛрд░ рдХреЗ рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ 1.8 рдбрд┐рдЧреНрд░реА рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0.0001 рдбрд┐рдЧреНрд░реА рддрдХред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХрдард┐рди рдФрд░ рдЕрдирд┐рд░реНрдгрд╛рдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди, рдирд┐рдпрдВрддреНрд░рдг рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рд╕рдВрднрд╡ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рджреЛ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдкреАрдврд╝реА рдФрд░ рдПрдХ рдЪрд░рдг рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдФрд░ 1 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рддрдХ рд╡реЛрд▓реНрдЯреЗрдЬ рднрд┐рдиреНрдирддрд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред (рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╕реНрдЯреЗрдкрд░ рдореЛрдЯрд░ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рднреА рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрдЯреАрдХрд░рдг рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЕрдзреНрдпрдпрди рд▓рд┐рдЦреВрдВрдЧрд╛) рддреБрд░рдВрдд, рдЖрд╢рд╛ рдХреА рдЭрд▓рдХ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рд▓рд╛рд▓ рд╕рдИрджреАрдиреЛ рдкрд░ 1,500 рд░реВрдмрд▓ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд┐рдП рдереЗ, рдФрд░, рдЙрддреНрд╕рд╛рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рд╣реБрдЖред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрддрдВрдХ:
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдмреЛрд░реНрдб рдХреЛ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдЪрдХреНрд░ (рд╣рд╛рдИ) рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓рд╡реНрд░реАрдЯ (рдПрд▓рдУрдбрдмреНрд▓реНрдпреВ) рдХреЗ рдиреАрдЪреЗ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдкрд░ 50 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд▓реНрдХрд┐ рдиреАрд░рд╕ рдорд┐рд▓рд╛ред рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИред рдпрд╣ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдЖрд╡рд╢реНрдпрдХ 1 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреЗ рдмреАрдЪред
рдЕрдЧрд▓рд╛, рдСрд╕рд┐рд▓реЛрд╕реНрдХреЛрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛:
рдПрдирд╛рд▓реЙрдЧрд░реЗрдб () - рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ 110 ╬╝sред
рдПрдирд╛рд▓реЙрдЧ рд╡рд╛рдЗрдЯ () - 2000 ╬╝s
SerialPrintLn () - 9600 рдХреА рдЧрддрд┐ рдкрд░ рд▓рдЧрднрдЧ 250 ╬╝s рдФрд░ рдЕрдзрд┐рдХрддрдо 3 ╬╝s рдХреА рдЧрддрд┐ рд╕реЗред
рдбрд┐рдЬрд┐рдЯрд▓рд░рд╛рдЗрдЯ () - 1800 рдореАрдХреНрд╕
рдбрд┐рдЬрд┐рдЯрд▓рд░реЗрдб () - 1900 рдореАрдХреНрд╕
рдЗрд╕ рдкрд░, рдореИрдВ рд░реЛрдпрд╛, рд▓рдЧрднрдЧ рдореЗрд░реЗ Seeeduino рдлреЗрдВрдХ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛!
рдЖрдВрдЦреЗрдВ рдбрд░рддреА рд╣реИрдВ, рд╣рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВ!
рдореИрдВ рдЕрдкрдиреА рдорд╛рдирд╕рд┐рдХ рдкреАрдбрд╝рд╛ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рддреАрди рд▓рдВрдмреЗ рджрд┐рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЗрд╕реЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛!
Arduino рдФрд░ Atmega1280 рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╕рднреА рд╕рдВрднрд╡
рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреБрдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж,
рд╡рд┐рджреЗрд╢реА рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ
рдЕрдиреБрднрд╡ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдкрдврд╝рдирд╛ / рд▓рд┐рдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
AnalogRead рдореЗрдВ рд╕реБрдзрд╛рд░ ()
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void setup() {
int start ;
int i ;
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
Serial.begin(9600) ;
Serial.print("ADCTEST: ") ;
start = millis() ;
for (i = 0 ; i < 30000 ; i++)
analogRead(0) ;
Serial.print(millis() - start) ;
Serial.println(" msec (30000 calls)") ;
}
void loop() {
}
рдкрд░рд┐рдгрд╛рдо: рдкреВрд░реНрд╡
110 ╬╝s рдмрдирд╛рдо
18.2 ╬╝s рдХреА рдЧрддрд┐ред
рд╡реИрд╕реЗ, рдПрдЯрдореЗрдЧрд╛ рдПрдбреАрд╕реА рдХреА рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рд╕рд┐рд░реНрдл 16╬╝s рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ - рдПрдХ рдФрд░ рдЪрд┐рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдбреАрд╕реА рдХреЗ рд▓рд┐рдП рддреЗрдЬ, рдЬреЛ рдЧрддрд┐ рдХреЛ
0.2 рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рддрдХ рдХрдо рдХрд░ рджреЗрдЧрд╛ (рдиреАрдЪреЗ рдкрдврд╝реЗрдВ)
DigitalWrite рдореЗрдВ рд╕реБрдзрд╛рд░ ()
рдкреНрд░рддреНрдпреЗрдХ Arduino / Seeeduino / Feduino / Orduino / otherduino рдореЗрдВ рдкреЛрд░реНрдЯ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрдВрджрд░рдЧрд╛рд╣ 8 рдмрд┐рдЯреНрд╕ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд╕реЗрдбреАрдиреЛ рдкреЛрд░реНрдЯрд╛ рдкрд░ - 22 рд╕реЗ 30 рдлреАрдЯ рддрдХред рдЕрдм рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 22 рд╕реЗ 30 рдлреАрдЯ рддрдХ рдирд┐рдпрдВрддреНрд░рдг рдХрд░рддреЗ рд╣реИрдВ
PORTA = B00001010 (рдмрд┐рдЯ, рдкреИрд░ 23 рдФрд░ 25 - рдЙрдЪреНрдЪ)
рдпрд╛
PORTA = 10 (рджрд╢рдорд▓рд╡, рдЕрднреА рднреА)
рдкрд░рд┐рдгрд╛рдо = Res.реи
╬╝s рдмрдирд╛рдо резsрежреж
╬╝s , рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рдбрд┐рдЬрд┐рдЯрд▓рд╡реНрд░реАрдЯ () рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ
DigitalRead рдореЗрдВ рд╕реБрдзрд╛рд░ ()
рд▓рдЧрднрдЧ DigitalWrite () рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, INPUT рдХреЛ рдкреИрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдЕрдЧрд░ (PINA == B00000010) {...} (рдпрджрд┐ рдкреИрд░ 23 рдкрд░ рдореМрдЬреВрдж рд╣реИ рдФрд░ LOW 22 рдФрд░ 24-30 рдкреИрд░реЛрдВ рдкрд░ рдореМрдЬреВрдж рд╣реИ)
рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрджрд┐ ()
0.2 ╬╝s рдмрдирд╛рдо
1900 ╬╝s рд╣реИ , рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп digitalRead рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()
рдкреАрдбрдмреНрд▓реВрдПрдо рдореЙрдбреНрдпреВрд▓реЗрдЯрд░ рдореЗрдВ рд╕реБрдзрд╛рд░, рдпрд╛ рдПрдирд╛рд▓реЙрдЧ рд╡рд╛рдЗрдЯ ()
рддреЛ, рд╕рдмреВрдд рд╣реИ рдХрд┐ digitalRead () 0.2 ╬╝s рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ PWM рдореЙрдбреНрдпреВрд▓реЗрдЯрд░ рдореЗрдВ 8 рдмрд┐рдЯреНрд╕ рдХрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╣реЛрддрд╛ рд╣реИ, PWM рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдордп 51.2 ╬╝s рдмрдирд╛рдо 2000 ╬╝s рд╣реИред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
int PWM_time=32; //, analogWrite(PIN, 32)
for (int k=0;k<PWM_time) PORTA=B00000001;
for (int k=0;k<256-PWM_time) PORTA=B00000000;
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ 19 kHz рдмрдирд╛рдо
50 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде
рдПрдХ PWM
рдорд┐рд▓рд╛ редрд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рдирд╛
digitalWrite ()
1800mks рдерд╛, рдпрд╣
0.2mks рдмрди рдЧрдпрд╛
digitalRead ()
1900 ╬╝s рдерд╛, рдпрд╣
0.2 ╬╝s рд╣реЛ рдЧрдпрд╛
рдПрдирд╛рд▓реЙрдЧрд╡рд░реНрдЗрдЯ ()
2000 ╬╝s рдерд╛, рдпрд╣
51.2 ╬╝s рд╣реЛ рдЧрдпрд╛
analogRead ()
110 ╬╝s рдерд╛, рдпрд╣
18.2 ╬╝s рд╣реЛ рдЧрдпрд╛, рдФрд░ рдпрд╣
0.2 ╬╝s рддрдХ рд╕рдВрднрд╡ рд╣реИ