Перейти к содержанию
    

vesago

Свой
  • Постов

    747
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные vesago


  1. Я бы однозначно USB оставил. Сейчас многие ноутами пользуются, кабель проще, эстетичнее. Все равно на хосте виртуальный ком открывается - если есть желание посомтреть обмен. Опять-же с питанием проблема решается. Для данного применения самое то.

  2. Можете еще для коллекции попробовать http://electronix.ru/forum/index.php?showtopic=35872&hl=

    По крайней мере AT200 маленькая :)....

     

    Действительно хорошая альтернатива сабжу. Я сам предпочитаю консольные тулзы с запуском батником. Спасибо, zltigo за предоставленную возможность.

  3. Шальная идея - какие-то проблемы чисто на железном уровне. Вообще подобная картина при считвании может быть при соплях на адресных ногах памяти. Возможно действительно какие ноги подгорели. Посмотрите как сигналы на управляющих ногах типа чтения, записи, сброса.

  4. Вот мой TWI. Вроде еще вверху в примерах имеются. Работает отлично. Мой правда сложноват - я писал сначала под LPC - там хотел для экономии времени на конечных автоматах сделать при обработке значительных блоков данных. Для авр лень было переписывать. Отлаживать можно и по SPI - ниже есть программатор - клон аврисп на меге8. Под него есть прошивка которая отладочную инфу с таргета по SPI и через программатор в компорт. Но лучьше приобщайтесь к передовым технологиям - не побоюсь вам порекомендовать самопальный JTAGICE. Схема прилагается + прошивка общеизвестная. Я пользовал этот загрузчик.

    P_CAD_EDA____Sheet1_.pdf

    twi.rar

  5. Не совсем понятно - интересует особенности работы с данной микросхемой или идеология работы со внешней памятью. Если первое - лучьше как всегда почитать мануал. Если второе, заводите пару функций типа u8_t Read_EEPROM(u16_t addr, u8_t len, u8_t *buf); u8_t Write_EEPROM(u16_t addr, u8_t len, u8_t *buf); Если несколько одинаковых записей, в качестве addr передаете номер записи, умноженный на размер записи ну и опционально плюс смещение.

  6. В датафлеши у меня журнал, в фрам указатели. В датафлеши журнал копится в срам буфере, потом перемещается во флешь по мере заполнения с корректировкой указателей в фрам. Пока данные в статической памяти, указатели тоже в раме. В общем если нет данных во флеше - нет кривых указателей в фрам. Получается в случае проблем с питанием я сразу сохраняю страницу во флеше + пишу указатели. Если не подключен жтаг все нормально работает даже при 8В пороге. Ниже не эксперементировал. EEPROM я использую редко. В основном датафлешь.

  7. У меня дивайс на m128 + fm31256 + at45db161. Я постоянно посредством ацп контролирую питание. На питании этого добра стоит здоровый электролит, питание на который пропущено через полевик, дабы при потере питание, периферия не высосала остатки энергии. При снижении входного питания вольт до 9 - сохраняю.

  8. Проблема в том, что нельзя быть рабом внутрисхемного эмулятора, размягчать себе мозги, писать не думая и каждую строчку 2+2= проверять.

     

    + 1. имхо асм + консольная отладка действительно культивируют самодисциплину. Но так не хочется вырываться из сладкого плена си + внутрисхемного эмулятора.

  9. Да, жостка. Я тоже страдаю такого рода описками. Плюс бывает перед циклом do while забываю проинициализировать локальную переменную цикла. Хорошо, если стек просадит и камень перегружается - тогда ясно. В таких случаях требуется аналитических подход для локализации.

  10. Лучше сказать более обтекаемо - симуляторами можно пользоваться для проверки всяких арифметик, но не для отладки периферии - более или менее корректно симулируются только порты ВВ, остальное - таймеры/усарты/и2ц/ацп и т.п. - сплошные глюки и нелепости

     

    +1. Алгоритмические вещи проверяю в симуляторе. Содержимое памяти и опреации они все нормально воспроизводят. Остальное - внутрисхемный отладчик. Эта штука кажется ненужной, пока не попробуешь. Потом любых денег не жалко будет. Раньше тоже отлаживал через уарт и светодиодами. Потом преодалел лень - собрал айс (m16 + 2 транзистора и диод + на пальцах посчитать росыпи). Очень бережет нервы и время.

    Периферию в симуляторе конечно не проверишь. Некоторое исключение - кейл. Я в нем и связь с хостовой программой отладил и i2c. Но все равно прикупил мтлинк.

  11. Я когда начал писать в кейле тоже был огорчен хедерами особенно после яра авр. Выдрал кажись из кроссворкса или из яра то что касалось битов. Что не устраивало - поправил. Вместе с родным подключаю и свой. Можете сделат аналогично.

    bit_defines.rar

  12. Вот примерчик инициализации

    void USART_Init( unsigned int baudrate )
    {
      unsigned char x;
    
      UBRRH = (unsigned char) (baudrate>>8);
      UBRRL = (unsigned char) baudrate;
    
      UCSRA = (1 << U2X);
      /* Enable UART receiver and transmitter */
      UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) | ( 1 << TXCIE ));
    
      /* Set frame format: 8 data 2stop */
      UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
    
      /* Flush receive buffer */
      x = 0;
    
      USART_RxTail = x;
      USART_RxHead = x;
      USART_TxTail = x;
      USART_TxHead = x;
    }

     

    зы тоже как-то накололся - писал для m168, m128 - проблем не было. Потом вствил драйвер в код для m16 - перестало работать. Что только не делал - даже макс232 перепаял. Потом, когда уже когда ничего не оставалось, заглянул в даташит. Воистину "Если ты всё перепробовал, и ничего не получается, прочти, наконец, инструкцию. (Вольное переложение закона Мерфи)"

  13. В некоторых аврах кое-какие регистры уарта совмещены. В соответствующем регистре надо выставить или сбросить битик при доступе к нужному регистру. Внимательно сравните описание уарта 2313 и м8. В частности бит URSEL UCSRC. Я так понимаю после его выставления работа идет с UCSRC. У вас он выставляется. Попробуйте инициализировать скорость перед инициализацией контрольного регистра.

  14. А вот еще по мотивам туксграфа. Если студии не понравится версия исп - в гипере на 115200 пару раз тыркнуть на ввод и ввести вопрошаемую версию. Уважаемый Гудвин поправил оригинальную прошивку - доступны версии с выводом тактирования как в авреале + передача отладочной инфы по SPI.

    avrisp_stk500.rar

  15. Не совсем понял Ваш код в прерывании. Зачем нужна проверка флага?

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

  16. Для 485 я пользую следующие конструкции:

    //POPTE
    #define RXD0                0
    #define TXD0                1
    
    #define RS485_DDR           DDRE
    #define RS485_PORT          PORTE
    #define RS485_PIN           PINE
    
    #define GL_BUS_DIR          2
    #define Global_Bus_RS485_Dir_RX() {RS485_PORT &= ~(1<<GL_BUS_DIR);}
    #define Global_Bus_RS485_Dir_TX() {RS485_PORT |= (1<<GL_BUS_DIR);}
    
    #define LL_BUS_DIR          3
    #define Local_Bus_RS485_Dir_RX()  {RS485_PORT &= ~(1<<LL_BUS_DIR);}
    #define Local_Bus_RS485_Dir_TX()  {RS485_PORT |= (1<<LL_BUS_DIR);}
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Запрет приема
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void USART0_DisableRecive(void)
    {
      UCSR0B &= ~(1 << RXEN0);
      Global_Bus_RS485_Dir_TX();
    }
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Разрешение приема
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void USART0_EnableRecive(void)
    {
      Global_Bus_RS485_Dir_RX();
      UCSR0B |= (1 << RXEN0);
    }
    
    
    #pragma vector=USART0_TXC_vect
    __interrupt void USART0_TX_interrupt( void )
    {
      if((usart0.flags & (1<<USART0_FLAG_TX_COMPLETE)) != 0)
      {
        usart0.flags &= ~(1<<USART0_FLAG_TX_COMPLETE);
        usart0.flags |= (1<<USART0_FLAG_SHIFT_REG_EMPTY);
        USART0_EnableRecive();
      }
    }

     

    Перед передачей отключаю приемник и переключаю драйвер. По прерыванию переключаю драйвер и включаю приемник.

    drv.rar

×
×
  • Создать...