аналоговые часы на mega8
- Сообщения: 11
- Зарегистрирован: Сб мар 30, 2013 17:14:14
Доброго времени суток Всем!Собрал вот такие часы http://www.licrym.org/index.php/%D0%90% ... 1%81%D1%8B но проблема в то что стрелки не двигаются то есть они не идут.Хотя кнопками выставляетя нужное время.По словам автора временем заведует ds1307 посмотреть обмен данными не могу так как нет осциллографа,но судя по всему их нет или причина в чем то другом.Попробовал в протее собрал повесил осцил на ноги sda и scl обмена нет то есть есть только тогда когда нажимаешь кнопки и передвигаются стрелки.В чем может быть дело?Может дело в фьюзах?Ставил кварц наружний или внутренний результат одинаковый.Видео добавить не могу т.к больше 2метров.Как только доберусь до осциллографа отпишусь.P/s у автора все работало.Заранее благодарен.
- Реклама
В вашем коде я не увидел настройки скорости I2C. Она у вас просто 0. За нее отвечает байт TWBR и биты TWPS1...0 байта TWSR. В даташите есть формула. По моим прикидкам на 8МГц для 100кГц на шине надо TWBR=24 и TWPS1=1 TWPS0=0.
Но лучше меня перепроверьте
Но лучше меня перепроверьте
- Сообщения: 11
- Зарегистрирован: Сб мар 30, 2013 17:14:14
Я в етом не волоку, пока могу только готовый код залить в контроллер.Че мне делать дальше если мона на пальцах объясните
Вот что сказал казусник" Я вроде уже сказал, - переделывайте опрос кнопок - в том виде, в котором сейчас типа PIND&(1<<7) - это срабатывание по единице, а они у вас подтянуты к единице всегда резисторами 10кОм." Подмогите перековырять
Вроде понятно объяснил,но я этого ни разу не делал надо что ли 1 на 0 поменять и все?спрашивать там больше не хочу!(очень уж .....)
- Сообщения: 11
- Зарегистрирован: Сб мар 30, 2013 17:14:14
поменял 1 на 0,
часы пошли!!!только вот кнопки теперь не работают где еще покрутить while (1)
{
if (PIND&(0<<7))
{
gMinutes++;
if (gMinutes == 60) gMinutes = 0;
delay_ms(200); //антидребезг
ds1307_setTime (0, gMinutes, gHours, 1, 1, 9); //in SS-MM-HH-DD-MM-YY
while (PIND&(0<<7));
};
if (PINB&(0<<1))
{
gHours++;
if (gHours == 24) gHours = 0;
delay_ms(200); //антидребезг
ds1307_setTime (0, gMinutes, gHours, 1, 1, 9); //in SS-MM-HH-DD-MM-YY
while (PINB&(0<<1));
};
ds1307_readTime();
OCR1A = ceil(gMinutes * 4.25);
OCR1B = ceil(gHours * 11.0;
};
}
Было вот так if (PIND&(1<<7)) while (PIND&(1<<7));другой порт if (PINB&(1<<0)) while (PINB&(1<<0));что я сделал не так или не доделал?Может while(0)?
{
if (PIND&(0<<7))
{
gMinutes++;
if (gMinutes == 60) gMinutes = 0;
delay_ms(200); //антидребезг
ds1307_setTime (0, gMinutes, gHours, 1, 1, 9); //in SS-MM-HH-DD-MM-YY
while (PIND&(0<<7));
};
if (PINB&(0<<1))
{
gHours++;
if (gHours == 24) gHours = 0;
delay_ms(200); //антидребезг
ds1307_setTime (0, gMinutes, gHours, 1, 1, 9); //in SS-MM-HH-DD-MM-YY
while (PINB&(0<<1));
};
ds1307_readTime();
OCR1A = ceil(gMinutes * 4.25);
OCR1B = ceil(gHours * 11.0;
};
}
Было вот так if (PIND&(1<<7)) while (PIND&(1<<7));другой порт if (PINB&(1<<0)) while (PINB&(1<<0));что я сделал не так или не доделал?Может while(0)?
надо в исходном коде исправить:
Код: Выделить всё
if (PIND&(1<<7)) исправить на if (!(PIND&(1<<7)))
while (PIND&(1<<7)) исправить на while (!(PIND&(1<<7)))
if (PINB&(1<<1)) исправить на if (!(PINB&(1<<1)))
while (PINB&(1<<1)) исправить на while (!(PINB&(1<<1)))
Ставим плюсы: )
- Реклама
- Сообщения: 11
- Зарегистрирован: Сб мар 30, 2013 17:14:14
Здрасте спасибо приму к сведению,но попробывать не смогу т.к. часы уже идут с другим кодом помог один хороший человек за что ему огромное спасибо!проект п.п.+схема+code Вот может кому сгодится правда пока без будильника,но все только начинается :))P/s м-да kazus-ники быстро меня выпалили работают оперативно надо заметить http://kazus.ru/forums/showthread.php?p ... post663205
- Вложения
-
- cod vitalik.rar
- (567.46 КБ) 126 скачиваний


