рддреАрди-рдЪрд░рдг рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди

рдореЗрд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рдореБрдЭреЗ рддреАрди-рдЪрд░рдг рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдЯрд░ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛ред рдЕрдЧрд▓рд╛, рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рдЗрдВрдЬрди рдкреНрд░рдЪрд╛рд░ рдЪрд╛рд░реНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рди рдХреЗрд╡рд▓ рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдпрд╛рдо рднреА рд╣реИ, рдФрд░ рдпрд╣ рдЦрд░реЛрдВрдЪ рд╕реЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 4 рд╡реЛрд▓реНрдЯ рд╕реЗ рдФрд░ 80 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░, рдЗрд╕рдХреА рдЕрдзрд┐рдХрддрдо рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЦреИрд░, рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рддреАрди-рдЪрд░рдг рдореЛрдЯрд░ рд╣реИ, рдЗрд╕рдореЗрдВ 3 рд╕рд╛рдЗрди рд▓рд╣рд░реЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 120 рдбрд┐рдЧреНрд░реА рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрдд рдпрд╣ рдереА рдХрд┐ рдЗрдВрдЬрди 80 рд╣рд░реНрдЯреНрдЬ рдкрд░ 30 рдПрд╕ рд╕реЗ рдХрдо рдореЗрдВ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рд╣рд░реНрдЯреНрдЬ (100 рд╣рд░реНрдЯреНрдЬ 100 рдПрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рд╕рд┐рд░реНрдл 3 рдкреАрдбрдмреНрд▓реВрдПрдо рд╣реИрдВ, рдФрд░ рдореИрдВрдиреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдмрд╛рд╣рд░реА рдбреАрдПрд╕реА рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВред

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реА рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдбрдмреНрд▓реВрдПрдо рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рдВрдХреЗрдд рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддред рд╕рд╛рдЗрди рд▓рд╣рд░ рд╢реВрдиреНрдп рд╕реЗ рдКрдкрд░ рд╣реЛрдЧреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрдзреЗ рддрд░рдВрдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣ рдХреИрд╕реЗ рдПрдХ рд╕рд╛рдЗрдирд╕реЛрдЗрдб рдиреНрдпреВрдирддрдо рдЖрдпрд╛рдо рдкрд░ рджрд┐рдЦреЗрдЧрд╛ред

рдЫрд╡рд┐
рдЫрд╡рд┐

рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрддрдоред

рдЫрд╡рд┐
рдЫрд╡рд┐

рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЖрдзрд╛ рд▓рд╣рд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
DCH = sin[ptrA]; DCH = DCH + 128; 

рдирдХрд╛рд░рд╛рддреНрдордХ:
 DCH = sin[ptrA]; DCH = 128 - DCH; 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдореЗрд░реА рд╕рд╛рдЗрди рд▓рд╣рд░ 128 рдХреЗ рдореВрд▓реНрдп рдХреЗ рдкрд╛рд╕ рдШреВрдо рд░рд╣реА рд╣реИ, рдЕрдм рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдФрд░ рдореВрд▓реНрдп рдХреЛ рд╢реВрдиреНрдп рдкрд░ 128 рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдпрд╣ рджреНрд╡рд┐рдзреНрд░реБрд╡реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд╡рд┐

рдПрдХ рд╕рд╛рдЗрди рд▓рд╣рд░ рдореЗрдВ 128 рдЕрдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдХрдо-рдкрд╛рд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдмрд╛рдж, рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рдХрдиреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдпрд╛рдо рднреА рдХрд╛рдлреА рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ (рдЧреБрдгрд╛рдВрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 80 рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ), рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдореВрд▓реНрдп рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдФрд░ рдХрдо рдмрд╛рдЗрдЯ рдХреЛ рддреНрдпрд╛рдЧреЗрдВ:

 ampS = amp[fctr]; DCH = DCH*ampS; DCH = DCH>>8; 

рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ TMR0 16-рдмрд┐рдЯ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕рдХреА рдЕрд╡рдзрд┐ рдХрд╛ рдореВрд▓реНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 100 рдорд╛рди (1 рд╕реЗ 100 рд╣рд░реНрдЯреНрдЬ рддрдХ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: 65535-рд╕реЗрдХрдВрдб / clk / smpl / Hz , рдЬрд╣рд╛рдВ Hz 1 рд╕реЗ 100 рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдирд╛рд░реНрд╡реЗ рдХреА рдХрдВрдкрдиреА рдмреА рдиреВрдбреНрд╕рди рдбреЗрдЯрд╛ рдХреЗ CC7A рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PIC17 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣рд╛рдВ рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рджреА рдЧрдИ рд╣реИред

  #define CDATA_START 0x300 #pragma cdata[CDATA_START] #pragma cdata[] = 0x153B, 0x8A9D, 0xB1BE, 0xC54E, 0xD10B, 0xD8DE, 0xDE75, 0xE2A7, 0xE5E9, 0xE885, 0xEAA7, 0xEC6F, 0xEDF0, 0xEF3A, 0xF058, 0xF153, 0xF230, 0xF2F4, 0xF3A4, 0xF442, 0xF4D1, 0xF553, 0xF5CA, 0xF637, 0xF69B, 0xF6F7, 0xF74D, 0xF79D, 0xF7E7, 0xF82C, 0xF86C, 0xF8A9, 0xF8E2, 0xF917, 0xF94A, 0xF97A, 0xF9A7, 0xF9D1, 0xF9FA, 0xFA21, 0xFA45, 0xFA68, 0xFA89, 0xFAA9, 0xFAC7, 0xFAE4, 0xFB00, 0xFB1B, 0xFB34, 0xFB4D, 0xFB65, 0xFB7B, 0xFB91, 0xFBA6, 0xFBBA, 0xFBCE, 0xFBE1, 0xFBF3, 0xFC04, 0xFC15, 0xFC26, 0xFC36, 0xFC45, 0xFC54, 0xFC62, 0xFC70, 0xFC7E, 0xFC8B, 0xFC98, 0xFCA4, 0xFCB1, 0xFCBC, 0xFCC8, 0xFCD3, 0xFCDE, 0xFCE8, 0xFCF2, 0xFCFC, 0xFD06, 0xFD10, 0xFD19, 0xFD22, 0xFD2B, 0xFD34, 0xFD3C, 0xFD44, 0xFD4C, 0xFD54, 0xFD5C, 0xFD63, 0xFD6B, 0xFD72, 0xFD79, 0xFD80, 0xFD86, 0xFD8D, 0xFD93, 0xFD9A, 0xFDA0, 0xFDA6 


рдХреНрд░рдорд╢рдГ рд╕рд╛рдЗрди рдорд╛рди рдФрд░ рдЖрдпрд╛рдо рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде 2 рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВред

 const unsigned char sin[128]= { 0, 7, 13, 18, 24, 31, 37, 43, 50, 54, 60, 65, 71, 76, 80, 85, 90, 94, 99, 101, 105, 109, 112, 115, 118, 119, 121, 123, 125, 126, 126, 127, 127, 127, 126, 126, 125, 123, 121, 119, 117, 115, 112, 109, 105, 101, 99, 94, 90, 85, 80, 76, 71, 65, 60, 54, 48, 43, 37, 31, 24, 18, 13, 7, 0, 7, 13, 18, 24, 31, 37, 43, 50, 54, 60, 65, 71, 76, 80, 85, 90, 94, 99, 101, 105, 109, 112, 115, 118, 119, 121, 123, 125, 126, 126, 127, 127, 127, 126, 126, 125, 123, 121, 119, 117, 115, 112, 109, 105, 101, 99, 94, 90, 85, 80, 76, 71, 65, 60, 54, 48, 43, 37, 31, 24, 18, 13, 7 }; const unsigned char amp[80]= { 86, 88, 90, 93, 95, 97, 99, 101, 103, 105, 108, 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 131, 133, 136, 138, 140, 142, 144, 146, 148, 151, 153, 155, 157, 159, 161, 164, 166, 168, 170, 172, 174, 176, 179, 181, 183, 185, 187, 189, 192, 194, 196, 198, 200, 202, 204, 207, 209, 211, 213, 215, 217, 220, 222, 224, 226, 228, 230, 232, 235, 237, 239, 241, 243, 245, 247, 250, 252, 254, 255 }; 


рдЯрд╛рдЗрдорд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред

 TMR0_service: { T0IF = 0; //    sPRODL = PRODL; sPRODH = PRODH; sTBLPTRH = TBLPTRH; sTBLPTRL = TBLPTRL; sFSR0 = FSR0; sFSR1 = FSR1; if (herz < 100) { if (ptrA == 127) TMR0_inc(); } TMR0_set(); if (ptrA == 127) ptrA = 0; if (ptrB == 127) ptrB = 0; if (ptrC == 127) ptrC = 0; ptrA++; //   .  1-  ptrB++; //   .  2-  ptrC++; //   .  3-  if (herz>=79) { if (ptrA < 64) { DCH = sin[ptrA]; //   DCH = DCH + 128; } else { DCH = sin[ptrA]; //   DCH = 128 - DCH; } PW1DCH = DCH; if (ptrB < 64) { DCH = sin[ptrB]; //   DCH = DCH + 128; } else { DCH = sin[ptrB]; //   DCH = 128 - DCH; } PW2DCH = DCH; if (ptrC < 64) { DCH = sin[ptrC]; //   DCH = DCH + 128; } else { DCH = sin[ptrC]; //   DCH = 128 - DCH; } PW3DCH = DCH; } else { fctr = herz-1; //   ampS = amp[fctr]; //   if (ptrA < 64) { DCH = sin[ptrA]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = DCH + 128; } else { DCH = sin[ptrA]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = 128 - DCH; } PW1DCH = DCH; if (ptrB < 64) { DCH = sin[ptrB]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = DCH + 128; } else { DCH = sin[ptrB]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = 128 - DCH; } PW2DCH = DCH; if (ptrC < 64) { DCH = sin[ptrC]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = DCH + 128; } else { DCH = sin[ptrC]; //   DCH = DCH*ampS; DCH = DCH>>8; DCH = 128 - DCH; } PW3DCH = DCH; } TBLPTRH = sTBLPTRH; TBLPTRL = sTBLPTRL; PRODL = sPRODL; PRODH = sPRODH; FSR0 = sFSR0; FSR1 = sFSR1; } 

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдоред

 void main() { GLINTD = 1; //   // --    --> TBLPTRL = 0; TBLPTRH = 3; // 0x300 #asm TABLRD 0,1,WREG ;      TLRD 1,sTMR0H ;       TABLRD 0,1,sTMR0L ;       #endasm // <-- // --  TMR0 --> T0IE = 1; //     TMR0 T0STA = 32; //   , 1:1 // <-- // --   --> PR1 = 253; //   = 32000000 / 4 / 253 = 31620  PW1DCL = PW2DCL = PW3DCL = 0; PW1DCH = 64; //   1-  PW2DCH = 46; //   2-  PW3DCH = 83; //   3-  // <-- // --   --> rtc = 0; herz = 1; //   1  ptrA = 0; //   1-  ptrB = 85; //   2-  ptrC = 42; //   3-  TMR1ON = 1; //  TMR1 PWM1ON = PWM2ON = PWM3ON = 1; //   TMR0_set(); //  TMR0 // <-- GLINTD = 0; //   while(1); } 


рдЯрд╛рдЗрдорд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджрд┐рдирдЪрд░реНрдпрд╛ред

 void TMR0_set() { TMR0L = sTMR0L; TMR0H = sTMR0H; } void TMR0_inc() { rtc++; //    if (rtc == herz) { rtc = 0; herz++; TBLPTRL = TBLPTRL - 1; #asm TABLRD 0,1,WREG ;      TLRD 1,sTMR0H ;       TABLRD 0,1,sTMR0L ;       #endasm sTBLPTRH = TBLPTRH; sTBLPTRL = TBLPTRL; } } 

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


All Articles