ПОМОГИТЕ собрать контроллер на MEGE8
- Sergey.67
- Родился
- Сообщения: 3
- Зарегистрирован: Пт ноя 23, 2007 00:29:11
- Откуда: Моск. обл. г.Подольск
СПАСИБО за советы!!!
НО, хотелось бы сделать регулятор переменным резистором. А программирование с АЦП я еще не освоил.
Может у кого есть подобного типа схема и исходник?
Заранее спасибо!!!
Если ни когда не занимались программированием то рекомендую
компилятор BASCOM AVR, там куча всяких примеров - как настраивать порты, работа с АЦП, с прерываниями и многое другое, очень быстро можно самому научится программировать контроллеры АВР.
А просить что-бы добрый дядя за Вас написал программу, навряд-ли кто нибудь будет этим заниматься.
- Danny_Kornev
- Родился
- Сообщения: 9
- Зарегистрирован: Вс окт 21, 2007 01:19:15
- Откуда: Севастополь
Рекомендую в вышеприведенной схеме диоды перевернуть катодами на землю - так больше вероятность, что они светиться станут
Shells, я недавно нашел книжку Вольфганга Трамперта "Измерение и управление при помощи микроконтроллеров AVR". Так вот, в этой книженции рассматривается работа АЦП авр-ок с подробным описанием всех ацп-шных регистров и настройкой оных перед началом работы. Более того, там даже приведен код программы на асме, по которой можно понять как, чего и куда. Вот на нее сцылочка (точнее, не именно на нее, а на страничку со всякими книженциями, сама ссылка на книгу находится в самом низу, предпоследняя): http://radiodvd.mylivepage.ru/file/71_% ... 0%B8%D0%B5
Удачи!
Shells, я недавно нашел книжку Вольфганга Трамперта "Измерение и управление при помощи микроконтроллеров AVR". Так вот, в этой книженции рассматривается работа АЦП авр-ок с подробным описанием всех ацп-шных регистров и настройкой оных перед началом работы. Более того, там даже приведен код программы на асме, по которой можно понять как, чего и куда. Вот на нее сцылочка (точнее, не именно на нее, а на страничку со всякими книженциями, сама ссылка на книгу находится в самом низу, предпоследняя): http://radiodvd.mylivepage.ru/file/71_% ... 0%B8%D0%B5
Удачи!
Дураком может быть каждый, но злоупотреблять этим не надо.
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
shells писал(а):Спасибо ! Я вот только не пойму как задержку прописать?
В CVAVR вот так :
Код: Выделить всё
delay_ms(число сколько мС нужна пауза - от 1 до 65535);
// т.е. до 65 секунд одной строкой
delay_us(число сколько микро секунд нужна пауза ); Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Danny_Kornev
- Родился
- Сообщения: 9
- Зарегистрирован: Вс окт 21, 2007 01:19:15
- Откуда: Севастополь
В AVR-Stuido на асме это будет выглядеть так (кстати, глянь в обучалке про мигающие светодиоды):
ldi R16,0 ;посылаем 0 в РОН R16
ldi R17,0 ;посылаем 0 в РОН R17
Loop1:dec R16 ;декрементируем R16
brne Loop1 ;branch not equal - ветвиться, если не равно (сравнение с нулем)
dec R17 ;те же операции с РОН R17
brne Loop1
Вот такой нехитрый ход. Впрочем, можешь дать свое мыло, я кину тебе программку AVRDelayloop - прога, в которой просто прописываешь необходимую задержку (в количестве тактов или в секундах), и она тебе выдает готовый код на ассемблере.
ldi R16,0 ;посылаем 0 в РОН R16
ldi R17,0 ;посылаем 0 в РОН R17
Loop1:dec R16 ;декрементируем R16
brne Loop1 ;branch not equal - ветвиться, если не равно (сравнение с нулем)
dec R17 ;те же операции с РОН R17
brne Loop1
Вот такой нехитрый ход. Впрочем, можешь дать свое мыло, я кину тебе программку AVRDelayloop - прога, в которой просто прописываешь необходимую задержку (в количестве тактов или в секундах), и она тебе выдает готовый код на ассемблере.
Дураком может быть каждый, но злоупотреблять этим не надо.
- Danny_Kornev
- Родился
- Сообщения: 9
- Зарегистрирован: Вс окт 21, 2007 01:19:15
- Откуда: Севастополь
Ну можешь задать вначале какую-то конкретную задержку. Какую-нить придумаешь, я думаю. Затем читаешь из АЦП, сравниваешь с константой (соответствующей опеределенному уровню). Больше - увеличиваешь задержку, меньше - уменьшаешь. Или наоборот. Записываешь в какой-нить зарезервированный РОН значение АЦП. При следующем преобразовании сравниваешь результат уже с этим числом, записанным в резервированном РОН. Опять тот же цикл. И т.д. Это если я правильно понял твою мысль. Щас мозг барахлит - только-только из командировки. Надо будет код - пиши, чо-нить придумаем;) Пусть даже не совсем верный)))
ЗЫ: Ясен хрен, что следующее значение АЦП изменится при изменении положения движка переменного резистора
ЗЫ: Ясен хрен, что следующее значение АЦП изменится при изменении положения движка переменного резистора
Дураком может быть каждый, но злоупотреблять этим не надо.
#include <avr>
#include <avr>
#include <avr>
#include <avr>
INTERRUPT(SIG_ADC)
{
unsigned int ADCdata;
ADCdata = ADCW ;//ADCW;
ADCSR = ADCSR | 0x40;
}
int main (void)
{
DDRD = 0xFF;
ADMUX = 0x40;
ADCSR = 0xCE;
void Pause(int ms)
{
PORTD = 0; //
_delay_loop_2(ms); //
}
start:
PORTD = 0x01; // 1
_delay_loop_2(ADCW * 70); //
PORTD = 0x02; // 2
_delay_loop_2(ADCW * 70); //
PORTD = 0x04; // 3
_delay_loop_2(ADCW * 70); //
PORTD = 0x08; // 4
_delay_loop_2(ADCW * 70); //
PORTD = 0x10; // 5
_delay_loop_2(ADCW * 70); //
PORTD = 0x20; // 6
_delay_loop_2(ADCW * 70); //
PORTD = 0x40; // 7
_delay_loop_2(ADCW * 70); //
PORTD = 0x80; // 8
_delay_loop_2(ADCW * 70); //
sei();
goto start;
}
#include <avr>
#include <avr>
#include <avr>
INTERRUPT(SIG_ADC)
{
unsigned int ADCdata;
ADCdata = ADCW ;//ADCW;
ADCSR = ADCSR | 0x40;
}
int main (void)
{
DDRD = 0xFF;
ADMUX = 0x40;
ADCSR = 0xCE;
void Pause(int ms)
{
PORTD = 0; //
_delay_loop_2(ms); //
}
start:
PORTD = 0x01; // 1
_delay_loop_2(ADCW * 70); //
PORTD = 0x02; // 2
_delay_loop_2(ADCW * 70); //
PORTD = 0x04; // 3
_delay_loop_2(ADCW * 70); //
PORTD = 0x08; // 4
_delay_loop_2(ADCW * 70); //
PORTD = 0x10; // 5
_delay_loop_2(ADCW * 70); //
PORTD = 0x20; // 6
_delay_loop_2(ADCW * 70); //
PORTD = 0x40; // 7
_delay_loop_2(ADCW * 70); //
PORTD = 0x80; // 8
_delay_loop_2(ADCW * 70); //
sei();
goto start;
}
- Danny_Kornev
- Родился
- Сообщения: 9
- Зарегистрирован: Вс окт 21, 2007 01:19:15
- Откуда: Севастополь
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
определи новую функцию, и используй ее везде вместо ADCW:
Код: Выделить всё
uncigned int replace_ADCW(void){
while(ADCW >= 1022);
return ADCW;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!