Jump to content

Search the Community

Showing results for tags 'AtMega8'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
    • Competition 2019
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube
  • Радиолюбительская доска объявлений exDIY's Надежность и группы продавцов

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 98 results

  1. Кто нибудь знает как можно связать схему переходника USB - UART на ATmega8 и микросхему L9637D? Чтобы работало все как K-line адаптер. Если просто обе части соединить, то не работает.
  2. Подскажите пожалуйста как можно замерить время выполнения сабрутин? Есть ли такие средства в AVRStudio или ещё где? Обдумываю как правильно построить програмку тахометра - сначала делал расчеты в обработчике прерывания таймера, потом в основном цикле, а теперь запутался. Это из Ревича Практическое програмирование основной код и динамическая индикация отсюда http://smartep.ru/index.php?category=electronics&group=project&id=2 Если я правильно понимаю - из прерывания нужно выходить быстро, и делать там по возможности мало. Или к микроконтроллерам это не относится? Ещё такой вопрос - там на входе будет сигнал с индуктивного датчика 24в - его можно просто через резистор понизить (до 5?) и на входной транзистор? Или нужно как-то развязывать? И последний вопрос - почему в протеусе семисегментный индикатор так медленно обновляется когда стробы через транзисторы подключены? Пока было напрямую от атмеги обновлялось нормально, как только добавил транзисторы - перестали прорисовываться цифры. Если нажать паузу и в дебагере прошагать - всё прорисовывается как надо, а если просто выполняется - пусто. Я добавил задержку - в строке 353 поменял 5 на 190 - вроде стало прорисовываться, но обновляется очень медленно. Это в протеусе проблема или я чего-то не так делаю? Заранее спасибо за ответ tacho.zip
  3. Пытаюсь писать ПО под инкубатор, раньше не сильно сталкивался с таким ЯП как C(Wiring). Поэтому возникли проблемы с тем, что когда МК стартует, выводится чистый экран и только когда нажмешь button2 выводятся показания. Пробовал достать switch с условия, в тело loop() то были проблемы с тем что изображение мерцает, видимо перерисовывается. Вообщем помогите решить эту проблему и нужно как-то сделать так, чтобы показания меню, такие как текущая температура и влажность, были динамическими #include <LiquidCrystal.h> #include "DHT.h" #define button1 8 #define button2 9 #define button3 10 #define DHTPIN 6 #define DHTTYPE DHT11 uint8_t a = 0; uint8_t val = 0; // инициализация пинов LiquidCrystal lcd(12, 11, 5, 4, 3, 2); DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { val = digitalRead(button2); if (val == HIGH) { if (a > 1) { a = 0; delay(100); } else { a++; delay(100); } // Меню switch (a) { case 0: info(); //Общий показ break; case 1: temp(); //Температура break; case 2: vl(); //Влажность break; } } } void info() { lcd.clear(); lcd.setCursor(0, 0); lcd.print(dht.readTemperature()); lcd.setCursor(0, 1); lcd.print(dht.readHumidity()); } void temp() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Temperature"); lcd.setCursor(0, 1); lcd.print(dht.readTemperature()); } void vl() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Hum"); lcd.setCursor(0, 1); lcd.print(dht.readHumidity()); }
  4. Привет всем! =) В общем пришла мне в голову такая идея переделать Светодиодный анализатор спектра на atmega8 10х10 LED в VU metr, у меня уже есть собранная схема анализатора я хочу её переделать чтоб не 10 было столбиков а один и он был обьединён на 10 светодиодов один столбик и десять светодиодов 1x10 вот ссылка: http://cxema.at.ua/p...pektra/1-1-0-34 вот схема анализатора: я хочу к ней подключить 10 светодиодов чтоб они все вместе горели вот так на схеме я нарисовал все соединённые светодиоды последовательно, сначало не подумал, я буду соединять параллельно =) какие транзисторы мне нужно поменять и что добавить и что убрать чтоб как я хочу было я обтянул себе крышу в машине черным и хочу поставить сто светодиодов на крыше внутри и подключить их к музыке =)) круто я придумал?)))
  5. Здравствуйте уважаемые друзья! Прошу у вас помощи! Я хочу создать клавиатуру с нуля так сказать, специально изучил для этого работу с микроконтроллером Смотрел темы подобные, но не то. Долго искал в инете не понятно и не то Цель по сути проста. Создать клавиатуру (кнопки которые работают, как клавиатура) Начинаю с малого, сам являюсь хорошим веб-программистом. Но мысль о новой клавиатуре давно не дает покоя) Ресурсное обеспечение - показано на фото, возможно там не правильно, но главное чтоб вы поняли Микроконтроллер - Atmega8 2 кнопки 2 резистора питание 5v Задача: По нажатию на первую кнопку печатать в блокноте букву "А" По нажатию на вторую букву "Б" Буквы русские То-есть делать то что делает обычная клавиатура по коду: Простой код - Если нажата кнопка 1 отправить код клавиши "А" И то же самое со второй только код клавиши "Б" Проблемы: Не знаю как подключить все это к компу (очень желательно USB) Как заставить комп распознавать устройство как клавиатуру В будущем намерен добавить больше кнопок Про сетки, столбы и строки как распознавание нажатий читал, пока это не требуется. Прошу вас помощи! Если возможно опишите по подробней что мне требуется сделать. Какие устройства, шнуры и т.п. мне нужно? Всем спасибо кто попытался и помог! P.S. И подскажите что нужно купить для всего этого (полный комплект). Буду очень благодарен!
  6. Всем привет!Помогите со схемкой Термоуправления вентелятором желательно та базе ATmega8 и прошивочку к нему!ЗАРАНЕЕ СПАСИБО!
  7. Здравствуйте! Я публиковал эту тему в рубрике "МК для начинающих", но к сожалению, там никто мне не может помочь. Поэтому обращаюсь к более продвинутым специалистам. Хочу доработать программу для гирлянды под управлением с пульта RC5, но для "чайника" самому разобраться сложновато. В программе предусмотрено несколько вариантов переключения гирлянды (это у меня получилось). Хочу расширить функционал, чтобы гирлянду можно буль потушить и включить кнопкой Power. При включении должна вновь работать программа, которая была выбрана до выключения, даже если пропадало питание. И может быть, дополнить функционал управлением скоростью переключения, т.е. ускорить индикацию или замедлить. Помогите, пожалуйста, разобраться как это сделать. Прилагаю в архиве проект Codevision v.2.04.4 #include "delay.h" #include "rc5.h" #include "main.h" void main (void) { PORTB = 0b00000000; DDRB = 0b00000000; // тут на РВ0 ИК-порт PORTC = 0b00000000; DDRC = 0b00000000; PORTD = 0b00000000; DDRD = 0b11111100; // тут светодиоды Rc5_SetRx(); #asm ("sei") while(1) { if (rc5.dataOK) { rc5.dataOK = 0; switch (rc5.command) { case 1: while (rc5.dataOK==0) { // программа по нажатию 1 PORTD=0b00000100; delay_ms(500); PORTD=0b00001000; delay_ms(500); PORTD=0b00000100; delay_ms(500); } break; case 2: while (rc5.dataOK==0) { // программа по нажатию 2 PORTD=0b00001100; delay_ms(500); PORTD=0b00011000; delay_ms(500); PORTD=0b00010100; delay_ms(500); } break; case 3: while (rc5.dataOK==0) { // программа по нажатию 3 PORTB=0b00000000; PORTD=0b00000100; delay_ms(100); PORTB=0b00000000; PORTD=0b00001100; delay_ms(100); PORTB=0b00000000; PORTD=0b00011100; delay_ms(100); PORTB=0b00000000; PORTD=0b00111100; delay_ms(100); PORTB=0b00000000; PORTD=0b01111100; delay_ms(100); PORTB=0b00000000; PORTD=0b11111100; delay_ms(100); PORTB=0b00000001; PORTD=0b11111100; delay_ms(100); PORTB=0b00000011; PORTD=0b11111100; delay_ms(100); } break; } } } delay_ms(500); rc5.dataOK = 0; } RC5_my.rar
  8. Решил я на днях поближе познакомится с микроконтроллерами, конечно же выбрал мк из серии Атмега. Посмотрел несколько видеоуроков, почитал статьи, книжки, промоделировал некоторые схемы в протеусе и решил приступить к практике. Раздобыл программатор(отладчик) avr dragon, купил мк atmega8, воткнул его к макетной плате, туда же сунул светодиод и резистор к порту В0. Написал програмульку (мигание светодиода) на atmel studio, проверил на работоспособность в протеусе, подключил к программатору через ISP разьем, подключил питание 5 вольт и прошил. После прошивки атмел студио сказал мне что то типа "отладить не удалось, удалось только прошить", думаю все было норм, но светодиод почему то не мигает. Подключил все верно, и ISP и светодиод с резистором. Ничего больше не трогал(фьюзы и т.п. в чем особо не разбираюсь) Вы конечно скажете что в инете инфы много - ИЩИ!!, а я скажу что обратился сюда в последнюю очередь, после того как удостоверился, что делаю я как указано на схемах. В чем я мог ошибиться?
  9. Всем доброго времени суток. Решил собрать паяльную станцию. Выбрал такую конструкцию, т.к. она достаточно простая и Хабр вроде вполне доверенный ресурс. Сделал плату, спаял,прошил контроллер, запустил, а оно не работает так как надо! В монтаже и в трассировке платы ошибок нет, все тщательно проверил в том числе и с лупой, плату промыл от флюса. Паяльник HAKKO 907 с честной керамикой, 50 Вт 24В. Запускаю устройство, постоянно показывает 410, иногда 412 на индикаторе, индикатор еще немного мерцает, прибор вообще не реагирует на нажатия кнопок. Паяльник греется, плавит канифоль и припой 1 мм, а вот прогреть полигон на плате не может. При этом светодиод который должен гореть при работе нагревателя выключен. Как исправит проблему? Смущает что в схеме использован трансформатор 18В 40Вт(у меня мощнее), и рекомендован паяльник с нагревателем HAKKO 003 (HAKKO A1321), как у меня, а он на 24В 50 Вт. Если не удастся запустить эту конструкцию или она мне не подойдет, то порекомендуйте пожалуйста другую, желательно без существенных отличий в элементной базе. Также для меня важна регулировка кнопками а не энкондером или еще какими то крутилками. Всем заранее спасибо.
  10. ДОброго времени суток ! ребята , занимающиеся микроконтроллерами , подскажите , как можно избавится от микросхемы- PCA9517 ,в статье http://cxem.net/mc/mc303.php ....ну не реально найти её .....эту микруху...
  11. Всем доброго дня! Необходима помощь по переносу кода на CVAVR. За основу взята плата и исходники с сайта:http://garydion.com/...ts/videoverlay/ Мой код в CVAVR выглядит так: #include <mega8.h> #define WatchdogReset() #asm("wdr") #define Wait() while(!(SPSR & (1<<SPIF))) //Статические функции и переменные unsigned char line; /* Номер строки*/ unsigned char i; short ltemp; short ntemp; unsigned char head[] = "NGTXI@BALLOON@"; unsigned char spd[] = "162"; unsigned char hdg[] = "281"; unsigned char time[] = "145446"; unsigned char date[] = "122504"; unsigned char lat[] = "@3435.68N"; unsigned char lon[] = "08918.75W"; /* ' ' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z */ unsigned char ltrs[189] = { 255,231,131,195,135,129,129, 195,189,131,129,189,191,125, 125,195,131,195,131,195,131, 189,189,125,125,125, 1,255, 219,189,189,187,191,191,189, 189,239,247,187,191, 57, 61, 189,189,189,189,189,239,189, 189,125,187,187,251,255,189, 189,191,189,191,191,191,189, 239,247,183,191, 85, 93,189, 189,189,189,191,239,189,189, 109,215,215,247,255,189,131, 191,189,131,131,177,129,239, 247,143,191,109,109,189,131, 189,131,195,239,189,219,109, 239,239,239,255,129,189,191, 189,191,191,189,189,239,247, 183,191,125,117,189,191,179, 183,253,239,189,219,109,215, 239,223,255,189,189,189,187, 191,191,189,189,239,183,187, 129,125,121,189,191,185,187, 189,239,189,219,147,187,239, 191,255,189,131,195,135,129, 191,195,189,131,207,189,129, 125,125,195,191,205,189,195, 239,195,231,147,125,239, 1}; /* - . / 0 1 2 3 4 5 6 7 8 9 : */ unsigned char nums[98] = { 255,255,207,131,239,131,131, 227, 1,131, 1,131,131,255, 255,255,187,125,207,125,125, 219,127,127,253,125,125,239, 255,255,187,125,239,253,253, 187,127,127,251,125,125,255, 131,255,207,125,239,243,227, 123,131, 3,247,131,129,255, 255,255,255,125,239,207,253, 1,253,125,239,125,251,255, 255,231,255,125,239,191,125, 251,125,125,239,125,247,239, 255,231,255,131,199, 1,131, 251,131,131,239,131,207,255}; interrupt [EXT_INT0] void ext_int0_isr(void) { line++; TCNT0 = 135; if (line > 220) TCNT0 = 172; if (line > 230) TCNT0 = 175; if (line > 240) TCNT0 = 185; TIFR |= 1<<TOV0; TIMSK |= 1<<TOIE0; //Включить прерывание таймера №0 } interrupt [EXT_INT1] void ext_int1_isr(void) { line = 0; } interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TIMSK &= ~(1<<TOIE0); //Выключить прерывание таймера №0 if ((line > 40) && (line < 48)) { SPSR = 0; ltemp = (line - 41) * 27 - 64; ntemp = (line - 41) * 14 - 45; DDRD = 0x80; for (i=0;i<=12;i++) {SPDR = ltrs[head[i] + ltemp];Wait();}; DDRD = 0x00; } if ((line > 220) && (line < 228)) { ltemp = (line - 221) * 27 - 64; ntemp = (line - 221) * 14 - 45; SPSR = 1; // Включение узкого шрифта DDRD = 0x80; SPDR = ltrs['S' + ltemp]; Wait();/*Вывод символа S */ SPDR = nums[':' + ntemp]; Wait();/*Вывод символа : */ SPDR = nums[spd[0] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = nums[spd[1] + ntemp]; Wait();/*Вывод символа 6 */ SPDR = nums[spd[2] + ntemp]; Wait();/*Вывод символа 2 */ SPDR = ltrs['@' + ltemp]; Wait();/*Вывод '@'-пробел */ SPDR = ltrs['H' + ltemp]; Wait();/*Вывод символа H */ SPDR = nums[':' + ntemp]; Wait();/*Вывод символа : */ SPDR = nums[hdg[0] + ntemp]; Wait();/*Вывод символа 2 */ SPDR = nums[hdg[1] + ntemp]; Wait();/*Вывод символа 8 */ SPDR = nums[hdg[2] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = ltrs['@' + ltemp]; Wait();/*Вывод '@'-пробел */ SPDR = ltrs['A' + ltemp]; Wait();/*Вывод символа A */ SPDR = nums[':' + ntemp]; Wait();/*Вывод символа : */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[time[0] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = nums[time[1] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[time[2] + ntemp]; Wait();/*Вывод символа 5 */ SPDR = nums[time[3] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[time[4] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[time[5] + ntemp]; Wait();/*Вывод символа 6 */ DDRD = 0x00; } if ((line > 230) && (line < 238)) { ltemp = (line - 231) * 27 - 64; ntemp = (line - 231) * 14 - 45; SPSR = 1; // Включение узкого шрифта */ DDRD = 0x80; SPDR = nums[time[0] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = nums[time[1] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[':' + ntemp]; Wait();/*Вывод символа : */ SPDR = nums[time[2] + ntemp]; Wait();/*Вывод символа 5 */ SPDR = nums[time[3] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[':' + ntemp]; Wait();/*Вывод символа : */ SPDR = nums[time[4] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = nums[time[5] + ntemp]; Wait();/*Вывод символа 6 */ SPDR = ltrs['@' + ltemp]; Wait();/*Вывод '@'-пробел */ SPSR = 0;// Выключение узкого шрифта SPDR = ltrs[lat[0] + ltemp]; Wait();/*Вывод '@'-пробел */ SPDR = nums[lat[1] + ntemp]; Wait();/*Вывод символа 3 */ SPDR = nums[lat[2] + ntemp]; Wait();/*Вывод символа 4 */ SPSR = 1; // Включение узкого шрифта SPDR = nums['/' + ntemp]; Wait();/*Вывод символа ° */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[lat[3] + ntemp]; Wait();/*Вывод символа 3 */ SPDR = nums[lat[4] + ntemp]; Wait();/*Вывод символа 5 */ SPSR = 1; // Включение узкого шрифта SPDR = nums[lat[5] + ntemp]; Wait();/*Вывод символа . */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[lat[6] + ntemp]; Wait();/*Вывод символа 6 */ SPDR = nums[lat[7] + ntemp]; Wait();/*Вывод символа 8 */ DDRD = 0x00; } if ((line > 240) && (line < 248)) { ltemp = (line - 241) * 27 - 64; ntemp = (line - 241) * 14 - 45; SPSR = 1; // Включение узкого шрифта */ DDRD = 0x80; SPDR = nums[date[0] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = nums[date[1] + ntemp]; Wait();/*Вывод символа 2 */ SPDR = nums['-' + ntemp]; Wait();/*Вывод символа - */ SPDR = nums[date[2] + ntemp]; Wait();/*Вывод символа 2 */ SPDR = nums[date[3] + ntemp]; Wait();/*Вывод символа 5 */ SPDR = nums['-' + ntemp]; Wait();/*Вывод символа - */ SPDR = nums[date[4] + ntemp]; Wait();/*Вывод символа 0 */ SPDR = nums[date[5] + ntemp]; Wait();/*Вывод символа 4 */ SPDR = ltrs['@' + ltemp]; Wait();/*Вывод '@'-пробел */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[lon[0] + ntemp]; Wait();/*Вывод символа 0 */ SPDR = nums[lon[1] + ntemp]; Wait();/*Вывод символа 8 */ SPDR = nums[lon[2] + ntemp]; Wait();/*Вывод символа 9 */ SPSR = 1; // Включение узкого шрифта SPDR = nums['/' + ntemp]; Wait(); /*Вывод символа ° */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[lon[3] + ntemp]; Wait();/*Вывод символа 1 */ SPDR = nums[lon[4] + ntemp]; Wait();/*Вывод символа 8 */ SPSR = 1; // Включение узкого шрифта SPDR = nums[lon[5] + ntemp]; Wait();/*Вывод символа . */ SPSR = 0;// Выключение узкого шрифта SPDR = nums[lon[6] + ntemp]; Wait();/*Вывод символа 7 */ SPDR = nums[lon[7] + ntemp]; Wait();/*Вывод символа 5 */ DDRD = 0x00; } } void main(void) { // Описание локальных переменных // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P PORTB = 0x00; DDRB = 0xFF; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 2000,000 kHz TCCR0=0x02; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 2000,000 kHz // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x02; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 15,625 kHz // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x07; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: On // INT1 Mode: Falling Edge GICR|=0xC0;//GICR=(1<<INT0)+(1<<INT1); MCUCR=0x0A;//MCUCR=(1<<ISC01)+(1<<ISC11); GIFR=0xC0; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // SPI initialization // SPI disabled SPCR=0x54;//SPCR=/*(1<<SPIE)|*/(1<<SPE) | (1<<MSTR) | (1<<CPHA); SPSR=0x01;//SPSR= (1<<SPI2X); // Analog Comparator initialization ACSR=0x48; //ACSR = (1<<ACBG) | (1<<ACIE); SFIOR=0x00; // Watchdog Timer initialization // Watchdog Timer Prescaler: OSC/2,048K #pragma optsize- WDTCR=0x18; // Wake-up the watchdog register WDTCR=0xff; // Enable and timeout around 2.1s #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Global enable interrupts #asm("sei") // Reset watchdog WatchdogReset(); while (1) { } } Проблема в следующем: при прошивке МК кодом автора, плата(макетная) прекрасно работает (Частота 16MHz), но скомпилированной прошивкой в CVAVR нет. Символы размыты и не читабельны, да и к тому же строки с символами дрожат. Оптимизация кода по скорости в настройках компилятора. Есть предположение что не дописано: режим сна таймера... Подскажи мою ошибку,что сделано не так? Направьте в нужное русло. Исходный авторские файлы: overlay.zip Мои тестовые файлы: test.zip
  12. Здравствуйте! Хочу доработать программу для гирлянды под управлением с пульта RC5, но для "чайника" самому разобраться сложновато. В программе предусмотрено несколько вариантов переключения гирлянды. Хочу расширить функционал, чтобы гирлянду можно буль потушить и включить кнопкой Power. При включении должна вновь работать программа, которая была выбрана до выключения. И может быть, дополнить функционал управлением скоростью переключения, т.е. ускорить индикацию или замедлить. Помогите, пожалуйста, разобраться как это сделать. Прилагаю в архиве проект Codevision v.2.04.4 #include "delay.h" #include "rc5.h" #include "main.h" void main (void) { PORTB = 0b00000000; DDRB = 0b00000000; // тут на РВ0 ИК-порт PORTC = 0b00000000; DDRC = 0b00000000; PORTD = 0b00000000; DDRD = 0b11111100; // тут светодиоды Rc5_SetRx(); #asm ("sei") while(1) { if (rc5.dataOK) { rc5.dataOK = 0; switch (rc5.command) { case 1: while (rc5.dataOK==0) { // программа по нажатию 1 PORTD=0b00000100; delay_ms(500); PORTD=0b00001000; delay_ms(500); PORTD=0b00000100; delay_ms(500); } break; case 2: while (rc5.dataOK==0) { // программа по нажатию 2 PORTD=0b00001100; delay_ms(500); PORTD=0b00011000; delay_ms(500); PORTD=0b00010100; delay_ms(500); } break; case 3: while (rc5.dataOK==0) { // программа по нажатию 3 PORTB=0b00000000; PORTD=0b00000100; delay_ms(100); PORTB=0b00000000; PORTD=0b00001100; delay_ms(100); PORTB=0b00000000; PORTD=0b00011100; delay_ms(100); PORTB=0b00000000; PORTD=0b00111100; delay_ms(100); PORTB=0b00000000; PORTD=0b01111100; delay_ms(100); PORTB=0b00000000; PORTD=0b11111100; delay_ms(100); PORTB=0b00000001; PORTD=0b11111100; delay_ms(100); PORTB=0b00000011; PORTD=0b11111100; delay_ms(100); } break; } } } delay_ms(500); rc5.dataOK = 0; } RC5_my.rar
  13. Здравствуйте ! Собрал схему светодиодного сердца на ATmega 8 ,все резисторы на 510 ом , залил прошивку , но вот проблема при включении сверкает только верхний ряд , а всё , что ниже - нет,точнее присмотревшись можно увидеть как тусклеет кристалл светодиода , что это может быть?? пробовал на нижних диодах убирать резисторы и ставить перемычку , светодиоды горят ярко , но греются и греется ATmega , поставил назад на 510 ом .......снова ооооооооочень тускло светятся ! видео для наглядности
  14. Собрал программатор http://cxem.net/beginner/beginner74.php. Работает отлично. Собрал пару схем, работают... Только может подскажет кто... Прошил Atmega8-16PU и установил фьюзы - CKOPT [v] ,SPEIN [v] ,WDTON [v] в PonyProg. [v] - установлены галочки, остальные - пусто. Микросхема после записи отпала от ПониПрог, что естественно. Прошитая программа должным образом не заработала (USB-UART), но и восстановить микру не могу. Ранее с ней же выставля другие фьюзы и после падения - цеплял LED на XTAL1 и восстанавливал, сейчас не выходит. Должно было по конечной схеме работать на 12MHz вроде, но не работает. С 12MHz пробовал также цеплять на программатор... Ничего не получается. Либо кварц не рабочий попался, либо не знаю... Или емкость конденсатором с кварцем и минусов неверные ставлю (в каком диапазоне емкостей можно ставить конденсаторы?) Подскажите, как можно восстановить микру с этим программатором?
  15. Ища информацию по работе с сервоприводами наткнулся на статью. Для пробы был выбран МК Atmega8 и сервопривод TowerPro SG90 9G. Сделал изменения прошивки по аналогии. При включении - вал сервопривода немного дергается и на этом все заканчивается. В чем может быть причина? Кварц был взят на 12 МГц. Из схемы выброшена кнопка S1 конденсатор С5. Пересчитал по аналогии данные: 0.45ms= 0 градусов. 1.264ms= 90 градусов. 2.45ms= 180 градусов. 12Mhz/64 = 187.5khz = 5.3 мкс (5.3us) TOP = 3749 Servoугол 0 градусов требуется ширина импульса 0.45ms (450uS), поэтому значениеOCR1A = 450us/5.3us = 84.9 Servoугол 90 градусов требуется ширина импульса 1.264ms (1264uS), поэтому значениеOCR1A = 1264us/5.3us = 238,49 Servoугол 180 градусов требуется ширина импульса 2.45ms (2450uS), поэтому значениеOCR1A = 2450us/5.3us = 462,26 Прошивка: #include <avr/io.h> #include <util/delay.h> //Функция задержки void Wait() { uint8_t i; for(i=0;i<50;i++) { _delay_loop_2(0); _delay_loop_2(0); _delay_loop_2(0); } } void main() { //Настраиваем 16-ти битный таймер: TIMER1 TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //не инвертируем ШИМ TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //делитель частоты = 64; режим = 14(быстрый ШИМ) ICR1=3749; //частота ШИМ = 50Hz; Период = 20ms (период стандартный) DDRC|=(1<<PC0)|(1<<PC1); //разьемы устанавливаем как выход while(1) { OCR1A=84.9; //0 градусов Wait(); OCR1A=238.49; //90 градусов Wait(); OCR1A=462.26; //180 градусов Wait(); } } Фьюзы прошил: Lowfuse= 0xFF Highfuse= 0xC9
  16. Здраствуйте, помогите пожалуста поправить прошивку немного, нужно переназначить(поменять) порты вывода информации на 4-х циферный 7-ми сегментный индикатор, и дублировать функционал одного порта шим(он в меню настраивается) на другой порт, чтобы было два независимых шим порта для управления двигателями, имеется исходник(проект в Code Vision AVR ) и код Асемблера, в програмировании не силён.Мир же не без добрых лодей, буду очень благодарен. Winder_V.1.0 (CV AVR).rar
  17. Добрый день, по ходу работы над 7-ми сегментными часами на ATmega8515 вылезла проблема с прерываниями, по счетчику. Перелопатил кучу информации и даташит, но в данном виде программы прерывания не работают, в чем может быть проблема? #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define digit_display_time 10 unsigned char milliseconds, seconds, ten_seconds, minutes, ten_minutes, hours, ten_hours; ISR(TIMER1_COMPA_vect) { milliseconds++; TCNT1H=0x00; TCNT1L=0x00; if (milliseconds >= 1000 ) { milliseconds = 0; seconds++; }; if (seconds >= 10) { seconds = 0; ten_seconds++; }; if (ten_seconds >= 6) { ten_seconds = 0; minutes++; }; if (minutes >= 10) { minutes = 0; ten_minutes++; }; if (ten_minutes >= 6) { ten_minutes = 0; hours++; }; if (hours >= 10) { hours = 0; ten_hours++; }; if (ten_hours >= 2 && hours == 4) { ten_hours = 0; hours=0; }; } void timer_init() { //OCR1A=125; OCR1AH = 0b00000000;// 125 OCR1AL = 0b01111101; //Предделитель на х64 TCCR1B = (0<<CS12)|(1<<CS11)|(1<<CS10); //Прерывание по совпадению TC1 A TIMSK=(1<<OCIE1A); sei(); } int main(void) { timer_init(); unsigned char digits[10] = {63,6, 91, 79, 102, 109, 125, 7, 127, 111}; DDRA = 0b11111111; DDRC = 0b11111111; PORTC = 0b00000000; while(1) { PORTA = digits[seconds]; DDRC = 0b00001000; _delay_ms(digit_display_time); PORTA = digits[ten_seconds]; DDRC = 0b00000100; _delay_ms(digit_display_time); PORTA = digits[minutes]; DDRC = 0b00000010; _delay_ms(digit_display_time); PORTA = digits[ten_minutes]; DDRC = 0b00000001; _delay_ms(digit_display_time); } } Clock.rar
  18. Добрый вечер уважаемые форумчане! Подскажите пожалуйста как отсеять шумы на выходе приемника ? Задача: сделать универсальный декодер команд ду на базе радио. На ИК лучах система пашет отлично, а вот на радио - не программируется , так как шумы влияют на систему. Тактовая частота МК равна 4мГц Код сейчас такой: // сам захват поступающих импульсов void decode_ir_data() { tim_system_rc=0x06; if(start) // если установлен старт бит - начинаем измерять импульсы { if(a<=111)data_ir[a] = timer_ir; if(a<112)a++; timer_ir=0; // обнуляем счетчик if(a>110) { a=112; // сбрасываем счетчик данных массива tim_stop=1; z=0; } } if(start==0) // старт бит установлен? нет! { if(IR && timer_ir>100) start=0x01; // да! else timer_stop(); } if(a==112) { start=0;} } void timer_stop() { tim_system_rc=0; if(start) { tim_stop=1;} start=0; a=0; timer_ir=0; } // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { LED=1; if(flags_prog && WR_EN) { timer_stop(); } else { decode_ir_data(); } } // обучение командам ДУ case 0: if (cmd_rc==0) // команда не поступила { if(tim_stop==1) { #asm("cli") if(flags_prog && WR_EN==0) { for(d=0; d<111; d++) // delete data { com1[d]=0; } for(d=0; d<111; d++) { com1[d]= data_ir[d]; } } for(d=0;d<111;d++) // алгоритм определения поступившей команды { if (com1[d]>0 && com1[d]<0xFF ) { cmd_rc=1; d=111; // выходим из цикла timer_led_shou=0; } else { cmd_rc=0; } } } } else // команда поступила { if(++timer_led_shou > 20) {timer_led_shou=0; cmd_rc=0; } // выходим в захват команды timer_led=20; flags_interrupt=1; } if(++timer_led_ch>15) timer_led_ch=21; else CMD1=1; if(timer_led_ch>10 && timer_led_ch<15)CMD1=0; break; // распознавание "своей" команды. if (tim_stop==1) { #asm("cli") cmd.cmd_0=1; cmd.cmd_1=cmd.cmd_2=cmd.cmd_3=1; cmd.flags_0=cmd.flags_1=cmd.flags_2=cmd.flags_3=0; for(d=0; d<111; d++) { com_buff[d] = com1[d]; if (com_buff[d]<4)cmd.flags_0=1; if(cmd.flags_0==0) { if (((com_buff[d]+3) < data_ir[d]) || ((com_buff[d]-3) > data_ir[d])) // команда 1 cmd.cmd_0=0; } com_buff[d] = com2[d]; if (com_buff[d]<4)cmd.flags_1=1; if(cmd.flags_1==0) { if (((com_buff[d]+3) < data_ir[d]) || ((com_buff[d]-3) > data_ir[d])) // команда 2 cmd.cmd_1=0; } com_buff[d] = com3[d]; if (com_buff[d]<4)cmd.flags_2=1; if(cmd.flags_2==0) { if (((com_buff[d]+3) < data_ir[d]) || ((com_buff[d]-3) > data_ir[d])) // команда 3 cmd.cmd_2=0; } com_buff[d] = com4[d]; if (com_buff[d]<4)cmd.flags_3=1; if(cmd.flags_3==0) { if (((com_buff[d]+3) < data_ir[d]) || ((com_buff[d]-3) > data_ir[d])) // команда 4 cmd.cmd_3=0; } data_ir[d]=0; // стираем буфер } tim_stop=0; if(flags_prog) delay_ms(100); #asm("sei") } Буду всем крайне признателен за любую помощь в этом направлении!
  19. Есть контроллер Atmega8 и дисплей Nokia1110i Задача — вывод информации на дисплей. По материалам из нета — сотворил плату переходник. Запитал от 5В через стабализатор KA78R33. Сигнал подаю от порта (5В) через делитель на резисторах (470 Ом и 1 кОм) В протусе все работаєт, но на практике работает толко подсаетка. ))) Я начал от сюда: http://digitalchip.r...-2660-2760-6085 Кто такое делал - поделитесь опытом
  20. Привет всем! Начал недавно програмировать мк. Сначало начал со светодиодов, теперь перешел на термометры. Гдето в интернете нашел исходник для термометра, немного переделав код под свои нужды он у меня заработал. Дальше захотелось больше, подключить два датчика температуры, но с этим возникли проблемы... Собствено вот код термометра: #include <mega8.h> #include <delay.h> #asm .equ __w1_port=0x18; PORTB; .equ __w1_bit=3; #endasm #include <1wire.h> #include <ds18b20.h> int temper; int number = 0; int number1 = 0; int number2 = 0; int i=0; interrupt [TIM1_COMPA] void timer1_compa_isr(void) { PORTB.0=0; PORTB.1=0; if(i==0) { number=number1; PORTB.1=1; i++; } else { number=number2; PORTB.0=1; i=0; } switch(number) { case 0:{PORTD=0x3F; break;} // 11000000 case 1:{PORTD=0x6; break;} // 11111001 case 2:{PORTD=0x5B; break;} // 10100100 case 3:{PORTD=0x4F; break;} // 10110000 case 4:{PORTD=0x66; break;} // 10011001 case 5:{PORTD=0x6D; break;} // 10010010 case 6:{PORTD=0x7D; break;} // 10000010 case 7:{PORTD=0x7; break;} // 11111000 case 8:{PORTD=0x7F; break;} // 10000000 case 9:{PORTD=0x6F; break;} // 10010000 } } void main(void) { PORTB=0xFF; DDRB=0xFF; PORTD=0xC0; DDRD=0xFF; TCCR1A=0x00; TCCR1B=0x0A; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x10; OCR1AL=0x46; TIMSK=0x10; w1_init(); #asm("sei") PORTC=0x00; DDRC=0xFF; while (1) { temper=ds18b20_temperature(0); if (temper>1000) { temper=4096.0-temper; temper=-temper; } number1= temper/10; number2= temper%10; delay_ms(500); if (temper>30) {PORTC.1=1; } if (temper<30) {PORTC.1=0; } } Теперь к этому коду нужно добавить следующие: 1. При неиспраности датчика выводить 1Er или 2Er, а если оба неисправны Err 2. Собственно подключить второй датчик. 3. Добавить сравнение температур, если t1>t2 PORTC.1=1, если меньше то выключен 3. Выводить информацию с датчиков поочередно: t1, t2, разность температур t1 и t2.
  21. Здравствуйте! Куплен программатор Usbasp (какой именно - картинка прикреплена). Установлен драйвер и программатор определяется системой, что уже хорошо. Имеется МК atmega8 в корпусе tqfp32 (впаяный в адаптер, фото прикреплено). Проблемы: 1. При подключении программатора без МК все нормально - светодиод загорается, программатор определяется. Как только я подключаю шлейф, диод тухнет и , как я понимаю, программатор не определяется. В чем может быть проблема? Может быть где-то не замкнута цепь? ( проверенно на двух компьютерах) 2. Я в микроконтроллерах только начинаю разбираться поэтому есть вопрос. Посмотрев даташит, обнаружил, что у этого МК в tqfp32 корпусе несколько выходов на питание и несколько выходов на землю. Нужно ли бросать их все на одну линию? В смысле, можно подключиться к одной земле и к одному вцц или нужно ко всем? 3. Правильно ли я подключаю МК к шлейфу? Как распинован шлейф обозначено на фото в приложениях (хотя я понял что ISP-разъем стандартизирован). к МК я подключаюсь к таким ножкам: 3 - (как к GND), 4 - (как к VCC), 15 - (как к MOSI), 16 - (как к MISO) 17 - (как к SCK), 29 - (как к RESET). 4.Что значит знак инверсии над RESET в даташите? Это никак на программирование МК не влияет? 5.Нужно ли замыкать всю землю между собой как на вот этой картинке http://proavr.narod.ru/img/07_pp3.png ? Или на программаторе эти земли уже посажены на одну линию а на шлейфе выведены для удобства (распиновка шлейфа в приложениях). Ну вот, вроде все что хотел спросить. Проверить советы смогу только завтра, по этому прошу прислать как можно больше вариантов решений проблемы, чтобы завтра смог все перепробовать. Другого МК чтобы проверить пока что нету, завтра думаю найду.
  22. Вопрос банальный: как из бутлоадера перейти в приложение? Написал бутлоадер на AVR Studio (C++) Контроллер Atmega8a Не пойму как мне из бутлоадера попасть в главное приложение. В протусе - все работает... В реале - нет Вариант 1: asm("JMP 0x0000") Не работает, при компиляции пишет - illegal op code for mcu atmega8a Вариант 2: asm("RJMP 0x0000") не ругается но и не работает... Вариант 3: void (* appStart) = 0x0000; void main() { while(ok) { ... }; appStart(); } Работает только в протусе.... Прошил лоадер в контроллер. Запустил, залил приложение, после заливки - прошивку прочитал, сравнил с оригиналом, потом в EEPROM (по адресу 6) сталю байт = 0 (по дефолту та FF), потом ок = 0, и тут должно начатся приложение, но попадпю снова в бутлоадер.... Приложение даже не запускается, потому, что первая строка приложения : eeprom_write_byte(0,0x55); Когда читаю eeprom - то по адресу 0 - стоит 0xFF (пусто).... Кто делал бутлоадер, помогите пожалуйста...
  23. Доброго времени суток. Разрабатываю систему сбора информации отопительной теплосети. Для начала решил отладить термодатчики, температуру нужно измерять в трубах, и на. Пределов измерения и точности DS18B20 вполне хватает плюс дешевизна и отсутствие надобности в калибровке сыграли свою роль. Первый датчик установлен на улице под козырьком. Сама микросхема напаяна на стеклотекстолит параллельно линиям питания припаян керамический конденсатор емкостью 8мкФ, все это хозяйство залито лаком. Второй датчик вместе с конденсатором залитый в эпоксидную смолу. Этот датчик опущен в металлический стакан вваренный в трубу. Стакан заполнен машинным маслом. Все выводы микросхемы DS18B20 заизолированы, и к трубе ни каким образом не прикасаются (см. рис.). Основным управляющим элементом в схеме служит ATmega8 программирую на CodeVisionAVR... На шину 1-Wire подключено два датчика DS18B20, общая длинна провода приблизительно 100м. Провод витая пара категории 5Е (экранированный). Опрос выполняется раз в минуту. Устройство работает круглосуточно начиная с октября прошлого года. Приблизительно через полтора месяца после начала эксплуатации начал сбоить датчик из трубы (передавал -9999) и через сутки вовсе перестал работать. Я подумал всякое бывает, может брак… закатал я новый датчик в эпоксидку опустил в трубу и на этом все закончилось. При прозвонке дохлого я выяснил, что вышел из строя вывод данных (давно это было не помню) у него было одинаковое сопротивление в прямом и обратном направлении. Приблизительно через полтора месяца история повторилась и именно с датчиком в трубе. Результаты прозвонки приведены в таблице. Я так же решил прозвонить первый датчик из трубы и оказалось, что он рабочий я решил перепроверить подключил к контроллеру. Четыре дня без выключения датчик проработал без единого сбоя. А теперь вопросы: 1) Чем обусловлены чудеса с воскрешением первого датчика из трубы? 2) Почему два раза под ряд вышел из строя датчик из трубы а не на улице ведь датчики работают на одной шине? 3) Может ли это происходить из-за относительно высокой температуры в трубе (50 – 80С)? 4) Может из за частого опроса датчиков? 5) Эпоксидная смола в подогретом состоянии ни каким образом не может стать проводником? 6) Возможен ли вариант выхода из строя датчика через статическое электричество? ежедневно по трубе протекают тонны воды. http://www.alldatasheet.com/datasheet-pdf/pdf/58557/DALLAS/DS18B20.html
  24. Всем доброе утро и спасибо за то что хоть глянули топик! Срочно нужна ваша помощь! Собственно проблема - нужно сделать частотомер на авр (Atmega8) и обеспечить передачу данных по UART. Вот то что есть уже у меня: program MAN; var rec,send,setup,cons,start,a,i:integer; var f,freq:longint; var outp,inp:string [23]; label lbl; procedure Compare(); iv IVT_ADDR_TIMER1_COMPA; begin inc(i); if i=1 then begin INT0_bit:=1; TCNT1H:=0x00; TCNT1L:=0x00; DDC1_bit:=1; end else if i=2 then begin TCCR1B:=0; INT0_bit:=0; TCNT1H:=0x00; TCNT1L:=0x00; i:=0; IntToStr(f,outp); UART1_Write_Text(outp); DDC1_bit:=0; f:=0; end; end; procedure int0p(); iv IVT_ADDR_INT0; begin inc(f); end; begin SREG_I_bit:=1; TCCR1B:=0; OCIE1A_bit:=1; OCR1AH:= 0x7a; OCR1AL:= 0x12; ISC00_bit:=1; ISC01_bit:=1; INT0_bit:=0; UART1_Init(600); PINB0_bit:=1; DDC0_bit:=0; DDC1_bit:=0; DDC2_bit:=1; While TRUE do begin if (UART_Data_Ready() = 1) then begin UART1_Read_Text(inp,'/',23); UART1_Write_Text(inp); if strstr(inp,'get') <> 0xFFFF then TCCR1B:=4; end; end; end. Но при запросе с ПК он выдает все что угодно, но не частоту (ресейв переменной сделал специально. что б смотреть не потерялось ли чего). Или напишите структурную схему частотомера (прерывание по int0 или t1). Заранее спасибо!
  25. Доброго времени суток. Пытаюсь заставить связку ATMega8-16PU + MAX7219CNG + Matrix Led 8x8 Red работать. Подключил все по datasheet'ам. При подаче питания при прошитом и при не прошитом МК горят все светодиоды и ни какой реакции нет вообще. Собственно, код: #define F_CPU 1000000UL #include <avr/io.h> #include <avr/delay.h> void SPI_MasterTransmit(unsigned char cData,unsigned char bData) { PORTB &= ~(1 << PB2); SPDR = cData; while(!(SPSR & (1<<SPIF))); SPDR = bData; while(!(SPSR & (1<<SPIF))); PORTB |= 1 << PB2; } void main(void) { PORTB = 0x00; DDRB = (1 << PB2) | (1 << PB3) | (1 << PB5); SPCR = (1 << SPE) | (1 << MSTR)| (1 << SPR0); PORTB |= (1 << PB2); //инициализация max7219 SPI_MasterTransmit(0x0C,0x01); // SPI_MasterTransmit(0x0A,0x0F); // SPI_MasterTransmit(0x0B,0x07); // SPI_MasterTransmit(0x09,0x00); // SPI_MasterTransmit(0x0F,0x00); // //вывожу смайлик SPI_MasterTransmit(0x01,0b00111100); SPI_MasterTransmit(0x02,0b01000010); SPI_MasterTransmit(0x03,0b10100101); SPI_MasterTransmit(0x04,0b10000001); SPI_MasterTransmit(0x05,0b10100101); SPI_MasterTransmit(0x06,0b10011001); SPI_MasterTransmit(0x07,0b01000010); SPI_MasterTransmit(0x08,0b00111100); while (1) { }; } Помогите, гуру!
×
×
  • Create New...