Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 19.06.2012, 22:59   #41 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

На сегодня пожалуй все...
Цитата:
#include <mega16.h>
//Объявляем глобальные переменные. Переменную таймера, секундную, минутную и часовую переменную - соответственно.
char Timer;
char Second;
char Minute;
char Hour;
//Переменая управления Сеундным Светодиодом.
char SecLed;

void main(void)
{
DDRA=0xFF;
DDRC=0xFF;

while(1)
{
//Запускаем таймер с коэф. делени 1024. При кварце в 16Мгц он будет переполнятся 61Раз (Таймер на 8 Бит).
TCCR0 = 0b00000101;
//Когда таймер переполнится, будет установлен 0 бит регистра TIFR и цыкл будет покинут.
while (!(TIFR&0x01));
//Так как таймер переполнился, прибавим к переменной Timer - 1.
Timer++;
//И обнулим бит переполнения таймера путем перезаписи.
TIFR |=1<<0;
//Когда в переменной Timer будет значение 61, прибавим к переменной Second 1 (В секунду таймер переполняется 61 раз!).
//И обнулим переменную Timer для дальнейшей работы.
if (Timer==61) {Second++; Timer=0; PORTA.0=1;};
//При достижении переменной Second 60 Секунд, к переменной Minute будет приплюсовываться 1.
//Переменная Second - очистица.
if (Second==60) {Minute++; Second=0;};
//При достижении переменной Minute 60 Минут, к переменной Hour будет приплюсовываться 1.
//Переменная Minute - очистица.
if (Minute==60) {Hour++; Minute=0;};
//Переменная Hour обнуляется по достижению 24 Часов.
if (Hour==24) {Hour=0;};
if (Timer==0) {SecLed++;};
if (SecLed==2) {PORTA.0=0; SecLed=0;};
if (Hour==20, Hour==21, Hour==22, Hour==23) {PORTA.1=1;}
else {PORTA.1=0;}
//Извеняюсь, другого выхода небыло...
if (Hour==10) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==11) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==12) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==13) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==14) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==15) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==16) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==17) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==18) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
if (Hour==19) {PORTA.2=1; PORTA.1=0;}
else {PORTA.2=0;}
//Небыло...
Hour=19;
if (Hour==0) {PORTA.1=0; PORTA.2=0; PORTC=64;}
else {PORTA.3=0; PORTC=0b01111111;}
//И тут небыло
if (Hour==10) {PORTC=64;}
else {PORTC=0b01111111;}
if (Hour==11) {PORTC=0b11111001;}
else {PORTC=0b01111111;}
if (Hour==12) {PORTC=0b00100100;}
else {PORTC=0b01111111;}
if (Hour==13) {PORTC=0b00110000;}
else {PORTC=0b01111111;}
if (Hour==14) {PORTC=0b00011001;}
else {PORTC=0b01111111;}
if (Hour==15) {PORTC=0b00010010;}
else {PORTC=0b01111111;}
if (Hour==16) {PORTC=0b00000010;}
else {PORTC=0b01111111;}
if (Hour==17) {PORTC=0b01111000;}
else {PORTC=0b01111111;}
if (Hour==18) {PORTC=0b00000000;}
else {PORTC=0b01111111;}
if (Hour==19) {PORTC=0b00010000;}
else {PORTC=0b01111111;}
};
}
Дада я знаю что код можно уменьшить, но завтро...
Миниатюры
anu.jpg  
News вне форума   Ответить с цитированием
Старый 19.06.2012, 23:11   #42 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

