roboforum.ru

Технический форум по робототехнике.


МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение vvk74 » 15 июн 2017, 21:17

//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x270F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0xC8; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвое

Добавлено спустя 18 минут 34 секунды:
void setup() {
// put your setup code here, to run once:
pinMode(9, OUTPUT);
//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x4E1F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0x190; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвоеvvk74

}

void loop() {
// put your main code here, to run repeatedly:

}

проверил на ардуино нано - работает
vvk74
 
Сообщения: 128
Зарегистрирован: 08 сен 2009, 20:13
Откуда: Екатеринбург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение к561ЛА7 » 16 июн 2017, 10:51

vvk74 писал(а)://например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x270F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0xC8; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвое

Добавлено спустя 18 минут 34 секунды:
void setup() {
// put your setup code here, to run once:
pinMode(9, OUTPUT);
//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход

Спасибо

ICR1=0x4E1F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0x190; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвоеvvk74

}

void loop() {
// put your main code here, to run repeatedly:

}

проверил на ардуино нано - работает
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.
Аватара пользователя
к561ЛА7
 
Сообщения: 404
Зарегистрирован: 08 дек 2009, 19:21
Откуда: Й-Ола

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 00:27

Делаю контролер нагрева питающийся от липо батареи
подскажите как сделать чтобы при достижении низкого напряжения отключать ардуину (отправить спать) пытался сделать но ничего не выходит.

Код собирал из кусочков, получилось что получилось, главное работает всё кроме контроля низкого заряда батареи.
Собираю все на ардуине нано

Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в то же самое если посмотреть на выход с ШИМ периоды квадратные но разной высоты.

Код: Выделить всёРазвернуть
//Voltage monitor website https://create.arduino.cc/projecthub/nickthegreek82/diy-voltmeter-with-arduino-and-a-nokia-5110-display-cc5092?ref=platform&ref_id=424_trending___&offset=49

int counter = 0;
int switchPin = 2;
int PWM_SET;

#define MIN_VOLT = 9.0;

//----PWM_ADJ------
int POT_PIN = A7;
//----PWM_ADJ_END------


//-------led outputs
int LED_GREEN = 5;
int LED_BLUE = 6;
int LED_RED = 7;

float VOLT_MIN;

float voltage = 0.0;
int sensorPin = A1; 
float sensorValue = 0.0f; 
String voltageString ="0.0";
int stringLength = 0;


float vout = 0.0;
float vin = 0.0;
float R1 = 83000.0;
float R2 = 18000.0;




void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(switchPin, INPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  pinMode(LED_RED, OUTPUT);

}

void loop() {
  //----провека напряжения на входеб если ниже 9В то ничего не делать.
// for (float i = 0; i < voltage; ++i){
//  if (VOLT_MIN < voltage)
//   continue;


//-------------pwm------- https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
pinMode(3, OUTPUT);
// pinMode(11, OUTPUT);



  TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
  TCCR2B = _BV(CS22);
// OCR2A = 0; //pin 11
  OCR2B = (PWM_SET);

/*
 
* Output A frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output A duty cycle: 180 / 255 = 70.6%
Output B frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output B duty cycle: 50 / 255 = 19.6%


Timer output Arduino output  Chip pin  Pin name
OC0A  6
OC0B  5
OC1A  9
OC1B  10 
OC2A  11 
OC2B  3
*/
// --------------pwm end

//---------------------------------pwm adjusts

int PWM_ADJUST, PWM_ADJ;

PWM_ADJ = analogRead(POT_PIN);

PWM_ADJUST = PWM_ADJ / 20;

//---button

//Handle input
int switchVal = digitalRead(switchPin);
if(switchVal == LOW)
{
   delay(500); 
   counter ++;
   //Reset count if over max mode number
   if(counter == 7)
   {
     counter = 0;
   }
}

else

//Change mode
switch (counter) {
case 1:
   PWM_SET = 0;
  digitalWrite(LED_GREEN, LOW);
  digitalWrite(LED_BLUE, LOW);
  digitalWrite(LED_RED, LOW);
   break;

case 2:
   PWM_SET = (50);
  digitalWrite(LED_GREEN, 255);
  digitalWrite(LED_BLUE, 0);
  digitalWrite(LED_RED, 0);
   break;

case 3:
   PWM_SET = (100);
digitalWrite(LED_GREEN, 255);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
   break;

case 4:
   PWM_SET = (150);
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
  break;
   
case 5:
   PWM_SET = (200);
  digitalWrite(LED_GREEN, 0);
  digitalWrite(LED_BLUE, 255);
  digitalWrite(LED_RED, 255);
   break;
   
case 6: 
  PWM_SET = 254;
  digitalWrite(LED_GREEN, 0);
  digitalWrite(LED_BLUE, 0);
  digitalWrite(LED_RED, 255);
  break;
   
}
 


//----button end


 
  voltage = readVoltage();
 
  Serial.println(voltage);

 
   Serial.println(PWM_SET);
   
  voltageString = String(voltage,1);

  stringLength = voltageString.length();
  displayVoltage(stringLength);
  delay(100);
}
//}


