- டி.டி.எஸ் செயல்பாட்டு ஜெனரேட்டர் என்றால் என்ன?
- AD9833 செயல்பாட்டு ஜெனரேட்டர் ஐசியின் செயல்பாட்டைப் புரிந்து கொள்ளுங்கள்
- AD9833 அடிப்படையிலான செயல்பாட்டு ஜெனரேட்டரை உருவாக்க தேவையான கூறுகள்
- AD9833 அடிப்படையிலான செயல்பாடு ஜெனரேட்டர் - திட்ட வரைபடம்
- AD9833 அடிப்படையிலான செயல்பாடு ஜெனரேட்டர் - அர்டுயினோ குறியீடு
- AD9833 அடிப்படையிலான செயல்பாட்டு ஜெனரேட்டரை சோதிக்கிறது
- மேலும் மேம்பாடுகள்
நீங்கள் என்னைப் போன்ற ஒரு மின்னணு ஆர்வலராக இருந்தால், வெவ்வேறு மின்னணு சுற்றுகளுடன் மாற்றியமைக்க விரும்பினால், ஒழுக்கமான செயல்பாட்டு ஜெனரேட்டரை வைத்திருப்பது சில நேரங்களில் கட்டாயமாகும். ஆனால் ஒன்றை வைத்திருப்பது ஒரு சிக்கல், ஏனெனில் இதுபோன்ற அடிப்படை உபகரணங்கள் ஒரு அதிர்ஷ்டத்தை இழக்கக்கூடும். உங்கள் சொந்த சோதனை உபகரணங்களை உருவாக்குவது மலிவானது மட்டுமல்ல, உங்கள் அறிவை மேம்படுத்துவதற்கான சிறந்த வழியாகும்.
எனவே இந்த கட்டுரையில், ஆர்டுயினோ மற்றும் AD9833 டி.டி.எஸ் செயல்பாட்டு ஜெனரேட்டர் தொகுதிடன் ஒரு எளிய சிக்னல் ஜெனரேட்டரை உருவாக்கப் போகிறோம், இது வெளியீட்டில் அதிகபட்சம் 12 மெகா ஹெர்ட்ஸ் அதிர்வெண் கொண்ட சைன், சதுரம் மற்றும் முக்கோண அலைகளை உருவாக்க முடியும். இறுதியாக, எங்கள் அலைக்காட்டி உதவியுடன் வெளியீட்டு அதிர்வெண்ணை சோதிக்கப் போகிறோம்.
அடிப்படை அனலாக் சுற்றுகளின் உதவியுடன் ஒரு எளிய சைன் அலை ஜெனரேட்டர், ஒரு சதுர அலை ஜெனரேட்டர் மற்றும் ஒரு முக்கோண அலை ஜெனரேட்டரை நாங்கள் முன்பு கட்டியுள்ளோம். நீங்கள் சில அடிப்படை அலைவடிவ ஜெனரேட்டர் சுற்றுகளைத் தேடுகிறீர்களானால் அவற்றைப் பார்க்கலாம். மேலும், நீங்கள் AD9833 தொகுதியைப் பயன்படுத்தாமல் மலிவான ஆர்டுயினோ செயல்பாட்டு ஜெனரேட்டரை உருவாக்க விரும்பினால், நீங்கள் DIY Arduino Waveform Generator திட்டத்தைப் பார்க்கலாம்.
டி.டி.எஸ் செயல்பாட்டு ஜெனரேட்டர் என்றால் என்ன?
பெயர் குறிப்பிடுவதுபோல், ஒரு செயல்பாட்டு ஜெனரேட்டர் என்பது ஒரு குறிப்பிட்ட அலைவடிவத்தை அமைக்கும் போது ஒரு குறிப்பிட்ட அதிர்வெண்ணுடன் வெளியிடக்கூடிய ஒரு சாதனமாகும். எடுத்துக்காட்டாக, உங்கள் வெளியீட்டு அதிர்வெண் பதிலைச் சோதிக்க விரும்பும் எல்.சி வடிப்பான் உங்களிடம் இருப்பதைக் கருத்தில் கொள்ளுங்கள், ஒரு செயல்பாட்டு ஜெனரேட்டரின் உதவியுடன் அதை எளிதாக செய்யலாம். நீங்கள் செய்ய வேண்டியது, நீங்கள் விரும்பிய வெளியீட்டு அதிர்வெண் மற்றும் அலைவடிவத்தை அமைப்பது மட்டுமே, பின்னர் பதிலைச் சோதிக்க நீங்கள் அதைக் கீழே அல்லது மேலே செல்லலாம். இது ஒரு எடுத்துக்காட்டு, பட்டியல் தொடர்ந்து செல்லும்போது நீங்கள் இதைச் செய்யலாம்.
டி.டி.எஸ் என்பது நேரடி டிஜிட்டல் தொகுப்பைக் குறிக்கிறது. இது ஒரு வகை அலைவடிவ ஜெனரேட்டராகும், இது டிஜிட்டல் முதல் அனலாக் மாற்றிகள் (டிஏசி) தரையில் இருந்து ஒரு சமிக்ஞையை உருவாக்குகிறது. சைன் அலையை உருவாக்க இந்த முறை குறிப்பாகப் பயன்படுத்தப்படுகிறது. ஆனால் நாம் பயன்படுத்தும் ஐசி சதுரம் அல்லது முக்கோண அலை சமிக்ஞைகளை உருவாக்க முடியும். டி.டி.எஸ் சில்லுக்குள் நடந்த செயல்பாடுகள் டிஜிட்டல் ஆகும், எனவே இது அதிர்வெண்ணை மிக வேகமாக மாற்றலாம் அல்லது அது ஒரு சமிக்ஞையிலிருந்து மற்றொன்றுக்கு மிக வேகமாக மாறலாம். இந்த சாதனம் பரந்த அதிர்வெண் நிறமாலையுடன் சிறந்த அதிர்வெண் தீர்மானத்தைக் கொண்டுள்ளது.
AD9833 செயல்பாட்டு ஜெனரேட்டர் ஐசியின் செயல்பாட்டைப் புரிந்து கொள்ளுங்கள்
எங்கள் திட்டத்தின் மையத்தில் AD9833 புரோகிராம் செய்யக்கூடிய அலைவடிவ ஜெனரேட்டர் ஐசி உள்ளது, இது அனலாக் சாதனங்களால் வடிவமைக்கப்பட்டு உருவாக்கப்பட்டது. இது குறைந்த சக்தி, நிரல்படுத்தக்கூடிய அலைவடிவ ஜெனரேட்டர் ஆகும், இது அதிகபட்சமாக 12 மெகா ஹெர்ட்ஸ் அதிர்வெண் கொண்ட சைன், முக்கோண மற்றும் சதுர அலைகளை உற்பத்தி செய்யும் திறன் கொண்டது. இது ஒரு தனித்துவமான ஐ.சி ஆகும், இது வெளியீட்டு அதிர்வெண் மற்றும் கட்டத்தை ஒரு மென்பொருள் நிரலுடன் மாற்றும் திறன் கொண்டது. இது 3 கம்பி எஸ்பிஐ இடைமுகத்தைக் கொண்டுள்ளது, அதனால்தான் இந்த ஐசியுடன் தொடர்புகொள்வது மிகவும் எளிமையானது மற்றும் எளிதானது. இந்த ஐசியின் செயல்பாட்டு தொகுதி வரைபடம் கீழே காட்டப்பட்டுள்ளது.

