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

Dx!

Участник
  • Постов

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

  • Посещение

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


  1. У меня была поджаренная высоким напряжением (27 пришло на INT1) m162 - читалась, писалась, верифицировалась. Но где-то в самом начале программы мертво висла. Замена вопрос решила.

  2. avreal

    Да, согласен. Возможно даже эти моменты хорошо бы настраиваемыми делать (джамперами или ещё как) - много всякого софта поддерживает ft2232 но почти весь он не позволяет свободно настраивать ножку включения шинника. Тот же OpenOCD - ну почему бы не сделать настройку как в сабже? Зачем эти непонятные названия коробочек разных? Тогда бы нужно было менять только конфиг, он так и так нужен, а не перекомпилировать 8) (А кроме программаторов ещё есть куча софта под Boundary scan и там те же виллы - ft2232 есть, настройки нет.)

     

    И да - про мой проект - там цепочка слишком длинная получилась. На 3MHz ещё работает, а вот на 6MHz уже нет. Идет сдвиг на один бит, и, соответственно, житагу рвёт крышу. Так что задержки тоже нужно иметь в виду.

     

    а vid-pid родные FTDI-ные,

    Както он игнорит эти параметры. Можно совсем убрать, можно левые написать - один фиг работает.

    interface ft2232
    ft2232_device_desc "AVR SPI Programmer A"
    ft2232_layout avr_spi
    jtag_khz 3000

  3. avreal

    Собирать лучше что-то совместимое по раскладке выводов с поддерживаемым в OpenOCD, сразу на два фронта работать будет.

    Я в своё время это дело промухал, но и пересобрать OpenOCD с поддержкой моей (да и любой) коробочки оказалось не так сложно как кажется. Один фиг его собирать если не хочется ставить левый драйвер (а его ставить не хочется ну совсем)

    Проект под PCAD http://xdevs.com/kb/dx/ft2232/FT2232.AVReaL.rar

     

    Тупо копировать наверно не следует, но вполне себе вариант для начала. Делал бы я его сейчас - ещё бы и драйвер 485-го на второй канал привинтил бы - часто нужен.

     

    avrealft2232_02.jpg

  4. http://www.analog.com/en/interface/rs-485/...ts/product.html

    Изолированный 485 со своим питанием. Удобно и надёжно.

    Прошу прощения, ошибся. http://www.analog.com/en/interface/rs-485/...ts/product.html <- этот со своим интегрированным питанием. Если вопрос бюджета не стоит остро - очень удобное решение.

  5. И ещё - а какие адреса у "призраков"? Это может помочь найти грабли - один фиг вам нужно эти адреса запоминать, как заметили выше.

    Я эти датчики опрашивал по одному через SKIP ROM для определения адреса.

     

    Если геморрой с адресами не нужен, и датчиков не много - можно их по одному повесить, каждый на свою шину.

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

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

     

    Из вашего кода непонятно что вы делаете со считанной и проверенной CRC? Выкидываете ли вы неверные значения? Даже если бы чтение удавалось читать раз из десяти - с проверкой CRC работало бы прилично.

     

    //--------------------------------------------------------------------------------------------
    
    // Безадресно запускаем преобразование во всех DS18b20 на линии
    
        if (!OW_DetectPresence())
        {
            OW_SendByte(OW_Net_SkipNetAddress);
            OW_SendByte(OW_DS18B20_Func_CONVERT_T);
        }
    
    
    //--------------------------------------------------------------------------------------------
    
    
    // По адресу (если датчик всего один то можно и безадресно) считываем. Если CRC8 Не совпадает,
    // то вместо температуры передаем "код ошибки" 0x4000
    
        SomeVarT = 0x4000;
    
        if (!OW_DetectPresence())
        {
            uint8_t i;
            OW_SendByte(OW_Net_MatchNetAddress);
            for (i=0; i!=8; i++)
            {
                OW_SendByte(pgm_read_byte( &DS18B20_Addr[i] ));
            }
    
            OW_SendByte(OW_DS18B20_Func_READ_SCRATCHPAD);
            for (i=0; i!=4; i++)
            {
                Some16bitBuf[i] = (OW_ReceiveByte()) + (OW_ReceiveByte()<<8);
            }
            Some16bitBuf[i] = OW_ReceiveByte();    //CRC8
    
            if ((crc8( (uint8_t *)&Some16bitBuf[i-4], 8)) == Some16bitBuf[i])
                SomeVarT = usRegInputBuf[i-4];
        }
    
    
    //--------------------------------------------------------------------------------------------
    
    // Пример вывода на текстовый LCD
    // Выводим для 16.25 градусов цельсия цифру 1625
    
        if(SomeVarT!=0x4000)
            LCD_PrintfS16Dec6_100(((int32_t)((int16_t)SomeVarT)*100)/16);

    DS18b20.rar

  7. -1 приходит без ошибок в CRC ?

    Видимо помеха не в интерфейсе а в питании.

     

    UPD:

    Программа ужасна... что вы считаете и с чем сравниваете?

    !w1_dow_crc8(&__ds18b20_scratch_pad,9); <-- это что?

     

    Ужас ужас... Есть же приличные соры в сети...

  8. PORTB = (PIND^0xFF) >> 4;
      80:    89 b1           in    r24, 0x09; 9
      82:    80 95           com    r24
      84:    82 95           swap    r24
      86:    8f 70           andi    r24, 0x0F; 15
      88:    85 b9           out    0x05, r24; 5

    Оптимизация 8)

  9. Как заключение - остановился на варианте

    somevar = (uint8_t)(~PIND) >> 4;

    ибо

    ----------------------------------------------------
        PORTB = (~PIND) >> 4;
      80:    89 b1           in    r24, 0x09; 9
      82:    90 e0           ldi    r25, 0x00; 0
      84:    80 95           com    r24
      86:    90 95           com    r25
      88:    95 95           asr    r25
      8a:    87 95           ror    r24
      8c:    95 95           asr    r25
      8e:    87 95           ror    r24
      90:    95 95           asr    r25
      92:    87 95           ror    r24
      94:    95 95           asr    r25
      96:    87 95           ror    r24
      98:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------
        PORTB = ((~PIND) >> 4)&0xf;
      80:    89 b1           in    r24, 0x09; 9
      82:    90 e0           ldi    r25, 0x00; 0
      84:    80 95           com    r24
      86:    90 95           com    r25
      88:    95 95           asr    r25
      8a:    87 95           ror    r24
      8c:    95 95           asr    r25
      8e:    87 95           ror    r24
      90:    95 95           asr    r25
      92:    87 95           ror    r24
      94:    95 95           asr    r25
      96:    87 95           ror    r24
      98:    8f 70           andi    r24, 0x0F; 15
      9a:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------
        PORTB = ((~PIND)&0xff) >> 4;
      80:    89 b1           in    r24, 0x09; 9
      82:    80 95           com    r24
      84:    90 e0           ldi    r25, 0x00; 0
      86:    95 95           asr    r25
      88:    87 95           ror    r24
      8a:    95 95           asr    r25
      8c:    87 95           ror    r24
      8e:    95 95           asr    r25
      90:    87 95           ror    r24
      92:    95 95           asr    r25
      94:    87 95           ror    r24
      96:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------
        PORTB = ((uint8_t)(~PIND)) >> 4;
      80:    89 b1           in    r24, 0x09; 9
      82:    80 95           com    r24
      84:    82 95           swap    r24
      86:    8f 70           andi    r24, 0x0F; 15
      88:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------
        PORTB = (uint8_t)(~PIND) >> 4;
      80:    89 b1           in    r24, 0x09; 9
      82:    80 95           com    r24
      84:    82 95           swap    r24
      86:    8f 70           andi    r24, 0x0F; 15
      88:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------
        uint8_t tmpD;
        tmpD = PIND;
      80:    89 b1           in    r24, 0x09; 9
        tmpD = ~tmpD;
    
        PORTB = tmpD >> 4;
      82:    80 95           com    r24
      84:    82 95           swap    r24
      86:    8f 70           andi    r24, 0x0F; 15
      88:    85 b9           out    0x05, r24; 5
    ----------------------------------------------------

    Даже swap а не тупо сдвиг. Компиленно с -O2.

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