-
Постов
62 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о diehard
-
Звание
Участник
Контакты
-
Сайт
Array
-
ICQ
Array
-
Для PIC`ов не подходит
-
1-Wire
diehard ответил diehard тема в MCS51, AVR, PIC, STM8, 8bit
Спасибо, прочитал. Ошибку нашел. В конце функции чтения бита необходимо было сделать задержку 45us, для выдержки тайминга в соответствии с даташитом. unsigned char Wire1_ReadBit() { unsigned char ReadBit=0; SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи WIRE1_DN(); // Линия вниз delay_us(1); WIRE1_UP(); // Линия вверх ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения delay_us(14); // Чтение линии 1-Wire if( IsBitSet(Wire1Pin, Wire1Bit) ) ReadBit=1; // В линии 1 delay_us(45); // <------------------------------------------------- Ошибка была здесь return ReadBit; } -
1-Wire
diehard опубликовал тема в MCS51, AVR, PIC, STM8, 8bit
Не получается корректно прочитать iButton. Т.е. читается что-то из линии, но совсем не то. В наличии имею две iButton, считанный код для каждой уникальный и повторяется при каждом чтении. Ткните носом, где не прав. Запись: void Wire1_WriteBit(unsigned char cBit) { WIRE1_DN(); if(cBit==0) delay_us(60); if(cBit==1) delay_us(1); WIRE1_UP(); // Отпускание линии if(cBit==0) delay_us(1); if(cBit==1) delay_us(60); } void Wire1_SendByte(unsigned char data) { unsigned char temp; unsigned char i; SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи for (i = 0; i < 8; i++) // Отправка байта в линию { temp = data & 0x01; if (temp) { Wire1_WriteBit(1); } else { Wire1_WriteBit(0); } data >>= 1; } ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения } Чтение: unsigned char Wire1_ReadBit() { unsigned char ReadBit=0; SetBit(Wire1DDR,Wire1Bit); // Перевод порта в режим записи WIRE1_DN(); // Линия вниз delay_us(1); WIRE1_UP(); // Линия вверх ClearBit(Wire1DDR,Wire1Bit); // Перевод порта в режим чтения delay_us(14); // Чтение линии 1-Wire if( IsBitSet(Wire1Pin, Wire1Bit) ) ReadBit=1; // В линии 1 return ReadBit; } unsigned char Wire1_ReadByte() { unsigned char data; unsigned char i; data = 0x00; for (i = 0; i < 8; i++) { data >>= 1; if (Wire1_ReadBit()) { data |= 0x80; } } return data; } После посылки Reset и приема Presence Делаю так: Wire1_SendByte(0x33); // Отправка команды чтения серийного номера lcd_gotoxy(0,0); for(i=0;i<8;i++) { cByte[i]=0; // Чтение одного байта из устройства cByte[i]=Wire1_ReadByte(); // Чтение одного байта из устройства if(i==5) lcd_gotoxy(0,1); sprintf(cStr, "%2x ", cByte[i]); lcd_puts(cStr); } -
Atmega + радиопередатчик
diehard ответил 1Paradox1 тема в В помощь начинающему
Здесь все что требуется: dlehard.narod.ru Радиоканал организован на TRC101/2 (HopeRF). Трансиверы сам покупал в Тритоне. Все работает. В фирменном примере работы HopeRF есть ошибка в инициализации приемника или передатчика, уже не помню. В примере реализации эта ошибка явно указана и исправлена. -
Радиомодули RFM12
diehard ответил adc тема в В помощь начинающему
По RF12 и TRC101 вот здесь dlehard.narod.ru сложено все, что в свое время смог нарыть, плюс к этому и примеры PCB антен с расчетами для этих трансиверов. Мне в свое время очень помогло. Может кому тоже пригодиться. -
DS1302 чтение
diehard опубликовал тема в В помощь начинающему
Не могу второй день побороть DS1302. Проблема в том, что не могу прочитать ни время ни дату, вообще ничего. С записью проблем нет. Симулирую в протеусе. В железе тоже не работает. char DS1302_Read(char caddr) { char cdata=0, i=0; DS1302_DDR= (1<<DS1302_CLK) | (1<<DS1302_RST) | (1<<DS1302_IO); DS1302_PORT SetBit(DS1302_RST); for(i=0; i<8; i++) // запись адреса нужного регистра для чтения { if(caddr&0x01) DS1302_PORT SetBit(DS1302_IO); else DS1302_PORT ClearBit(DS1302_IO); caddr>>=1; DS1302_PORT SetBit(DS1302_CLK); delay_us(10); DS1302_PORT ClearBit(DS1302_CLK); delay_us(10); } DS1302_DDR = (0<<DS1302_IO); DS1302_PORT =(1<<DS1302_IO); for(i=0; i<8; i++) // чтение возвращаемого значения { cdata >>= 1; if(DS1302_PORT & (1<<DS1302_IO)) cdata |= 0x80; DS1302_PORT SetBit(DS1302_CLK); delay_us(10); DS1302_PORT ClearBit(DS1302_CLK); delay_us(10); } DS1302_PORT ClearBit(DS1302_RST); DS1302_DDR= (0<<DS1302_CLK) | (0<<DS1302_RST) | (0<<DS1302_IO); return cdata; } #define DS1302_HOURREAD 0x85 // hour register read соответственно читать пытаюсь так: hour=DS1302_Read(DS1302_HOURREAD); -
По трансиверам HopeRF (RF12B = TRC101) ссылки: Быстрый старт для HopeRF (TRC101) Даташит на TRC101 PCB антена
-
TRC101(2) = RF12 Я брал здесь. http://trt.ru/Stock.php?Part=460 Сначала взял несколько штук для экспериментов. Потом у них же закупил необходимую партию.
-
Дрова под 32-х битную висту использую уже почти год. Проблем нет даже на ноутбуке. Драйвера отсюда из ветки брал.
-
Уже год на всех компьютерах стоит виста. Использую драйвера из этой ветки по висту 32бит. Проблем нет ни на одном компьютере. Использую CodeVision.
-
Приобрел CV и теперь в ступоре. Как устанавливать CV после окончания годичной подписки и слета операционки? Раньше был license.dat, который выгружался из рабочего CV и позволял переустанавливать CV. Теперь же все происходит обменом по электронке ключами активации. Вразумительного ответа на вопрос разработчики не дали. Тут у кого-то тоже есть официальный CV. Не знаю, правда, у кого. Как дела обстоят у него?
-
ОУ
diehard ответил diehard тема в В помощь начинающему
Там где Vin, у меня стоит диодный мост, а с него на ОУ. Так вот если после моста поставить конденсатор 10мФ, то начинает работать как надо. Только в одну сторону, через ОУ конденсатор разряжается очень медленно. Поставил 1мФ, напряжение на выходе ОУ ~ за 30 секунд поднимается до 3.6в, с 0.1мф та же хрень. Объясните, где собака порылась? -
ОУ
diehard ответил diehard тема в В помощь начинающему
Взял другой 358-й, та же песня. Правильно ли я посчитал резисторы? -
ОУ
diehard ответил diehard тема в В помощь начинающему
На выходе постоянно 3.6В. При изменнении напряжения на входе, на выходе 3.6В -
несанкционированное открытие симистора
diehard ответил _Ivan_ тема в В помощь начинающему
В даташите на MOC3021 написано 0.01 mf 39 om