реклама на сайте
подробности

 
 
> Небольшой проект на AVR, помогите разобраться новичку
Viper
сообщение Feb 14 2007, 14:05
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 14-02-07
Из: Волт №13
Пользователь №: 25 348



Доброго времени суток, уважаемые форумчане!

Ранее я занимался изготовлением в основном аналоговых устройств, работающих со звуком(усилители, гитарные примочки и т.п.), поэтому опыт есть. Совсем недавно заинтересовался устройствами на микроконтроллерах фирмы Atmel. Успешно повторил несколько простых устройств на основе этих микропроцессоров. И соответственно захотелось разработать собственное устройство. Но, проблема в том, что с программированием у меня туго. В связи с чем и обращаюсь к вам за помощью.

Идея проста - управлять с компьютера в реальном времени через микроконтроллер вкл/выкл светодиода. Для этих целей планируется использовать atmega8, порт USB, протокол RS-232(т.е. использовать виртуальный COM порт), всё должно питаться соответственно от USB.
Собственно с реализацией аппаратной части проблем нет, но вот прошивку и программу я сам написать не могу sad.gif
Может есть люди, которые помогут разобраться и обьяснить принципы работы с портами, микроконтроллером, желательно из среды Borland c++.

Если это уже обсуждалось на форуме - пните ссылкой, поиск юзал, ничего подходящего не нашёл.
Если есть инфа по работе с портами из-под Borland c++(желательно на русском), буду очень благодарен за ссылку.

Если что - моё мыло в профиле.

Заранее спасибо.


--------------------
War...war never change...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
birden
сообщение Feb 16 2007, 07:47
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 28-10-06
Из: Новосибирск
Пользователь №: 21 743



Добавлю свои 5 капель:

Пример программы на С (IAR) для работы с UART:

#include <iom8.h>

#define Led_on() PORTC |= 0x01 // включение светодиода
#define Led_off() PORTC &= ~0x01 // выключение светодиода

// Отправка байта
//
void rs_out(unsigned char byte) {
while ( !( UCSRA & (1<<UDRE)) );
UDR = byte;
}
// Прием байта
//
unsigned char rs_in(void) {
while ( !(UCSRA & (1<<RXC));
return UDR;
}
// Основная программа
//
void main(void) {
unsigned char d;
// инициализация портов
DDRC = 0x01; PORTC = 0x00; // PC0 - выход
DDRD = 0x02; PORTD = 0x00; // RXD - вход, TXD выход

// инициализация UART
UBRRH = 0;
UBRRL = 51; // скорость 9600 бод для кварца 8МГц
USCRB = (1<<RXEN)|(1<<TXEN); // разрешаем прием и передачу
UCSRC = (1<<URSEL)|(3<<UCSZ0);

// Цикл приема отправки
while(1) {
d = rs_in(); // Принимаем байт
rs_out(~d); // инвертируем и отправляем (для наглядности)
if (d == 0x10) Led_on(); // пришло 0x10 - зажигаем
if (d == 0x20) Led_off(); // пришло 0x20 - гасим
}
}

Писал по памяти, но должно работать. Если что-то не так, сообщите, будем править smile.gif

Схемотехника:
- на PC.0 контроллера вешаем светодиод ч/з резистор 560 Ом на землю
- ноги PD.0, PD.1 (RXD и TXD) ч/з преобразователь уровней TTL-RS-232 (типа AD202) к компьютеру
- кварц 8МГц (можно internal RC-osc с той же частотой)

На копьютере удобно использовать программу типа ComPortToolkit (кажется так) для отправки и приема байтов.
Ну и удачи конечно же. Вопросы - обращайтесь.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 16:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016