51

Re: Часы на ИВ-18 (разработка)

Вот код для 3

case 3: PORTD = 0B00110000 + dp; break; // 3 0000110

0 - это включен сегмент, 1 - выключен

Поменяйте значение 00110000 на 11111111 и убирая по 1 попробуйте зажечь цифру 3

52

Re: Часы на ИВ-18 (разработка)

Добрый день запустил свои часики.всем спасибо за помощь.

53

Re: Часы на ИВ-18 (разработка)

только не могу фотки загрузить.

54

Re: Часы на ИВ-18 (разработка)

http://forum.rcl-radio.ru/uploads/images/2022/07/0c1fd7035ad7e9e1452fa67a3356bb55.png

55

Re: Часы на ИВ-18 (разработка)

http://forum.rcl-radio.ru/uploads/images/2022/07/5a64cd19eccaf565cce2f57f5a0a6b4c.jpg http://forum.rcl-radio.ru/uploads/images/2022/07/f5094897bf2570ebb4ca19ac08c11e00.jpg http://forum.rcl-radio.ru/uploads/images/2022/07/09de6cbac563160e226132cf66179f55.jpg

56

Re: Часы на ИВ-18 (разработка)

Добрый день.уважаемый liman подскажите пожалуйста что нужно убрать с прошивки чтобы не показывало температуру и дату.

57

Re: Часы на ИВ-18 (разработка)

Опубликуйте скетч который Вы используете.

58

Re: Часы на ИВ-18 (разработка)

#define SDA PC4
#define SCL PC5

int i, a[8], segm, an,dp=0b10000000,zz,yy,sett,mig;
long times;

void setup() {
  DDRD = 0B11111111;
  DDRB = 0B00111111;
  DDRC = 0B00000011;
  PORTC |= (1 << 2) | (1 << 3);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 100;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
    // set_time(21,5,4,29,9,57,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
}


