boogoo
Members-
Постов
12 -
Зарегистрирован
-
Посещение
Электроника
-
Стаж в электронике
Не связан с электроникой
Посетители профиля
1 255 просмотров профиля
Достижения boogoo
-
Спасибо, я знаю что там не хватает
-
Могу написать прошивку, хочу за это 500 рублей, писать буду 1-3 дня. За дополнительную 1000 руб. (не считая расходов на почту) отправлю почтой готовую платку с уже прошитым микроконтроллером. (8-922-16-26-926 с вацапом или звонком реагирую быстрее).
-
И за это спасибо ...я совсем зеленый ...отладку не умею делать ...и опять немного глупых вопросов 1. В протеусе можно шагать по коду ...а можно ли в нем следить за переменными и вносить свои числа в неё? 2.Ну и если поделитесь пример (ссылка) на информацию по отладки из кодевижена на средствах атмел студио 6 или 7 буду рад (у меня из кодевижена прыгает только в 4.19 atmel studio) или намек на другую программу(мы) для отладки кода после кодевижена ...тоже буду рад!
-
Здравствуйте, хочу создать включение отключение света по двум хлопкам ...В интернете заказал микрофонный датчик на компараторе (даёт логический 1 при громком звуке), пока датчик едет решил создать прошивку (attiny13 в codevision). Создал прерывание по таймеру куда записывает сколько ms прошло, и прерывание по внешнему выводу int0 записывая в переменную d++ (куда хочу подцепить датчик). прерывания по микрофону (d=0) начальная стадия ...кода нет, мк считает свои ms и скидывает в основном цикле при достижении 700 ms. (d=1) При первом прерывании датчика обнуляем насчитанное ms до нуля, и ждём второго прерывания, не ранее чем через 700 мс (после этого времени в основном цикле сбрасываю d=0 во избежании случайного срабатывания по постороннему шуму = если микрофонный датчик дергает ногу по шуму) (d=2) если ms прошло больше 200 и меньше 600 инвертируем одну из ног микроконтроллера (включаем или выключаем свет) В основной программе после любого прерывания через 700 мс скидываю переменную d в начальное состояние d=0. Суть при реальном симулировании (тыкая на кнопку) и виртуальном бит не инвертируется (свет не включается) есть подозрения что ошибся в этой строчке /* case 2: //если d=2 и ms больше 200 и меньше 600 инвентируем порт 4 if (ms>=200 && ms<=600) { PORTB.4=~PORTB.4; } else { d=0; }; */ Прошу помочь найти ошибку или подсказать что следует изменить. //////////////////////////////НИЖЕ КОД////////////////////////////////////// #include <tiny13a.h> int ms,d; interrupt [EXT_INT0] void ext_int0_isr(void) { d++; //добавляем d еденицу при прерывании switch (d) { case 0: //если d=0 бездельничаем break; case 1: //если d=1 ставим переменную в ms в 0 (если ms превысит 700 в основном цикле скинем d на 0 // и снова бездельничаем) ms=0; break; case 2: //если d=2 и ms больше 200 и меньше 600 инвентируем порт 4 if (ms>=200 && ms<=600) { PORTB.4=~PORTB.4; } else { d=0; }; break; default: d=0; //на волшебный случай если d насчитал больше 2 }; } interrupt [TIM0_OVF] void timer0_ovf_isr(void) //прерывание по таймеру добавляет 1 мс в переменную мс { ms++; TCNT0=0x6A; } void main(void) { CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); DDRB=(0<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00); TCNT0=0x6A; OCR0A=0x00; OCR0B=0x00; TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0); GIMSK=(1<<INT0) | (0<<PCIE); MCUCR=(1<<ISC01) | (1<<ISC00); GIFR=(1<<INTF0) | (0<<PCIF); ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); DIDR0=(0<<AIN0D) | (0<<AIN1D); ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); #asm("sei") while (1) { if (ms<=700) //после первого прерывания на int обнуляем мс и если он досчитает до 700 скидываем d //ну и постоянно скидываем d в ноль чтобы начинать счет от датчика с начала { d=0; } } }
-
Спасибо, хотел сделать устройство которое включается раз в сутки на пару минут (насос для растений) и уже сделал - вот код (частоту поставил 9600000 для более точного хода attiny13). При включении через 288 минут (4,8 часа) включается нога (светодиод) через 4.8 ещё одна нога и т.д. спустя 24 часа (+-5%) включается порт соединенный с реле на 2 минуты, после все в ноль и заново. Просто не знал про for... Читаю досуге.... #define F_CPU 9600000L #include <avr/io.h> #include <util/delay.h> unsigned int i; #define min (_delay_ms(60000)) int main(void) { DDRB = 0xFF; PORTB = 0x00; while (1) { for(int i = 0; i < 288; i++) { min; } PORTB |= (1<<0); //1 лампа for(int i = 0; i < 288; i++) { min; } PORTB |= (1<<1); //1 лампа for(int i = 0; i < 288; i++) { min; } PORTB |= (1<<2); //1 лампа for(int i = 0; i < 288; i++) { min; } PORTB |= (1<<3); //1 лампа for(int i = 0; i < 288; i++) { min; } PORTB |= (1<<4); //нагрузка for(int i = 0; i < 2; i++) { min; } PORTB &= ~(1<<4); PORTB &= ~(1<<3); PORTB &= ~(1<<2); PORTB &= ~(1<<1); PORTB &= ~(1<<0); } }
-
Ну, точность собаки оставляет желать лучшего, так что часы на ней делать не стоит. Надеюсь, boogoo развеет мои опасения. Есть ли опыт в "компьютерном", или хотя бы каком-нибудь, Си и "контроллерном" ассемблере? Не развею ...я 0 в программировании
-
На данном этапе дальше функций delay PIN PORT DDR остальные надписи у меня вызывает непонимание ...вот я и хочу увидеть *НАПИСАННЫЙ РАБОЧИЙ КОД* ...вообщем разобраться так сказать на пальцах - что куда и почему. Пытаясь самостоятельно подогнать код от других камней, чтобы все таки увидеть - как это нужно писать ....Загниваю в ошибках Кстати ваш код тоже не комплитится! (да и про дополнительный внутренний генератор для attiny13 в гугле тоже не нашел)
-
В скобках много мусора, читать не обязательно!!! {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( И снова прошу о помоще, про копаясь в своем же.... из за которых пытаюсь делать выводы, как я понял библиотека deley в atmel studio имеет предел по числу ... прописал несколько раз delay(10000); delay(10000); delay(10000); delay(10000); он дает мне предел и все равно выполняет код как и раньше (то есть, несколько раз вызвать таймер нет возможности) но если прописать delay(10000); PORTB |= (1<<0); delay(1); //какое нибудь ненужное действие чтобы просто ткнуть в промежуток PORTB &= ~(1<<0); //вырубить свое ненужное действие Так конечно прокатывает, но памяти для такой простой задачи и цикла в 24 часа мне нужно в 20 раз больше чем имеет attiny13. Почитал про таймеры ...делитель ...положение таймера.. Есть множество всяческих ресурсов чтобы это подтянуть и естественно читаю на досуге, но вот c примерами в atmel studio, да и ещё для attiny13 скудно... так как нахожусь в самом начале пути даже не представляю как это написать в atmel studio ...пытался искать для atmel studio задержку на таймере в несколько минут для attiny13 на всяческих сайтах, форумах: подобных примеров не нашел. ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} Буду рад увидеть код для камня attiny13 в atmel studio на языке С, где расписана задержка на таймере больше одной минуты.
-
Кварц на attiny13a интересно... А так уже присмотрел интересную схему для восстановления фьюзов attiny13a, но уже как сказал *Жду почту...
-
Как обычно игрался с фьюзами и убил последний 5 микроконтроллер ...как приедет другие обязательно буду продолжать...
-
Всем спасибо, из выше сказанного интуитивно понятно что с функцией delay я нащупал предел задержки ..поищу про таймер