Re: Часы на ИВ-18 (разработка)
Вы же используете не Ардуино а просто контроллер, кварц, резистор на ресет установлены, фьюзы установили?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Разное → Часы на ИВ-18 (разработка)
Вы же используете не Ардуино а просто контроллер, кварц, резистор на ресет установлены, фьюзы установили?
Часы реального времени на модуле или просто на микросхеме?
я прошил ардуино нано выпаял и запаял в плату. ds 3231 c обвязкой единственное резет сопротивление не ставил.
Без reset работать не будет.
поставил 10к с29 ноги на плюс ничего не поменялось.
может скините еще раз прошивку попробую другой проц прошить.
может скините еще раз прошивку попробую другой проц прошить.
Все скетчи опубликованы, Вам нужен hex?
У вас есть программатор USB-ASP?
Основной причиной может быть некорректная работа часов реального времени (подвисание шины I2C), желательно подключить программатор и проверить работу контроллера.
Часы реального времени (модуль как я понял) был уже в работе, они точно рабочие.
usb asp есть давайте попробую hex записать.
Данный контент доступен только зарегистрированным пользователям.
Опубликуйте схему в архиве ZIP, опубликованная схема имеет низкое разрешение.
спасибо буду пробовать.
Данный контент доступен только зарегистрированным пользователям.
походу не видит ds-ку потому что что с ней что без нее тоже самое.
Ds3231 надо проверить на плате ардуино, загрузить тестовый скетч. Без модуля часов времени контроллер работать не будет. Могу убрать часы реального времени из скетча, протестировать просто индикация.
выпаял с рабочих часов ds-ку запаял тоже самое.
Тестовый скетч, без часов
#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() {
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
a[5] = 6;
a[6] = 7;
a[7] = 8;
delay(200);
}// 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;
}
}
Данный контент доступен только зарегистрированным пользователям.
спасибо буду пробовать.
скажите а если hex файл прошивки заливать через usbasp какие фьюзы выставлять для atmega328.
Но лучше прошивать через Arduino IDE
Добрый день.
Запустил таки часы, было преодолено много препятствий в виде: бракованной трубки, сожженной меги8, неисправной платы DS3231, запуском бустера на 555. Осталась одна проблемка, к которой даже не знаю как подступиться, а именно: не правильно отображаются цифры 3, 5, 9 в любом разряде не горит нижний сегмент "D", данный сегмент зажигается во всех разрядах в других цифрах.
За вывод цифр отвечает этот код:
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; // С
замените этот код:
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
a[5] = 6;
a[6] = 7;
a[7] = 8;
на
a[0] = 8;
a[1] = 8;
a[2] = 8;
a[3] = 8;
a[4] = 8;
a[5] = 8;
a[6] = 8;
a[7] = 8;
Что бы убедится что все сегменты всех разрядов рабочие.
Сомнений в исправности трубки - нет, проверил ранее перебором цифр при настройке. Были сомнения в качестве старой мега8 с Али, но с мега328p наблюдается такой же результат.
forum.rcl-radio.ru → Разное → Часы на ИВ-18 (разработка)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|