Jump to content

Search the Community

Showing results for tags 'AtMega8A'.



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 8 results

  1. myhhyk

    Timer1 PWM AtMega8A

    .include "m8adef.inc" .cseg main1: LDI R16,Low(RAMEND) ; тут стэк инициализирую OUT SPL,R16 ; LDI R16,High(RAMEND) OUT SPH,R16 ldi r20,1 reset: ldi r16,$02;--ICR1H значение $222 при заданом режиме счетчик должен считать до $222 и сбрасывать в ноль ldi r17,$22;--ICR1L OUT ICR1H,r16;--выводим сначала старший байт, как учили OUT ICR1l,r17;--затем младший ldi r16,$1;---OCR1AH при значении $1AA должен менять пин OCR1A ldi r17,$AA;--OCR1AL OUT OCR1AH,r16;--старший OUT OCR1AL,r17;--и младший ldi r17,$82;--TCCR1A режим такой: WGM-1110 COM-10 ldi r16,$19;--TCCR1B OUT TCCR1B,r16 OUT TCCR1A,r17 ldi r16,$FF OUT DDRB,r16;-- порт б на выход main:;--должны получать шим rjmp main Здравствуйте, помогите пожалуйста. Хочу сделать плавное включение светодиода с помощью ШИМа и Timer1,чтобы плавненько было. Устанавливаю WGM 1110 т.е. быстрый шим и со счетом до ICR1, а счетчик считает почему то до $1ff и потом начинает уменьшать счет до нуля, т.е. как будто я выбрал режим WGM 0110 быстрый ШИМ 9 бит. Пробовал всякие разные комбинации. На значения COM не обращаю пока, он просто меняет момент срабатывания пина, мне нужно, чтобы я мог задавать до скольки считать, потом чтобы в ноль счетчик сбрасывался и менялось состояние пина по OCR1A.В общем принцип работы Timer2, только чтобы счет был больше. Помогите плиз :*) Ах да, AtMega8A микроконтроллер.
  2. Здравствуйте! Пытался прошить Atmega8a-AU TQFP-32 при помощи программатора UsbAsp 2.0 и Avrdude_prog 3.3. Фьюзы зашились. Залил hex-файл нажал Программировать и получил ошибку (прикрепил скрин). Пишет чтото про обновление драйвера я так понял? Хотел залить новые дрова на UsbAsp, винда пишет что старые актуальны.Помогите советом! Прикрепил еще фото самодельного переходника на DIP-32 и фьюзы, может в них проблема?
  3. Всем привет! Решил вот сделать ребенку мигающие светодиоды на велосипед (а заодно наконец покодить под микроконтроллеры). Сам я по професии электрик (не радиотехника), но было это давно. Сечас программист на Java. Си тоже учил, но опять же давно. Купил я ATMega8A, программатор TL866A и несколько светодиодов. Позапускал пару простых примеров, посмотрел/почитал мануалы и решил приступить к самому главному. Мигать светодиодами надо программно и чтоб была возможность мигать одновременно с разной частотой. В связи с этим решил не использовать delay, а сделать правильно, через таймеры. В общем написал код для таймера, для мигания, отладил в Atmel Studio 6 (AVR Studio) и попытался проэмулировать это дело в протеусе. Вот тут началось неладное. Светодиоды мигали на глаз со случайной частотой. В отладчике студии время между вызовами таймера примерно совпадает с ожидаемым (+- пару миллисекунд). Упростил немного код, пробовал менять частоту мигания таймера, ничего не помогает. Я подумал что в протеусе что-то со временем во время эмуляции, и решил проверить на реальной МК. Но когда залил код в МК, оказалось что на нем светодиод вообще не мигает а просто светит. Думал дело в частоте МК, посмотрел фьюзы, вроде частота такая же как в отладке студии. Вот код: #include <avr/interrupt.h> // Установить бит в 1 #define SB(reg, bit) reg |= (1<<bit) // Установить бит в 0 #define CB(reg, bit) reg &= ~(1<<bit) // Проверить установлен ли бит #define VB(reg, bit) reg & (1<<bit) // Инвертировать бит #define TB(reg, bit) reg ^= (1<<bit) // 0b00000001 #define T100MS 0 // 0b00000010 #define T500MS 1 // 0b00000100 #define T1000MS 2 // 0b00001000 #define T2000MS 3 // 0b00010000 #define T5000MS 4 uint8_t timer500ms = 0; uint8_t timer1000ms = 0; uint8_t timer2000ms = 0; uint8_t timer5000ms = 0; uint8_t dataTimer = 0b00000000; // Прерывание каждые 100 миллисекунд // Устанавливает флаг в соответствии с прошедшим временем ISR(TIMER2_COMP_vect) { SB(dataTimer, T100MS); if ((++timer500ms) == 5) { timer500ms = 0; SB(dataTimer, T500MS); } if ((++timer1000ms) == 10) { timer1000ms = 0; SB(dataTimer, T1000MS); } if ((++timer2000ms) == 20) { timer2000ms = 0; SB(dataTimer, T2000MS); } if ((++timer5000ms) == 50) { timer5000ms = 0; TB(PORTC, 2); TB(PORTC, 3); TB(PORTC, 4); TB(PORTC, 5); SB(dataTimer, T5000MS); } } int main(void) { DDRB |= 0b00000000; DDRC |= 0b00111111; DDRD |= 0b00001111; // Пределитель 1:1 SB(TCCR2, CS20); // Режим сброс при совпадении CB(TCCR2, WGM20); SB(TCCR2, WGM21); // Прерывание при совпадении CB(TIMSK, TOIE2); SB(TIMSK, OCIE2); // Количество тактов перед прерыванием OCR2 = 100; // 1мгц // Разрешить глобальные прерывания asm("sei"); while(1) { if (VB(dataTimer, T5000MS)) { // TB(PORTC, 2); // TB(PORTC, 3); // TB(PORTC, 4); // TB(PORTC, 5); // Сброс времени CB(dataTimer, T5000MS); } } } Думал что что-то с МК, добавил в основной цикл мигание с delay, примерно такое: TB(PORTC, 5); _delay_ms(1000); TB(PORTC, 5); _delay_ms(1000); При этом в реальном МК светодиод мигал, но не через 1 секунду, а реже. К стати в это время другие светодиоды (оставшиеся на таймере) тоже мигали, но так же с неправильной частотой (вроде гораздо чаще чем должны). Прикрепляю схему подключения МК. но при тесте я подключал только один слабенький светодиод с резистором. Всего остального небыло. Очень прошу вашей помощи в решении этой проблемы.
  4. dimonadet

    Atmega8A И Reset

    Здравствуйте! Надеюсь, что не сильно засорю форум своим глупым вопросом. Я только начал интересоваться микроконтроллерами (далее МК) и еще не знаю всех тонкостей. Так вот вопрос: можно ли удерживать контакт RESET на низком уровне (насколько я понял такая операция "сбрасывает" МК) в течение долгого времени, скажем несколько минут или даже часов? Повлияет ли это на работу МК в будущем? Еще раз извинюсь, но как я уже сказал, я только начал знакомиться с этой сферой и даже не понимаю как работает функция сброса.
  5. Приобрел эмулятор СиДи чейджера, собран на атмега8а. Проблема в том что устройство запускается раза с 10-го а то и 20-го. Ресет <-> 5В = 10кОм Кварц 8мГц параллельно резистор 1МОм
  6. Добрый вечер уважаемые форумчане! Подскажите пожалуйста как отсеять шумы на выходе приемника ? Задача: сделать универсальный декодер команд ду на базе радио. На ИК лучах система пашет отлично, а вот на радио - не программируется , так как шумы влияют на систему. Тактовая частота МК равна 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") } Буду всем крайне признателен за любую помощь в этом направлении!
  7. Доброго времени суток! Я новичек и сейчас работаю над первым своим устройством на МК. Отлаживая в протеусе схему, столкнулся со странным поведением. В общих чертах: делаю код в CodeVisionAVR 3.12 Evaluation, пишу на С. Задача - разработать простенький электронный таймер, до 99 мин. Методом исключения выяснилось, что при разрешении прерываний командой sei программа начинает выполнятся сначала. Пошел по пути наименьшего сопротивления, просто разрешил прерывания в самом начале программы. В таком случае глобальная переменная time_sec, в которой хранится оставшееся время или недоступна, или сбрасывается в ноль при нажатии на любую кнопку. Нагугленые варианты решения проблемы не помогли, поэтому я вернулся к исходному варианту (код которого привел). Проект в протеусе и кодвижине прикрепил в архиве timer.rar, код также под спойлером. Я конечно понимаю, что возможно допустил какой-то банальный косяк, но найти не могу, нужен "свежий взгляд". Прошу вашей помощи! Примечание: я закомментировал кусок кода, так что выводиться только один разряд (минуты). Это связано с тем, что у меня протеус не успевает корректно отрисовывать зажигание разрядов семисегментника по-очереди. timer.rar
  8. Доброго всем времени суток! Прошу помощь в создании устройства которое будет имет циклический таймер (два отдельных таймера, второй будет запускатся по истечении времени первого), который будет дергать один из выходов мк; и двоканальний вольтметр (или вольт-ампер метр). В сети нашел схемы и того и другого, поотдельности все просто супер, но не хочется ставить два отдельных контроллера и ЖКИ. Ссылка на первую схему: http://c2.at.ua/load.../z_t/17-1-0-106 В етом контроллере свободные входа ADC2, ADC3 и ADC4, вход опорного напряжения АЦП тоже неиспользуется, что вроде позволит реализовать програмно вольтмертры. Так как мои познания в програмировании очень скромные, то прошу помощьи у форумчан. Доступен контролер AtMega8a в tqfp. и двострочные индикатори SC1602BS. За любую критику и помощь буду очень благодарен!
×
×
  • Create New...