роботы робототехника микроконтроллеры


 Страниц (2): « 1 [2]   

> Без описания
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Роботов пишет:
МК это может делать, как бы правильно сказать, в свободное от работы время, Улыбка
а в остальное время может заниматься чем угодно. Да! заодно МК может на индикатор напряжение выводить, давать команду на включение/выключение зарядки, да много чего, и всего за 70 руб Голливудская улыбка


Вы посеяли во мне тень разочарования)))
(Добавление)
А программу прошивки поможите составить для меги 8й, а то я с програмированием МК как то не очень?
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Учитесь. В инете полно зарядных устройств на МК с описанием и прошивками. Погуглите.
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Роботов пишет:
Учитесь. В инете полно зарядных устройств на МК с описанием и прошивками. Погуглите.

понятно
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Посидел веченок, сделал такую схемку светодиодной шкалы на ATmega8, пока что напряжение меряется на один канал (питание механической части). Измеряемое напряжение 0 - 16V (почему 16 - не знаю, вдруг аккумулятор куплю для игрушки :-), кстати я хотел бы уточнить этот вопрос с более опытными товарищами).

Схему нарисовал в протеусе Proteus 7.8 SP2 7.8sp2 10468 x86 [2011, ENG]
Код написал в C++
вот код
CODE:
#include <avr/io.h>
#include <util/delay.h>


int main (void)
{

DDRD = 0xFF;

PORTD = 0x00;

ADCSRA|=(1<<ADEN) //Включение АЦП
|(1<<ADPS1)|(1<<ADPS0); // Предделитель преобразователя на 8

ADMUX|=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)//Вход PC0
|(1<<REFS0)|(0<<REFS1); //AVcc является опорным напряжением


while(1)

{
unsigned int u;
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования

u = (ADCL|ADCH << 8); // Считываем ADC
//u = u - u*32/10;
if (u > 128) //2V
{PORTD = (1 << PD0);}
else {PORTD &= ~(1 << PD0);}

if (u > 256) //4V
PORTD = (1 << PD0)|(1 << PD1);

if (u > 384) //6V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2);

if (u > 512) //8V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3);

if (u > 639) //10V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4);

if (u > 767) //12V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5);

if (u > 895) //14V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6);

if (u > 1020) //16V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6)|(1 << PD7);


_delay_ms(30);

}

}


Просьба АСАМ програмирований МК - критику пожалуйста давайте.

И если не сложно схему взгляните

все лежит в архиве
Скачать файл: LEDs_scale.rar
Скачан раз: 285
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Попытался сделать дополнительно АЦП, на вход PC1 , но чета не получается протеус говорит ошибки и ничего не работает

CODE:
#include <avr/io.h>
#include <util/delay.h>


int main (void)
{

DDRD = 0xFF;
PORTD = 0x00;

DDRB = 0xFF;
PORTB = 0x00;

while(1)

{
unsigned int u, u_VCC;

ADCSRA|=(1<<ADEN) //Включение АЦП
|(1<<ADPS1)|(1<<ADPS0); // Предделитель преобразователя на 8

ADMUX|=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)//Вход PC0
|(1<<REFS0)|(0<<REFS1); //AVcc является опорным напряжением

ADCSRA |= (1 << ADSC); //Начинаем преобразование

while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования

u = (ADCL|ADCH << 8); // Считываем ADC

if (u > 128) //2V
{PORTD = (1 << PD0);}
else {PORTD &= ~(1 << PD0);}

if (u > 256) //4V
PORTD = (1 << PD0)|(1 << PD1);

if (u > 384) //6V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2);

if (u > 512) //8V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3);

if (u > 639) //10V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4);

if (u > 767) //12V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5);

if (u > 895) //14V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6);

if (u > 1020) //16V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6)|(1 << PD7);


_delay_ms(100);

ADMUX|=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(1<<MUX3)//Вход PC1
|(1<<REFS0)|(1<<REFS1); //2,56В является опорным напряжением

ADCSRA |= (1 << ADSC); //Начинаем преобразование

while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования

u_VCC = (ADCL|ADCH << 8); // Считываем ADC

if (u_VCC < 837)
{PORTB = (1 << PB0);}
else {PORTB &= ~(1 << PB0);}

if (u_VCC > 912)
PORTB = (1 << PB0)|(1 << PB1);

if (u_VCC > 1020)
PORTB = (1 << PB0)|(1 << PB1)|(1 << PB2);

_delay_ms(100);

}

}


Пожалуйста подскажите где и что мне исправить

(Отредактировано автором: 16 Февраля, 2012 - 14:01:13)

 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



В архиве лежит схема + файлы прошивки, пожалуйста подскажите, как сделать АЦП на PC0 и на РС1?
Скачать файл: LED_SCALE.rar
Скачан раз: 284
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Ребята помогите пожалуйста, объясните где ошибка?

Почему у меня АЦП не переключается с PC0 на PC1?

протеус пишет WRONG MUX

(Отредактировано автором: 16 Февраля, 2012 - 14:15:05)

 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Все, победил я этот код, теперь работает 2е шкалы :-)

CODE:
#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
DDRD = 0xFF;
PORTD = 0x00;

DDRB = 0xFF;
PORTB = 0x00;

DDRC = 0x00;