void loop() {
  byte sec =  (ds_read(0) & 0x0F) + (((ds_read(0) & 0x70) >> 4) * 10);
  byte min =  (ds_read(1) & 0x0F) + (((ds_read(1) & 0x70) >> 4) * 10);
  byte hour = ((ds_read(2) & 0x0F) + ((ds_read(2) & 0x70) >> 4) * 10);
  byte day =  (ds_read(3) & 0x0F);
  byte datat = ((ds_read(4) & 0x0F) + ((ds_read(4) & 0x70) >> 4) * 10);
  byte mont = ((ds_read(5) & 0x0F) + ((ds_read(5) & 0x70) >> 4) * 10);
  byte year = ((ds_read(6) & 0x0F) + ((ds_read(6) & 0x70) >> 4) * 10);
  int temper = (ds_read(0x11)*100 + ((ds_read(0x12) & 0b11000000) >> 6)*25) ;

  if(((PINC >> 2) & 1) == 0){sett++;if(sett>6){sett=0;}}
  if(((PINC >> 3) & 1) == 0 && sett == 1){hour++;if(hour>23){hour=0;}set_time(255,255,255,255,hour,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 2){min++;if(min>59){min=0;}set_time(255,255,255,255,255,min,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 3){sec=0;set_time(255,255,255,255,255,255,sec);}
  if(((PINC >> 3) & 1) == 0 && sett == 4){datat++;if(datat>31){datat=1;}set_time(255,255,255,datat,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 5){mont++;if(mont>12){mont=1;}set_time(255,255,mont,255,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 6){year++;if(year>50){year=21;}set_time(year,255,255,255,255,255,255);}


  if(sec>=30&&sec<35&&sett==0||sett>3){
  zz=1;yy=0;
  if(sett==4&&mig==2){a[0]=10;}else{a[0] = datat / 10;}
  if(sett==4&&mig==2){a[1]=10;}else{a[1] = datat % 10;}
  if(sett==5&&mig==2){a[2]=10;}else{a[2] = mont / 10;}
  if(sett==5&&mig==2){a[3]=10;}else{a[3] = mont % 10;}
  if(sett==6&&mig==2){a[4]=10;}else{a[4] = 2;}
  if(sett==6&&mig==2){a[5]=10;}else{a[5] = 0;}
  if(sett==6&&mig==2){a[6]=10;}else{a[6] = year / 10;}
  if(sett==6&&mig==2){a[7]=10;}else{a[7] = year % 10;}
  }
  else if(sec>=35&&sec<40&&sett==0){
  zz=0;yy=1;
  a[0] = 10;
  a[1] = 10;
  a[2] = temper / 1000;
  a[3] = temper / 100 % 10;
  a[4] = temper / 10 % 10;
  a[5] = 12;
  a[6] = 13;
  a[7] = 10;
  } 
  else{
  zz=0;yy=0; 
  if(sett==1&&mig==2){a[0]=10;}else{a[0] = hour / 10;}
  if(sett==1&&mig==2){a[1]=10;}else{a[1] = hour % 10;}
  a[2] = 11;
  if(sett==2&&mig==2){a[3]=10;}else{a[3] = min / 10;}
  if(sett==2&&mig==2){a[4]=10;}else{a[4] = min % 10;}
  a[5] = 11;
  if(sett==3&&mig==2){a[6]=10;}else{a[6] = sec / 10;}
  if(sett==3&&mig==2){a[7]=10;}else{a[7] = sec % 10;}
  }
  delay(200);
  mig++;
  if(mig>2){mig=0;}
}// loop


ISR(TIMER1_COMPA_vect) {
  switch (i) {
    case 0:  dp=0b10000000;segm = a[0]; an = 0; anod(); segment(); break;
    case 1:  if(zz==1){dp=0;}else{dp=0b10000000;}segm = a[1]; an = 1; anod(); segment(); break;
    case 2:  dp=0b10000000;segm = a[2]; an = 2; anod(); segment(); break;
    case 3:  if(zz==1||yy==1){dp=0;}else{dp=0b10000000;}segm = a[3]; an = 3; anod(); segment(); break;
    case 4:  dp=0b10000000;segm = a[4]; an = 4; anod(); segment(); break;
    case 5:  dp=0b10000000;segm = a[5]; an = 5; anod(); segment(); break;
    case 6:  dp=0b10000000;segm = a[6]; an = 6; anod(); segment(); break;
    case 7:  dp=0b10000000;segm = a[7]; an = 7; anod(); segment(); break;
  } i++; if (i > 7) {
    i = 0;
  }
}

void segment() {
  switch (segm) {
    //
    case 0: PORTD = 0B01000000 + dp; break; // 0 0000001
    case 1: PORTD = 0B01111001 + dp; break; // 1 1001111
    case 2: PORTD = 0B00100100 + dp; break; // 2 0010010
    case 3: PORTD = 0B00110000 + dp; break; // 3 0000110
    case 4: PORTD = 0B00011001 + dp; break; // 4 1001100
    case 5: PORTD = 0B00010010 + dp; break; // 5 0100100
    case 6: PORTD = 0B00000010 + dp; break; // 6 0100000
    case 7: PORTD = 0B01111000 + dp; break; // 7 0001111
    case 8: PORTD = 0B00000000 + dp; break; // 8 0000000
    case 9: PORTD = 0B00010000 + dp; break; // 9 0000100
    case 10:PORTD = 0B01111111 + dp; break; // ПУСТО
    case 11:PORTD = 0B00111111 + dp; break; // -
    case 12:PORTD = 0B00011100 + dp; break; // ГРАДУС
    case 13:PORTD = 0B01000110 + dp; break; // С

  }
}
void anod() {
  switch (an) {
    case 0: PORTC &= ~(1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 1: PORTC |= (1 << 1); PORTC &= ~(1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 2: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB &= ~(1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 3: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB &= ~(1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 4: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB &= ~(1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 5: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB &= ~(1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 6: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB &= ~(1 << 1); PORTB |= (1 << 0); break;
    case 7: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB &= ~(1 << 0); break;
  }
}

bool i2c_read_bit() {
    bool i2c_bit = 1;       
    DDRC &= ~(1 << SDA);           
    delayMicroseconds(10);
    DDRC &= ~(1 << SCL);               
    if((PINC >> SDA) & 1) i2c_bit=0;                           
    delayMicroseconds(10); 
    DDRC |= (1 << SCL);             
    return i2c_bit; 
}

byte i2c_write_byte(byte data){
    for (byte i=0; i<8; i++){i2c_write_bit((data&0x80)==0);data<<=1;}   
    return i2c_read_bit();
}

byte i2c_read_byte(byte a){
    byte i, data=0;               
    for(i=0; i<8; i++){if (!i2c_read_bit()) data++;if(i!=7) data<<=1;}       
    i2c_write_bit(a);return data; 
}

void i2c_write_bit(byte b){
    delayMicroseconds(5);
    if(b){DDRC |= (1 << SDA);}else{DDRC &= ~(1 << SDA);}
    delayMicroseconds(5);
    DDRC &= ~(1 << SCL);       
    delayMicroseconds(10);
    DDRC |= (1 << SCL);
}

void i2c_start(){
     delayMicroseconds(10); 
     DDRC &= ~(1 << SDA); DDRC &= ~(1 << SCL);
     delayMicroseconds(10);
     DDRC |= (1 << SDA);  PORTC &= ~(1 << SDA);
     delayMicroseconds(10);
     DDRC |= (1 << SCL);  PORTC &= ~(1 << SCL);   
     delayMicroseconds(10);
}

void i2c_stop()  {
     DDRC |= (1 << SDA);           
     delayMicroseconds(10);
     DDRC &= ~(1 << SCL);               
     delayMicroseconds(10);
     DDRC &= ~(1 << SDA);             
}

byte ds_read(byte reg){
     byte data = 0;
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_start();
     i2c_write_byte(0b11010001);
     data = i2c_read_byte(0);
     i2c_stop();
     return data;
  }

void ds_write(byte reg, byte data){
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_write_byte(data);
     i2c_stop();
  } 

void set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second < 255){ds_write(0x00,(second/10<<4)+second%10);}
    if(minute < 255){ds_write(0x01,(minute/10<<4)+minute%10);}
    if(hours < 255){ds_write(0x02,(hours/10<<4)+hours%10);}
    if(days < 255){ds_write(0x03,days);}
    if(datas < 255){ds_write(0x04,(datas/10<<4)+datas%10);}
    if(monts < 255){ds_write(0x05,(monts/10<<4)+monts%10);}
    if(years < 255){ds_write(0x06,(years/10<<4)+years%10);}
  }

59

Re: Часы на ИВ-18 (разработка)

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

60

Re: Часы на ИВ-18 (разработка)

#define SDA PC4
#define SCL PC5

int i, a[8], segm, an,dp=0b10000000,zz,yy,sett,mig;
long times;

void setup() {
  DDRD = 0B11111111;
  DDRB = 0B00111111;
  DDRC = 0B00000011;
  PORTC |= (1 << 2) | (1 << 3);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 100;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
    // set_time(21,5,4,29,9,57,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
}


void loop() {
  byte sec =  (ds_read(0) & 0x0F) + (((ds_read(0) & 0x70) >> 4) * 10);
  byte min =  (ds_read(1) & 0x0F) + (((ds_read(1) & 0x70) >> 4) * 10);
  byte hour = ((ds_read(2) & 0x0F) + ((ds_read(2) & 0x70) >> 4) * 10);
  byte day =  (ds_read(3) & 0x0F);
  byte datat = ((ds_read(4) & 0x0F) + ((ds_read(4) & 0x70) >> 4) * 10);
  byte mont = ((ds_read(5) & 0x0F) + ((ds_read(5) & 0x70) >> 4) * 10);
  byte year = ((ds_read(6) & 0x0F) + ((ds_read(6) & 0x70) >> 4) * 10);
  int temper = (ds_read(0x11)*100 + ((ds_read(0x12) & 0b11000000) >> 6)*25) ;

  if(((PINC >> 2) & 1) == 0){sett++;if(sett>6){sett=0;}}
  if(((PINC >> 3) & 1) == 0 && sett == 1){hour++;if(hour>23){hour=0;}set_time(255,255,255,255,hour,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 2){min++;if(min>59){min=0;}set_time(255,255,255,255,255,min,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 3){sec=0;set_time(255,255,255,255,255,255,sec);}
  if(((PINC >> 3) & 1) == 0 && sett == 4){datat++;if(datat>31){datat=1;}set_time(255,255,255,datat,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 5){mont++;if(mont>12){mont=1;}set_time(255,255,mont,255,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 6){year++;if(year>50){year=21;}set_time(year,255,255,255,255,255,255);}


  if(sett>3){
  zz=1;yy=0;
  if(sett==4&&mig==2){a[0]=10;}else{a[0] = datat / 10;}
  if(sett==4&&mig==2){a[1]=10;}else{a[1] = datat % 10;}
  if(sett==5&&mig==2){a[2]=10;}else{a[2] = mont / 10;}
  if(sett==5&&mig==2){a[3]=10;}else{a[3] = mont % 10;}
  if(sett==6&&mig==2){a[4]=10;}else{a[4] = 2;}
  if(sett==6&&mig==2){a[5]=10;}else{a[5] = 0;}
  if(sett==6&&mig==2){a[6]=10;}else{a[6] = year / 10;}
  if(sett==6&&mig==2){a[7]=10;}else{a[7] = year % 10;}
  }
  else{
  zz=0;yy=0; 
  if(sett==1&&mig==2){a[0]=10;}else{a[0] = hour / 10;}
  if(sett==1&&mig==2){a[1]=10;}else{a[1] = hour % 10;}
  a[2] = 11;
  if(sett==2&&mig==2){a[3]=10;}else{a[3] = min / 10;}
  if(sett==2&&mig==2){a[4]=10;}else{a[4] = min % 10;}
  a[5] = 11;
  if(sett==3&&mig==2){a[6]=10;}else{a[6] = sec / 10;}
  if(sett==3&&mig==2){a[7]=10;}else{a[7] = sec % 10;}
  }
  delay(200);
  mig++;
  if(mig>2){mig=0;}
}// loop


ISR(TIMER1_COMPA_vect) {
  switch (i) {
    case 0:  dp=0b10000000;segm = a[0]; an = 0; anod(); segment(); break;
    case 1:  if(zz==1){dp=0;}else{dp=0b10000000;}segm = a[1]; an = 1; anod(); segment(); break;
    case 2:  dp=0b10000000;segm = a[2]; an = 2; anod(); segment(); break;
    case 3:  if(zz==1||yy==1){dp=0;}else{dp=0b10000000;}segm = a[3]; an = 3; anod(); segment(); break;
    case 4:  dp=0b10000000;segm = a[4]; an = 4; anod(); segment(); break;
    case 5:  dp=0b10000000;segm = a[5]; an = 5; anod(); segment(); break;
    case 6:  dp=0b10000000;segm = a[6]; an = 6; anod(); segment(); break;
    case 7:  dp=0b10000000;segm = a[7]; an = 7; anod(); segment(); break;
  } i++; if (i > 7) {
    i = 0;
  }
}

void segment() {
  switch (segm) {
    //
    case 0: PORTD = 0B01000000 + dp; break; // 0 0000001
    case 1: PORTD = 0B01111001 + dp; break; // 1 1001111
    case 2: PORTD = 0B00100100 + dp; break; // 2 0010010
    case 3: PORTD = 0B00110000 + dp; break; // 3 0000110
    case 4: PORTD = 0B00011001 + dp; break; // 4 1001100
    case 5: PORTD = 0B00010010 + dp; break; // 5 0100100
    case 6: PORTD = 0B00000010 + dp; break; // 6 0100000
    case 7: PORTD = 0B01111000 + dp; break; // 7 0001111
    case 8: PORTD = 0B00000000 + dp; break; // 8 0000000
    case 9: PORTD = 0B00010000 + dp; break; // 9 0000100
    case 10:PORTD = 0B01111111 + dp; break; // ПУСТО
    case 11:PORTD = 0B00111111 + dp; break; // -
    case 12:PORTD = 0B00011100 + dp; break; // ГРАДУС
    case 13:PORTD = 0B01000110 + dp; break; // С

  }
}
void anod() {
  switch (an) {
    case 0: PORTC &= ~(1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 1: PORTC |= (1 << 1); PORTC &= ~(1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 2: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB &= ~(1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 3: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB &= ~(1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 4: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB &= ~(1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 5: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB &= ~(1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 6: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB &= ~(1 << 1); PORTB |= (1 << 0); break;
    case 7: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB &= ~(1 << 0); break;
  }
}

bool i2c_read_bit() {
    bool i2c_bit = 1;       
    DDRC &= ~(1 << SDA);           
    delayMicroseconds(10);
    DDRC &= ~(1 << SCL);               
    if((PINC >> SDA) & 1) i2c_bit=0;                           
    delayMicroseconds(10); 
    DDRC |= (1 << SCL);             
    return i2c_bit; 
}

byte i2c_write_byte(byte data){
    for (byte i=0; i<8; i++){i2c_write_bit((data&0x80)==0);data<<=1;}   
    return i2c_read_bit();
}

byte i2c_read_byte(byte a){
    byte i, data=0;               
    for(i=0; i<8; i++){if (!i2c_read_bit()) data++;if(i!=7) data<<=1;}       
    i2c_write_bit(a);return data; 
}

void i2c_write_bit(byte b){
    delayMicroseconds(5);
    if(b){DDRC |= (1 << SDA);}else{DDRC &= ~(1 << SDA);}
    delayMicroseconds(5);
    DDRC &= ~(1 << SCL);       
    delayMicroseconds(10);
    DDRC |= (1 << SCL);
}

void i2c_start(){
     delayMicroseconds(10); 
     DDRC &= ~(1 << SDA); DDRC &= ~(1 << SCL);
     delayMicroseconds(10);
     DDRC |= (1 << SDA);  PORTC &= ~(1 << SDA);
     delayMicroseconds(10);
     DDRC |= (1 << SCL);  PORTC &= ~(1 << SCL);   
     delayMicroseconds(10);
}

void i2c_stop()  {
     DDRC |= (1 << SDA);           
     delayMicroseconds(10);
     DDRC &= ~(1 << SCL);               
     delayMicroseconds(10);
     DDRC &= ~(1 << SDA);             
}

byte ds_read(byte reg){
     byte data = 0;
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_start();
     i2c_write_byte(0b11010001);
     data = i2c_read_byte(0);
     i2c_stop();
     return data;
  }

void ds_write(byte reg, byte data){
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_write_byte(data);
     i2c_stop();
  } 

void set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second < 255){ds_write(0x00,(second/10<<4)+second%10);}
    if(minute < 255){ds_write(0x01,(minute/10<<4)+minute%10);}
    if(hours < 255){ds_write(0x02,(hours/10<<4)+hours%10);}
    if(days < 255){ds_write(0x03,days);}
    if(datas < 255){ds_write(0x04,(datas/10<<4)+datas%10);}
    if(monts < 255){ds_write(0x05,(monts/10<<4)+monts%10);}
    if(years < 255){ds_write(0x06,(years/10<<4)+years%10);}
  }

61

Re: Часы на ИВ-18 (разработка)

засветка на ив-11?

62 (2022-07-18 14:41:25 отредактировано bonevur8)

Re: Часы на ИВ-18 (разработка)

да небольшая засветка есть.может подскажите что можно сделать.спасибо.

63

Re: Часы на ИВ-18 (разработка)

добрый вечер скетч под ив 11 пошел большое спасибо.  но засветы остались.

64

Re: Часы на ИВ-18 (разработка)

Нужно удалять код который отвечает за работу 7 и 8 разряда, возможно это уменьшит засветы.

65

Re: Часы на ИВ-18 (разработка)

подскажите что конкретно удалить и будут ли при этом работать секунды.

66

Re: Часы на ИВ-18 (разработка)

У Вас запятые подключены в индикаторах?

67

Re: Часы на ИВ-18 (разработка)

нет не подключены чисто 6 ив шестых. 3,5 разрядов нет спасибо.

68

Re: Часы на ИВ-18 (разработка)

Сейчас формат времени 18-12-14, нужны запятые или какие то разделители 18.12.14 чтобы отображались секунды.

69

Re: Часы на ИВ-18 (разработка)

желательно разделители  потому что  на 3 и 5 разряде стоят ив 6  и подключено тире.

70

Re: Часы на ИВ-18 (разработка)

http://forum.rcl-radio.ru/uploads/images/2022/07/b550ed47443b793d6f1e53af321d477e.jpg

71

Re: Часы на ИВ-18 (разработка)

Данный контент доступен только зарегистрированным пользователям.

72

Re: Часы на ИВ-18 (разработка)

Попробуйте этот скетч для устранения засветки

найдите строку delayMicroseconds(200); и поменяйте параметр 200 чтобы добиться устранения подсветки, параметр 200 я задал примерно.

#define SDA PC4
#define SCL PC5

int i, a[8], segm, an,dp=0b10000000,zz,yy,sett,mig;
long times;

void setup() {
  DDRD = 0B11111111;
  DDRB = 0B00111111;
  DDRC = 0B00000011;
  PORTC |= (1 << 2) | (1 << 3);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 100;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
    // set_time(21,5,4,29,9,57,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59
}


void loop() {
  byte sec =  (ds_read(0) & 0x0F) + (((ds_read(0) & 0x70) >> 4) * 10);
  byte min =  (ds_read(1) & 0x0F) + (((ds_read(1) & 0x70) >> 4) * 10);
  byte hour = ((ds_read(2) & 0x0F) + ((ds_read(2) & 0x70) >> 4) * 10);
  byte day =  (ds_read(3) & 0x0F);
  byte datat = ((ds_read(4) & 0x0F) + ((ds_read(4) & 0x70) >> 4) * 10);
  byte mont = ((ds_read(5) & 0x0F) + ((ds_read(5) & 0x70) >> 4) * 10);
  byte year = ((ds_read(6) & 0x0F) + ((ds_read(6) & 0x70) >> 4) * 10);
  int temper = (ds_read(0x11)*100 + ((ds_read(0x12) & 0b11000000) >> 6)*25) ;

  if(((PINC >> 2) & 1) == 0){sett++;if(sett>6){sett=0;}}
  if(((PINC >> 3) & 1) == 0 && sett == 1){hour++;if(hour>23){hour=0;}set_time(255,255,255,255,hour,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 2){min++;if(min>59){min=0;}set_time(255,255,255,255,255,min,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 3){sec=0;set_time(255,255,255,255,255,255,sec);}
  if(((PINC >> 3) & 1) == 0 && sett == 4){datat++;if(datat>31){datat=1;}set_time(255,255,255,datat,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 5){mont++;if(mont>12){mont=1;}set_time(255,255,mont,255,255,255,255);}
  if(((PINC >> 3) & 1) == 0 && sett == 6){year++;if(year>50){year=21;}set_time(year,255,255,255,255,255,255);}


  if(sett>3){
  zz=1;yy=0;
  if(sett==4&&mig==2){a[0]=10;}else{a[0] = datat / 10;}
  if(sett==4&&mig==2){a[1]=10;}else{a[1] = datat % 10;}
  if(sett==5&&mig==2){a[2]=10;}else{a[2] = mont / 10;}
  if(sett==5&&mig==2){a[3]=10;}else{a[3] = mont % 10;}
  if(sett==6&&mig==2){a[4]=10;}else{a[4] = 2;}
  if(sett==6&&mig==2){a[5]=10;}else{a[5] = 0;}
  if(sett==6&&mig==2){a[6]=10;}else{a[6] = year / 10;}
  if(sett==6&&mig==2){a[7]=10;}else{a[7] = year % 10;}
  }
  else{
  zz=0;yy=0; 
  if(sett==1&&mig==2){a[0]=10;}else{a[0] = hour / 10;}
  if(sett==1&&mig==2){a[1]=10;}else{a[1] = hour % 10;}
  a[2] = 11;
  if(sett==2&&mig==2){a[3]=10;}else{a[3] = min / 10;}
  if(sett==2&&mig==2){a[4]=10;}else{a[4] = min % 10;}
  a[5] = 11;
  if(sett==3&&mig==2){a[6]=10;}else{a[6] = sec / 10;}
  if(sett==3&&mig==2){a[7]=10;}else{a[7] = sec % 10;}
  }
  delay(200);
  mig++;
  if(mig>2){mig=0;}
}// loop


ISR(TIMER1_COMPA_vect) {
  switch (i) {
    case 0:  dp=0b10000000;segm = a[0]; an = 0; cl(); anod(); segment(); break;
    case 1:  if(zz==1){dp=0;}else{dp=0b10000000;} cl(); segm = a[1]; an = 1; anod(); segment(); break;
    case 2:  dp=0b10000000;segm = a[2]; an = 2; cl(); anod(); segment(); break;
    case 3:  if(zz==1||yy==1){dp=0;}else{dp=0b10000000;} cl(); segm = a[3]; an = 3; anod(); segment(); break;
    case 4:  dp=0b10000000;segm = a[4]; an = 4; cl(); anod(); segment(); break;
    case 5:  dp=0b10000000;segm = a[5]; an = 5; cl(); anod(); segment(); break;
    case 6:  dp=0b10000000;segm = a[6]; an = 6; cl(); anod(); segment(); break;
    case 7:  dp=0b10000000;segm = a[7]; an = 7; cl(); anod(); segment(); break;
  } i++; if (i > 7) {
    i = 0;
  }
}

void segment() {
  switch (segm) {
    //
    case 0: PORTD = 0B01000000 + dp; break; // 0 0000001
    case 1: PORTD = 0B01111001 + dp; break; // 1 1001111
    case 2: PORTD = 0B00100100 + dp; break; // 2 0010010
    case 3: PORTD = 0B00110000 + dp; break; // 3 0000110
    case 4: PORTD = 0B00011001 + dp; break; // 4 1001100
    case 5: PORTD = 0B00010010 + dp; break; // 5 0100100
    case 6: PORTD = 0B00000010 + dp; break; // 6 0100000
    case 7: PORTD = 0B01111000 + dp; break; // 7 0001111
    case 8: PORTD = 0B00000000 + dp; break; // 8 0000000
    case 9: PORTD = 0B00010000 + dp; break; // 9 0000100
    case 10:PORTD = 0B01111111 + dp; break; // ПУСТО
    case 11:PORTD = 0B00111111 + dp; break; // -
    case 12:PORTD = 0B00011100 + dp; break; // ГРАДУС
    case 13:PORTD = 0B01000110 + dp; break; // С

  }
}
void anod() {
  switch (an) {
    case 0: PORTC &= ~(1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 1: PORTC |= (1 << 1); PORTC &= ~(1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 2: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB &= ~(1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 3: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB &= ~(1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 4: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB &= ~(1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 5: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB &= ~(1 << 2); PORTB |= (1 << 1); PORTB |= (1 << 0); break;
    case 6: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB &= ~(1 << 1); PORTB |= (1 << 0); break;
    case 7: PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB &= ~(1 << 0); break;
  }
}

void cl(){
  PORTD = 0B11111111;
  PORTC |= (1 << 1); PORTC |= (1 << 0); PORTB |= (1 << 5); PORTB |= (1 << 4); PORTB |= (1 << 3); PORTB |= (1 << 2); PORTB |= (1 << 1); PORTB |=(1 << 0);
  delayMicroseconds(200);
  }

bool i2c_read_bit() {
    bool i2c_bit = 1;       
    DDRC &= ~(1 << SDA);           
    delayMicroseconds(10);
    DDRC &= ~(1 << SCL);               
    if((PINC >> SDA) & 1) i2c_bit=0;                           
    delayMicroseconds(10); 
    DDRC |= (1 << SCL);             
    return i2c_bit; 
}

byte i2c_write_byte(byte data){
    for (byte i=0; i<8; i++){i2c_write_bit((data&0x80)==0);data<<=1;}   
    return i2c_read_bit();
}

byte i2c_read_byte(byte a){
    byte i, data=0;               
    for(i=0; i<8; i++){if (!i2c_read_bit()) data++;if(i!=7) data<<=1;}       
    i2c_write_bit(a);return data; 
}

void i2c_write_bit(byte b){
    delayMicroseconds(5);
    if(b){DDRC |= (1 << SDA);}else{DDRC &= ~(1 << SDA);}
    delayMicroseconds(5);
    DDRC &= ~(1 << SCL);       
    delayMicroseconds(10);
    DDRC |= (1 << SCL);
}

void i2c_start(){
     delayMicroseconds(10); 
     DDRC &= ~(1 << SDA); DDRC &= ~(1 << SCL);
     delayMicroseconds(10);
     DDRC |= (1 << SDA);  PORTC &= ~(1 << SDA);
     delayMicroseconds(10);
     DDRC |= (1 << SCL);  PORTC &= ~(1 << SCL);   
     delayMicroseconds(10);
}

void i2c_stop()  {
     DDRC |= (1 << SDA);           
     delayMicroseconds(10);
     DDRC &= ~(1 << SCL);               
     delayMicroseconds(10);
     DDRC &= ~(1 << SDA);             
}

byte ds_read(byte reg){
     byte data = 0;
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_start();
     i2c_write_byte(0b11010001);
     data = i2c_read_byte(0);
     i2c_stop();
     return data;
  }

void ds_write(byte reg, byte data){
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_write_byte(data);
     i2c_stop();
  } 

void set_time(byte years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second < 255){ds_write(0x00,(second/10<<4)+second%10);}
    if(minute < 255){ds_write(0x01,(minute/10<<4)+minute%10);}
    if(hours < 255){ds_write(0x02,(hours/10<<4)+hours%10);}
    if(days < 255){ds_write(0x03,days);}
    if(datas < 255){ds_write(0x04,(datas/10<<4)+datas%10);}
    if(monts < 255){ds_write(0x05,(monts/10<<4)+monts%10);}
    if(years < 255){ds_write(0x06,(years/10<<4)+years%10);}
  }

73

Re: Часы на ИВ-18 (разработка)

bonevur8 пишет:

Добрый день.уважаемый liman подскажите пожалуйста что нужно убрать с прошивки чтобы не показывало температуру и дату.

добрый день,
у вас есть плата на продажу ?,

74

Re: Часы на ИВ-18 (разработка)

плат нет

if(sec>=30&&sec<35&&sett==0||sett>3){
  zz=1;yy=0;
  if(sett==4&&mig==2){a[0]=10;}else{a[0] = datat / 10;}
  if(sett==4&&mig==2){a[1]=10;}else{a[1] = datat % 10;}
  if(sett==5&&mig==2){a[2]=10;}else{a[2] = mont / 10;}
  if(sett==5&&mig==2){a[3]=10;}else{a[3] = mont % 10;}
  if(sett==6&&mig==2){a[4]=10;}else{a[4] = 2;}
  if(sett==6&&mig==2){a[5]=10;}else{a[5] = 0;}
  if(sett==6&&mig==2){a[6]=10;}else{a[6] = year / 10;}
  if(sett==6&&mig==2){a[7]=10;}else{a[7] = year % 10;}
  }
  else if(sec>=35&&sec<40&&sett==0){
  zz=0;yy=1;
  a[0] = 10;
  a[1] = 10;
  a[2] = temper / 1000;
  a[3] = temper / 100 % 10;
  a[4] = temper / 10 % 10;
  a[5] = 12;
  a[6] = 13;
  a[7] = 10;
  } 
  else{
  zz=0;yy=0; 
  if(sett==1&&mig==2){a[0]=10;}else{a[0] = hour / 10;}
  if(sett==1&&mig==2){a[1]=10;}else{a[1] = hour % 10;}
  a[2] = 11;
  if(sett==2&&mig==2){a[3]=10;}else{a[3] = min / 10;}
  if(sett==2&&mig==2){a[4]=10;}else{a[4] = min % 10;}
  a[5] = 11;
  if(sett==3&&mig==2){a[6]=10;}else{a[6] = sec / 10;}
  if(sett==3&&mig==2){a[7]=10;}else{a[7] = sec % 10;}
  }

заменить на

if(sett>3){
  zz=0;yy=0; 
  if(sett==1&&mig==2){a[0]=10;}else{a[0] = hour / 10;}
  if(sett==1&&mig==2){a[1]=10;}else{a[1] = hour % 10;}
  a[2] = 11;
  if(sett==2&&mig==2){a[3]=10;}else{a[3] = min / 10;}
  if(sett==2&&mig==2){a[4]=10;}else{a[4] = min % 10;}
  a[5] = 11;
  if(sett==3&&mig==2){a[6]=10;}else{a[6] = sec / 10;}
  if(sett==3&&mig==2){a[7]=10;}else{a[7] = sec % 10;}
  }