

Dx!
-
Posts
106 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Posts posted by Dx!
-
-
Да.
Синхронный вырпямитель с USB? 8)
-
mega32u4? а чем его шить? в наличии есть только avrisp. JTAG никак не купить.
Оно - обычный AVR. Чем угодно.
-
Я тоже думаю что всё на одном чипе будет лучше - но рекомендую не 90USB а всёже u2/u4 (mega32u4 например) - они поновее, подешевле, получше.
-
FreeModbus(.berlios.de)
Рядом похожая тема
Успешно его применяю. Тяжеловат для младших AVR и не всё нужно, но в 16+кб камни ложится хорошо.
-
Пробуйте не номер порта а адрес порта. У меня в XP также не работало по номеру с PCI-LPT
-
У меня была поджаренная высоким напряжением (27 пришло на INT1) m162 - читалась, писалась, верифицировалась. Но где-то в самом начале программы мертво висла. Замена вопрос решила.
-
Нет. ATmega128RFA1 уникальна по многим параметра. 16MHz у ней с 1.8V.
-
Posted · Edited by Dx! · Report reply
Да, согласен. Возможно даже эти моменты хорошо бы настраиваемыми делать (джамперами или ещё как) - много всякого софта поддерживает 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
-
Posted · Edited by Dx! · Report reply
Собирать лучше что-то совместимое по раскладке выводов с поддерживаемым в OpenOCD, сразу на два фронта работать будет.Я в своё время это дело промухал, но и пересобрать OpenOCD с поддержкой моей (да и любой) коробочки оказалось не так сложно как кажется. Один фиг его собирать если не хочется ставить левый драйвер (а его ставить не хочется ну совсем)
Проект под PCAD http://xdevs.com/kb/dx/ft2232/FT2232.AVReaL.rar
Тупо копировать наверно не следует, но вполне себе вариант для начала. Делал бы я его сейчас - ещё бы и драйвер 485-го на второй канал привинтил бы - часто нужен.
-
http://www.analog.com/en/interface/rs-485/...ts/product.html
Изолированный 485 со своим питанием. Удобно и надёжно.
Прошу прощения, ошибся. http://www.analog.com/en/interface/rs-485/...ts/product.html <- этот со своим интегрированным питанием. Если вопрос бюджета не стоит остро - очень удобное решение.
-
http://www.analog.com/en/interface/rs-485/...ts/product.html
Изолированный 485 со своим питанием. Удобно и надёжно.
-
Хотя думаю, что в самом деле для моей конструкции будет лучше обращаться непосредственно по имени к датчику и не делать поиска.
Или выделить четыре ножки а не одну, если предполагается замена.
-
Posted · Edited by Dx! · Report reply
И ещё - а какие адреса у "призраков"? Это может помочь найти грабли - один фиг вам нужно эти адреса запоминать, как заметили выше.
Я эти датчики опрашивал по одному через SKIP ROM для определения адреса.
Если геморрой с адресами не нужен, и датчиков не много - можно их по одному повесить, каждый на свою шину.
-
Posted · Edited by Dx! · Report reply
А что мешает работать прямо по адресам и не использовать неработающую функцию поиска?
-
А не мог сам кабель маленько подгореть? Там же шинник - может ему питания не хватает, или какая особенность в самом LPT? Осциллоскопом посмотреть до и после. Ну и тестовый переходничёк для BB сделать, не долго же.
-
Я понимаю что прошу возможно слишком много, но не могли бы вы исходя с моего примера написать программу чтения с датчика более грамотно и более подробнее с оглашением всех переменных, тогда бы я был уверен что проблема в программе. Переменную 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);
-
Posted · Edited by Dx! · Report reply
-1 приходит без ошибок в CRC ?
Видимо помеха не в интерфейсе а в питании.
UPD:
Программа ужасна... что вы считаете и с чем сравниваете?
!w1_dow_crc8(&__ds18b20_scratch_pad,9); <-- это что?
Ужас ужас... Есть же приличные соры в сети...
-
Помеха. Смотреть осциллоскопом. CRC8 не считаем раз -1 ? Зря, зря.
-
А чем макросы _delay_ms() и _delay_us() что идут с WinAVR плохи?
-
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)
-
Posted · Edited by Dx! · Report reply
Как заключение - остановился на варианте
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.
-
Posted · Edited by Dx! · Report reply
Неужели в IAR или кейле этот (или любой другой стандартный) регистр имеет другое имя или не восемь бит без знака? 0_0
-
Просто мы же в разделе AVR, мне казалось что особо указывать что есть PIND не нужно. Хотя (*(volatile uint8_t *)(mem_addr)) я не нашёл - оно где?
-
Да, всё так, большое спасибо. Теперь всё встало на свои места, всё понятно. Прошу прощения за причинённые неудобства 8)
USB Virtual COM mega32u4
in AVR
Posted · Report reply
Апноты атмела не очень хорошы. Точнее очень нехороши.
Рекомендую пощупать LUFA - там получше почти всё.