если честно, твой код вряд ли кто-нибудь внимательно просматривает
а то что у тебя заработало в эмуляторе хороший признак)))
будешь собирать эти часы? или будешь расширять функциал))))
Ильмир вне форума   Ответить с цитированием
Старый 19.06.2012, 23:17   #43 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
Сообщение от Ильмир Посмотреть сообщение
если честно, твой код вряд ли кто-нибудь внимательно просматривает
а то что у тебя заработало в эмуляторе хороший признак)))
будешь собирать эти часы? или будешь расширять функциал))))
Собирать буду
Давно часы себе мечтал.
News вне форума   Ответить с цитированием
Старый 20.06.2012, 16:38   #44 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
#include <mega16.h>
//Объявляем глобальные переменные. Переменную таймера, секундную, минутную и часовую переменную - соответственно.
char Timer;
char Second;
char Minute;
char Hour;
//Переменая управления Сеундным Светодиодом.
char SecLed;
void main(void)
{
DDRA=0xFF;
DDRC=0xFF;
while(1)
{
//Запускаем таймер с коэф. делени 1024. При кварце в 16Мгц он будет переполнятся 61Раз (Таймер на 8 Бит).
TCCR0 = 0b00000101;
//Когда таймер переполнится, будет установлен 0 бит регистра TIFR и цыкл будет покинут.
while (!(TIFR&0x01));
//Так как таймер переполнился, прибавим к переменной Timer - 1.
Timer++;
//И обнулим бит переполнения таймера путем перезаписи.
TIFR |=1<<0;
//Когда в переменной Timer будет значение 61, прибавим к переменной Second 1 (В секунду таймер переполняется 61 раз!).
//И обнулим переменную Timer для дальнейшей работы.
if (Timer==61) {Second++; Timer=0; PORTA.0=1;};
//При достижении переменной Second 60 Секунд, к переменной Minute будет приплюсовываться 1.
//Переменная Second - очистица.
if (Second==60) {Minute++; Second=0;};
//При достижении переменной Minute 60 Минут, к переменной Hour будет приплюсовываться 1.
//Переменная Minute - очистица.
if (Minute==60) {Hour++; Minute=0;};
//Переменная Hour обнуляется по достижению 24 Часов.
if (Hour==24) {Hour=0;};
if (Timer==0) {SecLed++;};
if (SecLed==2) {PORTA.0=0; SecLed=0;};

if (Hour==0) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=0; PORTA.1=0;};
if (Hour==1) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=0; PORTA.1=0;};
if (Hour==2) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=0; PORTA.1=0;};
if (Hour==3) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=0; PORTA.1=0;};
if (Hour==4) {PORTC=0b01111111; PORTC=0b00011001; PORTA.2=0; PORTA.1=0;};
if (Hour==5) {PORTC=0b01111111; PORTC=0b00010010; PORTA.2=0; PORTA.1=0;};
if (Hour==6) {PORTC=0b01111111; PORTC=0b00000010; PORTA.2=0; PORTA.1=0;};
if (Hour==7) {PORTC=0b01111111; PORTC=0b01111000; PORTA.2=0; PORTA.1=0;};
if (Hour==8) {PORTC=0b01111111; PORTC=0b00000000; PORTA.2=0; PORTA.1=0;};
if (Hour==9) {PORTC=0b01111111; PORTC=0b00010000; PORTA.2=0; PORTA.1=0;};
if (Hour==10) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=1; PORTA.1=0;};
if (Hour==11) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=1; PORTA.1=0;};
if (Hour==12) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=1; PORTA.1=0;};
if (Hour==13) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=1; PORTA.1=0;};
if (Hour==14) {PORTC=0b01111111; PORTC=0b00011001; PORTA.2=1; PORTA.1=0;};
if (Hour==15) {PORTC=0b01111111; PORTC=0b00010010; PORTA.2=1; PORTA.1=0;};
if (Hour==16) {PORTC=0b01111111; PORTC=0b00000010; PORTA.2=1; PORTA.1=0;};
if (Hour==17) {PORTC=0b01111111; PORTC=0b01111000; PORTA.2=1; PORTA.1=0;};
if (Hour==18) {PORTC=0b01111111; PORTC=0b00000000; PORTA.2=1; PORTA.1=0;};
if (Hour==19) {PORTC=0b01111111; PORTC=0b00010000; PORTA.2=1; PORTA.1=0;};
if (Hour==20) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=0; PORTA.1=1;};
if (Hour==21) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=0; PORTA.1=1;};
if (Hour==22) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=0; PORTA.1=1;};
if (Hour==23) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=0; PORTA.1=1;};
};
}
Устранил все баги и глюки, светодиоды теперь не мигают как с предыдущим кодом.
Осталось минуты сделать.
News вне форума   Ответить с цитированием
Старый 20.06.2012, 19:23   #45 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

