Поиск по сайту

Результаты поиска по тегам 'atmega328p'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

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

Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Местоположения

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

Группа


ICQ


Skype


Интересы


Город


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


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

Найдено 7 результатов

  1. Измеритель мощности на atmega328p

    Есть такая задачка, сваять измеритель мощности на atmega32p. Первое время все шло гладко, вроде и схему сваял и код написал #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //-------------------------------------------- unsigned int i; unsigned char R1=0, R2=0; //-------------------------------------------- void segchar (unsigned char seg) { switch(seg) { case 1: PORTD = 0b11111001; break; case 2: PORTD = 0b10100100; break; case 3: PORTD = 0b10110000; break; case 4: PORTD = 0b10011001; break; case 5: PORTD = 0b10010010; break; case 6: PORTD = 0b10000010; break; case 7: PORTD = 0b11111000; break; case 8: PORTD = 0b10000000; break; case 9: PORTD = 0b10010000; break; case 0: PORTD = 0b11000000; break; } } //-------------------------------------------- void timer_ini(void) { TCCR1B |= (1<<WGM12); OCR1AH = 0b00001111; //записываем в регистр число для сравнения OCR1AL = 0b01000010; TCCR1B |= (1<<CS11);//установим делитель. } //-------------------------------------------- unsigned char n_count=0; //-------------------------------------------- ISR (TIMER1_COMPA_vect) { if(n_count==0) {PORTB&=~(1<<PORTB0);PORTB|=(1<<PORTB1);segchar(R1);} if(n_count==1) {PORTB&=~(1<<PORTB1);PORTB|=(1<<PORTB0);segchar(R2);} n_count++; if (n_count>1) n_count=0; } //-------------------------------------------- void ledprint(unsigned int number) { R1 = number%10; R2 = number/10; } //-------------------------------------------- void ADC_Init(){ ADCSRA |= (1 << ADEN) // Включаем АЦП |(0 << ADPS1)|(0 << ADPS0); // устанавливаем пределитель преобразователя на 8 ADMUX=(1<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(1<<REFS0)|(0<<REFS1); } int main(void) { unsigned int u; ADC_Init(); timer_ini(); DDRD = 0xFF; DDRB = 0b00111111; PORTD = 0b11111111; PORTB = 0b0000000; i=0; sei(); ledprint(97); while(1) { unsigned int u, u_VCC; ADCSRA|=(1<<ADEN) //Включение АЦП |(1<<ADPS1)|(1<<ADPS0); // Предделитель преобразователя на 8 ADMUX|=(0<<MUX0)|(1<<MUX1)|(1<<MUX2)|(0<<MUX3)//Вход PC0 |(1<<REFS0)|(0<<REFS1); //AVcc является опорным напряжением ADCSRA |= (1 << ADSC); //Начинаем преобразование while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования u = (ADCL|ADCH << 8); // Считываем ADC if (u > -32767){ PORTD = 0b00000110; }else{ PORTD = 0b00111111; } /* switch(max) { case -1: PORTD = 0b00000110; break; case -2: PORTD = 0b01011011; break; case -3: PORTD = 0b10110000; break; case -4: PORTD = 0b10011001; break; case -5: PORTD = 0b10010010; break; case -6: PORTD = 0b10000010; break; case -7: PORTD = 0b11111000; break; case -8: PORTD = 0b10000000; break; case -9: PORTD = 0b10010000; break; case 0: PORTD = 0b00111111; break; case 1: PORTD = 0b00000110; break; case 2: PORTD = 0b01011011; break; case 3: PORTD = 0b10110000; break; case 4: PORTD = 0b10011001; break; case 5: PORTD = 0b10010010; break; case 6: PORTD = 0b10000010; break; case 7: PORTD = 0b11111000; break; case 8: PORTD = 0b10000000; break; case 9: PORTD = 0b10010000; break; };*/ /* PORTB = 0b11111110; PORTD = 0b00000110; _delay_ms(1); PORTB = 0b11111111; Центральный верхний PORTB = 0b11111101; PORTD = 0b01011011; _delay_ms(1); PORTB = 0b11111111; //Левый верхний PORTB = 0b11111011; PORTD = 0b01001111; _delay_ms(1); PORTB = 0b11111111; //Правый нижний PORTB = 0b11110111; PORTD = 0b01100110; _delay_ms(1); PORTB = 0b11111111; //Центральный нижний PORTB = 0b11101111; PORTD = 0b01101101; _delay_ms(1); PORTB = 0b11111111; //Левый нижний PORTB = 0b11011111; PORTD = 0b01111101; _delay_ms(1); PORTB = 0b11111111; */ } } только вот значение получаемое в "u" (в нее мы ADC получаем) равно -32768 вместо положенного диапазона от 100 до 600, может кто подскажет чего?
  2. Здравствуйте. Требуется вывести данные температуры и влажности на экран. С LCD дисплеем разобрался, осталось разобраться с SHT21. Постоянно выводит 0 на дисплей: Main.c: #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include "globals.h" #include "LCD_lib.h" #include "twi.h" // I2C #include "sht21.h" int main(void) { I2C_Init(); _delay_ms(100); LCD_init(); char buffer[20]; roomAdrInit(); SHT21_reset(); while(1) { SHT21_reset(); LCD_sendString(itoa((int)get_temperature(), buffer, 10), 4, 0, 0); _delay_ms(1000); } } twi.c: #include <avr/io.h> #include "twi.h" void I2C_Init(void) { TWSR = 0; TWBR = 0x20; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); } void I2C_StartCondition(void) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while(!(TWCR & (1<<TWINT))); } void I2C_StopCondition(void) { TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); } void I2C_SendByte(uint8_t data) { TWDR = data; TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); } unsigned char I2C_ReadByteAck(void) { TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA); while(!(TWCR & (1<<TWINT))); return TWDR; } unsigned char I2C_ReadByteNak(void) { TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); return TWDR; } sht21.c: #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdio.h> #include "twi.h" #include "sht21.h" void SHT21_reset() { unsigned char reg[1]; reg[0]=SHT21_reset_cmd; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(*reg); I2C_StopCondition(); _delay_ms(100); } uint16_t checksum(unsigned char data[],uint8_t byte, uint8_t check) { uint8_t crc=0; uint8_t bytectr,bit; for (bytectr=0; bytectr<byte;bytectr++) { crc^=(data[bytectr]); for (bit=8;bit>0;bit--) { if(crc&0x80) { crc=(crc<<1)^polynomial; } else { crc=crc<<1; } } } if (crc!=check) { return 0; } else { return data; } } void write_user_register() { unsigned char reg[3]; reg[0]=user_register_write; reg[1]=0x44; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(*reg); I2C_StopCondition(); } uint16_t read_value(uint8_t reg) { char data[4],crc; uint16_t result; data[0]=reg; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(reg); I2C_StartCondition(); I2C_SendByte(SHT21_i2c_read); data[1] = I2C_ReadByteAck(); data[2] = I2C_ReadByteAck(); crc=I2C_ReadByteNak(); I2C_StopCondition(); result=(data[1]<<8) | data[2]; checksum(result,4,crc); result &= 0xFFFC; return result; } float get_humidity() { //char buffer2[4]; uint16_t hum_value = read_value(humidity_hold_mode); return -6 + 125.0 / 65536.0 * hum_value; //dtostrf(rh,5,2,buffer2); _delay_ms(100); } float get_temperature() { //char buffer1[4]; uint16_t temp_value = read_value(temperature_hold_mode); return -46.85 + 175.72 / 65536.0 * temp_value; //dtostrf(tc,5,2,buffer1); _delay_ms(100); }
  3. Приветствую всех. Появилось желание спроектировать игрушку Pong на диодах и мк Atmega328P(т.к. дома валяется) на макетной плате. Уверенно знаю asm, Си, С++, но абсолютно не шарю в схемотехнике. В протеусе вроде бы мигает и код вполне работает, но на практике все не так просто. Как правильно питать мой мк? Знаю, что ему нужно напряжение 5 вольт, но читал, что нужно чтобы оно было бесперебойным, какие-то схемы с непонятными для меня конденсаторами. Вроде бы нужно подключать стабилитрон. Объясните пожалуйста подробно что, за чем и почему нужно подключать (очень важно именно почему, хочется разобраться).
  4. atmega328p AU и PU разница

    Прошу помощи у знающих. В наличии программатор tl866cs и atmega328p-PU. Чип шьется вдоль и поперек без проблем. Есть три чипа atmega328p-AU. Установил на адаптер. Попробовал прошить. Ошибка. Чипы новые, от разных продавцов. ID читается, стирание проходит без ошибки, но по результату - безрезультатно((. Фьюзы не шьются. Пробовал через ISP шить, тот же результат. Вопрос. Есть ли различие в алгоритме прошивки AU и PU?
  5. Помогите пожалуйста разобраться, программа не работает. Есть задумка через bluetooth terminal на телефоне передавать команду(ноль или единицу) на bluetooth модуль HC-05, подключенный к atmega328p и таким образом управлять светодиодом. Но почему то светодиод не загорается. Соединил выходы bluetooth модуля и атмеги так: tx -> rx, rx -> tx, светодиод подключен к нулевому биту порта B(PB0). В чём может быть ошибка? question.txt question.txt
  6. Доброго времени суток. Понадобился генератор прямоугольных импульсов с независимой регулировкой частоты и скважности. Диапазон 0,1 - 1000 Гц, шаг регулировки 0,1 Гц. Длительность импульсов от 10 мкс, шаг регулировки 10 мкс. Частота и длительность выводятся на дисплей, в герцах и миллисекундах. Макс. скважность 50%. Хотел все реализовать в Atmega328, поскольку она все равно есть в устройстве, хотя и до этого я никогда не программировал вообще. Все, что я смог придумать - это сделать предделитель таймера на 1, установить прерывание по совпадению на 16 (отсчитали 1 микросекунду) и в прерывании изменять переменную х+1. Соответственно сравнивая с двумя другими переменными - подавать 1 или 0 на ножку МК. Вроде бы худо-бедно работает, но при этом дисплей жутко тупит - секунд по 5 выводятся данные. Если вызывать прерывание по совпадению на 126 (160-34 цикла) - тогда все приемлемо, но длительность импульса конечно будет меняться с шагом 100 мкс. а не 10. Режим СТС не подходит, да и шаг изменения будет 16000000\256= 62500; 1\62500=0,000016 мкс., а хочется кратно10-ти. Собственно, вопрос: как реализовать такой генератор на МК? Поможет ли ускорить работу МК такие ухищрения как собственный кварц для таймера, или подключение дисплея напрямую без регистра сдвига? Гуглится очень много подобных тем, но решения вопроса нет ни в одной. Вот кусочек моего индусского кода: void WorkOn() { OCR0A=126; // Количество импульсов соответствующих 10 микросекундам. 16 МГц /160 - 34 TIMSK0=(1<<OCIE0A); TCCR0B=0x01; //Предделитель тактовой частоты - 1. UpdateFrequency(); } ISR (TIMER0_COMPA_vect){ // Генератор импульсов. TCNT0=0;//обнуляем регистр TCNT1 Timer0Count=Timer0Count+1; // Счетчик таймера, 1 ед. = 10 Микросекунд. if (Timer0Count == DelayTime){ // Если счетчик таймера соответствует паузе между импульсами. PORTB |= 1<<3; // Начало импульса.} if (Timer0Count == PeriodTime){ // Если счетчик таймера соответствует периоду. PORTB &= ~(1<<3); }// Конец импульса. Timer0Count=0;} // Сброс счетчика. } void UpdateFrequency() { PeriodTime = 1000000/Frequency; // Период = 1 сек./частота(Гц). PulseTimeMax = PeriodTime/2; // Максимальная скважность - 50%. if (PulseTime > PulseTimeMax) // Если была увеличена частота и скважность стала более 50% {PulseTime = PulseTimeMax;} DelayTime=PeriodTime-PulseTime; }
  7. Arduino Uno

    Здравствуйте, хотел бы начать программировать микроконтроллеры для разных электронных устройскв... Узнал что есть легкая в использовании Arduino Uno Но им много вариаций. Посоветуйте что лучше UNO R3 ATmega8a Controller Board AVR USBISP Arduino Compatible Version Board ATmega328P UNO R3 CH340T Instead 16U2 или Version ATmega16U2 ATmega328P UNO R3 Board