float readVoltage()
{

   sensorValue = analogRead(sensorPin);
   vout = (sensorValue * 5.0) / 1024.0;
   vin = vout / (R2/(R1+R2));
   return vin;
}


void displayVoltage(int length)
{
// switch(length)
  {
   // case 3:  Serial.print(voltageString,14,19); break;
  //  case 4:  Serial.print(voltageString,2,19); break;
  //  default:  Serial.print(voltageString,2,19); break;
  } 
   
}









111.JPG
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 01:23

Акелла писал(а):Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в

Надо сначала ответить на этот вопрос, это ненормально, проверять цепи питания и стабилизатор.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 01:36

Dmitry__ писал(а):это ненормально
что то пошло не так и мега испустила дымок, причем только когда повторно подключил к ЛБП. :o линия питания теперь в коротком замыкании.
В первый запуск все работало нормально, ничего не грелось. Так и не понял как это произошло.


П.С. на схеме в середине нарисован конденсатор круглый, на самом деле это пьезодинамик, пока что не установлен.
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 01:39

А от чего все питалось? Может этот блок питания на помойку?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 01:41

БП самодельный, тороид + DPS5015
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 01:48

Да, я поднял выше взгляд и увидел PCB :)
На PCB есть неоднозначность в виде непроведенного провода, но стабилизатор надо шунтировать конденсаторами по входу и выходу, как можно ближе к ножкам этой микросхемы, да простит меня dimamichev :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 01:52

Там где непроведенные провода там идут перемычки с другой стороны платы, точки соединения нитками обозначены.
На стабилизаторе стоят 4.7uF на 5V и 100nF на входе
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 02:00

На pcb какой-то бред, ножка gnd стабилизатора lm1085 идет через резистор 10 ом на 1-ю ножку микроконтроллера. Больше никуда не идет, это очень плохо :) схему можна?
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 11:08

Там нет lm1085, название забыл стереть, стоит mosfet, подключен через 10 ом к выходу D3 а ардуине.

Capture.JPG

Снял ардуину, оказался пробитый 5v регуль, если на него давать питание сразу идет в КЗ, он помер и забрал с собой ардуину(новый регуль выдает 5в, как только поставил ардуину обратно, то сразу ушел в КЗ) вечером попробую поставить новый чип и электролит 100мкф на входе питания.
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 15:55

Ох ох ох :)
Может лучше было делать на готовых платах? Взять ардуинку про мини и плату ключей на мосфет...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Акелла » 21 окт 2017, 16:07

мне размер важен, старался уменьшить на сколько возможно.
Косель мини, плата управления DUET на reprap firmware от DC42, E3Dv6
Распечатаю на заказ.
Kossel config E3D.h
Акелла
 
Сообщения: 771
Зарегистрирован: 27 май 2014, 13:35
Откуда: London. UK
Skype: pioneerko
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Dmitry__ » 21 окт 2017, 16:26

ардуино про мини меньше :)

Изображение
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Angel71 » 21 окт 2017, 18:10

для компактности нужно детали соответствующие подбирать и нормально компоновать. для наглядности
arduinopico.jpg

uduino.jpg

pico.jpg

pico_2.jpg
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 4