Charon, добро пожаловать в клуб
Charon, добро пожаловать в клуб
ЧиД последнее место, куда надо идти за деталями. Цены у них действительно астрономические.da-nie писал(а): Привык, что обычно в ЧиД цены нехилые.
Тут такое дело, что по даташиту у них времена включения/отключения измеряются десятками микросекунд. Правда, при VCC=10 В и Rнагрузки=100 Ом. Возможно, что при 200 В эти времена действительно больше раз в 10.Нет, виноваты именно оптроны. С ключами такого не происходит.
А зачем нужна идейная нагрузка?Тем не менее, они должны были бы иметь еще какую идейную нагрузку.
Так про любое можно сказать.А так: "ну оптроны, ну и что".
Увы, часто это единственное место, где нужное есть.ЧиД последнее место, куда надо идти за деталями.
Ну эти магазины нафиг. У меня ПАЛ кодер на AD725, купленной по дешёвке в Китае, так и не заработал после полугода плясок с бубном (если где-то придержать пальцем, то оно-таки включается, но где именно и что не так, я не нашёл). Думаю, китайцы фуфло прислали. Очень уж дёшево было.Я просто купил на Ибэе по 100 штук
Вот именно на простоту я и купилсяda-nie писал(а):Лично я использовал их потому, что упрощается схемотехника (конкретно - меньше дорожек и компонентов, меньше разводить и сверлить) и просто управляются. И если оптрон пробьёт, то МК не пострадает.
Обожаю никси и ВЛИ. Урвал недавно в местном магазине около 70 ИН-2. Выгреб все что оставалось. Жаль, ИН-12 не было.uldemir писал(а): Charon, добро пожаловать в клуб
133ИД1 - не?Charon писал(а):да и в SMD корпусе ее не существует
Код: Выделить всё
// Проверяем столетие. Младший бит должен соответствовать флагу в регистре месяцев.
if (((curr_time.month & 0x80) == 0) != ((century & 0x01) == 0)) {
century++;
}Код: Выделить всё
// Перед включением i2c выводим ds3231 в известное состояние
while (PC_IDR_bit.IDR1 == 0) {
PC_ODR_bit.ODR1 = 0;
for (timedelay = 20; timedelay ; --timedelay) {
__no_operation();
}
PC_ODR_bit.ODR1 = 1;
for (timedelay = 20; timedelay ; --timedelay) {
__no_operation();
}
}жду 3231, по результатам работы отпишусь.uldemir писал(а):Вот кто бы мне помог с проблемой
Может, у кого есть внятный и2с код для stm8L101 ? А то самому лениво писать (но, похоже, придётся).
Да SOIC это, SOIC. Просто чуть иной. Чуть пошире. Я вон тоже был заказавши у TI cd40109 - тоже SOIC. Сделал плату. Пришли микры - не лезут. Оказывается этот SO-16 чуть шире. Пришлось из SO делать SOJ.И все же, это не SOIC.
А что это?Charon писал(а):Про 133 серию я как-то не подумалИ все же, это не SOIC.
а что, Вас на GOOGLE забанили штоле?Charon писал(а):Про 133 серию я как-то не подумалИ все же, это не SOIC.
Ой. корпуса то ОГРОМНЫЕ! HV513 надо две штуки, а одна уже больше, чем 155ИД1. Единственная радость, что он "зелёный и плоский" (с)Шапокляк. А 5622 в PLCC тоже огромный и тяжело достать, а в PQFP и подавно.например HV513 или HV5522
Это оправданно абсолютно во всех случаях, в любых часах и при любой серии.Charon писал(а): У меня есть такой вопрос - оправдано ли использование DS3231 вместо DS1307 в мелкой серии?
ну если это не пугает - то можно и ногодрыгом. я сам скептически отношусь к чужим библиотекам и зачастую их просто переписываю вручную под себя - так я понимаю как они работают.uldemir писал(а):Может, написать i2c ногодрыгом?
Код: Выделить всё
#define TWI_CE 7
#define TWI_IO 6
#define TWI_CK 5
#define TWI_Port_CE PORTD_Bit7
#define TWI_Port_IO PORTD_Bit6
#define TWI_Port_CK PORTD_Bit5
#define TWI_Drv DDRD
#define TWI_Port PORTD
#define TWI_Pin_IO PIND_Bit6
void Twi_Init (void);
void TWI_WriteByte (unsigned char addr, unsigned char data);
unsigned char TWI_ReadByte (unsigned char addr);
Код: Выделить всё
#include "main.h"
void TWI_Init (void)
{
TWI_Drv |= (1 << TWI_CE)|(1 << TWI_CK);
}
void TWI_WriteByte (unsigned char addr, unsigned char data)
{
unsigned char i;
TWI_Drv |= (1 << TWI_IO);
TWI_Port_CE = 1;
__delay_cycles(4_uS);
for(i = 0; i < 8; i ++)
{
TWI_Port_IO = (addr >> i) & 0x01;
__delay_cycles(200_nS);
TWI_Port_CK = 1;
__delay_cycles(1000_nS);
TWI_Port_CK = 0;
__delay_cycles(800_nS);
}
for(i = 0; i < 8; i ++)
{
TWI_Port_IO = (data >> i) & 0x01;
__delay_cycles(200_nS);
TWI_Port_CK = 1;
__delay_cycles(1000_nS);
TWI_Port_CK = 0;
__delay_cycles(800_nS);
}
TWI_Port_CE = 0;
__delay_cycles(4_uS);
TWI_Drv &= ~(1 << TWI_IO);
}
unsigned char TWI_ReadByte (unsigned char addr)
{
unsigned char data = 0, i;
addr |= 0x01;
TWI_Drv |= (1 << TWI_IO);
TWI_Port_CE = 1;
__delay_cycles(4_uS);
for(i = 0; i < 7; i ++)
{
TWI_Port_IO = (addr >> i) & 0x01;
__delay_cycles(200_nS);
TWI_Port_CK = 1;
__delay_cycles(1000_nS);
TWI_Port_CK = 0;
__delay_cycles(800_nS);
}
TWI_Port_IO = (addr >> i) & 0x01;
__delay_cycles(1000_nS);
TWI_Port_CK = 1;
__delay_cycles(280_nS);
TWI_Drv &= ~(1 << TWI_IO);
for(i = 0; i < 7; i ++)
{
TWI_Port_CK = 0;
__delay_cycles(800_nS);
data |= (TWI_Pin_IO << i);
__delay_cycles(200_nS);
TWI_Port_CK = 1;
__delay_cycles(1000_nS);
}
TWI_Port_CK = 0;
__delay_cycles(800_nS);
data |= (TWI_Pin_IO << i);
__delay_cycles(200_nS);
TWI_Port_CE = 0;
__delay_cycles(4_uS);
return data;
}Код: Выделить всё
// Драйвер модуля I2C микроконтроллера STM8S003F
// Автор: Осипов Андрей
// Дата: 17 июля 2014
// URL: http://hamlab.net/Спасибо, может как-нибудь попробую. для меня всё равно придется переделывать, так как я использую чтение сразу нескольких байт подряд.woody_mc писал(а):нашел програмный TWI
Да хоть всю область одним махом, просто не слать STOP после принятия первого байта, а дышать SCL столько раз, сколько байт последовательно надо получить. Можно сделать (у меня так и сделано) функцию со старт адресом и длиной данных.uldemir писал(а):для меня всё равно придется переделывать, так как я использую чтение сразу нескольких байт подряд.
Странно, почему у меня делается сейчас 3 чтения? Надо бы объединить их в union и читать 12 байт одним хопом.