இந்த ஐசியின் வேலை மிகவும் எளிது. மேலே உள்ள செயல்பாட்டு தொகுதி வரைபடத்தைப் பார்த்தால், 0 முதல் 2π வரை தொடங்கி, ஒரு சைன் அலையின் சாத்தியமான அனைத்து டிஜிட்டல் மதிப்புகளையும் சேமித்து வைப்பதே ஒரு கட்டக் குவிப்பான் என்பதை நாங்கள் கவனிப்போம். அடுத்து, எங்களிடம் SIN ROM உள்ளது, அதன் வேலை கட்டத்தின் தகவல்களை பின்னர் நேரடியாக வீச்சுடன் மாற்ற முடியும். SIN ROM டிஜிட்டல் கட்டத் தகவலை ஒரு பார்வை அட்டவணைக்கு முகவரியாகப் பயன்படுத்துகிறது மற்றும் கட்டத் தகவல்களை வீச்சாக மாற்றுகிறது. கடைசியாக, எங்களிடம் 10-பிட் டிஜிட்டல் முதல் அனலாக் மாற்றி உள்ளது, அதன் வேலை SIN ROM இலிருந்து டிஜிட்டல் தரவைப் பெற்று அதை தொடர்புடைய அனலாக் மின்னழுத்தங்களாக மாற்றுவதாகும், இதுதான் வெளியீட்டிலிருந்து நமக்குக் கிடைக்கும். வெளியீட்டில், ஒரு சிறிய மென்பொருள் குறியீட்டைக் கொண்டு இயக்க அல்லது முடக்கக்கூடிய சுவிட்சும் எங்களிடம் உள்ளது. அதைப் பற்றி பின்னர் கட்டுரையில் பேசுவோம்.மேலே நீங்கள் காணும் விவரங்கள் ஐ.சி.க்குள் என்ன நடக்கிறது என்பதற்கான மிக மோசமான பதிப்பாகும், மேலும் மேலே நீங்கள் காணும் பெரும்பாலான விவரங்கள் AD9833 தரவுத்தாள் மூலம் எடுக்கப்பட்டவை, மேலும் தகவலுக்கு நீங்கள் அதைப் பார்க்கலாம்.
AD9833 அடிப்படையிலான செயல்பாட்டு ஜெனரேட்டரை உருவாக்க தேவையான கூறுகள்
AD9833 அடிப்படையிலான செயல்பாட்டு ஜெனரேட்டரை உருவாக்க தேவையான கூறுகள் கீழே பட்டியலிடப்பட்டுள்ளன, இந்த சுற்று மிகவும் பொதுவான கூறுகளுடன் வடிவமைத்துள்ளோம், இது நகலெடுக்கும் செயல்முறையை மிகவும் எளிதாக்குகிறது.
- அர்டுடினோ நானோ - 1
- AD9833 DDS செயல்பாடு ஜெனரேட்டர் - 1
- 128 X 64 OLED காட்சி - 1
- பொதுவான ரோட்டரி குறியாக்கி - 1
- டிசி பீப்பாய் ஜாக் - 1
- LM7809 மின்னழுத்த சீராக்கி - 1
- 470uF மின்தேக்கி - 1
- 220uF மின்தேக்கி - 1
- 104pF மின்தேக்கி - 1
- 10 கே மின்தடை - 6
- தொட்டுணரக்கூடிய சுவிட்சுகள் - 4
- திருகு முனையம் 5.04 மிமீ - 1
- பெண் தலைப்பு - 1
- 12 வி சக்தி மூல - 1
AD9833 அடிப்படையிலான செயல்பாடு ஜெனரேட்டர் - திட்ட வரைபடம்
AD9833 மற்றும் Arduino அடிப்படையிலான செயல்பாடு ஜெனரேட்டருக்கான முழுமையான சுற்று வரைபடம் கீழே காட்டப்பட்டுள்ளது.

