Форум РадиоКот • Просмотр темы - Простейший ГКЧ на AD9850 и Arduino Nano 328
Сообщения без ответов | Активные темы
Страница 18 из 21
[ Сообщений: 409 ]
... , , , , , ,
Автор
Сообщение
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Вс апр 19, 2020 06:29:53
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
С двух входов однозначно удобнее. Даже без компа можно АЧХ нарисовать на миллиметровке, как в школе учили. Только энкодер накручивай в нужной полосе частот
Я понимаю Ваше желание разработать что то оригинальное, но еще раз повторяю.
Основная концепция данного проекта, минимум нагрузки на МК и максимум нагрузка на ПК. Перечитайте мое сообщение от Сб апр 18, 2020 07:36:02
Добавлено after 51 minute 50 seconds: Лучше Кп считать на МК и передавать на комп, а там к децибеллам приводить.
А чем вы будете детектировать сигнал -80дб чтобы затем завести на АЦП?
Я уже писал, что в данной теме обсуждался вариант с логарифмическим усилителем. Характеристику привел в предыдущих сообщениях. Обсуждался вопрос с подключением и шкалой. В программе для ПК (в разделе калибровка) предусмотрена возможность установки различных шкал.
Вы же упорно пытаетесь засунуть в МК с небольшой памятью и слабыми вычислительными возможностями задачи которые
значительно проще решить на ПК. Повторяю вопрос, сколько стоит дисплей 2.4" ? Не дождался ответа, зашел на Ali 423,62 руб. Неплохая добавка чтобы поставить "пятое колесо".
Тема называется "
Простейший ГКЧ на AD9850 и Arduino Nano 328", а не кто больше усложнит схему и программу МК.
Зачем усложнять схему, повышать стоимость оборудования если необходимые задачи можно решить на ПК.
Передавай частоту и значение АЦП на ПК и делай с ними что хочешь.
Вернуться наверх
Реклама
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Пн апр 20, 2020 04:58:35
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
Появилось немного времени, повнимательней перечитал Ваши сообщения.
Немного причесал скетч
Код:
//для проекта UA3REO-Sweep-Analyzer ссылки на оригинальный проект https://ua3reo.ru/izmerenie-parametrov-filtrov-i-konturov-na-arduino/ //GitHub https://github.com/XGudron/UA3REO-Sweep-Analyzer
Я не собираюсь обсуждать проект UA3REO-Sweep-Analyzer, здесь обсуждается "Простейший ГКЧ на AD9850 и Arduino Nano 328".
Если есть желания
в рамках данной темы выполнить адаптацию lgt8f328p можем продолжить. Если Вы собрались дорабатывать проект UA3REO-Sweep-Analyzer то переходите на его сайт или создавайте отдельную тему.
Вернуться наверх
Реклама
maxlab
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Пт апр 24, 2020 08:52:18
Потрогал лапой паяльник
Карма: 7
Рейтинг сообщений: 26
Зарегистрирован: Вт апр 23, 2013 22:21:18Сообщений: 377Откуда: KUBAN, Krasnodar
Рейтинг сообщения: 0
Цитата:
Если есть желания в рамках данной темы выполнить адаптацию lgt8f328p можем продолжить.
Желание есть. Больше десктопов хороших и разных... На борту еще 17кб памяти чтобы реализовать ваш протокол взаимодействия.
Но у меня еще есть идея улучшить характеристики "Простейшего ГКЧ ... ". Я упоминал что на борту lgt8f328p есть прецизионный DAC. Думаю как его приспособить для управления AD9850-51 по ноге RSET чтобы получить 0.5v на выходе во всей полосе от 0 до 40 мгц без лишней обвески. Для атмеги328 наверно можно ШИМ заюзать с любой свободной ноги PWM
_________________ Девице - Device
Вернуться наверх
Реклама
maxlab
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Вт апр 28, 2020 01:38:47
Потрогал лапой паяльник
Карма: 7
Рейтинг сообщений: 26
Зарегистрирован: Вт апр 23, 2013 22:21:18Сообщений: 377Откуда: KUBAN, Krasnodar
Рейтинг сообщения: 0
Адаптировал скетч под программу Автора ... с изъятиями и сокращениями. Только режим ГКЧ. Картинку показывает, но чтобы совсем правильно, нужны референсы на 1.024/2.048/4.096 и 2.56 для меги 2560. Заодно и переключатель разрядности АЦП 8/10/12 не мешало бы.
Спойлер Код:
#include <SPI.h> #include "OneButton.h" #include <avr/pgmspace.h> #define ST7735_CS A3 #define ST7735_RST A4 #define ST7735_A0 6 #define ENC_CLK 2 #define ENC_DT A5 #define ENC_SW 3 #define W_CLK 7 #define FQ_UD 8 #define DATA 9 #define RESET A2 #define DAC 4 #define INP_VAL A0 #define INP_OUT A1 #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } #define MULTIPLAY 0 #define MENU_MODE 1 #define SWIP_MODE 2 #define R6DCZ_MODE 3 #define KVN234_MODE 4 #define GEN_MODE 5 #define KVN_START_STOP 6 #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x0400 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define VIOLET 0xEC1D #define AQUA 0x07FF #define YELLOW_GREEN 0x9E66 #define PURPLE 0x8010 String serial_readline = ""; const int bSize = 64; char Buffer[bSize]; long freq = 3500000; const uint16_t scr_width = 128; const uint16_t scr_height = 128; uint16_t OffSetX = 2; uint16_t OffSetY = 1; int enc_FreqStep = 1; volatile unsigned long previousMillis; const byte En_speed_1 = 50; const byte En_speed_2 = 100; const int Step_int_1 = 100; const int Step_int_2 = 10; long enc_StepMultip = 1; int enc_ALast; int enc_AVal; float vin = 0; float vout = 0; float ratio = 0; long lvin; String freq_string_hz; String freq_string_khz; String freq_string_mhz; byte fl_change = true; byte menuLevel; byte sw_Delay; long fr_Start; long fr_End; long fr_Step; typedef enum { scr_normal = 0, scr_CW = 1, scr_CCW = 2, scr_180 = 3 } ScrOrientation_TypeDef; typedef union { int i; byte b[2]; } adc_type; typedef union { long l; byte b[4]; } frq_type; OneButton button(ENC_SW, true); void setup() { switchToExtQuartz(); pinMode(DAC, ANALOG); pinMode(ST7735_RST, OUTPUT); pinMode(ST7735_CS, OUTPUT); pinMode(ST7735_A0, OUTPUT); pinMode(ENC_CLK, INPUT_PULLUP); pinMode(ENC_DT, INPUT_PULLUP); pinMode(ENC_SW, INPUT_PULLUP); pinMode(FQ_UD, OUTPUT); pinMode(W_CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(RESET, OUTPUT); SPI.begin(); ST7735_init(); ST7735_Orientation(0); ST7735_Clear(BLACK); Serial.begin(115200); Serial.setTimeout(50); attachInterrupt(0, checkEncoder, CHANGE); button.attachClick(switchMultiplier); button.attachLongPressStop(switchToMenu); sendFrequency(freq); bitSet(fl_change, GEN_MODE); menuLevel = GEN_MODE; } void switchToExtQuartz() { bitSet(PMCR, PMCE); bitSet(PMCR, OSCMEN); asm("nop"); asm("nop"); asm("nop"); bitSet(PMCR, PMCE); bitClear(PMCR, CLKFS); bitSet(PMCR, CLKSS); asm("nop"); asm("nop"); asm("nop"); } void switchMultiplier() { if (enc_StepMultip == 1) enc_StepMultip = 1000; else if (enc_StepMultip == 1000) enc_StepMultip = 1000000; else enc_StepMultip = 1; bitSet(fl_change, MULTIPLAY); } void checkEncoder() { byte enc_DT; long currentMillis; enc_AVal = digitalRead(ENC_CLK); enc_DT = digitalRead(ENC_DT); enc_FreqStep = 1; if (!enc_AVal && enc_ALast) { currentMillis = millis(); if (currentMillis - previousMillis < En_speed_1) enc_FreqStep = Step_int_1; else if (currentMillis - previousMillis < En_speed_2) enc_FreqStep = Step_int_2; else enc_FreqStep = 1; previousMillis = currentMillis; if (enc_DT) { if (bitRead(fl_change, MENU_MODE) == 1) { menuLevel --; if (menuLevel <= SWIP_MODE) menuLevel = SWIP_MODE; bitSet(fl_change, menuLevel); } else { freq = freq + enc_FreqStep * enc_StepMultip; if (freq >= 40000000) freq = 40000000; sendFrequency(freq); } } else if (bitRead(fl_change, MENU_MODE) == 1) { menuLevel ++; if (menuLevel >= GEN_MODE) menuLevel = GEN_MODE; bitSet(fl_change, menuLevel); } else { freq = freq - enc_FreqStep * enc_StepMultip; if (freq <= 0) freq = 0; sendFrequency(freq); } } enc_ALast = enc_AVal; } void tfr_byte(byte data) { for (int i = 0; i < 8; i++, data >>= 1) { digitalWrite(DATA, data & 0x01); pulseHigh(W_CLK); } } void sendFrequency(double frequency) { int32_t freq = frequency * 4294967295 / 125000000; for (int b = 0; b < 4; b++, freq >>= 8) { tfr_byte(freq & 0xFF); } tfr_byte(0x000); pulseHigh(FQ_UD); } void readInVoltage() { vin = 0; vout = 0; lvin=0; for (int i = 0; i < 4; i++) { if (menuLevel == KVN234_MODE) { lvin = lvin + analogRead(INP_VAL); } else { vin = vin + ((float)analogRead(INP_VAL) / 4095 * 4.096); vout = vout + ((float)analogRead(INP_OUT) / 4095 * 4.096); } } vin = vin / 4; vout = vout / 4; ratio = vin / vout; lvin = lvin / 4; } void printInfo() { readInVoltage(); String vol_str_in = "Inp: " + String(vin, 6) + "V"; String vol_str_out = "Gen: " + String(vout, 6) + "V"; String kp_str = "Rat: " + String(ratio, 6); String dB_str = "dB : " + String(20 * log10(ratio), 6); ST7735_PutStr7x11(0, 0, vol_str_out.c_str(), YELLOW, BLACK); ST7735_PutStr7x11(0, 15, vol_str_in.c_str(), YELLOW, BLACK); String fr_str = "000000000" + String(freq) + "Hz"; fr_str = "Frq: " + fr_str.substring(fr_str.length() - 10); if (bitRead(fl_change, MULTIPLAY) == 1) { ST7735_HLine(0, 127, 42, BLACK); if (enc_StepMultip == 1000000) ST7735_HLine(40, 54, 42, AQUA); else if (enc_StepMultip == 1000) ST7735_HLine(56, 78, 42, AQUA); else if (enc_StepMultip == 1) ST7735_HLine(80, 102, 42, AQUA); bitClear(fl_change, MULTIPLAY); } ST7735_PutStr7x11(0, 30, fr_str.c_str(), YELLOW, BLACK); ST7735_PutStr7x11(0, 45, kp_str.c_str(), YELLOW, BLACK); ST7735_PutStr7x11(0, 60, dB_str.c_str(), YELLOW, BLACK); } void switchToMenu() { ST7735_Clear(BLACK); bitSet(fl_change, MENU_MODE); bitSet(fl_change, menuLevel); ST7735_Rect(0, 6, 127, 127, YELLOW); ST7735_PutStr7x11(35, 0, "[ MODE ]", YELLOW, BLACK); ST7735_PutStr7x11(45, 30, "SWEEP", YELLOW, BLACK); ST7735_PutStr7x11(45, 50, "R6DCZ", YELLOW, BLACK); ST7735_PutStr7x11(45, 70, "KVN234", YELLOW, BLACK); ST7735_PutStr7x11(45, 90, "GEN", YELLOW, BLACK); while (bitRead(fl_change, MENU_MODE) == 1) { if (digitalRead(ENC_SW) == LOW) bitClear(fl_change, MENU_MODE); switch (menuLevel) { case SWIP_MODE: if (bitRead(fl_change, SWIP_MODE) == 1) { ST7735_Rect(7, 27, 120, 43, CYAN); ST7735_Rect(7, 47, 120, 63, BLACK); ST7735_Rect(7, 67, 120, 83, BLACK); ST7735_Rect(7, 87, 120, 103, BLACK); bitClear(fl_change, SWIP_MODE); } break; case R6DCZ_MODE: if (bitRead(fl_change, R6DCZ_MODE) == 1) { ST7735_Rect(7, 47, 120, 63, CYAN); ST7735_Rect(7, 87, 120, 103, BLACK); ST7735_Rect(7, 67, 120, 83, BLACK); ST7735_Rect(7, 27, 120, 43, BLACK); bitClear(fl_change, R6DCZ_MODE); } break; case KVN234_MODE: if (bitRead(fl_change, KVN234_MODE) == 1) { ST7735_Rect(7, 67, 120, 83, CYAN); ST7735_Rect(7, 47, 120, 63, BLACK); ST7735_Rect(7, 87, 120, 103, BLACK); ST7735_Rect(7, 27, 120, 43, BLACK); bitClear(fl_change, KVN234_MODE); } break; case GEN_MODE: if (bitRead(fl_change, GEN_MODE) == 1) { ST7735_Rect(7, 87, 120, 103, CYAN); ST7735_Rect(7, 47, 120, 63, BLACK); ST7735_Rect(7, 67, 120, 83, BLACK); ST7735_Rect(7, 27, 120, 43, BLACK); bitClear(fl_change, GEN_MODE); } analogReference(INTERNAL4V096); analogReadResolution(12); break; } } if ((menuLevel == GEN_MODE) or (menuLevel == SWIP_MODE)) { ST7735_Clear(BLACK); bitSet(fl_change, MULTIPLAY); } else if (menuLevel == R6DCZ_MODE) ST7735_Rect(7, 47, 120, 63, BLUE); else if (menuLevel == KVN234_MODE) ST7735_Rect(7, 67, 120, 83, BLUE); } void loop() { long current_fr = fr_Start; button.tick(); if (menuLevel == KVN234_MODE) while (bitRead(fl_change, KVN_START_STOP) == 1) { sendFrequency(current_fr); delay(sw_Delay); readInVoltage(); sendData(current_fr); current_fr = current_fr + fr_Step; if (current_fr > fr_End) current_fr = fr_Start; serialEvent(); } if (menuLevel == R6DCZ_MODE) { while (Serial.available() > 0) { memset(Buffer, 0, bSize); Serial.readBytes(Buffer, bSize); serial_readline = String(Buffer); if (serial_readline.startsWith("GET ")) { fr_Start = (long)serial_readline.substring(4, 14).toFloat(); fr_End = (long)serial_readline.substring(15, 24).toFloat(); fr_Step = (long)serial_readline.substring(25).toFloat(); for (freq = fr_Start; freq <= fr_End; freq += fr_Step) { sendFrequency(freq); readInVoltage(); String freq_str = "000000000" + String(freq) + " "; String out_str = freq_str.substring(freq_str.length() - 10) + String(ratio, 6); Serial.println(out_str); } } Serial.flush(); } } if (menuLevel == GEN_MODE) printInfo(); } void sendData(long fr) { byte crc; adc_type adc ; frq_type frq ; adc.i = (int)lvin; frq.l = (long)fr; Serial.write(':'); Serial.write(9); Serial.write(6); crc += ':'; crc += 9; crc += 6; crc += frq.b[0]; crc += frq.b[1]; crc += frq.b[2]; crc += frq.b[3]; crc += adc.b[0]; crc += adc.b[1]; Serial.write(frq.b[0]); Serial.write(frq.b[1]); Serial.write(frq.b[2]); Serial.write(frq.b[3]); Serial.write(adc.b[0]); Serial.write(adc.b[1]); Serial.write(crc); } void serialEvent() { if (menuLevel == KVN234_MODE) { while (Serial.available()) { memset(Buffer, 0, bSize); Serial.readBytes(Buffer, bSize); if (Buffer[0] == ':') { byte len = Buffer[1]; if (len == 3) { byte inCommand = Buffer[2]; switch (inCommand) { case 0: { bitSet(fl_change, KVN_START_STOP); //Start_Gkch SendOK(0); break; } case 1: { bitClear(fl_change, KVN_START_STOP); //Stop_Gkch SendOK(1); break; } case 7: { analogReference(INTERNAL1V024); //V1 analogReadResolution(12); SendOK(7); break; } case 8: { analogReference(DEFAULT); //V5 analogReadResolution(10); SendOK(8); break; } case 9: { SendOK(9); //A0 break; } case 10: { SendOK(10); //A2 break; } case 16: { SendOK(16); //A3 break; } case 17: { SendOK(17); //A4 break; } } } else if (len == 4) { byte inCommand = Buffer[2]; switch (inCommand) { case 18: { sw_Delay = Buffer[3]; //SET_PAUZ SendOK(18); break; } } } else if (len == 7) { byte inCommand = Buffer[2]; switch (inCommand) { case 2: { fr_Start = pow(2, 32) * (byte)Buffer[6] + pow(2, 16) * (byte)Buffer[5] + pow(2, 8) * (byte)Buffer[4] + (byte)Buffer[3]; //Fr0 SendOK(2); break; } case 3: { fr_End = pow(2, 32) * (byte)Buffer[6] + pow(2, 16) * (byte)Buffer[5] + pow(2, 8) * (byte)Buffer[4] + (byte)Buffer[3]; //Fr1 SendOK(3); break; } case 4: { fr_Step = pow(2, 32) * (byte)Buffer[6] + pow(2, 16) * (byte)Buffer[5] + pow(2, 8) * (byte)Buffer[4] + (byte)Buffer[3]; //Step SendOK(4); break; } } } } Serial.flush(); } } } void SendOK(byte command) { char crc; crc = ':'; crc += 3; crc += command; Serial.write(':'); Serial.write(3); Serial.write(command); Serial.write(crc); } /************************************************************************************************************* Драйвер lcg 1.44" 128X128 ST7735 VER 1.0. на красной плате ************************************************************************************************************/ char const Font7x11[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // space 0x20 32 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, // ! 0x21 33 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // " 0x22 34 0x48, 0x48, 0x24, 0x7f, 0x24, 0x24, 0x12, 0x7f, 0x12, 0x09, 0x09, // # 0x23 35 0x08, 0x3e, 0x49, 0x09, 0x09, 0x3e, 0x48, 0x48, 0x49, 0x3e, 0x08, // $ 0x24 36 0x47, 0x25, 0x27, 0x10, 0x10, 0x08, 0x08, 0x04, 0x72, 0x52, 0x71, // % 0x25 37 0x06, 0x09, 0x09, 0x09, 0x26, 0x22, 0x25, 0x29, 0x11, 0x29, 0x46, // & 0x26 38 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' 0x27 39 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, // ( 0x28 40 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, // ) 0x29 41 0x00, 0x08, 0x2a, 0x1c, 0x2a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // * 0x2A 42 0x00, 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, // + 0x2B 43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x04, // , 0x2C 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, // - 0x2D 45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, // . 0x2E 46 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, // / 0x2F 47 0x1c, 0x22, 0x51, 0x51, 0x49, 0x49, 0x49, 0x45, 0x45, 0x22, 0x1c, // 0 0x30 48 0x08, 0x0c, 0x0a, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3e, // 1 0x31 49 0x1e, 0x21, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x7f, // 2 0x32 50 0x1f, 0x20, 0x40, 0x40, 0x20, 0x1e, 0x20, 0x40, 0x40, 0x20, 0x1f, // 3 0x33 51 0x30, 0x28, 0x24, 0x22, 0x21, 0x7f, 0x20, 0x20, 0x20, 0x20, 0x20, // 4 0x34 52 0x7f, 0x01, 0x01, 0x01, 0x1f, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1f, // 5 0x35 53 0x38, 0x04, 0x02, 0x01, 0x1d, 0x23, 0x41, 0x41, 0x41, 0x22, 0x1c, // 6 0x36 54 0x7f, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, // 7 0x37 55 0x1c, 0x22, 0x41, 0x41, 0x22, 0x1c, 0x22, 0x41, 0x41, 0x22, 0x1c, // 8 0x38 56 0x1c, 0x22, 0x41, 0x41, 0x41, 0x62, 0x5c, 0x40, 0x20, 0x10, 0x0e, // 9 0x39 57 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, // : 0x3A 58 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x08, 0x04, // ; 0x3B 59 0x00, 0x40, 0x30, 0x0c, 0x02, 0x01, 0x02, 0x0c, 0x30, 0x40, 0x00, // < 0x3C 60 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, // = 0x3D 61 0x00, 0x01, 0x06, 0x18, 0x20, 0x40, 0x20, 0x18, 0x06, 0x01, 0x00, // > 0x3E 62 0x3e, 0x41, 0x40, 0x40, 0x30, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, // ? 0x3F 63 0x1c, 0x22, 0x41, 0x49, 0x55, 0x55, 0x55, 0x39, 0x01, 0x02, 0x3c, // @ 0x40 64 0x08, 0x14, 0x14, 0x22, 0x22, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x41, // A 0x41 65 0x1f, 0x21, 0x21, 0x21, 0x1f, 0x21, 0x41, 0x41, 0x41, 0x21, 0x1f, // B 0x42 66 0x3c, 0x42, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x42, 0x3c, // C 0x43 67 0x1f, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x22, 0x1f, // D 0x44 68 0x7f, 0x01, 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, // E 0x45 69 0x7f, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // F 0x46 70 0x3c, 0x42, 0x01, 0x01, 0x01, 0x79, 0x41, 0x41, 0x41, 0x42, 0x3c, // G 0x47 71 0x41, 0x41, 0x41, 0x41, 0x7f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, // H 0x48 72 0x1c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, // I 0x49 73 0x1e, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0e, // J 0x4A 74 0x21, 0x11, 0x09, 0x05, 0x03, 0x03, 0x05, 0x09, 0x11, 0x21, 0x41, // K 0x4B 75 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, // L 0x4C 76 0x41, 0x63, 0x55, 0x55, 0x49, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, // M 0x4D 77 0x41, 0x41, 0x41, 0x43, 0x43, 0x45, 0x49, 0x51, 0x51, 0x61, 0x41, // N 0x4E 78 0x1c, 0x22, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1c, // O 0x4F 79 0x1f, 0x21, 0x41, 0x41, 0x41, 0x21, 0x1f, 0x01, 0x01, 0x01, 0x01, // P 0x50 80 0x1c, 0x22, 0x41, 0x41, 0x41, 0x41, 0x41, 0x49, 0x51, 0x22, 0x5c, // Q 0x51 81 0x1f, 0x21, 0x41, 0x41, 0x41, 0x21, 0x1f, 0x09, 0x11, 0x21, 0x41, // R 0x52 82 0x1c, 0x22, 0x41, 0x01, 0x02, 0x1c, 0x20, 0x40, 0x41, 0x22, 0x1c, // S 0x53 83 0x7f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // T 0x54 84 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1c, // U 0x55 85 0x41, 0x41, 0x22, 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08, // V 0x56 86 0x41, 0x41, 0x41, 0x41, 0x49, 0x49, 0x49, 0x55, 0x55, 0x63, 0x41, // W 0x57 87 0x41, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x14, 0x22, 0x22, 0x41, // X 0x58 88 0x41, 0x41, 0x22, 0x14, 0x14, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // Y 0x59 89 0x7f, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x7f, // Z 0x5A 90 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, // [ 0x5B 91 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, // \ 0x5C 92 0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e, // ] 0x5D 93 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^ 0x5E 94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, // _ 0x5F 95 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ` 0x60 96 0x00, 0x00, 0x00, 0x3e, 0x41, 0x40, 0x7e, 0x41, 0x41, 0x61, 0x5e, // a 0x61 97 0x01, 0x01, 0x01, 0x1d, 0x23, 0x41, 0x41, 0x41, 0x41, 0x23, 0x1d, // b 0x62 98 0x00, 0x00, 0x00, 0x3c, 0x42, 0x01, 0x01, 0x01, 0x01, 0x42, 0x3c, // c 0x63 99 0x40, 0x40, 0x40, 0x5c, 0x62, 0x41, 0x41, 0x41, 0x41, 0x62, 0x5c, // d 0x64 100 0x00, 0x00, 0x00, 0x1c, 0x22, 0x41, 0x7f, 0x01, 0x01, 0x42, 0x3c, // e 0x65 101 0x1c, 0x04, 0x04, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, // f 0x66 102 0x00, 0x00, 0x00, 0x5e, 0x61, 0x41, 0x61, 0x5e, 0x40, 0x21, 0x1e, // g 0x67 103 0x01, 0x01, 0x01, 0x3d, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, // h 0x68 104 0x08, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // i 0x69 105 0x00, 0x10, 0x00, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x0c, // j 0x6A 106 0x01, 0x01, 0x01, 0x21, 0x11, 0x09, 0x07, 0x09, 0x11, 0x21, 0x41, // k 0x6B 107 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0c, // l 0x6C 108 0x00, 0x00, 0x00, 0x25, 0x5b, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, // m 0x6D 109 0x00, 0x00, 0x00, 0x1d, 0x23, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, // n 0x6E 110 0x00, 0x00, 0x00, 0x1c, 0x22, 0x41, 0x41, 0x41, 0x41, 0x22, 0x1c, // o 0x6F 111 0x00, 0x00, 0x00, 0x1f, 0x21, 0x41, 0x41, 0x21, 0x1f, 0x01, 0x01, // p 0x70 112 0x00, 0x00, 0x00, 0x2c, 0x32, 0x21, 0x21, 0x21, 0x32, 0x2c, 0x20, // q 0x71 113 0x00, 0x00, 0x00, 0x3d, 0x43, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // r 0x72 114 0x00, 0x00, 0x00, 0x3e, 0x41, 0x01, 0x0e, 0x30, 0x40, 0x41, 0x3e, // s 0x73 115 0x00, 0x04, 0x04, 0x3e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x38, // t 0x74 116 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x31, 0x2e, // u 0x75 117 0x00, 0x00, 0x00, 0x41, 0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, // v 0x76 118 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x49, 0x49, 0x49, 0x49, 0x36, // w 0x77 119 0x00, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x08, 0x14, 0x22, 0x41, // x 0x78 120 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x24, 0x38, 0x10, 0x08, 0x06, // y 0x79 121 0x00, 0x00, 0x00, 0x7f, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x7f, // z 0x7A 122 0x18, 0x08, 0x08, 0x08, 0x04, 0x06, 0x04, 0x08, 0x08, 0x08, 0x18, // { 0x7B 123 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // | 0x7C 124 0x0c, 0x08, 0x08, 0x08, 0x10, 0x30, 0x10, 0x08, 0x08, 0x08, 0x0c, // } 0x7D 125 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x51, 0x20, 0x00, 0x00, 0x00, // ~ 0x7E 126 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f }; // 0x7F 127 #define HWRST_SET digitalWrite(ST7735_RST,HIGH) #define HWRST_RESET digitalWrite(ST7735_RST,LOW) #define ST7735_COMMAND digitalWrite(ST7735_A0,LOW) #define ST7735_DATA digitalWrite(ST7735_A0,HIGH) #define ST7735_SELECT digitalWrite(ST7735_CS,LOW) #define ST7735_UNSELECT digitalWrite(ST7735_CS,HIGH) void ST7735_PutChar7x11(uint16_t X, uint16_t Y, uint8_t chr, uint16_t color, uint16_t bgcolor) { uint16_t i, j; uint8_t buffer[11]; uint8_t CH = color >> 8; uint8_t CL = (uint8_t)color; uint8_t BCH = bgcolor >> 8; uint8_t BCL = (uint8_t)bgcolor; memcpy_P(buffer, &Font7x11[(chr - 32) * 11], 11); ST7735_AddrSet(X, Y, X + 7, Y + 11); ST7735_DATA; for (i = 0; i < 11; i++) { for (j = 0; j < 7; j++) { if ((buffer[i] >> j) & 0x01) { ST7735_write(CH); ST7735_write(CL); } else { ST7735_write(BCH); ST7735_write(BCL); } } ST7735_write(BCH); ST7735_write(BCL); } for (i = 0; i < 8; i++) { ST7735_write(BCH); ST7735_write(BCL); } } void ST7735_PutStr7x11(uint8_t X, uint8_t Y, char *str, uint16_t color, uint16_t bgcolor) { while (*str) { ST7735_PutChar7x11(X, Y, *str++, color, bgcolor); if (X < scr_width - 8) { X += 8; } else if (Y < scr_height - 12) { X = 0; Y += 12; } else { X = 0; Y = 0; } }; } void ST7735_Clear(uint16_t color) { uint16_t i; uint8_t CH, CL; CH = color >> 8; CL = (uint8_t)color; ST7735_AddrSet(0, 0, (scr_width - 1), (scr_height - 1)); ST7735_DATA; for (i = 0; i < (scr_width * scr_height); i++) { ST7735_write(CH); ST7735_write(CL); } } void ST7735_AddrSet(uint16_t XS, uint16_t YS, uint16_t XE, uint16_t YE) { XS = XS + OffSetX; XE = XE + OffSetX; YS = YS + OffSetY; YE = YE + OffSetY; ST7735_cmd(0x2a); ST7735_DATA; ST7735_write(XS >> 8); ST7735_write(XS); ST7735_write(XE >> 8); ST7735_write(XE); ST7735_cmd(0x2b); ST7735_DATA; ST7735_write(YS >> 8); ST7735_write(YS); ST7735_write(YE >> 8); ST7735_write(YE); ST7735_cmd(0x2c); } void ST7735_HWRST() { HWRST_RESET; HWRST_SET; } void ST7735_data(uint8_t data) { ST7735_DATA; ST7735_write(data); } void ST7735_SWRST() { ST7735_cmd(0x01); ST7735_data(0x01); } void ST7735_write(uint8_t data) { ST7735_SELECT; SPI.transfer(data); ST7735_UNSELECT; } void ST7735_cmd(uint8_t cmd) { ST7735_COMMAND; ST7735_write(cmd); } void ST7735_Pixel(uint16_t X, uint16_t Y, uint16_t color) { ST7735_AddrSet(X, Y, X, Y); ST7735_DATA; ST7735_write(color >> 8); ST7735_write((uint8_t)color); } void ST7735_HLine(uint16_t X1, uint16_t X2, uint16_t Y, uint16_t color) { uint16_t i; uint8_t CH = color >> 8; uint8_t CL = (uint8_t)color; ST7735_AddrSet(X1, Y, X2, Y); ST7735_DATA; for (i = 0; i <= (X2 - X1); i++) { ST7735_write(CH); ST7735_write(CL); } } void ST7735_VLine(uint16_t X, uint16_t Y1, uint16_t Y2, uint16_t color) { uint16_t i; uint8_t CH = color >> 8; uint8_t CL = (uint8_t)color; ST7735_AddrSet(X, Y1, X, Y2); ST7735_DATA; for (i = 0; i <= (Y2 - Y1); i++) { ST7735_write(CH); ST7735_write(CL); } } void ST7735_Line(int16_t X1, int16_t Y1, int16_t X2, int16_t Y2, uint16_t color) { int16_t dX = X2 - X1; int16_t dY = Y2 - Y1; int16_t dXsym = (dX > 0) ? 1 : -1; int16_t dYsym = (dY > 0) ? 1 : -1; if (dX == 0) { if (Y2 > Y1) ST7735_VLine(X1, Y1, Y2, color); else ST7735_VLine(X1, Y2, Y1, color); return; } if (dY == 0) { if (X2 > X1) ST7735_HLine(X1, X2, Y1, color); else ST7735_HLine(X2, X1, Y1, color); return; } dX *= dXsym; dY *= dYsym; int16_t dX2 = dX << 1; int16_t dY2 = dY << 1; int16_t di; if (dX >= dY) { di = dY2 - dX; while (X1 != X2) { ST7735_Pixel(X1, Y1, color); X1 += dXsym; if (di < 0) { di += dY2; } else { di += dY2 - dX2; Y1 += dYsym; } } } else { di = dX2 - dY; while (Y1 != Y2) { ST7735_Pixel(X1, Y1, color); Y1 += dYsym; if (di < 0) { di += dX2; } else { di += dX2 - dY2; X1 += dXsym; } } } ST7735_Pixel(X1, Y1, color); } void ST7735_Rect(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, uint16_t color) { ST7735_HLine(X1, X2, Y1, color); ST7735_HLine(X1, X2, Y2, color); ST7735_VLine(X1, Y1, Y2, color); ST7735_VLine(X2, Y1, Y2, color); } void ST7735_FillRect(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, uint16_t color) { uint16_t i; uint16_t FS = (X2 - X1 + 1) * (Y2 - Y1 + 1); uint8_t CH = color >> 8; uint8_t CL = (uint8_t)color; ST7735_AddrSet(X1, Y1, X2, Y2); ST7735_DATA; for (i = 0; i < FS; i++) { ST7735_write(CH); ST7735_write(CL); } } void ST7735_init() { ST7735_HWRST(); delay(15); ST7735_SWRST(); delay(150); ST7735_cmd(0x11); //SLPOUT delay(255); ST7735_cmd(0xb1); //FRMCTR1 ST7735_DATA; ST7735_write(0x01); ST7735_write(0x2c); ST7735_write(0x2d); ST7735_cmd(0xb2); //FRMCTR2 ST7735_DATA; ST7735_write(0x01); ST7735_write(0x2c); ST7735_write(0x2d); ST7735_cmd(0xb3); //FRMCTR3 ST7735_DATA; ST7735_write(0x01); ST7735_write(0x2c); ST7735_write(0x2d); ST7735_write(0x01); ST7735_write(0x2c); ST7735_write(0x2d); ST7735_cmd(0xb4); //INVCTR ST7735_data(0x07); ST7735_cmd(0xc0); //PWCTR1 ST7735_DATA; ST7735_write(0xa2); ST7735_write(0x02); ST7735_write(0x84); ST7735_cmd(0xc1); //PWCTR2 ST7735_data(0xc5); ST7735_cmd(0xC2); //PWCTR3 ST7735_DATA; ST7735_write(0x0a); ST7735_write(0x00); ST7735_cmd(0xc3); //PWCTR4 ST7735_DATA; ST7735_write(0x8a); ST7735_write(0x2a); ST7735_cmd(0xc4); //PWCTR5 ST7735_DATA; ST7735_write(0x8a); ST7735_write(0xee); ST7735_cmd(0xc5); //VMCTR1 ST7735_data(0x0e); ST7735_cmd(0x20); //INVOFF ST7735_cmd(0x36); //MADCTL ST7735_data(0x8); ST7735_cmd(0x3a); //COLMOD ST7735_data(0x05); delay(10); ST7735_cmd(0x2a); //CASET ST7735_DATA; ST7735_write(0x00); ST7735_write(0x00); ST7735_write(0x00); ST7735_write(0x7f); ST7735_cmd(0x2b); //RASET ST7735_DATA; ST7735_write(0x00); ST7735_write(0x00); ST7735_write(0x00); ST7735_write(0x7f); ST7735_cmd(0xe0); //GMCTRP1 ST7735_DATA; ST7735_write(0x02); ST7735_write(0x1c); ST7735_write(0x07); ST7735_write(0x12); ST7735_write(0x37); ST7735_write(0x32); ST7735_write(0x29); ST7735_write(0x2d); ST7735_write(0x29); ST7735_write(0x25); ST7735_write(0x28); ST7735_write(0x39); ST7735_write(0x00); ST7735_write(0x01); ST7735_write(0x03); ST7735_write(0x10); ST7735_cmd(0xe1); //GMCTRN1 ST7735_DATA; ST7735_write(0x03); ST7735_write(0x1d); ST7735_write(0x07); ST7735_write(0x06); ST7735_write(0x2e); ST7735_write(0x2c); ST7735_write(0x29); ST7735_write(0x2d); ST7735_write(0x2e); ST7735_write(0x2e); ST7735_write(0x37); ST7735_write(0x3f); ST7735_write(0x00); ST7735_write(0x00); ST7735_write(0x02); ST7735_write(0x10); ST7735_cmd(0x13); //NORON delay(10); ST7735_cmd(0x29); //DISPON } void ST7735_Orientation(ScrOrientation_TypeDef orientation) { ST7735_cmd(0x36); // Memory data access control: switch (orientation) { case scr_CW: OffSetX = 3; OffSetY = 2; ST7735_data(0xa8); break; case scr_CCW: OffSetX = 1; OffSetY = 2; ST7735_data(0x68); break; case scr_180: OffSetX = 2; OffSetY = 3; ST7735_data(0xc8); break; default: OffSetX = 2; OffSetY = 1; ST7735_data(0x08); break; } } void ST7735_invertDisplay(boolean i) { ST7735_cmd(i ? 0x21 : 0x20); }
Дополнительн, для обслуживания меню одной кнопкой и энкодером использовал библу OneButton. Еще 10кб осталось для извращений
PS. В программе автора ничего исправлять не нужно. Исправил свой косяк в скетче. Сейчас WAVGAT UNO R3 (lgt8f328p, awga328p) ведет себя как стандартная плата на atmega328p
_________________ Девице - Device
Последний раз редактировалось maxlab Ср апр 29, 2020 01:22:15, всего редактировалось 1 раз.
Вернуться наверх
Реклама
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Подробнее>>
123ksn
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Вт апр 28, 2020 21:20:18
Первый раз сказал Мяу!
Карма: 7
Рейтинг сообщений: 8
Зарегистрирован: Чт апр 17, 2014 19:33:41Сообщений: 26
Рейтинг сообщения: 0
Адаптировал скетч под программу Автора ... с изъятиями и сокращениями. Только режим ГКЧ.
Уважаемый maxlab, пишите более развёрнуто пояснение. А то надо читать форум сначала, что бы понять, что Вы под адаптацией понимаете код для lgt8f328p с использованием ST7735. А фраза "Только режим ГКЧ" никак не вяжется с картинкой, которая предполагает использование АЦП.
Вернуться наверх
Реклама
Реклама
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Подробнее>>
KOTOBOY
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср июл 01, 2020 08:12:42
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт май 12, 2017 12:19:03Сообщений: 33
Рейтинг сообщения: 0
Уважаемый kvn234! Пытался скачать последнюю версию софта, что вы выложили, так не получается:Файл ./../files/36023_9044531071128e29adb62bcfb8c5f946 отсутствует. Можно перезалить?
Вернуться наверх
Реклама
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Чт июл 02, 2020 14:29:05
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
Файл ./../files/36023_9044531071128e29adb62bcfb8c5f946 отсутствует. Можно перезалить?
Я не удалял. Загружаю повторно.
Вложения:
Комментарий к файлу: Прошивка для Mega328p, загрузчик прошивки и софт для ПК
AD950.ZIP [961.88 KiB]
Скачиваний: 716
Вернуться наверх
Реклама
AVGN
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Вт июл 07, 2020 13:42:15
Зарегистрирован: Вт июл 07, 2020 13:18:18Сообщений: 2
Рейтинг сообщения: 0
Допилил ПО.
Доброго времени суток! Скачал ваш архив. Что то не пойму где скетч, что заливать в ардуино?
Вернуться наверх
Реклама
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Вт июл 07, 2020 15:15:50
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
Доброго времени суток! Скачал ваш архив. Что то не пойму где скетч, что заливать в ардуино?
IDE AVR Studio 4.18
Заливать надо прошивку (*.hex) в ATMega328P.
Вернуться наверх
Реклама
KOTOBOY
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср июл 08, 2020 15:47:17
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт май 12, 2017 12:19:03Сообщений: 33
Рейтинг сообщения: 0
[/uquote]
Я не удалял. Загружаю повторно.[/uquote]
Спасибо большое!!!
Добавлено after 24 minutes 57 seconds: Не ладится у меня с цитированием. Спасибо большое, kvn 234. за обновления! На мой взгляд, та разница в показаниях с диодным детектором, которую вы приводили, связана с тем, что конденсатор фильтра детектора просто не успевал зарядиться до максимума, при малом времени "стояния" на одной частоте. Увеличили время, возросло напряжение! Еще раз- спасибо!
Вернуться наверх
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Пт июл 10, 2020 13:23:48
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
На мой взгляд, та разница в показаниях с диодным детектором, которую вы приводили, связана с тем, что конденсатор фильтра детектора просто не успевал зарядиться до максимума, при малом времени "стояния" на одной частоте. Увеличили время, возросло напряжение!
Конденсатор тоже влияет на длительность переходного процесса, но даже если уменьшить емкость до минимума, остается переходной процесс измеряемой цепи.
Вернуться наверх
alex-551
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 09:46:35
Опытный кот
Карма: 10
Рейтинг сообщений: 34
Зарегистрирован: Пт июл 26, 2013 22:33:37Сообщений: 766
Рейтинг сообщения: 0
У меня ГКЧ три входа, А0- на диодах Д18, А2-вход логарифмический, А3- вход линейный. Собраны на AD8310 и AD8361. Залита последняя прошивка. Для примера, снял ещё раньше, АЧХ для фильтра ФП2П4-436-10,7М-15-В." Корону" так и не удалось убрать, хоть пробовал согласовывать резисторами 50ом+ подстроечные, включал параллельно и последовательно. Попробовал снять АЧХ пьезокерамического фильтра ( трёх ногий на 10,7Мгц) ничего не увидел. Это предыстория. Теперь основное. Хотел посмотреть и настроить тракт ЧМ приёмника Океан. Не смог, показывает ровную линию. Для настройки контуров подавал сигнал 10,7Мгц+ и - 15Кгц. на вход платы ( блок УКВ отключил). Мерил на Базе последнего транзистора ( перед дробным детектором). Подавал и с большей девиацией, но результат прежний, ровная линия. Подскажите, что надо сделать, что бы можно было пользоваться?
Вложение:
Изображение 001.jpg [245.06 KiB]
Скачиваний: 523
Вложение:
Изображение 004.jpg [210.47 KiB]
Скачиваний: 464
Вложение:
лин. вх..png [76.34 KiB]
Скачиваний: 474
Вложение:
лин. детектор.png [28.12 KiB]
Скачиваний: 468
Вложение:
лог. детектор.png [29.91 KiB]
Скачиваний: 495
Вернуться наверх
SM898
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 12:00:43
Вымогатель припоя
Карма: 67
Рейтинг сообщений: 483
Зарегистрирован: Вс июл 21, 2013 16:24:58Сообщений: 602Откуда: Юг Руси.
Рейтинг сообщения: 0
alex-551 писал(а):
Подскажите, что надо сделать, что бы можно было пользоваться?
Прежде всего, согласовать фильтр по входу и по выходу. У вас 6-кристальный
кварцевый фильтр, вот, 6 пиков на характеристике показывает. Кварцевые
фильтры (да и ЭМФы тоже) так себя и ведут, когда входное/выходное сопротивление
устройства, к которому они подключаются, не соответствует их паспортным данным.
Как согласовывать - не подскажу, надо знать, куда и как он у вас подключён.
Возможно, просто резисторами. Но надо учитывать, что часть сигнала потеряется
на согласовании. Можно ещё LC цепочками, рассчитанными, например в RFsimm.
В LC потерь меньше.
Вернуться наверх
alex-551
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 12:16:07
Опытный кот
Карма: 10
Рейтинг сообщений: 34
Зарегистрирован: Пт июл 26, 2013 22:33:37Сообщений: 766
Рейтинг сообщения: 0
Меня больше интересует как измерить тракт ПЧ-ЧМ.
А фильтр пробовал согласовывать по схемам во вложении.
Вложение:
Согласование.JPG [54.04 KiB]
Скачиваний: 538
Вернуться наверх
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 13:22:51
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
alex-551
У Вас не последняя версия. Последняя версия в моем сообщении от июль 02, 2020.
Но во всех версиях принцип измерения не менялся.
Для повышения точности установите максимальное время измерения.
АЧХ можете построить вручную по нескольким точкам и сравнить с полученным прибором.
Вот измерение АЧХ кварца.
При измерении ВЧ необходимо использовать короткие провода. Возможно у Вас длинные измерительные концы.
Вернуться наверх
alex-551
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 15:06:17
Опытный кот
Карма: 10
Рейтинг сообщений: 34
Зарегистрирован: Пт июл 26, 2013 22:33:37Сообщений: 766
Рейтинг сообщения: 0
Спасибо что помогаете. Стоит последняя версия, просто примеры фильтра снимал ещё на предыдущей версии. По проводам понял, попробую покороче, но, наверное, это уже после НГ. Просто АЧХ платы ПЧ-ЧМ 10,7Мгц хоть какой то горб бы показал. У меня логарифмический и линейный детекторы собраны внутри прибора. Может надо было сделать выносными? Но у других вроде работает. Хочу попробовать вытащить транзистор Т4-7, на базе которого меряю, возможно он садит сигнал? Подаю на контакт 11 платы У4, при этом выход блока УКВ отпаял. Почему не смог померить пьезокерамический фильтр?
Вложение:
1+1.png [24.74 KiB]
Скачиваний: 371
Вложение:
Вложение:
111+1.jpg [141.09 KiB]
Скачиваний: 463
[attachment=0]111+3.jpg[/attachment
Как вставлять сразу картинки?
Вложения:
111+3.jpg [138.11 KiB]
Скачиваний: 402
Вернуться наверх
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 16:23:21
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 1
По проводам понял, попробую покороче, но, наверное, это уже после НГ. ... У меня логарифмический и линейный детекторы собраны внутри прибора. Может надо было сделать выносными?
Если Вы измеряете АЧХ ВЧ каскадов, детекторы и усилители надо делать выносными, чтобы не вносить дополнительные LCR в измеряемую схему и не искажать АЧХ.
И кабель без выносных детекторов и усилителей вносит дополнительные затухания(чем длиннее тем больше) .
Вернуться наверх
alex-551
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 17:00:40
Опытный кот
Карма: 10
Рейтинг сообщений: 34
Зарегистрирован: Пт июл 26, 2013 22:33:37Сообщений: 766
Рейтинг сообщения: 0
Понял, спасибо за советы. Попробую попозже с короткими проводами. Возникнут вопросы буду обращаться. А кто нибудь пробовал снимать АЧХ трактов ПЧ?
Вернуться наверх
1en2
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Ср дек 30, 2020 17:26:05
Карма: 14
Рейтинг сообщений: 472
Зарегистрирован: Вс фев 02, 2020 09:12:37Сообщений: 2804
Рейтинг сообщения: 0
нет...ты первый будешь.....в новом году...)))
Вернуться наверх
kvn234
Заголовок сообщения: Re: Простейший ГКЧ на AD9850 и Arduino Nano 328
Добавлено: Чт дек 31, 2020 09:44:18
Нашел транзистор. Понюхал.
Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Вс апр 17, 2011 09:51:26Сообщений: 194Откуда: Тула
Рейтинг сообщения: 0
alex-551 Посмотрел свежим взглядом 1+1.png. У Вас не выставлен диапазон качания. По всей шкале нулевые частоты .
Вернуться наверх
Страница 18 из 21
[ Сообщений: 409 ]
... , , , , , ,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения