vis-vetal
-
Постов
100 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные vis-vetal
-
-
Старые нокии и так заряжаются от 6-ти вольт. А современные заряжатся не будут, но и врятли сгорят, контроллер уйдёт в защиту. Я переделывал старое нокиевское автомобильное зарядное (в нём было 6 В) под свой fly. Вплоть до 5.3 В телефон зарядку не брал, по всей видимости стоит защита по стандарту USB 5,25 - 4,75.
0 -
Если знакомы с китайскими магазинами или ebay то просто напишите "DIY Kit" и выбирайте.
0 -
Всем привет. Столкнулся с проблемой, может кто уже сталкивался с подобным, или может хоть подскажите в какую сторону смотреть. Дело вот в чём: простая тестовая программа, передранная целиком и полностью из интернета(упростил в процессе поиска глюка, потом по функциям всё разложу) передаёт число 0х44 в устройство с адресом 0х12 по I2C.
Настроил тактирование контроллера, порты и сам интерфейс. Бросаю стартовый бит, нормально. Бросаю адрес, отлично. Отсылаю байт данных, а на выходе идёт 18 бит, то бишь 2 байта. В чём моя ошибка? Контроллер stm32f103C8T6. Среда - coocox.
Да там ещё была загвоздка, вместо проверки на окончание передачи адреса и самого байта пришлось ставить задержки. Я знаю что это колхоз, но не смог найти какой флаг проверять. Если кто подскажет буду очень рад.
Привожу код и скрин с анализатора.
#include "stm32f10x_gpio.h" #include "stm32f10x_i2c.h" #include "stm32f10x_rcc.h" //******************************************************************************** unsigned char InitClk() { unsigned long int TimeOut = 10000; //Запустить HSE RCC->CR |= RCC_CR_HSEON; //Включить генератор HSE while((RCC->CR & RCC_CR_HSERDY)==0) //Ожидание готовности HSE if(TimeOut) TimeOut--; if(TimeOut==0) return 1; //Ошибка!!! Генератор HSE не запустился RCC->CR |= RCC_CR_CSSON; //Разрешить работу системы защиты сбоя HSE //Подключить систему к HSE RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала RCC->CFGR |= RCC_CFGR_SW_HSE; //Выбрать источником тактового сигнала HSE //Настроить делитель для AHB RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler" RCC->CFGR |= RCC_CFGR_HPRE_DIV2; //Установить "AHB Prescaler" равным 2 return 0; //Все ok, работаем от HSE } //******************************************************************************** //Function: обработчик прерывания при сбое генератора HSE // //******************************************************************************** void NMI_Handler(void) { //Сбросить флаг системы контроля сбоя HSE if (RCC->CIR & RCC_CIR_CSSF) RCC->CIR |= RCC_CIR_CSSC; //Если контроллер здесь, значит HSE не работает //Что-то можно предпринять: перезапустить генератор, дать сигнал аврии и т.п. } //******************************************************************************** GPIO_InitTypeDef gpio; I2C_InitTypeDef i2c; /*******************************************************************/ void init_I2C1(void) {//Конфигурация I2C и портов под него GPIO_PinRemapConfig(GPIO_Remap_I2C1, DISABLE); GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; I2C_DeInit (I2C1); GPIO_DeInit(GPIOB); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 50000; I2C_Init(I2C1, &I2C_InitStructure); I2C_Cmd(I2C1, ENABLE); } int main(void) { InitClk(); init_I2C1(); uint8_t transmissionDirection = I2C_Direction_Transmitter; uint8_t slaveAddress = 0x12; // Генерируем старт - тут все понятно ) I2C_GenerateSTART(I2C1, ENABLE); // Ждем пока взлетит нужный флаг while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, slaveAddress, transmissionDirection); uint8_t i; for(i=0;i<0x50;i++);//Задержка на время адреса uint8_t data = 0x44; I2C_SendData(I2C1, data); for(i=0;i<0x70;i++);//Задержка на время данных I2C_GenerateSTOP(I2C1, ENABLE); while(1){ } }
0 -
Здравствуйте. Кто нибудь пробовал ATMEL FPSLIC, то есть ПЛИС и AVR микроконтроллер на одном кристалле. Я ищу о них побольше инфы. Они ещё выпускаются? Где можно купить, и сколько стоят? На чём писать, и чем прошивать? В общем, кто сталкивался, подкиньте,пожалуйста, статей, названия книг, собственных историй.
0 -
Люди, а кто нибудь смог конвертировать файлы SPlan7, для открытия в SPlan6 ?
0 -
Согласно USB протоколу передача должна проходить на напряжении 3,3в, 3,6 сильно много.
0 -
Открой everest и посмотри есть ли на порту хоть какое-то устройство, если там вообще пусто то попробуй добавить резистор на 4,7 КОм между USB D- и землёй, и попробуй поменять стабилитроны, поставь на 3,3в.
0 -
Каждому своё.
0 -
Тут уж как сам пожелаешь, можешь хоть полностью с чистого листа их записать, можешь просто считать, а потом поправить. Я пользуюсь вторым вариантом, но как я уже сказал в прошлых сообщениях, на экстрим бурнере довольно непривычный способ выставления фьюзов.
А насчёт RSTDISBL, добрые люди уже сдеали такую штуковину ATmega FUSEBIT Doctor называется. Но ради одного контроллера собирать его нет смысла, выйдет в три раза дороже.
0 -
Лично у меня, когда только учился работать с AVRками, 3й вариант очень часто случался. На 10 контроллеров 3-4, с неправильным источником тактирования, 2 сдохло, остальные работают. Умирают они редко, у меня умирали тьлько от КЗ, статику, переполюсовку, перегрев переживали.
0 -
Чтоб загрузить картинку на сайт, сначала внизу, возле надписи "Добавить файлы " жмёш обзор, открываешь файл, потом "прикрепить файл", а после этого появляется картинка, а возле неё - "прикрепить к сообщению". А насчёт фьюзов, я к казаме так и не привык, попробуй eXtreme Burner. Там фьюзы задаются в числовом виде, для новичка очень непривычно, но есть хитрость. Я пишу на AVR Studio, там есть встроенный программатор(и его симулятор). Заходишь в студию/Tools/Device programming/ - там выбераешь необходимый девайс, выставляешь фьюзы, и студая показывает эти числовые значения для LOW и HIGH fuse. Их вписываешь в экстрим бурнер, и не надо никаких датащитов и онлайн калькуляторов фьюзов.
Ошибка из первого сообщения означает "не могу прочитать программируемое устройство". Она может быть по пяти вариантам:
1) На записуемом камне нет питания (это можно проверить тестером, или с помощью светодиода);
2)Плохой контакт(или его нет) на линиях передачи MOSI/MISO/SCK/RES (проверяется тестером, или прошивкой другого МК);
3)Неправильный тип генертора(быват 4 типа - внутренний, внешний RC, внешний кварц, внешний генератор, я это проверяю методом тыка http://avrdevices.ru/ispravlenie-fyyuzov-avr/)
4) Зашит фьюз reset disable (вывод RST теперь порт ввода вывода) или SPI enable (последовательное программирование отключено) (лечится параллельным порграмматором);
5)МК мёртв.
0 -
Ну тогда, для начала вставьте в панельку заведомо рабочий контроллер, и во время программирования измерьте напряжение на выводах питания. Этот программатор скорее всего отключает контроллер во время бездействия, хотя может и нет. Можно просто повесить светодиод с резистором на выводы питания и нажать "программировать". Если светодиод моргнул, значит питание есть. Второй причиной этой ошибки может выступать источник тактирования, без осцилла это проверить сложно, так что просто попробуйте разные режимы DIP-переключателя на плате с панельками(там всего 3 режима они описаны в pdf-ке к плате), также стоит попробовать разные скорости(в казаме где-то был раздел program option/ ISP Clock speed). Ну если и это уже не поможет, то остаётся только одно - вскрывать программатор и прозванивать контакты от самого камня программатора до какой нибудь панельки.
0 -
А есть осциллограф, или хотя бы мультиметр?
0 -
Да, AVRdude перевёл контроллер в режим тактирования от внешнего генератора, и конечно же потерял его. Так что теперь впредь подобного не случилось, я перешел на eXtreme Burner.
0 -
Доброго времени суток. Уважаемые владельцы клона AVRISP MKII, подскажите как подключить это чудо к AVR Studio 6 (я на 6.1 пишу, но и 6.0 сгодится). Я так понял нужна последняя прошивка. Собирал вот эту версию, и она при подключении к студии 6.1 не пашет, студия требует обновить прошивку програматора, а 6.0 вобще его не видит.
Или если это невозможно, то подскажите какую нибудь отдельную программу/оболочку для прошивки.
0 -
Да, вы были правы, спасибо.
0 -
Здравствуйте уважаемые форумчане. Столкнулся со следующей проблемой: захотелось мне прошить ATmega640 через AVRdude(программатор USBasp). Подключил и прочитал память, всё считалось, dude мне написал :
avrdude: safemode: lfuse changed! Was 62, and is now 0 Would you like this fuse to be changed back? [y/n]
я подтвердил, а после этого контроллер не находится и ни на что не реагирует. Теперь пишет:
avrdude.exe: error: programm enable: target doesn't answer. 1 avrdude.exe: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
а если добавить -F:
avrdude.exe: error: programm enable: target doesn't answer. 1 avrdude.exe: initialization failed, rc=-1 avrdude.exe: AVR device initialized and ready to accept instructions avrdude.exe: Device signature = 0x000000 avrdude.exe: Yikes! Invalid device signature. avrdude.exe: Expected signature for ATMEGA640 is 1E 96 08
Два раз прозвонил макетку, проверил напряжение. Подскажите, пожалуйста, что ещё проверить, что попробовать.
0 -
Скорость настроил на 100кГц. Дописал инициализацию TWI и после этого всё заработало. Огромное вам спасибо. Для будущего поколения вот что я исправил:
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ; //послать СТАРТ _delay_us(20); //подождать TWDR = addr; //выбираем адресс TWCR = (1<<TWINT) | (1<<TWEN); // посылаем адресс _delay_us(20); //подождать TWDR = reg; // выбираем регистр TWCR = (1<<TWINT) | (1<<TWEN);//отпраляем данные _delay_ms(1); //подождать TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ; //послать ПОВТОРНЫЙ СТАРТ _delay_us(20); //подождать TWDR = addr+1; //выбираем адресс, +1 означает чтение TWCR = ((1<<TWINT) | (1<<TWEN) | (0<<TWEA)); // посылаем адресс _delay_us(200); //ждём пока передаст TWCR = ((1<<TWINT) | (1<<TWEN) | (1<<TWEA));//инициализируем приём _delay_us(300);//ждём пока прийдёт data_5 = TWDR;// сохраняем принятый байт TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);// послать СТОП
0 -
Доброго времени суток. Господа, выручайте, столкнулся со следующей проблемой:
Работаю с инородной микросхемой ADP1046 по i2c, по протоколу считывания нужно: послать адрес на запись, послать регистр на запись, послать повстарт, послать адрес на считывание, считать байт. Код упростил до максимума, убрал все условия проверки. Смотрю по осциллографу, контроллер все посылает, а когда доходит до приёма, по SCL нет тактов, и ADP1046, естественно молчит. Подскажите пожалуйста, что я делаю не так?
Код брал из датащита меги.
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ; //послать СТАРТ _delay_us(20); //подождать TWDR = addr; //выбираем адресс TWCR = (1<<TWINT) | (1<<TWEN); // посылаем адресс _delay_us(20); //подождать TWDR = reg; // выбираем регистр TWCR = (1<<TWINT) | (1<<TWEN);//отпраляем данные _delay_ms(1); //подождать TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ; //послать ПОВТОРНЫЙ СТАРТ _delay_us(20); //подождать TWDR = addr+1; //выбираем адресс, +1 означает чтение TWCR = ((1<<TWINT) | (1<<TWEN) | (0<<TWEA)); // посылаем адресс _delay_us(400); //ждём пока прийдёт data_5 = TWDR;// сохраняем принятый байт TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);// послать СТОП
0 -
Доброго времени суток. Скажите пожалуйста, кто нибудь сталкивался с творением Analog Device ADP1046? Можно ли на нём задать время рестарта, или оно стандартное? Он приспособлен только к 12ти выходным вольтам, или можно и больше?
update: на первый вопрос ответ нашол, время рестарта выставляется в "flag settings"
0 -
Лучше USB HID. Чтоб без преобразователя. http://we.easyelectr...s-na-v-usb.html
0 -
-
Скажите пожалуйста, кто нибудь работал с АЦП AD9200 или AD9280(они с одинаковыми выводами, но с разным разрешением). Ато вот подключил к LPT(как тут ) по схеме из датащита, а он мне всякую каку выдаёт, шум не зависящй от состояния входа.
Посоветуйте что попробовать, и что проверить. Заранее спасибо.
Схема из датащита:
0 -
Понятно, большое спасибо. Замотал двойник в пакет, как погода стабилизируется поробую попирикидывать порты на дисеке, а если не поможет буду звонить мастеру.
0
Как расчитать колоночный кабель?
в Корзина
Опубликовано
Сопротивление провода, конечно, бытовым мультиметром не померить. Его можно косвенно предположить по подобным таблицам (тыц). При длине в 10метром и сечении провода 0,5-0,75 мм2 вы получите сопротивление не более 0,3 ом. что на 200 ватах даст потерю в 15 вт (при такой мощности разница врятли будет заметна). А на 50 вт, при таком проводе вы теряете 3,5 вт. (Это всё считал на динамик 8ом) Считается это просто - Узнаёте напряжение на выходе вашего усилителя (корень квадратный из (мощность умножить на сопротивление динамика) ). Провод с динамиком образует делитель напряжения в котором верхнее плечо - провод, а нижнее динамик, считаете падение напряжения на проводе. А потом считаете сколько мощности рассеивается на динамике с оставшимся напряжением. Только стоит учитывать то, что зависимость звукового давления квадратичная. То есть увеличение мощности в четыре раза, приводит к увеличению громкости только в два. То есть потеря 3 вт из 50 - это ничтожно мало.