நாம் விரும்பிய அதிர்வெண்ணை உருவாக்க ஆர்டுயினோவுடன் AD9833 ஐப் பயன்படுத்தப் போகிறோம். இந்த பிரிவில், திட்ட விவரத்தின் உதவியுடன் அனைத்து விவரங்களையும் விளக்குவோம்; சுற்றுடன் என்ன நடக்கிறது என்பது பற்றிய ஒரு சுருக்கமான கண்ணோட்டத்தை தருகிறேன். AD9833 தொகுதிடன் தொடங்குவோம். AD9833 தொகுதி என்பது செயல்பாட்டு ஜெனரேட்டர் தொகுதி மற்றும் இது திட்டப்படி ஆர்டுயினோவுடன் இணைக்கப்பட்டுள்ளது. சுற்றுக்கு சக்தி அளிக்க, நாங்கள் ஒரு எல்எம் 7809 மின்னழுத்த சீராக்கி ஐ.சி.யைப் பயன்படுத்துகிறோம், இது ஒரு ஒழுக்கமான டிகூப்பிங் மின்தேக்கியுடன், இது அவசியம், ஏனெனில் விநியோக சத்தம் தேவையற்ற வெளியீட்டின் விளைவாக வெளியீட்டு சமிக்ஞையில் தலையிடக்கூடும். எப்போதும்போல, இந்த திட்டத்திற்கான மூளையாக Arduino செயல்படுகிறது. தொகுப்பு அதிர்வெண் மற்றும் பிற மதிப்புமிக்க தகவல்களைக் காட்ட, நாங்கள் 128 X 64 OLED காட்சி தொகுதியை இணைத்துள்ளோம். அதிர்வெண் வரம்பை மாற்ற, நாங்கள் மூன்று சுவிட்சுகளைப் பயன்படுத்துகிறோம். முதலாவது அதிர்வெண்ணை Hz ஆகவும், இரண்டாவது வெளியீட்டு அதிர்வெண்ணை KHz ஆகவும், மூன்றாவது அதிர்வெண் MHz ஆகவும் அமைக்கிறது, வெளியீட்டை இயக்க அல்லது முடக்க பயன்படுத்தக்கூடிய மற்றொரு பொத்தானும் எங்களிடம் உள்ளது. இறுதியாக, எங்களிடம் ரோட்டரி குறியாக்கி உள்ளது,அதனுடன் சில புல்-அப் மின்தடையையும் நாம் இணைக்க வேண்டும், இல்லையெனில் அந்த சுவிட்சுகள் வேலை செய்யாது, ஏனென்றால் பூலிங் முறையில் பொத்தானை அழுத்தும் நிகழ்வை நாங்கள் சரிபார்க்கிறோம். ரோட்டரி குறியாக்கி அதிர்வெண்ணை மாற்ற பயன்படுகிறது மற்றும் ரோட்டரி குறியாக்கியின் உள்ளே தொட்டுணரக்கூடிய சுவிட்ச் தொகுப்பு அலைவடிவத்தைத் தேர்ந்தெடுக்கப் பயன்படுகிறது.