Цитата:
if (Hour==0) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=0; PORTA.1=0;};
if (Hour==1) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=0; PORTA.1=0;};
if (Hour==2) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=0; PORTA.1=0;};
if (Hour==3) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=0; PORTA.1=0;};
if (Hour==4) {PORTC=0b01111111; PORTC=0b00011001; PORTA.2=0; PORTA.1=0;};
if (Hour==5) {PORTC=0b01111111; PORTC=0b00010010; PORTA.2=0; PORTA.1=0;};
if (Hour==6) {PORTC=0b01111111; PORTC=0b00000010; PORTA.2=0; PORTA.1=0;};
if (Hour==7) {PORTC=0b01111111; PORTC=0b01111000; PORTA.2=0; PORTA.1=0;};
if (Hour==8) {PORTC=0b01111111; PORTC=0b00000000; PORTA.2=0; PORTA.1=0;};
if (Hour==9) {PORTC=0b01111111; PORTC=0b00010000; PORTA.2=0; PORTA.1=0;};
if (Hour==10) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=1; PORTA.1=0;};
if (Hour==11) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=1; PORTA.1=0;};
if (Hour==12) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=1; PORTA.1=0;};
if (Hour==13) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=1; PORTA.1=0;};
if (Hour==14) {PORTC=0b01111111; PORTC=0b00011001; PORTA.2=1; PORTA.1=0;};
if (Hour==15) {PORTC=0b01111111; PORTC=0b00010010; PORTA.2=1; PORTA.1=0;};
if (Hour==16) {PORTC=0b01111111; PORTC=0b00000010; PORTA.2=1; PORTA.1=0;};
if (Hour==17) {PORTC=0b01111111; PORTC=0b01111000; PORTA.2=1; PORTA.1=0;};
if (Hour==18) {PORTC=0b01111111; PORTC=0b00000000; PORTA.2=1; PORTA.1=0;};
if (Hour==19) {PORTC=0b01111111; PORTC=0b00010000; PORTA.2=1; PORTA.1=0;};
if (Hour==20) {PORTC=0b01111111; PORTC=0b01000000; PORTA.2=0; PORTA.1=1;};
if (Hour==21) {PORTC=0b01111111; PORTC=0b11111001; PORTA.2=0; PORTA.1=1;};
if (Hour==22) {PORTC=0b01111111; PORTC=0b00100100; PORTA.2=0; PORTA.1=1;};
if (Hour==23) {PORTC=0b01111111; PORTC=0b00110000; PORTA.2=0; PORTA.1=1;};
вот этот кусок надо сократить по-любому)))
если будешь делать минуты таким образом, код может занять всю память)))
Ильмир вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.06.2012, 21:36   #46 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
Cool

Минуты уже сделал, да и часы уже готовы практически.
Чтоб сократить код разделил минуты на десятки и единицы.
Осталось узнать как ноги входами делать.
aaa.jpg
Как видно из скриншота - погрешность этих часов 4 сек на 3часа, что несложно исправить програмно.
Так-же видно что я использую экранную клавиатуру, что довольно сильно бесит.
Файлы проэкта:
Часы.zip
News вне форума   Ответить с цитированием
Старый 22.06.2012, 22:58   #47 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

Цитата:
Сообщение от News Посмотреть сообщение
Так-же видно что я использую экранную клавиатуру
так не пользуйся ей

будильник, термометр будешь добавлять? )))
можно лампу настроения добавить!
Ильмир вне форума   Ответить с цитированием
Старый 22.06.2012, 23:34   #48 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
Сообщение от Ильмир Посмотреть сообщение
так не пользуйся ей
Боюсь не получится.
Цитата:
Сообщение от Ильмир Посмотреть сообщение
будильник
Само собой
Цитата:
Сообщение от Ильмир Посмотреть сообщение
термометр
Врят-ли. Для этого АЦП нужен
Цитата:
Сообщение от Ильмир Посмотреть сообщение
можно лампу настроения добавить!
Можно Если выводов хватит..
News вне форума   Ответить с цитированием
Старый 23.06.2012, 11:41   #49 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Цитата:
Сообщение от News Посмотреть сообщение
Врят-ли. Для этого АЦП нужен
Не нужен
korsaj вне форума   Ответить с цитированием
Старый 23.06.2012, 12:52   #50 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
Сообщение от korsaj Посмотреть сообщение
Не нужен
Предлагаете цыфровой датчик?
News вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:06.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.