Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программа на Си для ATmega 32
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Teille
Здравствуйте!
Я только начинаю и не могу разобраться...

Задача такая: написать программу для Атмеги32 в AvrStudio4 на языке Си, чтобы переключатель s2 управлял лампочками LED0 и LED2, s3 управлял LED1 и LED3, s4 --LED2 и LED4,s5 -- LED3 и LED5. Причем тот же переключатель (например s2) мог и выключать и включать лампочки (с использованием оператора XOR)

Спасибо!
mrKirill
Определитесь для начала с контроллером. В названии ATmega16...в теме ATmega32...
Teille
ой,ошиблась, ATmega32 у меня )
исправила)
и еще...может что-то непонятно написала в задании...


На плате LED Board 8 лампочек, обозначенные буквой L, начинаются от L0 до L7.Эта плата подключена к порту "B". К порту "D" подключена плата Button Board, на которой есть 4 кнопки, они называются S0, S1, S2 и S3.
Учусь в Финляндии и просто перевела задание, которое дали,не знаю как это в России всё правильно называется)))
Teille
Делала так(сначала для двух кнопок):

CODE

#include <avr/io.h>
#define S2 bit_is_clear(PIND, 2) // если S2 нажимаем
#define S3 bit_is_clear(PIND, 3) // если S3 нажимаем
int main(void)
{
DDRB = 0x00; // B-порт output
DDRD = 0x00; // D-порт input
PORTD = 0x00;
while(1)
{
if(S2) // если S2 нажали
PORTB^= 0b0000101;
else
if(S3) // если S3 нажали
PORTB^= 0b00001010;
else // ничего не нажимаем
PORTB = 0x00;
}
}



но не получилось...
mempfis_
Код
DDRB = 0x00; // B-порт output
DDRD = 0x00; // D-порт input


С таким кодом далеко пойдёте.....
Вас там в где учитесь думать учат?
Не замечаете противоречия в коде?

Для любой atmega DDRx - регистр направления, бит установленный в 1 обозначает выход, бит установленный в 0 - обозначает вход.
PORTx для выходов позволяет установить состояние выхода, для входов - управляет подтяжкой (0 - нет подтяжки к VCC, 1 - есть подтяжка входа к VCC).

Про такие понятия как антидребезг или таймер-счётчик думаю пока что рано вам рассказывать....
Для начала определитесь что у вас вход а что выход (где кнопочки а где светодиоды).
Teille
Значит,будет
DDRB = 0xFF; выход
DDRD = 0x00; вход

правильно?

а PORTD = 0xFF; или PORTD = 0x00; ?
Что значит управиляет подтяжкой?

Спасибо!!!!
mempfis_
Цитата
DDRB = 0xFF; выход
DDRD = 0x00; вход

Это правильно.
Выходами можно зажигать лампочки.
К входам подключаются кнопочки.

Цитата
Что значит управиляет подтяжкой?

Pull-up или подтягивающий резистор. В атмеге это резистор который подключается между пином и VCC (если пин - вход (DDRx.i = 0)) при условии что PORTx.i=1. Позволяет удерживать потенциал входа в состоянии логической 1 если кнопка не нажата.

А вообще приведите схему тогда точно будет понятно нужно-ли включать подтяжку для кнопочек и каким уровнем управляются лампочки (которые скорее всего являются светодиодами). smile.gif
Teille
спасибо всем))

Я сделала уже,на паре учитель помог))
Dog Pawlowa
Цитата(Teille @ Apr 16 2010, 18:56) *
Я сделала уже))

ОФФ
Так Вы и есть то олицетворение того самого "финского студента"?!
Успехов! smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.