Inel Опубликовано 29 апреля, 2009 Жалоба Share Опубликовано 29 апреля, 2009 delay.h #define F_CPU 16000000 /* CPU Clock Frequency */ #define CYCLES_PER_US ((F_CPU+500000)/1000000) void delayu(unsigned short us); void delaym(unsigned short ms); delay.c #include "delay.h" void delayu(unsigned short us) { unsigned short delay_loops; register unsigned short i; delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty) // one loop takes 5 cpu cycles for (i=0; i < delay_loops; i++) {}; } void delaym(unsigned short ms) { unsigned short mdelay_loops; register unsigned short mi; mdelay_loops = (ms+3)/5; for (mi=0; mi < mdelay_loops; mi++) delayu(1000); } Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 29 апреля, 2009 Жалоба Share Опубликовано 29 апреля, 2009 Программные часы. Написл быстро. Вроде тикают правильно. Полностью еще не проверял. Выкладываю сырым. clock.h void init_calendar(void); unsigned char get_time(unsigned char tind); unsigned char get_date(unsigned char tind); void set_time(unsigned char thour,unsigned char tmin,unsigned char tsec); void set_date(unsigned char tday,unsigned char tmon,unsigned char tyear); clock.c #include <iom128v.h> #include <macros.h> #pragma interrupt_handler ovf_timer0:17 unsigned char second=0,minets=0,hour=0,day=1,month=1,year=0; void init_calendar(void) { CLI(); //disable all interrupts ASSR=ASSR | 0b00001000;// TCCR0=0b00000101;// clk/128=256gz TCNT0=0;//data OCR0=0;//sravnen TIMSK=TIMSK | 0b00000001;//int po perepoln SEI(); //re-enable interrupts } void ovf_timer0(void) { second++; if(second>=60) { second=0; minets++; if(minets>=60) { minets=0; hour++; if(hour>=24) { hour=0; day++; if((month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)&&(day>=32)) { day=1;month++; } if((month==4 || month==6 || month==9 || month==11)&&(day>=31)) { day=1;month++; } if((month==2)&&(day>=29)) { day=1;month++; } if(month>=13) { month=1; year++; if(year>=100)year=0; } } } } //UDR0=hour; //while(!(UCSR0A & 0b00100000)); //UDR0=minets; //while(!(UCSR0A & 0b00100000)); //UDR0=second; //while(!(UCSR0A & 0b00100000)); } unsigned char get_time(unsigned char tind) { if(tind==2)return second; if(tind==1)return minets; if(tind==0)return hour; } unsigned char get_date(unsigned char tind) { if(tind==2)return year; if(tind==1)return month; if(tind==0)return day; } void set_time(unsigned char thour,unsigned char tmin,unsigned char tsec) { TIMSK=TIMSK & 0b11111110;//int po perepoln hour=thour,minets=tmin,second=tsec; TIMSK=TIMSK | 0b00000001;//int po perepoln } void set_date(unsigned char tday,unsigned char tmon,unsigned char tyear) { TIMSK=TIMSK & 0b11111110;//int po perepoln day=tday,month=tmon,year=tyear; TIMSK=TIMSK | 0b00000001;//int po perepoln } Можно еще кучу всего добавить, и оптимизировать. Исользуется дополнительный внешний кварц 32768Гц. Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 29 апреля, 2009 Жалоба Share Опубликовано 29 апреля, 2009 Inel А бипер по какой схеме припаял? Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 30 апреля, 2009 Жалоба Share Опубликовано 30 апреля, 2009 Мучаю плату AVR-МТ-128. #define PIN_BEEP1 0b00100000 //выводы пищалки #define PIN_BEEP2 0b00010000 Напрямую. Ссылка на комментарий Поделиться на другие сайты More sharing options...
KitMan Опубликовано 3 мая, 2009 Жалоба Share Опубликовано 3 мая, 2009 Товарищи, помогите плз. Есть такой трехполосный кросс: Посмотреть на Яндекс.Фотках Посмотреть на Яндекс.Фотках На первой фотке внизу две неиспользованных дырочки и где-то в интернетах промелькнуло, что туда можно допаять защиту от перегруза ВЧ динамика. Можно ли это сделать, а то ВЧ уже 1 раз сгорели. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 5 мая, 2009 Жалоба Share Опубликовано 5 мая, 2009 to KitMan Хз,для защиты целая схема нужна. Перелопатил 'button' Думаю причина ясна. Достаточно взглянуть на while(1)... button.h #define PORT_BUT PINA //порт где кнопки #define ALL_BUT 0b00011111 //на каких пинах кнопки #define B_LEFT 29 #define B_RIGHT 23 #define B_UP 30 #define B_DOWN 15 #define B_ENTER 27 unsigned char button(void); button.c #include <iom128v.h> #include "button.h" unsigned char flagbut=0,butcode=0; unsigned char button(void) { unsigned char bcode; bcode=PORT_BUT & ALL_BUT; if((bcode != ALL_BUT)&&(flagbut==0)) { butcode=bcode; flagbut=1; delaym(10);//задержка от дребзга при нажатии } if((bcode==ALL_BUT)&&(flagbut==1)) { flagbut=0; beep(100,1500);//or delaym(10); задержка от дребзга при отжатии return butcode; } return 0; } Пример: #include "button.h" unsigned char cbut=0; ... main() { while(1) { cbut=button(); if(cbut) { if(cbut==B_LEFT)PORTB=0b11110000; if(cbut==B_RIGHT)PORTB=0b00001111; cbut=0; } } } Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 5 мая, 2009 Жалоба Share Опубликовано 5 мая, 2009 АЦП Сегодня сделал модуль АЦП. adc.h #define OP_OFF 0 #define OP_INT 0b11000000 #define OP_EXT 0b01000000 #define ADC_DEL2 0b00000001 #define ADC_DEL4 0b00000010 #define ADC_DEL8 0b00000011 #define ADC_DEL16 0b00000100 #define ADC_DEL32 0b00000101 #define ADC_DEL64 0b00000110 #define ADC_DEL128 0b00000111 void adc_Mux(unsigned char a_chan);//0-7 void adc_start(void); unsigned char adc_end(void); void adc_init(unsigned char a_opornoe,//V opornoe OP_OFF,OP_INT or OP_EXT unsigned char a_tip_res,//tip preobrazovania 1-Left,0-Right unsigned char a_avto, //1-avto perezapusk unsigned char a_interrupt,//1-enable,0-disable unsigned char a_delitel); //delenie freq unsigned char adc_8bit(unsigned char a_chan); adc.c #include "adc.h" #include <iom128v.h> #include <macros.h> void adc_Mux(unsigned char a_chan) { if(a_chan>7)a_chan=7; ADMUX=ADMUX | a_chan; } void adc_start(void) { ADCSRA=ADCSRA | 0b01000000; } unsigned char adc_end(void) { if(ADCSRA & 0b01000000)return 1; return 0; } void adc_init(unsigned char a_opornoe,unsigned char a_tip_res,unsigned char a_avto, unsigned char a_interrupt,unsigned char a_delitel) { unsigned char ftemp=0; CLI(); ftemp=a_opornoe; if(a_tip_res)ftemp=ftemp | 0b00100000; ADMUX=ftemp; ftemp=0b10000000; if(a_avto)ftemp=ftemp | 0b00100000; if(a_interrupt)ftemp=ftemp | 0b00001000; ftemp=ftemp | a_delitel; ADCSRA=ftemp; SEI(); } unsigned char adc_8bit(unsigned char a_chan) { if(adc_end()==0) { adc_Mux(a_chan); adc_start(); while(adc_end()); return ADCH; } } //#pragma interrupt_handler adc_interrupt:22 //void adc_interrupt(void) //{ //cadcl=ADCL; // cadch=ADCH; //} Пример: #include "adc.h" ... main() { adc_init(OP_EXT,1,0,0,ADC_DEL64); while(1) { PORTB=adc_8bit(0); } } С прерыванием то-же все просто. Если есть вопросы или предложения, не стесняйтесь... Ссылка на комментарий Поделиться на другие сайты More sharing options...
Mpako6ec. Опубликовано 6 мая, 2009 Жалоба Share Опубликовано 6 мая, 2009 В тему аналоговых ЭВМ. Процессор на реле. Созерцать тут. Не знаю, зачем оно нужно но звучит просто офигительно=) Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 7 мая, 2009 Жалоба Share Опубликовано 7 мая, 2009 Inel А почему внешний АЦП не использовал? На шине I2C. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 7 мая, 2009 Жалоба Share Опубликовано 7 мая, 2009 Зачем лишние затраты, если есть неплохой встроенный ADC. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Inel Опубликовано 7 мая, 2009 Жалоба Share Опубликовано 7 мая, 2009 to Mpako6ec. Бред какой-то. Идея нереализуема, потому что это извращение. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Mpako6ec. Опубликовано 7 мая, 2009 Жалоба Share Опубликовано 7 мая, 2009 Inel Идея нереализуема, потому что это извращение. Вообще-то она там реализована. И первый компьютер тоже по началу собирались делать на реле, но не хватило качества релюшек. Алсо, с прошедшим праздником нас=) Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 8 мая, 2009 Жалоба Share Опубликовано 8 мая, 2009 Mpako6ec. Изврат извратный. Чуваку точно нехрен было делать. Но зато прикольно. И сильные электромагнитные помехи не страшны. Спасибо, Мракобес, за инфу! Весело. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Mpako6ec. Опубликовано 9 мая, 2009 Жалоба Share Опубликовано 9 мая, 2009 L-team Ну без досконального понимания работы ЦП такую штуковину не сделать. Так что польза точно есть. Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 11 мая, 2009 Жалоба Share Опубликовано 11 мая, 2009 Может, конечно, уже были такие идеи и статьи, но я хочу представить Вашему вниманию одну вещь. Мне приходится работать с контроллерами и различными устройствами, которые питаются от 220В. Но кабель питания соединяется с ними, что называется "под винт". Для отладки таких устройств я использую один разветвлитель розеток. Присоединил кабель питания, скажем к контроллеру "под винт", возможность его выключить или перезагрузить, в момент отладки программы, реализуется только вытаскиванием вилки из розетки, не откручивать же каждый раз винты. Очень сложно это делать если вилка "евро". Они большие и трудно вытаскиваются из розетки. Приходится придерживать рукой "пилот" или выключать "пилот", отключая все устройства подключённые к нему. Можно сделать выключатель на проводе, но иной раз провод западает между столами или столом и стеной. И тут мне пришла в голову идея, а, что если сделать выключатель прямо в вилке? Следущий раз, когда я делал очередной провод питания для контроллера, решил врезать туда выключатель. Под рукой у меня оказался выключатель кнопочного типа,его я и использовал. На фото, на мой взгляд,всё доступно показано. Думаю в вилку можно установить и любой другой вид выключателей. Извиняюсь за качество фоток, и за безобразное исполнение конструкции. Не было времени делать красиво. Теперь если мне надо "ресетнуть" или выключить какой-нибудь девайс, не обязательно его вытаскивать из розетки или выключать весь пилот. Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 22 мая, 2009 Жалоба Share Опубликовано 22 мая, 2009 Работа не волк, друзья, в лес не убежишь. Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 5 июня, 2009 Жалоба Share Опубликовано 5 июня, 2009 Что кто нового не сделал ничего? Ссылка на комментарий Поделиться на другие сайты More sharing options...
Mpako6ec. Опубликовано 5 июня, 2009 Жалоба Share Опубликовано 5 июня, 2009 L-team Ну где-то через месяцок активно примусь за работу. Будет чем похвастаться. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Чернокнижник Опубликовано 20 июня, 2009 Жалоба Share Опубликовано 20 июня, 2009 Так, ребята-знатоки - есть вопрос! Имеется вольтметр на 250 Вольт. Что-то мне подсказыват (что осталось от знаний физики из школы и универеа), что если я приделаю к нему вилку и включу в розетку - то ничего замкнуть не должно и он должен показывать сколько Вольт в сети. Я прав? Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 22 июня, 2009 Жалоба Share Опубликовано 22 июня, 2009 Чернокнижник Прав! Только не забудь поставить вольтметр на режим переменного тока. И соблюдай диапазон. Зачем тебе это надо? Ссылка на комментарий Поделиться на другие сайты More sharing options...
Чернокнижник Опубликовано 22 июня, 2009 Жалоба Share Опубликовано 22 июня, 2009 Зачем, зачем... Притащили мне вольтметр - чё он без дела будет валятся? А ща в летнее время оченна актуально знать сколько вольтов по проводам бегает, ибо если меньше нижней планки ИБП - то и смысла включать комп - нет. А то включишь - увидишь что тока на 10 минут работы и выключишь. Ссылка на комментарий Поделиться на другие сайты More sharing options...
KitMan Опубликовано 24 июня, 2009 Жалоба Share Опубликовано 24 июня, 2009 Кто может спаять за вознаграждение переходник VGA -> 3x RCA RGB? Ссылка на комментарий Поделиться на другие сайты More sharing options...
ivanpo Опубликовано 28 июня, 2009 Жалоба Share Опубликовано 28 июня, 2009 Ещё тема! Охранная сигнализация для квартиры или ГАРАЖА!!!!!! Конечно звонит на сотовый! И вы видите звонит: "Гараж открыт! Грабят!" )))) удивил))) милионы схем подобного оборудования. я когдато собирал даже на инфракрасных датчиках и датчиков движения + вибро Ссылка на комментарий Поделиться на другие сайты More sharing options...
L-team Опубликовано 28 июня, 2009 Жалоба Share Опубликовано 28 июня, 2009 ivanpo пост от 12 Sep 2006 Ссылка на комментарий Поделиться на другие сайты More sharing options...
Mpako6ec. Опубликовано 1 сентября, 2009 Жалоба Share Опубликовано 1 сентября, 2009 А то тема как-то зачахла... Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.