AD9833 அடிப்படையிலான செயல்பாடு ஜெனரேட்டர் - அர்டுயினோ குறியீடு
இந்த திட்டத்தில் பயன்படுத்தப்படும் முழுமையான குறியீட்டை இந்த பக்கத்தின் கீழே காணலாம். தேவையான தலைப்பு கோப்புகள் மற்றும் மூல கோப்புகளைச் சேர்த்த பிறகு, நீங்கள் நேரடியாக Arduino கோப்பை தொகுக்க முடியும். கீழே கொடுக்கப்பட்டுள்ள இணைப்பிலிருந்து நீங்கள் ad9833 Arduino நூலகம் மற்றும் பிற நூலகங்களைப் பதிவிறக்கம் செய்யலாம், இல்லையெனில் நூலகத்தை நிறுவ பலகை மேலாளர் முறையைப் பயன்படுத்தலாம்.
- பில் வில்லியம்ஸ் எழுதிய AD9833 நூலகத்தைப் பதிவிறக்குக
- அடாஃப்ரூட் வழங்கிய SSD1306 OLED நூலகத்தைப் பதிவிறக்குக
- அடாஃப்ரூட் ஜிஎஃப்எக்ஸ் நூலகத்தைப் பதிவிறக்கவும்
ஐனோவில் உள்ள குறியீட்டின் விளக்கம் . கோப்பு பின்வருமாறு. முதலில், தேவையான அனைத்து நூலகங்களையும் சேர்ப்பதன் மூலம் தொடங்குவோம். நூலகம் AD9833 பல் தொகுதி முதல் ஓல்இடி நூலகம் தொடர்ந்து மற்றும் கணித நூலகம் எங்கள் கணக்கீடுகள் சில தேவைப்படுகிறது.
# அடங்கும் // AD9833 தொகுதிக்கான LIbrary # அடங்கும்
அடுத்து, பொத்தான்கள், சுவிட்ச், ரோட்டரி குறியாக்கி மற்றும் OLED களுக்கு தேவையான அனைத்து உள்ளீடு மற்றும் வெளியீட்டு ஊசிகளையும் வரையறுக்கிறோம்.
# SCREEN_WIDATA_PINH 128 // OLED காட்சி அகலத்தை பிக்சல்களில் வரையறுக்கவும் # SCREEN_HEIGHT 64 // OLED காட்சி உயரத்தை வரையறுக்கவும், # பிக்சல்களில் A6 // புஷ்பட்டன் Mhz இல் அதிர்வெண் அமைக்க # ENABLE_DISABLE_OUTPUT_PIN A7 // புஷ்பட்டன் வெளியீட்டை இயக்க / முடக்க # வரையறுக்கவும் / குறியாக்கியின் தரவு முள் # BTN_PIN 9 ஐ வரையறுக்கவும் // என்கோடரில் உள்ளக புஷ் பொத்தான்
அதன்பிறகு, இந்த குறியீட்டில் தேவையான அனைத்து மாறிகளையும் நாங்கள் வரையறுக்கிறோம். முதலில், ரோட்டரி குறியாக்கி மதிப்பை சேமிக்கும் ஒரு முழு எண் மாறி கவுண்டரை வரையறுக்கிறோம். அடுத்த இரண்டு மாறிகள் கடிகார பின் மற்றும் கடிகார பின்ஸ்டேட் குறியாக்கி திசையை புரிந்து கொள்ள தேவையான முள் சிலையை சேமிக்கின்றன. தற்போதைய டைமர்-கவுண்டர் மதிப்புகளை வைத்திருக்கும் நேர மாறுபாடு எங்களிடம் உள்ளது, இந்த மாறி பொத்தானை நீக்குவதற்கு பயன்படுத்தப்படுகிறது. அடுத்து, கையொப்பமிடப்படாத நீண்ட மாறி தொகுதி அதிர்வெண் எங்களிடம் உள்ளது, இது கணக்கிடப்படும் அதிர்வெண்ணைப் பயன்படுத்தப் போகிறது. அடுத்து, எங்களுக்குத் தாமத தாமதம் உள்ளது. இந்த தாமதத்தை தேவைக்கேற்ப சரிசெய்யலாம். அடுத்து, எங்களிடம் மூன்று பூலியன் மாறிகள் set_frequency_hz,set_frequency_Khz, மற்றும் set_frequency_Mhz இந்த மூன்று மாறிகள் தொகுதியின் தற்போதைய அமைப்பைத் தீர்மானிக்கப் பயன்படுத்தப்படுகின்றன. அதைப் பற்றி விரிவாக பின்னர் கட்டுரையில் பேசுவோம். அடுத்து, வெளியீட்டு அலைவடிவத்தின் நிலையை சேமிக்கும் மாறி எங்களிடம் உள்ளது, இயல்புநிலை வெளியீட்டு அலைவடிவம் ஒரு சைன் அலை. இறுதியாக, நாம் வேண்டும் encoder_btn_count வெளியீடு அலைவடிவம் அமைக்க பயன்படுத்தப்படும் குறியாக்கி-பொத்தானை எண்ணிக்கை வைத்திருக்கும் மாறி.
int counter = 1; // ரோட்டரி குறியாக்கி எண்ணாக கடிகாரத்தை மாற்றும்போது இந்த எதிர் மதிப்பு அதிகரிக்கும் அல்லது குறையும்; ரோட்டரி குறியாக்கி int கடிகார பின்ஸ்டேட் பயன்படுத்தும் முள் நிலைக்கு // ஒதுக்கிட; ரோட்டரி குறியாக்கி கையொப்பமிடாத நீண்ட நேரம் பயன்படுத்தும் முள் நிலைக்கு // வைத்திருப்பவர் = 0; // கையொப்பமிடாத நீண்ட தொகுதிக்கூறுகளைத் துண்டிக்கப் பயன்படுகிறது; // வெளியீட்டு அதிர்வெண் நீண்ட டிபவுன்ஸ் அமைக்கப் பயன்படுகிறது = 220; // தாமதத்தை நீக்குதல் btn_state; // AD98333 தொகுதி பூல் set_frequency_hz = 1 இன் வெளியீட்டை முடக்க பயன்படுகிறது; // AD9833 தொகுதி பூல் set_frequency_khz இன் இயல்புநிலை அதிர்வெண்; bool set_frequency_mhz; சரம் அலை தேர்வு = "SIN"; // தொகுதியின் தொடக்க அலைவடிவம் int encoder_btn_count = 0; // குறியாக்கி பொத்தானை அழுத்தவும் பயன்படுத்தப்படுகிறது அடுத்து, எங்கள் இரண்டு பொருள்களும் ஒன்று OLED காட்சிக்கும், மற்றொன்று AD9833 தொகுதிக்கும் உள்ளது.Adafruit_SSD1306 காட்சி (SCREEN_WIDATA_PINH, SCREEN_HEIGHT, & கம்பி, -1); AD9833 gen (FNC_PIN);
அடுத்து, எங்கள் அமைவு () செயல்பாடு உள்ளது, அந்த அமைவு செயல்பாட்டில், பிழைத்திருத்தத்திற்கான சீரியலை இயக்குவதன் மூலம் தொடங்குவோம். தொடக்க () முறையின் உதவியுடன் AD9833 தொகுதியை நாங்கள் துவக்குகிறோம். அடுத்து, ஒதுக்கப்பட்ட அனைத்து ரோட்டரி குறியாக்கி ஊசிகளையும் உள்ளீடாக அமைத்துள்ளோம். கடிகார முள் மதிப்பை கடிகார பின்ஸ்டேட் மாறியில் சேமிக்கிறோம், இது ரோட்டரி குறியாக்கிக்கு தேவையான படியாகும்.
அடுத்து, எல்லா பொத்தான் ஊசிகளையும் உள்ளீடாக அமைத்து, display.begin () முறையின் உதவியுடன் OLED காட்சியை இயக்குகிறோம் , மேலும் if if statement உடன் ஏதேனும் பிழைகள் இருக்கிறதா என்று சரிபார்க்கிறோம். அது முடிந்ததும், நாங்கள் காட்சியை அழித்து ஒரு தொடக்க ஸ்பிளாஸ் திரையை அச்சிடுகிறோம், நாங்கள் 2 விநாடிகளின் தாமதத்தை சேர்க்கிறோம், இது ஸ்பிளாஸ் திரையின் தாமதமாகும், இறுதியாக, நாங்கள் புதுப்பிப்பு_விளக்கை () செயல்பாட்டை அழைக்கிறோம், இது திரையை அழித்து புதுப்பிக்கிறது மீண்டும் காண்பி. Update_display () முறையின் விவரங்கள் பின்னர் கட்டுரையில் விவாதிக்கப்படும்.
void setup () {Serial.begin (9600); // சீரியலை இயக்கு @ 9600 பாட் gen.Begin (); // இது AD9833 பொருள் பின்மோட் (CLK_PIN, INPUT) என அறிவித்த பின்னர் முதல் கட்டளையாக இருக்க வேண்டும்; // ஊசிகளை உள்ளீட்டு பின்மோடாக அமைத்தல் (DATA_PIN, INPUT); pinMode (BTN_PIN, INPUT_PULLUP); கடிகார பின்ஸ்டேட் = டிஜிட்டல் ரீட் (CLK_PIN); pinMode (SET_FREQUENCY_HZ, INPUT); // ஊசிகளை உள்ளீட்டு பின்மோடாக அமைத்தல் (SET_FREQUENCY_KHZ, INPUT); pinMode (SET_FREQUENCY_MHZ, INPUT); pinMode (ENABLE_DISABLE_OUTPUT_PIN, INPUT); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) x // 128x64 Serial.println (F ("SSD1306 ஒதுக்கீடு தோல்வியுற்றது") க்கான 0x3D முகவரி; for (;;); } display.clearDisplay (); // திரையை அழிக்கவும் display.setTextSize (2); // உரையின் அளவை அமைக்கவும் display.setTextColor (WHITE); // செட் எல்சிடி கலர் டிஸ்ப்ளே.செட் கர்சர் (30, 0); // கர்சர் நிலையை அமைக்கவும் display.println ("AD9833"); // இந்த உரை காட்சியை அச்சிடுக.setCursor (17, 20); // கர்சர் நிலை காட்சி display.println ("செயல்பாடு") அமைக்கவும்; // இந்த உரை display.setCursor (13, 40) ஐ அச்சிடுக; // கர்சர் நிலை காட்சி display.println ("ஜெனரேட்டர்") அமைக்கவும்; // இந்த உரையை அச்சிடவும் display.display (); // காட்சி தாமதத்தை புதுப்பிக்கவும் (2000); // 2 எஸ்இசி புதுப்பிப்பு_விளையாடலின் தாமதம் (); // அழைப்பு புதுப்பிப்பு_ காட்சி செயல்பாடு}
அடுத்து, எங்கள் லூப் () செயல்பாடு உள்ளது, அனைத்து முக்கிய செயல்பாடுகளும் லூப் பிரிவில் எழுதப்பட்டுள்ளன.
முதலில், ரோட்டரி குறியாக்கியின் கடிகார முள் படித்து, நாம் முன்பு அறிவித்த கடிகார பின் மாறியில் சேமிக்கிறோம். அடுத்து, if அறிக்கையில், முள் முந்தைய மதிப்பு மற்றும் முள் தற்போதைய மதிப்பு ஒத்ததா இல்லையா என்பதை நாங்கள் சரிபார்க்கிறோம், மேலும் முள் தற்போதைய மதிப்பையும் சரிபார்க்கிறோம். இது அனைத்தும் உண்மையாக இருந்தால், தரவு முள் சரிபார்க்கிறோம், உண்மை என்றால் குறியாக்கி எதிரெதிர் திசையில் சுழல்கிறது, மேலும் எதிர் - கட்டளையின் உதவியுடன் எதிர் மதிப்பைக் குறைக்கிறோம். இல்லையெனில் எதிர் ++ கட்டளையுடன் எதிர் மதிப்பை அதிகரிக்கிறோம். இறுதியாக, நாம் மற்றொரு வைத்து என்றால் 1. அடுத்து குறைந்தபட்ச மதிப்பு அமைக்க அறிக்கை, நாம் புதுப்பிக்க clockPinState மின்னோட்டத்துடன் clockPinஎதிர்கால பயன்பாட்டிற்கான மதிப்பு.
void loop () {clockPin = DigitalRead (CLK_PIN); if (கடிகார பின்! = கடிகார பின்ஸ்டேட் && கடிகாரம் பின் == 1) {if (டிஜிட்டல் ரீட் (DATA_PIN)! = கடிகார பின்) {எதிர் -; } else {counter ++; // என்கோடர் CW ஐ சுழற்றுகிறது, எனவே அதிகரிப்பு} if (counter <1) counter = 1; Serial.println (எதிர்); update_display (); }
அடுத்து, ஒரு பொத்தானை அழுத்துவதைக் கண்டறிய எங்கள் குறியீடு உள்ளது. இந்த பிரிவில், குறியீட்டுக்குள் உள்ள பொத்தானைக் கண்டறிந்தோம் என்றால், சில அறிக்கைகள் இருந்தால், (டிஜிட்டல் ரீட் (BTN_PIN) == குறைந்த && மில்லிஸ் () - நேரம்> கண்டனம்), இந்த அறிக்கையில், முதலில் பொத்தானைச் சரிபார்க்கிறோம் முள் குறைவாக இருக்கிறதா இல்லையா, அது குறைவாக இருந்தால், அது அழுத்தும். இரண்டு அறிக்கைகளும் உண்மையாக இருந்தால், மீண்டும் டைமர் மதிப்பை சரிபார்ப்பு தாமதத்துடன் சரிபார்க்கிறோம், பின்னர் அதை ஒரு வெற்றிகரமான பொத்தானை அழுத்த நடவடிக்கை என்று அறிவிக்கிறோம் என்றால், நாம் குறியாக்கி_பிடிஎன்_கவுண்ட் மதிப்பை அதிகரிக்கிறோம். அடுத்து, அதிகபட்ச எதிர் மதிப்பை 2 ஆக அமைப்பதற்கான அறிக்கையை நாங்கள் அறிவிக்கிறோம், வெளியீட்டு அலைவடிவத்தை அமைக்க அதைப் பயன்படுத்துவதால் எங்களுக்கு இது தேவை .அறிக்கைகள் அவ்வாறு செய்தால் தொடர்ச்சியான மூன்று, மதிப்பு பூஜ்ஜியமாக இருந்தால், சைன் அலைவடிவம் தேர்ந்தெடுக்கப்படுகிறது, அது ஒன்று என்றால், அது ஒரு சதுர அலை, மற்றும் மதிப்பு 2 என்றால், அது ஒரு முக்கோண அலை. இந்த மூன்று அறிக்கைகளிலும், புதுப்பிப்பு_விளையாட்டு () செயல்பாட்டுடன் காட்சியைப் புதுப்பிக்கிறோம். இறுதியாக, தற்போதைய டைமர் எதிர் மதிப்புடன் நேர மாறியை புதுப்பிக்கிறோம்.
// நாம் ஒரு குறைந்த சமிக்ஞையைக் கண்டறிந்தால், (டிஜிட்டல் ரீட் (BTN_PIN) == LOW && மில்லிஸ் () - நேரம்> குறைவு) {encoder_btn_count ++; // மதிப்புகளை அதிகரிக்கவும் (encoder_btn_count> 2) // மதிப்பு 2 ஐ விட அதிகமாக இருந்தால் அதை 0 {encoder_btn_count = 0 ஆக மீட்டமைக்கவும்; } if (encoder_btn_count == 0) {// மதிப்பு 0 என்றால் சைன் அலை தேர்ந்தெடுக்கப்பட்டால் waveSelect = "SIN"; // பாவி மதிப்புடன் சரம் மாறியைப் புதுப்பிக்கவும் update_display (); // காட்சியைப் புதுப்பிக்கவும்} if (encoder_btn_count == 1) {// மதிப்பு 1 சதுர அலை எனில் அலை தேர்வு செய்யப்பட்டால் தேர்வு = "SQR"; // சரம் மாறியை SQR மதிப்பு update_display () உடன் புதுப்பிக்கவும்; // காட்சியைப் புதுப்பிக்கவும்} if (encoder_btn_count == 2) {// மதிப்பு 1 என்றால் முக்கோண அலை தேர்ந்தெடுக்கப்பட்டால் அலை தேர்வு = "TRI"; // TRI மதிப்பு update_display () உடன் சரம் மாறியைப் புதுப்பிக்கவும்;// காட்சியைப் புதுப்பிக்கவும்} time = மில்லிஸ் (); // நேர மாறியைப் புதுப்பிக்கவும்}
அடுத்து, அனைத்து பொத்தான்களையும் ஒரு தாமத தாமதத்துடன் அமைக்க தேவையான அனைத்து குறியீடுகளையும் வரையறுக்கிறோம். Arduino இன் அனலாக் ஊசிகளுடன் பொத்தான்கள் இணைக்கப்பட்டுள்ளதால், அனலாக் வாசிப்பு மதிப்பு 30 க்கு கீழே வந்தால் ஒரு பொத்தானை அழுத்தவும், பின்னர் அதன் வெற்றிகரமான பொத்தானை அழுத்தவும் கண்டுபிடிப்போம், மேலும் 200 ms க்கு காத்திருக்கிறோம். இது உண்மையான பொத்தானை அழுத்தினால் அல்லது சத்தமாக இருக்கிறதா என்று சோதிக்கவும். இந்த அறிக்கை உண்மையாக இருந்தால், செயல்பாட்டு ஜெனரேட்டரின் Hz, Khz மற்றும் Mhz மதிப்புகளை அமைக்க பயன்படும் மதிப்புகளுடன் பூலியன் மாறிகள் ஒதுக்குகிறோம். அடுத்து, காட்சியைப் புதுப்பித்து, நேர மாறியைப் புதுப்பிக்கிறோம். Arduino உடன் இணைக்கப்பட்ட நான்கு பொத்தான்களுக்கும் நாங்கள் அதை செய்கிறோம்.
if (அனலாக் ரீட் (SET_FREQUENCY_HZ) <30 && மில்லிஸ் () - நேரம்> குறைத்தல்) {set_frequency_hz = 1; // புதுப்பித்தல் பூலியன் மதிப்புகள் set_frequency_khz = 0; set_frequency_mhz = 0; update_display (); // காட்சி நேரத்தைப் புதுப்பிக்கவும் = மில்லிஸ் (); // நேர மாறியைப் புதுப்பிக்கவும்} if (அனலாக் ரீட் (SET_FREQUENCY_KHZ) <30 && மில்லிஸ் () - நேரம்> குறைத்தல்) {set_frequency_hz = 0; // புதுப்பித்தல் பூலியன் மதிப்புகள் set_frequency_khz = 1; set_frequency_mhz = 0; moduleFrequency = எதிர் * 1000; update_display (); // காட்சி நேரத்தைப் புதுப்பிக்கவும் = மில்லிஸ் (); // நேர மாறியைப் புதுப்பிக்கவும்} if (அனலாக் ரீட் (SET_FREQUENCY_MHZ) <30 && மில்லிஸ் () - நேரம்> குறைத்தல்) 0; // புதுப்பித்தல் பூலியன் மதிப்புகள் set_frequency_khz = 0; set_frequency_mhz = 1; moduleFrequency = எதிர் * 1000000; update_display ();// காட்சி நேரத்தைப் புதுப்பிக்கவும் = மில்லிஸ் (); // நேர மாறியைப் புதுப்பிக்கவும்} if (அனலாக் ரீட் (ENABLE_DISABLE_OUTPUT_PIN) <30 && மில்லிஸ் () - நேரம்> குறைவு) {// அனலாக் முள் சரிபார்க்க தாமதத்துடன் சரிபார்க்கவும் btn_state =! btn_state; // பொத்தானை நிலை மாற்றவும் gen.EnableOutput (btn_state); // பொத்தான் நிலையைப் பொறுத்து செயல்பாட்டு ஜெனரேட்டரின் வெளியீட்டை இயக்கவும் / முடக்கவும் update_display (); // காட்சி நேரத்தைப் புதுப்பிக்கவும் = மில்லிஸ் (); // நேர மாறியைப் புதுப்பிக்கவும்}}// நேர மாறியைப் புதுப்பிக்கவும்}}// நேர மாறியைப் புதுப்பிக்கவும்}}
இறுதியாக, எங்கள் update_display () செயல்பாடு உள்ளது. இந்த செயல்பாட்டில், இந்த காட்சியைப் புதுப்பிப்பதை விட நாங்கள் அதிகம் செய்தோம், ஏனெனில் காட்சியின் ஒரு குறிப்பிட்ட பகுதியை OLED இல் புதுப்பிக்க முடியாது. அதைப் புதுப்பிக்க, நீங்கள் அதை புதிய மதிப்புகளுடன் மீண்டும் பூச வேண்டும். இது குறியீட்டு செயல்முறையை மிகவும் கடினமாக்குகிறது.
இந்த செயல்பாட்டின் உள்ளே, காட்சியை அழிப்பதன் மூலம் தொடங்குவோம். அடுத்து, எங்களுக்கு தேவையான உரை அளவை அமைக்கிறோம். அதன்பிறகு, எங்கள் கர்சர் மற்றும் அச்சிடப்பட்ட செயல்பாட்டு ஜெனரேட்டரை display.println ("செயல்பாட்டு செயல்பாடு") உடன் அமைத்துள்ளோம் ; கட்டளை. Display.setCursor (0, 20) செயல்பாட்டின் உதவியுடன் மீண்டும் உரை அளவை 2 ஆகவும், கர்சரை (0,20) ஆகவும் அமைத்துள்ளோம்.
இது எந்த அலைக்கான தகவலை அச்சிடுகிறோம்.
display.clearDisplay (); // முதலில் காட்சி காட்சியை அழிக்கவும். செட் டெக்ஸ்ட் சைஸ் (1); // தொகுப்பு உரை அளவு display.setCursor (10, 0); // கர்சர் நிலையை அமைக்கவும் display.println ("செயல்பாட்டு ஜெனரேட்டர்"); // text.setTextSize (2); // உரை அளவை அமைக்கவும் display display.setCursor (0, 20); // கர்சர் நிலையை அமைக்கவும்
அடுத்து, அதிர்வெண் விவரங்களுக்கான பூலியன் மாறிகளைச் சரிபார்த்து, தொகுதி அதிர்வெண் மாறியில் மதிப்பைப் புதுப்பிக்கிறோம். Hz, kHz மற்றும் MHz மதிப்புகளுக்கு இதைச் செய்கிறோம். அடுத்து, அலை தேர்வு மாறியைச் சரிபார்த்து, எந்த அலை தேர்ந்தெடுக்கப்பட்டிருக்கிறது என்பதை அடையாளம் காணலாம். இப்போது, அலை வகை மற்றும் அதிர்வெண்ணை அமைப்பதற்கான மதிப்புகள் எங்களிடம் உள்ளன.
if (set_frequency_hz == 1 && set_frequency_khz == 0 && set_frequency_mhz == 0) {// Hz இல் அதிர்வெண்ணை அமைப்பதற்கான பொத்தானை அழுத்தினால் சரிபார்க்கவும் moduleFrequency = counter; // தற்போதைய எதிர் மதிப்புடன் தொகுதி அதிர்வெண் மாறியைப் புதுப்பிக்கவும்} if (set_frequency_hz == 0 && set_frequency_khz == 1 && set_frequency_mhz == 0) K // KHz இல் அதிர்வெண் அமைப்பதற்கான பொத்தானை அழுத்தினால் சரிபார்க்கவும் moduleFrequency = counter * 1000; // தற்போதைய எதிர் மதிப்புடன் தொகுதி அதிர்வெண் மாறியைப் புதுப்பிக்கவும், ஆனால் அதை KHZ இல் அமைக்க 1000 ஐ பெருக்குகிறோம்} if (set_frequency_hz == 0 && set_frequency_khz == 0 && set_frequency_mhz == 1) M // MHz இல் அதிர்வெண் அமைப்பதற்கான பொத்தானை அழுத்தினால் சரிபார்க்கவும் = எதிர் * 1000000; if (moduleFrequency> 12000000) {moduleFrequency = 12000000;// 12 மெகா ஹெர்ட்ஸ் எதிர் = 12 என்று அதிர்வெண் grater ஆக விட வேண்டாம்; wave} if (waveSelect == "SIN") {// சைன் அலை தேர்ந்தெடுக்கப்பட்டது display.println ("SIN"); gen.ApplySignal (SINE_WAVE, REG0, moduleFrequency); Serial.println (moduleFrequency); } if (waveSelect == "SQR") {// சதுர அலை தேர்ந்தெடுக்கப்பட்டது display.println ("SQR"); gen.ApplySignal (SQUARE_WAVE, REG0, moduleFrequency); Serial.println (moduleFrequency); } if (waveSelect == "TRI") {// ட்ரை அலை தேர்ந்தெடுக்கப்பட்டது display.println ("TRI"); gen.ApplySignal (TRIANGLE_WAVE, REG0, moduleFrequency); // AD9833 தொகுதியைப் புதுப்பிக்கவும். Serial.println (moduleFrequency); }} if (waveSelect == "SQR") {// சதுர அலை தேர்ந்தெடுக்கப்பட்டது display.println ("SQR"); gen.ApplySignal (SQUARE_WAVE, REG0, moduleFrequency); Serial.println (moduleFrequency); } if (waveSelect == "TRI") {// ட்ரை அலை தேர்ந்தெடுக்கப்பட்டது display.println ("TRI"); gen.ApplySignal (TRIANGLE_WAVE, REG0, moduleFrequency); // AD9833 தொகுதியைப் புதுப்பிக்கவும். Serial.println (moduleFrequency); }} if (waveSelect == "SQR") {// சதுர அலை தேர்ந்தெடுக்கப்பட்டது display.println ("SQR"); gen.ApplySignal (SQUARE_WAVE, REG0, moduleFrequency); Serial.println (moduleFrequency); } if (waveSelect == "TRI") {// ட்ரை அலை தேர்ந்தெடுக்கப்பட்டது display.println ("TRI"); gen.ApplySignal (TRIANGLE_WAVE, REG0, moduleFrequency); // AD9833 தொகுதியைப் புதுப்பிக்கவும். Serial.println (moduleFrequency); }
நாங்கள் மீண்டும் கர்சரை அமைத்து எதிர் மதிப்புகளைப் புதுப்பிக்கிறோம். காட்சியில் அதிர்வெண் வரம்பைப் புதுப்பிக்க மீண்டும் பூலியனைச் சரிபார்க்கிறோம், இதை நாங்கள் செய்ய வேண்டும், ஏனெனில் OLED இன் செயல்பாட்டுக் கொள்கை மிகவும் வித்தியாசமானது.
display.setCursor (45, 20); display.println (எதிர்); // காட்சியில் எதிர் தகவலை அச்சிடுக. if (set_frequency_hz == 1 && set_frequency_khz == 0 && set_frequency_mhz == 0) {display.setCursor (90, 20); display.println ("Hz"); டிஸ்ப்ளே டிஸ்ப்ளேவில் // ஹெர்ட்ஸ் அச்சிடுங்கள். // எல்லா தொகுப்பும் காட்சியைப் புதுப்பிக்கும்போது} if (set_frequency_hz == 0 && set_frequency_khz == 1 && set_frequency_mhz == 0) {display.setCursor (90, 20); display.println ("Khz"); display.display (); // எல்லா தொகுப்பும் காட்சியைப் புதுப்பிக்கும்போது} if (set_frequency_hz == 0 && set_frequency_khz == 0 && set_frequency_mhz == 1) {display.setCursor (90, 20); display.println ("Mhz"); display.display (); // எல்லாவற்றையும் அமைக்கும் போது காட்சி புதுப்பிக்கப்படும்}
அடுத்து, OLED க்கு வெளியீட்டை / வெளியீட்டை அச்சிட பொத்தானை அழுத்த மாறியை சரிபார்க்கிறோம். OLED தொகுதி காரணமாக மீண்டும் இதைச் செய்ய வேண்டும்.
if (btn_state) {display.setTextSize (1); display.setCursor (65, 45); display.print ("வெளியீடு ஆன்"); // காட்சி வெளியீட்டில் வெளியீட்டை அச்சிடுங்கள். காட்சி (); display.setTextSize (2); } else {display.setTextSize (1); display.setCursor (65, 45); display.print ("வெளியீடு முடக்கு"); // காட்சி காட்சிக்கு வெளியீட்டை அச்சிடுங்கள். காட்சி (); display.setTextSize (2); }
இது எங்கள் குறியீட்டு செயல்முறையின் முடிவைக் குறிக்கிறது. இந்த கட்டத்தில் நீங்கள் குழப்பமடைந்துவிட்டால், மேலும் புரிந்துகொள்ள குறியீட்டில் உள்ள கருத்துகளை நீங்கள் சரிபார்க்கலாம்.
AD9833 அடிப்படையிலான செயல்பாட்டு ஜெனரேட்டரை சோதிக்கிறது
சுற்று சோதிக்க, மேலே உள்ள அமைப்பு பயன்படுத்தப்படுகிறது. நீங்கள் பார்க்க முடியும் என, நாங்கள் 12 வி டிசி பவர் அடாப்டரை டிசி பீப்பாய் ஜாக் உடன் இணைத்துள்ளோம், மேலும் ஹான்டெக் ஆஸில்லோஸ்கோப்பை சுற்று வெளியீட்டில் இணைத்துள்ளோம். வெளியீட்டு அதிர்வெண்ணைக் காட்சிப்படுத்தவும் அளவிடவும் அலைக்காட்டி மடிக்கணினியுடன் இணைத்துள்ளோம்.
இது முடிந்ததும், ரோட்டரி குறியாக்கியின் உதவியுடன் வெளியீட்டு அதிர்வெண்ணை 5Khz ஆக அமைத்து, வெளியீட்டு சைன் அலையை சோதித்துப் பார்த்தால் போதும், இது வெளியீட்டில் 5Khz சைன் அலை.

அடுத்து, வெளியீட்டு அலைவடிவத்தை முக்கோண அலைக்கு மாற்றியுள்ளோம், ஆனால் அதிர்வெண் அப்படியே இருந்தது, வெளியீட்டு அலைவடிவம் கீழே காட்டப்பட்டுள்ளது.

பின்னர் வெளியீட்டை ஒரு சதுர அலைக்கு மாற்றி வெளியீட்டைக் கவனித்தோம், அது சரியான சதுர அலை.

நாங்கள் அதிர்வெண் வரம்புகளையும் மாற்றி வெளியீட்டை சோதித்தோம், அது நன்றாக வேலை செய்கிறது.
மேலும் மேம்பாடுகள்
இந்த சுற்று கருத்துக்கு ஒரு சான்று மட்டுமே, மேலும் மேம்பாடுகள் தேவை. முதலில், வெளியீட்டிற்கு எங்களுக்கு ஒரு நல்ல தரமான பிசிபி மற்றும் சில நல்ல தரமான பிஎன்சி இணைப்பு தேவை, இல்லையெனில் அதிக அதிர்வெண்ணைப் பெற முடியாது. தொகுதியின் வீச்சு மிகக் குறைவு, எனவே அதை மேம்படுத்த, வெளியீட்டு மின்னழுத்தத்தை பெருக்க சில ஒப்-ஆம்ப் சுற்றுகள் தேவை. வெளியீட்டு வீச்சு மாறுபடுவதற்கு ஒரு பொட்டென்டோமீட்டரை இணைக்க முடியும். சமிக்ஞையை ஈடுசெய்வதற்கான ஒரு சுவிட்சை இணைக்க முடியும்; இது அவசியம் இருக்க வேண்டிய அம்சமாகும். மேலும், குறியீடு கொஞ்சம் தரமற்றது என்பதால் நிறைய முன்னேற்றம் தேவை. இறுதியாக, OLED காட்சிகள் மாற்றப்பட வேண்டும், இல்லையெனில் எளிதில் புரிந்துகொள்ளக்கூடிய குறியீட்டை எழுத முடியாது.
இது இந்த டுடோரியலின் முடிவைக் குறிக்கிறது, நீங்கள் கட்டுரையை விரும்பினீர்கள், புதியதைக் கற்றுக்கொண்டீர்கள் என்று நம்புகிறேன். கட்டுரை தொடர்பாக ஏதேனும் கேள்விகள் இருந்தால், அவற்றை கீழே உள்ள கருத்துப் பிரிவில் விடலாம் அல்லது எங்கள் எலக்ட்ரானிக்ஸ் மன்றத்தைப் பயன்படுத்தலாம்.
