Jump to content

vis-vetal

Members
  • Posts

    100
  • Joined

  • Last visited

Posts posted by vis-vetal

  1. Сопротивление провода, конечно, бытовым мультиметром не померить. Его можно косвенно предположить по подобным таблицам (тыц). При длине в 10метром и сечении провода 0,5-0,75 мм2 вы получите сопротивление не более 0,3 ом. что на 200 ватах даст потерю в 15 вт (при такой мощности разница врятли будет заметна). А на 50 вт, при таком проводе вы теряете 3,5 вт. (Это всё считал на динамик 8ом) Считается это просто - Узнаёте напряжение на выходе вашего усилителя (корень квадратный из (мощность умножить на сопротивление динамика) ). Провод с динамиком образует делитель напряжения в котором верхнее плечо - провод, а нижнее динамик, считаете падение напряжения на проводе. А потом считаете сколько мощности рассеивается на динамике с оставшимся напряжением. Только стоит учитывать то, что зависимость звукового давления квадратичная. То есть увеличение мощности в четыре раза, приводит к увеличению громкости только в два. То есть потеря 3 вт из 50 - это ничтожно мало.

  2. Старые нокии и так заряжаются от 6-ти вольт. А современные заряжатся не будут, но и врятли сгорят, контроллер уйдёт в защиту. Я переделывал старое нокиевское автомобильное зарядное (в нём было 6 В) под свой fly. Вплоть до 5.3 В телефон зарядку не брал, по всей видимости стоит защита по стандарту USB 5,25 - 4,75.

  3. Всем привет. Столкнулся с проблемой, может кто уже сталкивался с подобным, или может хоть подскажите в какую сторону смотреть. Дело вот в чём: простая тестовая программа, передранная целиком и полностью из интернета(упростил в процессе поиска глюка, потом по функциям всё разложу) передаёт число 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){ }
    }
    

    post-48585-0-94993200-1405013710_thumb.jpg

  4. Здравствуйте. Кто нибудь пробовал ATMEL FPSLIC, то есть ПЛИС и AVR микроконтроллер на одном кристалле. Я ищу о них побольше инфы. Они ещё выпускаются? Где можно купить, и сколько стоят? На чём писать, и чем прошивать? В общем, кто сталкивался, подкиньте,пожалуйста, статей, названия книг, собственных историй.

  5. Тут уж как сам пожелаешь, можешь хоть полностью с чистого листа их записать, можешь просто считать, а потом поправить. Я пользуюсь вторым вариантом, но как я уже сказал в прошлых сообщениях, на экстрим бурнере довольно непривычный способ выставления фьюзов.

    А насчёт RSTDISBL, добрые люди уже сдеали такую штуковину ATmega FUSEBIT Doctor называется. Но ради одного контроллера собирать его нет смысла, выйдет в три раза дороже.

  6. Лично у меня, когда только учился работать с AVRками, 3й вариант очень часто случался. На 10 контроллеров 3-4, с неправильным источником тактирования, 2 сдохло, остальные работают. Умирают они редко, у меня умирали тьлько от КЗ, статику, переполюсовку, перегрев переживали.

  7. Чтоб загрузить картинку на сайт, сначала внизу, возле надписи "Добавить файлы " жмёш обзор, открываешь файл, потом "прикрепить файл", а после этого появляется картинка, а возле неё - "прикрепить к сообщению". А насчёт фьюзов, я к казаме так и не привык, попробуй 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)МК мёртв.

  8. Ну тогда, для начала вставьте в панельку заведомо рабочий контроллер, и во время программирования измерьте напряжение на выводах питания. Этот программатор скорее всего отключает контроллер во время бездействия, хотя может и нет. Можно просто повесить светодиод с резистором на выводы питания и нажать "программировать". Если светодиод моргнул, значит питание есть. Второй причиной этой ошибки может выступать источник тактирования, без осцилла это проверить сложно, так что просто попробуйте разные режимы DIP-переключателя на плате с панельками(там всего 3 режима они описаны в pdf-ке к плате), также стоит попробовать разные скорости(в казаме где-то был раздел program option/ ISP Clock speed). Ну если и это уже не поможет, то остаётся только одно - вскрывать программатор и прозванивать контакты от самого камня программатора до какой нибудь панельки.

  9. Да, AVRdude перевёл контроллер в режим тактирования от внешнего генератора, и конечно же потерял его. Так что теперь впредь подобного не случилось, я перешел на eXtreme Burner.

  10. Доброго времени суток. Уважаемые владельцы клона AVRISP MKII, подскажите как подключить это чудо к AVR Studio 6 (я на 6.1 пишу, но и 6.0 сгодится). Я так понял нужна последняя прошивка. Собирал вот эту версию, и она при подключении к студии 6.1 не пашет, студия требует обновить прошивку програматора, а 6.0 вобще его не видит.

    Или если это невозможно, то подскажите какую нибудь отдельную программу/оболочку для прошивки.

  11. Здравствуйте уважаемые форумчане. Столкнулся со следующей проблемой: захотелось мне прошить 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
    

    Два раз прозвонил макетку, проверил напряжение. Подскажите, пожалуйста, что ещё проверить, что попробовать.

  12. Скорость настроил на 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);// послать СТОП
    

  13. Доброго времени суток. Господа, выручайте, столкнулся со следующей проблемой:

    Работаю с инородной микросхемой 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);// послать СТОП
    

  14. Доброго времени суток. Скажите пожалуйста, кто нибудь сталкивался с творением Analog Device ADP1046? Можно ли на нём задать время рестарта, или оно стандартное? Он приспособлен только к 12ти выходным вольтам, или можно и больше?

    update: на первый вопрос ответ нашол, время рестарта выставляется в "flag settings"

  15. Скажите пожалуйста, кто нибудь работал с АЦП AD9200 или AD9280(они с одинаковыми выводами, но с разным разрешением). Ато вот подключил к LPT(как тут ) по схеме из датащита, а он мне всякую каку выдаёт, шум не зависящй от состояния входа.

    Посоветуйте что попробовать, и что проверить. Заранее спасибо.

    Схема из датащита:

    1feeffd749bet.jpg

×
×
  • Create New...