while(1)
{
unsigned int u, u_VCC;

ADCSRA|=(1<<ADEN) //Включение АЦП
|(1<<ADPS1)|(1<<ADPS0); // Предделитель преобразователя на 8

ADMUX=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)//Вход PC0
|(1<<REFS0)|(0<<REFS1); //AVcc является опорным напряжением

ADCSRA |= (1 << ADSC); //Начинаем преобразование

while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования

u = (ADCL|ADCH << 8); // Считываем ADC

if (u > 128) //2V
{PORTD = (1 << PD0);}
else {PORTD &= ~(1 << PD0);}

if (u > 256) //4V
PORTD = (1 << PD0)|(1 << PD1);

if (u > 384) //6V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2);

if (u > 512) //8V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3);

if (u > 639) //10V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4);

if (u > 767) //12V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5);

if (u > 895) //14V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6);

if (u > 1020) //16V
PORTD = (1 << PD0)|(1 << PD1)
|(1 << PD2)|(1 << PD3)
|(1 << PD4)|(1 << PD5)
|(1 << PD6)|(1 << PD7);

_delay_ms(100);


ADMUX=(1<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(1<<REFS0)|(1<<REFS1);

ADCSRA |= (1 << ADSC); //Начинаем преобразование

while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования

u_VCC = (ADCL|ADCH << 8); // Считываем ADC

if (u_VCC < 893)
{PORTB = (1 << PB2);}
else {PORTB &= ~(1 << PB2);}

if (u_VCC > 893)
PORTB =(1 << PB1);

if (u_VCC > 1000)
PORTB = (1 << PB0);

_delay_ms(100);
}
}

проблема была здесь:
CODE:
ADMUX=(1<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(1<<REFS0)|(1<<REFS1);

короче говоря, здесь:
CODE:
ADMUX|=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(1<<MUX3)//Вход PC1
|(1<<REFS0)|(1<<REFS1); //2,56В является опорным напряжением

я ссылался на не существующий выход :-)
Щас осталось присабачить L293D (чтоб зарядный ток пропускать на аккумулятор (сигнап на зарядку будет давать МК)).
Схему сделаю и еще один модуль будет готов :-)

В архиве рабочий код, прошивка и фаил схемы в протеусе.
Скачать файл: LED_SCALE.rar
Скачан раз: 326
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Поразмыслил еще над своим модулем и пришел к след выводу:

Во первых основные его функции:
1 - Это ВКЛ-ВЫКЛ подачи напряжения на питание ЭЛ части (+5В) и МЕХ части (10В-12В).
2 - Индикация состояния элементов питания через уровени напряжения 2-е шкалы уровня напряжения + подача сигнала что напряжение имеет низкий уровень.
3 - имеет 1 разьем JACK 3.5, для зарядного устройства.

Вопрос - можно ли пальчиковые аккумуляторы GP подзаряжать от обычного блока питания?
ОТ каккого блока питания можно подзаряжать аккумуляторы GP?
И как их подсоединять ? + к + и - к - или наоборот?
Можно ли заряжать аккумляторы GP, если они соеденены последовательно (8 аккум. и 4 аккум)?
 
 Top
elmot Post Id



Гуру


Сообщений всего: 1141
Дата рег-ции: Дек. 2010  



1988Олег1988 пишет:
Поразмыслил еще над своим модулем и пришел к след выводу:

Во первых основные его функции:
1 - Это ВКЛ-ВЫКЛ подачи напряжения на питание ЭЛ части (+5В) и МЕХ части (10В-12В).
2 - Индикация состояния элементов питания через уровени напряжения 2-е шкалы уровня напряжения + подача сигнала что напряжение имеет низкий уровень.
3 - имеет 1 разьем JACK 3.5, для зарядного устройства.

Вопрос - можно ли пальчиковые аккумуляторы GP подзаряжать от обычного блока питания?
ОТ каккого блока питания можно подзаряжать аккумуляторы GP?
И как их подсоединять ? + к + и - к - или наоборот?
Можно ли заряжать аккумляторы GP, если они соеденены последовательно (8 аккум. и 4 аккум)?

Можно, но плохо. Подохнут быстро. Лучше специализированный зарядник. Есть разные алгоритмы и разная цена вопроса.
Лучше со стабилизированным током, но он обычно зарядником и зовется.
+ к +
если они соеденены последовательно, то в принципе можно, но по идее они должны работать всегда последовательно(без отбора тока между банками), быть одного номинала, производителя и желательно из одной партии. Иначе будут разъезжаться по параметрам, а суммарная батарея будет "равняться" на худшего.
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



Разобрался я с зарядкой аккумуляторов GP. Что и как заряжать позже выложу, как свой модуль допаяю.


Ребята, кто может мне подсказать как можно управлять бесколекторным двигателем от CDрома с помощью MK (ATmega8 или ATtiny 2313, ну не суть) ?
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



а зачем? он заточен именно для того чтоб диски крутить. мощности у него наверняка нету совсем и скорость очень большая наверное.
давай лучьше зарядку выкладывай, мне тоже лень вытаскивать и по одному заряжать.
 
 Top
1988Олег1988 Post Id



Главнокомандующий


Сообщений всего: 346
Дата рег-ции: Дек. 2010  



cjA пишет:
а зачем? он заточен именно для того чтоб диски крутить. мощности у него наверняка нету совсем и скорость очень большая наверное.

так просто для общего развития)))
 
 Top
Страниц (2): « 1 [2]
« Электронная мастерская »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru