Страница 1 из 3
Помогите с AVR
Добавлено: Пн май 04, 2009 11:05:58
MDamir
Я студент радио-технического института, были лекции по программированию в среде AVR, но препод рассказывал всё на уровне научного языка, в итоге, надо было сделать лабораторную работу по програмированию интегральной микросхемы на AVR. Никто не смог сделать, все купили, но мне не позволяют средства купить, помогите сделать лабораторную, пожалуйста. Думаю для Вас это не составит большого труда.
Мне надо разработать формирователь ступеньчатого напряжения N=256 (пуск и частота задаётся портом) на микросхеме ATmega103.
Я с другом который шарит в программировании составили вот такой код
#include <mega103>
#include <delay>
int i;
char j, s;
int main (void)
{
DDRA = 0;
DDRC = 0;
DDRB = 0xFF;
while (1)
{
s=PORTC;
if (i == 255) {i=0;} else {i++;}
if ((PORTA&1) == 0) {PORTB = i;}
while (j == s) ;
{
j++;};
}
}
Прошу посмотреть, правильно ли? И объяснить зачем тут нужна переменная j, и что означает "&" (PORTA&1), так же что означает while (1), что такое while знаю, а что в () нет.
Так же пожалуйста помогите разработать структурную схему на неё.
Добавлено: Пн май 04, 2009 11:16:10
nds
А почему бы не спросить друга программиста?

код заданию не соответствует, совсем.
Добавлено: Пн май 04, 2009 11:23:20
MDamir
Точнее, так- мне написал человек, с прошлой моей работы, а с другом мы её немного поправили, сделали алгоритм на неё. На эти вопросы он ответить не может, так как подзабыл, и не в AVR програмиррует а в C++. Как так не соответствует??? Преподу показывал, он сказал что что то похожее на правильную, консультировать отказывается. Гос.экзамены на носу, надо скорее сдвать лабу. ( Помогите, пожалуйста. и с одногруппниками не поразмышлять, никто не знает... (
Добавлено: Пн май 04, 2009 11:52:39
BCluster
задание конкретнее дайте...
Добавлено: Пн май 04, 2009 11:54:39
Goodefine
MDamir
Мне надо разработать формирователь ступеньчатого напряжения N=256 (пуск и частота задаётся портом) на микросхеме ATmega103
Что значит "ступенчатого"? Можете целиком задание привести и схемку?
Добавлено: Пн май 04, 2009 11:59:15
MDamir
Задание целиком звучит так- Разработка формирователя ступенчатого напряжения N=256 (пуск и частота задаётся портом). Ни схем, ни чего нет в задании, только это предложение. Ступенчатое- напряжение растёт в ступенчатом виде с частотой заданной портом. Мне надо сделать- написать программу, нарисовать структурную схему, нарисовать алгоритм программы, разработать принципиальную схему.
Добавлено: Пн май 04, 2009 12:17:23
Krik99
Если правельно понял надо изменять напряжение на пине, тогда есть смысл использовать ШИМ.
Добавлено: Пн май 04, 2009 12:20:34
MDamir
Понятия не имею
Программа которая вложена в 1 пост- не подходит??
Может её просто подправить можно?
Добавлено: Пн май 04, 2009 13:16:38
Goodefine
Схема во вложении. Кварц и питание сами подключите. Будут вопросы, задавайте. Программа:
Код: Выделить всё
/*****************************************************
CodeWizardAVR V1.25.9 Professional
Chip type : ATmega103
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1000
*****************************************************/
#include <mega103>
#include <delay>
#define PUSK_PIN PINB&1 /*ножка порта для пуска*/
unsigned char pwm_value; //переменая для чтения порта
// Обработчик переполнения таймера Т0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//обновление числа заполнения
OCR0=pwm_value;
}
void main(void)
{
//--------------------------------ИНИЦИАЛИЗАЦИЯ ПЕРЕФИРИИ--------------------------//
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=P
PORTB=0x01;
DDRB=0x10;
// Port D initialization (НА ДАННОМ ПОРТЕ ЗАДАЕТСЯ КОЭФФ. ЗАПОЛНЕНИЯ)
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
ASSR=0x00;
TCCR0=0x63;
TCNT0=0x00;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
// Глобальное разрешение прерываний
#asm("sei")
for (;;) //MAIN_LOOP
{
(PUSK_PIN)?(pwm_value=0):(pwm_value=PIND); //читаем порт, задающий коэффициент заполнения ШИМ
delay_ms(100); //задержка реакции
}
}
Добавлено: Пн май 04, 2009 13:43:54
MDamir
это только ШИМ?
Добавлено: Пн май 04, 2009 13:46:40
Goodefine
А что еще надо?
Добавлено: Пн май 04, 2009 13:49:58
MDamir
куда его сувать? как связать с программой? программа которая в 1 посте правильная?
Добавлено: Пн май 04, 2009 14:18:47
Goodefine
MDamir писал(а):...как связать с программой?...
Все уже связано.
MDamir писал(а):... программа которая в 1 посте правильная?
нет...
Добавлено: Пн май 04, 2009 14:26:40
MDamir
Повторюсь, AVR нам преподавали на научном языке, я в нём не "рублю" да, так же как и мои одногруппники которые все купили. программирование вообще не преподавалось, пытался только изучать по книге.
Тут вижу- портВ4 это выход, портD похоже задаёт частоту да?
В задании переменных и задании коэфф. заполнения портов понял, далее содержание программы непонятно, из-за отсутствия знаний по прагроммированию.
Добавлено: Пн май 04, 2009 14:29:29
Goodefine
Приводите куски кода которые непонятны и спрашивайте...
Добавлено: Пн май 04, 2009 14:30:31
MDamir
Goodefine
Спасибо большое за программу. немогли бы вы ещё нарисовать алгоритм работы программы. Несмогу, опять же по причине не понимания программирования... ((
Добавлено: Пн май 04, 2009 15:47:18
MDamir
Ура, программа заработала, No errors.
Теперь нужен только алгоритм, и структурная схема.
Goodefine, не могли бы сделать? Алгоритм хотябы.
Добавлено: Пн май 04, 2009 15:59:05
BCluster
мде ... задания вам дают конкретные канешно
Добавлено: Пн май 04, 2009 16:07:43
MDamir
Goodefine писал(а):
// Глобальное разрешение прерываний
#asm("sei")
for (;;) //MAIN_LOOP
{
(PUSK_PIN)?(pwm_value=0):(pwm_value=PIND); //читаем порт, задающий коэффициент заполнения ШИМ
delay_ms(100); //задержка реакции
}
}
[/code]
Объясните эти строка пожалуйста. И зачем в моём задании ШИМ? Как я помню, про него нам даже не рассказывали на лекциях.
Добавлено: Пн май 04, 2009 16:11:47
MDamir
Goodefine, смущает меня эта программа, буд-то это не то что надо.
Мне вроде как нужно типа такого-
....____|
....|
....|
............._____|
.............|
......____|
___|
И всё это без точек.
Так сказать длина ступеньки - это частота задающаяся портом.
всего ступенек N=256.