Jump to content

    

B_Sergey_N

Участник
  • Content Count

    15
  • Joined

  • Last visited

Community Reputation

0 Обычный

About B_Sergey_N

  • Rank
    Участник

Контакты

  • Сайт
    http://

Информация

  • Город
    г. Санкт-Петербург
  1. Всем привет. К USB через VCP подключено некое самодельное устройство, которое постоянно шлёт данные. При загрузке винда определяет, что это Ballpoint трекбол для последовательного порта, поэтому после загрузки начинает по экрану скакать курсор и нажиматься "кнопки" псевдо-"мыши". Как сообщить винде (ключом в реестре, ini-файлами, другими способами), что как раз не надо ничего определять на этом COM-порту? Может можно как-то перепрошить eeprom память FTDI?
  2. DataFlash AT45DB161

    Цитата(aaarrr @ Oct 6 2008, 14:58) Если данные меняются из '0' в '1', то без стирания никак. =)) Блин, точно. Спасибо
  3. DataFlash AT45DB161

    Все, понял, спасибо! А вот такой вопрос, необходимо ли стирать флэш, или можно сверху перезаписывать данные?
  4. DataFlash AT45DB161

    Привет всем!! Народ, кто мучил память AT45DB161 в SOIC корпусе? Там нету пина RDY/BUSY. Как проверять на занятость памяти перед записью или чтением?
  5. Переключение между каналами АЦП

    Большое спасибо всем за ответы!!! Особенно спасибо SysRq, я воспользовался его предложением. Все-таки на мой взгляд без прерываний жить легче =). Вечно у меня с ними какие-то проблемы! ))
  6. Всем привет. Как можно переключаться между каналами АЦП? К примеру, мне необходимо: сделать преобразование, прочитать один канал (Vbg), затем опять сделать преобразование и прочитать канал ADC0. Выкладываю код, переключения между каналами не происходит. Код#include <util/delay.h> #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 16000000 int i, flag, t; void main(void) { DDRA |= (1 << 1)|(1 << 2)|(1 << 6)|(1 << 7);         // Инициализация светодиодов ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Установка частоты преобразования 125KHz ADCSRA |= (1 << ADEN);              // Вкл. АЦП ADCSRA |= (1 << ADIE);              // Разрешение прерывания от компаратора sei();     for(;;)     {              flag = 1;     ADMUX |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4);     // Выбор входного канала АЦП - Vbg                 ADCSRA |= (1 << ADSC);        // Запуск преобразования                                          flag = 0;         ADMUX |= 0;             // Выбор входного канала АЦП - ADC0         ADCSRA |= (1 << ADSC);        // Запуск преобразования     } } //********************************************************************************// ISR(ADC_vect) {                   if (flag == 1)             {              i = ADCL;        // Чтение младших 8 битов первыми              i += (int)ADCH << 8;    // Чтение старших 2 битов, умножение их на 256 и сложение с мл. б.                          if (i < 255)             {             // Питание контроллера падает             _delay_ms(200);             PORTA |= (1 << 6);                      _delay_ms(200);                      PORTA &= ~(1 << 6);             }             }          if (flag == 0)     {              t = ADCL;        // Чтение младших 8 битов первыми     t += (int)ADCH << 8;    // Чтение старших 2 битов, умножение их на 256 и сложение с мл. б.                  if (t < 830)         {         _delay_ms(200);         PORTA |= (1 << 1);                  _delay_ms(200);                  PORTA &= ~(1 << 1);         }                          else             {                                  _delay_ms(200);                 PORTA |= (1 << 2);                          _delay_ms(200);                          PORTA &= ~(1 << 2);             }     } } Не знаю, необходим ли reti из прерывания?
  7. Контроль за питанием ATmega32

    Цитата(defunct @ Aug 30 2008, 05:46) Вы поняли о чем я говорю? Напряжение питания чипа можно измерить без внешних компонентов внутренним каналом Vbg. Для это нужно: 1. выбрать reference - AVCC; 2. снять показания канала Vbg; 3. расчитать по формуле (приведенной ниже) напряжение питания. VCC = 1.22 * 1024 / ADC Куда тут делитель подключать? И ток где ограничивать собирались? Получается, что мне надо будет снимать показания с двух каналов, первый - это канал Vbg, второй канал ADC0, на который приходит измеряемый сигнал. Как это программно реализовать, одновременное считывание каналов, переключаться просто в ADMUX?
  8. AD7476 и ATmega32

    Хорошо, спасибо большое за подсказки. Возник теперь такой вопрос: Как передать 16-ти разрядное число по USARTу, можно так настроить USART, что бы он понимал что передается одно число 2-мя байтами? Это для того что бы на приемной стороне не надо было самому склеивать два полученных байта в одно число. По USARTу подключен Bluetooth к атмеге, передача происходит фактически по беспроводному COM порту на комп.
  9. AD7476 и ATmega32

    Цитата(GDI @ Aug 25 2008, 10:33) МК у вас выступает как мастер, значит именно он должен генерировать клоки, а чтобы он начал это делать на до что то поместить в регистр данных SPI, т.е. в SPDR. Клоки при этом генерируются аппаратно и все времянки определяются настройками SPI. А если вы сами будете дергать ногой CLK то это будет уже программный SPI и вам самому надо будет организовывать считывание битов с MISO и размещение их в какой то переменной, что работает намного медленнее аппаратной реализации. Аа..Все, вот теперь понял, Огромное спасибо! С Уважением, Сергей.
  10. AD7476 и ATmega32

    Заработало!!! Всем спасибо, особенно GDI. Но я так и не могу понять, зачем перед тем как что-то принять, надо каждый раз чем-то забивать SPDR? Неужели только из-за подачи клоков? А я не могу разве просто дергать ногой SCLK и следить за спадом и поднятием фронтов? А и еще, читал что задержки всякие надо делать, между клоками и еще чем-то, хотя они настолько малы, там всего ns какие-то. Вроде без задержек всяких работает. Спасибо, Сергей.
  11. AD7476 и ATmega32

    Всем привет. Подключил АЦП 12 битовый к ATmega32 по SPI. Но никак не могу понять как принимать данные с АЦП. У SPI есть 8-разрядный сдвиговый регистр, мне же надо принять сразу 12 (точнее 16, но первые 4 бита нули). Каким образом? Как двигать и записывать эти биты. Прикрепляю datasheet АЦП, может кто захочет взглянуть. Инициализация SPI вроде правильна: Код// Установить PB5(MOSI), PB7(SCK) как выходы DDRB    = (1<<PB5)|(1<<PB7)|(1<<PB4); PORTB   = 0xFF;     DDRC    = (1 << PC0);   // PС0(/СS) выход PORTC  |= (1 << PC0);          // Включаю SPI в режиме мастер с SCK = CK/4 = 4МГц         SPCR    = (1<<SPE)|(1<<MSTR)|(1<<CPOL);         SPSR    = (1<<SPI2X);  // Удваиваю скорость до 8МГц После этого написал так, светодиоды использ. для проверки. Код                       while(1)     {     PORTC &= ~(1 << 0); // Включаю АЦП          _delay_ms(1);                      //while(PINB6 == 0);                      while (!(SPSR & (1<<SPIF)));     PORTC |= (1 << 0); // Отключил АЦП                                  if (SPDR <= 256)             {                 // Мигаю светодиодом                                  _delay_ms(50);                 PORTA |= (1 << 1);                          _delay_ms(500);                          PORTA &= ~(1 << 1);             }             else             {                  // Подмигиваю                                  _delay_ms(50);                 PORTA |= (1 << 2);                          _delay_ms(50);                          PORTA &= ~(1 << 2);             }                 } Знаю, что не правильно, поэтому спрашиваю. Буду очень признателен за помощь, а то уже не знаю сколько перечитал всего, так и не разобрался. Было бы совсем не плохо, если бы выложили код. А и еще, программатор подключен тоже по SPI. Могут ли возникнуть с этим проблемы? На всякий случай отрубаю его от схемы перед подачей сигнала на АЦП. Спасибо, Сергей.
  12. Контроль за питанием ATmega32

    Всем огромное спасибо, пойду пробовать. Отпишусь позже о проделанном!!
  13. Контроль за питанием ATmega32

    Цитата(VDG @ Aug 9 2008, 02:44) Тогда все проще. Хватит встроенного компаратора и делителя на дополнительном стабилизаторе, например на 3V. На самом деле питание от 3-х батареек, т.е. 4,5В, затем повышающий стабилизатор до 5В. А можно чуть поподробнее насчет компаратора и делителя, зачем стабилизатор на 3В? Схематично как это будет выглядить. Спасибо.
  14. Контроль за питанием ATmega32

    Цитата(VDG @ Aug 9 2008, 02:23) Нормальное питание у него одно: 5V. Как к примеру будете контроллировать питание 2V, когда сам контролллер уже после 4V не соображает и выключен BOD-ом? По даташиту питание у контроллера 4,5 - 5,5В Я подаю 5В, при снижении ниже 4,5В должен показать это диодами
  15. Всем привет! Задача следующая. Необходимо контролировать питание контроллера, индикация светодиодами: ну например при нормальном питании - один цвет, при падающем - свечение меняется. Решил использовать внутренний АЦП, но не знаю как, какой, к примеру, лучше использовать Aref. Читал здесь на форуме, но так и не нашел нормального ответа. Изначально все было так: AVcc соединялся с AREF; к AVcc, ADC0 и земле припаял переменник; и теперь на ADC0 подавалось половина AVcc. Ну запустил AЦП, вроде все заработало, при изменении переменником напряжения на ADC0 измнялась и индикация, вот, но потом понял, что ступил, так как при изменении самого напряжения питания контроллера ничего не работало, уровень на ADC0 относительно AVcc не менялся. Короче, народ, подскажите плиз, как лучше сделать такую штуковину.