А в "Частотомер шкала для UW3DI" зачем нужна коррекция для каждого диапазона? (путем запоминания соответствующего коэффициента в eeprom). Просто как идея. Шкала не может быть откалиброван один раз и, таким образом, будет калибрована во всем рабочем диапазоне (как в случае с обычным частотомером)? А и кнопки + и - для операции, которая будет выполнена один раз ... Не могу уловить идею, скорее потребность в ней.
Идея в том, что при индикации уточняется разброс частот кварцевого генератора по диапазонам, которые мы не измеряем напрямую (к примеру, как в "макеевской" шкале).
Понял, спасибо. Коррекция будет как сдвиг +/-, а не как напр. пропорциональный коэффициент. Если нужно много "трогать" софт для нового микроконтроллера, проще новый софт написать (напр. на PIC) .
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Вт май 17, 2022 17:49:21
Собутыльник Кота
Карма: 14
Рейтинг сообщений: 115
Зарегистрирован: Сб май 21, 2016 11:04:52 Сообщений: 2957 Откуда: Беларусь
Рейтинг сообщения:0
Добавлено after 1 minute 52 seconds:
Добавлено after 1 minute 52 seconds: программирую ат13, но не суть , хочу задизэйблить вывод Резет. Дык а как? Слышал что вроде этой методой можно даже с "неправильными" фузами МК исправлять. Что-то тут не то.
Добавлено after 8 minutes 9 seconds: а почему я в эту PonyProg влез???. Дело в том что прошивка у меня в .bin и eeprom тоже в .bin. иначе бы обошелся проссто UsbASP и дудой, но том прошиваются только .hex прошивки.
тема про 2313, а не про 13ю.......(надо же в вопросе указывать о причине идиотизма...))))...) ===== открыл файл бин, сохранил в хекс, какие проблемы ???????????? ==== если бит не активен, то не прошьешь его
Последний раз редактировалось 1en2 Вт май 17, 2022 18:10:13, всего редактировалось 1 раз.
тема про 2313, а не про 13ю.......(надо же в вопросе указывать о причине идиотизма...))))...) =====
таки шо мне тему заводить ВСЁ по прошивке и программированию AT90S2313/ATTiny2313 ради этого мелкого вопроса.
Ну мог бы я написать что прошиваю 2313, а не 13, ситуация аналогичная RSTDISBL не активен! Почему? Это так дожно быть или что-то не так делаю? В специфику отличий между .bin и .hex и в вопрос их конвертации не вникал. Попобую, напишите какой прогой это сделать. Вероятно ponyProg подойдет. А если она подойдет ТО зачем этот длинный Круг почему нельзя понипрогой все прошить и заодно и фузы выставить как надо?
пони и сохраняет (и конвертирует бин-хекс) и пишет, что может....а нельзя, значит нельзя....а параллельного программатора (не интерфейса, а способа прошивки) для тини у тебя нет (там 12 В используется)
Данный бит переводит вывод Reset (PB5) в состояние обычного ввода/вывода, а он нужен (в вашем случае) для подачи на него 12 В… и чтобы Вы по ошибке не установили этот бит, он в программе не доступен. Так что всё правильно если он не активен.
программирую ат13, но не суть , хочу задизэйблить вывод Резет. Дык а как?
а почему я в эту PonyProg влез???. Дело в том что прошивка у меня в .bin и eeprom тоже в .bin. иначе бы обошелся проссто UsbASP и дудой, но том прошиваются только .hex прошивки.
Как вариант - ну, саму прошивку залей через PonyProg, а фьюзы потом отдельно измени уже через UsbASP Прошитую в Пони "Прочитать" > "изменить"
Вариант 2 Открыть прошивку .bin в PonyProg, пересохранить «Сохранить как», файл в нём же, но уже как .нех
Пишу код для слейва в виде Attiny2313, суть такова: мастер AT90CAN128 отправляет значение частоты и номер генератора по SPI, а слейв принимает сигнал по USI и на основе полученных значений выдает частоту на выходе(переменная fG отвечает за частоту, nG за номер ножки на выходе). Проблема заключается в том, что частота присутствует на всех выходах тиньки, и она не соответствует отправленной по SPI. Код мастера:
#define CS PORTD3 // Chip select #define DO PORTB6 // MISO or Data Out #define USCK PORTB7 // Clock
unsigned int fG; unsigned int fG1; unsigned int fG2; unsigned int fG3; unsigned char nG; unsigned int N[]={1,8,64,256,1024};
volatile char reqID = 0; // This is for the first byte we receive, which is intended to be the request identifier volatile unsigned char index = 0; // this is to send back the right element in the array
void SpiSlaveInit() { #asm("cli") USICR = ((1<<USIWM0)|(1<<USICS1)); // Activate 3- Wire Mode and use of external clock but NOT the interrupt at the Counter overflow (USIOIE) PORTB |= 1<<CS; // Activate Pull-Up resistor on PB0 PCMSK|=1<<CS; // Active Interrupt on PB1 GIMSK|=1<<PCIE; // General Interrupt Mask Register / PCIE bit activates external interrupts #asm("sei") }
// If edge is falling, the command and index variables shall be initialized // and the 4-bit overflow counter of the USI communication shall be activated:
reqID = 0; index = 0; USICR |= (1<<USIOIE); USISR = 1<<USIOIF; // Clear Overflow bit } else{ // If edge is rising, turn the 4-bit overflow interrupt off: USICR &= ~(1<<USIOIE); } }
interrupt [USI_OVERFLOW] void usi_ovf_isr(void) { switch(reqID) { // Switch-Case to respond according to request from Master: case 0: // If reqID value is zero (just initialized), then first message is the reqID. reqID = USIDR; // Read in from USIDR register USISR = 1<<USIOIF; // Clear Overflow bit case 'T': // Write value to send back into USIDR and clear the overflow bit: USIDR = nG & 0x03; USISR = 1<<USIOIF; index++; // Increment index to transmit the folloing element next break; case 'H': // Write value to send back into USIDR and clear the overflow bit: USIDR = fG1; USISR = 1<<USIOIF; index++; // Increment index to transmit the folloing element next break; // Write value to send back into USIDR and clear the overflow bit: case 'B': USIDR = fG2; USISR = 1<<USIOIF; index++; // Increment index to transmit the folloing element next break; // Write value to send back into USIDR and clear the overflow bit: case 'I': USIDR = fG3; USISR = 1<<USIOIF; index++; // Increment index to transmit the folloing element next break; default: // Default option of Switch-Case. Send 'reqID' back for debugging. USIDR = reqID; fG=fG1+fG2+fG3; USISR = 1<<USIOIF; } }
На первый взгляд не понимаю всю логику устройства, но сначала замкните swich с break; в case 0: ... (если не намеренно: плюс условие вторым символом)
Логика такая: по внешнему прерыванию отслеживается начало-конец передачи, внешнее прерывание включает прерывание по переполнению 4-х битного таймера USI, в прерывании высчитывается значение переменных nG и fG и эти значения выставляют номер генератора и частоту. Брейк в конце не помог.
Более 20 строк чужого кода сложно анализировать: от идеи до реализации. А сам генератор работает? (без канала связи, со статической установкой частоты и канала в начале). Потом тестово можно закодировать данных (частота и канал) на входе, опять без канала связи. Останется неисправность/неточность в канале связи или на стороне передачи данных. Так устраните ошибку/неправильная настройка в каждой подсистеме.
Более 20 строк чужого кода сложно анализировать: от идеи до реализации. А сам генератор работает? (без канала связи, со статической установкой частоты и канала в начале). Потом тестово можно закодировать данных (частота и канал) на входе, опять без канала связи. Останется неисправность/неточность в канале связи или на стороне передачи данных. Так устраните ошибку/неправильная настройка в каждой подсистеме.
Без USI все работает, в цикле задаю переменные nG и fG и на выходе получается требуемая частота и требуемый выходной порт. Код мастера тоже рабочий, потому что раньше он работал, но к сожалению тинька сгорела вместе с прошивкой. Генерация частоты происходит на таймере1, в функции SetUpTim1A(unsigned int Foc) - подставляем значение частоты fG, там расчитывается значение регистра OCR1A. В функции void set_out_pin (unsigned char num) - подставляем значение nG, эта функция подставляет значение заданного вывода МК в функцию прерывания и таким образом генерируется частота. В функции SpiSlaveInit() - выставляются настройки USI и разрешаются внешние прерывания и прерывания по переполнению. В функции прерывания interrupt [EXT_INT1] void ext_int1_isr(void) - проверяется состояние пина PD3: при Falling edge - разрешаются прерывания по переполнению таймера USI, при Rising edge -запрещаются. В функции interrupt [USI_OVERFLOW] void usi_ovf_isr(void) - каждое прерывание считывается по байту входящей информации, и на основании полученных данных устанавливается значение fG и nG, ну и соответственно генерируется чатота на выходе. Но даже без мастера он дергает всеми пинами в произвольном порядке.
Цитата:
UPD: после того как подставил вычисление fG и nG в основной цикл, МК стал дергать PB0, на изменения в коде мастера не реагирует.
Разбейте все действие на заранее проверенные события (debug). Установите, напр. LEDs как исполнительные устройства, чтобы понять, что не работает: кодирование команды, передача ее по каналу связи, декодирование, выполнение ... - case 0, case 'T' ... Я бы добавил последовательный порт для контроля, но вряд ли в этом МК для него в память найдется место.
Скорректировал код, значения nG и fG, действительно нигде не записывались, но ничего не изменилось. Все так же на выходе PB0 4 герца. Сейчас буду пробовать отсеивать по очереди участки кода, но пока особо мыслей нет, теоретически все должно работать.
#define CS PORTD3 // Chip select #define DO PORTB5 // MISO or Data Out #define USCK PORTB7 // Clock
typedef union //объединение { unsigned long int w ; // w as WORD unsigned int h[2]; // h as HALF-WORD unsigned char b[4]; // b as BYTE } Union32;
Union32 dFi;
unsigned int fG; unsigned char nG; unsigned int N[]={1,8,64,256,1024}; unsigned char flag_RT = 0; unsigned char ch_num = 0;
volatile char reqID = 0; // This is for the first byte we receive, which is intended to be the request identifier volatile unsigned char index = 0; // this is to send back the right element in the array
void SpiSlaveInit() { #asm("cli") USICR = ((1<<USIWM0)|(1<<USICS1)); // Activate 3- Wire Mode and use of external clock but NOT the interrupt at the Counter overflow (USIOIE) PORTB |= 1<<CS; // Activate Pull-Up resistor on PB0 PCMSK|=1<<CS; // Active Interrupt on PD3 GIMSK|=1<<PCIE; // General Interrupt Mask Register / PCIE bit activates external interrupts #asm("sei") }
// If edge is falling, the command and index variables shall be initialized // and the 4-bit overflow counter of the USI communication shall be activated: reqID = 0; index = 0; flag_RT = 0; USICR |= (1<<USIOIE); USISR = 1<<USIOIF; // Clear Overflow bit } else{ // If edge is rising, turn the 4-bit overflow interrupt off: USICR &= ~(1<<USIOIE); } }
interrupt [USI_OVERFLOW] void usi_ovf_isr(void) { switch(reqID) { case 0: ch_num = USIDR; USISR = 1<<USIOIF; // Clear Overflow bit reqID++; break; case 1: dFi.b[0] = USIDR; USISR = 1<<USIOIF; // Clear Overflow bit reqID++; break; case 2: dFi.b[1] = USIDR; USISR = 1<<USIOIF; // Clear Overflow bit reqID++; break; case 3: dFi.b[2] = USIDR; USISR = 1<<USIOIF; // Clear Overflow bit reqID++; flag_RT = 1; break; } }
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения