Перейти к содержанию

Код Морзе Посредством Светодиода


nusha

Рекомендуемые сообщения

Нужно спроектировать устройство на базе МК семейства AVR, реализующее передачу информации посредством светодиода (код Морзе). Информация поступает от ПЭВМ.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Я может чего-то не понимаю, есть компьютер, зачем МК.

Я бы вообще взяла готовую программу, которая выдает код Морзе на звуковой карте компьютера (такие есть в Интернете бесплатные) и сделала какой-нибудь audio-ключ.

А если тут что-то другое, то надо поподробнее.

Если хотите, чтобы жизнь улыбалась вам, подарите ей своё хорошее настроение

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я может чего-то не понимаю, есть компьютер, зачем МК.

Я бы вообще взяла готовую программу, которая выдает код Морзе на звуковой карте компьютера (такие есть в Интернете бесплатные) и сделала какой-нибудь audio-ключ.

А если тут что-то другое, то надо поподробнее.

Скорее всего нужен автоматический датчик кода морзе. Только из вопроса это непонятно. А нормальная компьютерная программа выдает манипуляцию на интерфейсах COM или LPT. И никакой "audio-ключ" не нужен.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Нужно спроектировать устройство на базе МК семейства AVR, реализующее передачу информации посредством светодиода (код Морзе). Информация поступает от ПЭВМ.

А как звучит ТЗ ?

Ссылка на комментарий
Поделиться на другие сайты

Вообще задание звучит так:

Спроектировать и реализовать устройство на базе МК семейства AVR, реализующее следующие функции: устройство реализует передачу информации посредством светодиода (код Морзе). Информация поступает от ПЭВМ. Комплектующие и интерфейс связи с ПЭВМ выбираются студентом. Для отчетности предоставить полный набор документации разработчика.

Я понимаю так, что пользователь с компа "передает" какую-то информацию (видимо текст), это все преобразовывается в импульсы согласно коду Морзе, светодиод моргает и таким образом передается информаци в коде Морзе.

:unsure: Но дело в том, что я слабо представляю как это реализовать на деле, мне только препод сказал что-то про ATTiny13.

Ссылка на комментарий
Поделиться на другие сайты

Я себе это представляю как МК, с подключенным к нему простым светодиодом и COM-интерфейсом для связи с ПЭВМ.

В ПЗУ МК зашита таблица кодов морзе, программа получения, буферизации и вывода данных на светодиод в постоянном цикле

(получили прерывание от последовательного порта - считали символ, записали в буфер, вывели). Могу помочь с проектированием и

реализацией.

Ссылка на комментарий
Поделиться на другие сайты

Я сюда собственно за помощью и обратилась :rolleyes:

Если не влом подскажите что-нибудь, или хотя бы направьте в нужное русло :unsure:

Изменено пользователем nusha
Ссылка на комментарий
Поделиться на другие сайты

Ок, как доберусь домой с работы наваяю сабж.. Если че какие вопросы будут стучись в личку ;)

Схема на самом деле примитивная и собирается/программируется за 20 минут.

Вот тебе список лит-ры для ознакомления (русло типа):

Smiley Micros - C Programming for Microcontrollers.pdf

Микроконтроллеры AVR - от простого к сложному.djvu

Микросхемы MAX220-MAX249.pdf

Спецификация ATmega16.pdf

Все тщательно отбиралось из массы подобных книженций :) Могу выслать что-то из вышеперечисленного если будут проблемы с поиском.

Ссылка на комментарий
Поделиться на другие сайты

Предлагается использовать следующего вида таблицу кода Морзе. Предложенный вариант не предусматривает возможности сохранить некоторые известный мне символы, состоящие из 6-ти сигналов. Для них в принципе можно отдельную табличку сделать, т.к. их не так много.

А 010 00001 .-
Б 100 01000 -...
В 011 00011 .--
Г 011 00110 --.
Д 011 00100 -..
Е 001 00000 .
Ж 100 00001 ...-
З 100 01100 --..
И 010 00000 ..
Й 100 00111 .---
К 011 00101 -.-
Л 100 00100 .-..
М 010 00011 --
Н 010 00010 -.
О 011 00111 ---
П 100 00110 .--.
Р 011 00010 .-.
С 011 00000 ...
Т 001 00001 -
У 011 00001 ..-
Ф 100 00010 ..-.
Х 100 00000 ....
Ц 100 01010 -.-.
Ч 100 01110 ---.
Ш 100 01111 ----
Щ 100 01101 --.-
Ь 100 01001 -..-
Ы 100 01011 -.--
Э 101 00100 ..-..
Ю 100 00011 ..--
Я 100 00101 .-.-

Верхние 3 бита кодируют длину передаваемого сигнала (в точках и тире). Нижние 5 бит представляют собой сам передаваемый код,

причем 0-й бит передается последним. Схему подключения микроконтроллеров AVR через MAX232(A) к последовательному порту ПК

можно найти тут _http://forum.cxem.net/z4.htm в комплекте с некоторым демонстрационным кодом.

З.Ы. Эмулятор Proteus не поддерживает эмуляцию бита UCSRC. Хотя в принципе со значениями по-умолчанию вполне можно жить :)

Помимо связки с ПК по RS232 схема также должна содержать светодиод, подключенный к свободному порту (например PD5) через

резистор на 1 кОм. Полярность подключения зависит от управляющей программы. Мк. MAX232 требует подключения 4-х внешних конденсаторов емкостью 1 мкФ (схему можно найти на приведенном сайте).

Изменено пользователем madpr1
Ссылка на комментарий
Поделиться на другие сайты

Исходный текст программы. Картинка схемы в аттаче. В реальной схеме еще должны быть упомянутые выше резисторы и микросхема MAX232 для согласования

логических уровней МК и последовательного порта ПЭВМ. Таблица морзе-кодов заполнена в соотв. с предложенной схемой. При желании можно добавить в нее

еще символы... Вот собственно и все.

/*********************************************
* Chip type		   : ATmega16
* Clock frequency	 : 1,000000 MHz
* Compiler		  : avr-gcc
* License	   : public domain
*********************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>

#define F_OSC 1000000				   /* oscillator-frequency in Hz */
#define UART_BAUD_RATE 4800
#define UART_BAUD_CALC ((F_OSC)/16/(UART_BAUD_RATE)-1)

#define OVERFLOW_COUNT (F_OSC / 1000 / 64);
#define BUFSZ	32

/**** MORSE CODE TABLE ****/
uint8_t morse[256] = {
/* 00 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 10 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 20 */	0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 30 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 40 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 50 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 60 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 70 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 80 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 90 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* A0 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* B0 */	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* C0 */	0x41, 0x88, 0x63, 0x66, 0x64, 0x20, 0x81, 0x8C, 0x40, 0x87, 0x65, 0x84, 0x43, 0x42, 0x67, 0x86,
/* D0 */	0x62, 0x60, 0x21, 0x61, 0x82, 0x80, 0x8A, 0x8E, 0x8F, 0x8D, 0x00, 0x8B, 0x89, 0xA4, 0x83, 0x85,
/* E0 */	0x41, 0x88, 0x63, 0x66, 0x64, 0x20, 0x81, 0x8C, 0x40, 0x87, 0x65, 0x84, 0x43, 0x42, 0x67, 0x86,
/* F0 */	0x62, 0x60, 0x21, 0x61, 0x82, 0x80, 0x8A, 0x8E, 0x8F, 0x8D, 0x00, 0x8B, 0x89, 0xA4, 0x83, 0x85
}; /* includes russian alphabet and space */

/**** CODE FOR PRECISE DELAY FUNCTION ****/

volatile uint8_t gTickCount;

SIGNAL(SIG_OVERFLOW0)
{
gTickCount++;
/* timer0 reset */
TCNT0 = (uint8_t) -OVERFLOW_COUNT;
}

void wait_tmr0()
{
uint8_t prevCount = gTickCount;
while (gTickCount == prevCount) { }
}

void delay_ms(uint16_t ms)
{
uint16_t i;
for(i = 0; i < ms; i++)
wait_tmr0();
}

/**** CODE FOR UART TRANSMISSION ****/

void usart_putc(unsigned char c)
{
// Wait for the UART to get ready
while(!(UCSRA & (1 << UDRE)));
// Transmit character
UDR = c;
}

void uart_puts (char *s) {
while (*s) {
	usart_putc(*s);
	s++;
}
}

/*** CODE FOR UART INITIALIZATION ****/

void init(unsigned int ubrr) {
// set baud rate
UBRRH = (uint8_t)(ubrr >> 8);
UBRRL = (uint8_t)(ubrr);

// Enable receiver and transmitter; enable RX interrupt
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);

// Asynchronous 8N1
UCSRC = (1 << URSEL) | (3 << UCSZ0);
}

/**** CODE FOR UART RECEPTION ****/

volatile uint8_t data[BUFSZ];
volatile uint8_t wptr = 0;
volatile uint8_t trans = 0;

SIGNAL (SIG_UART_RECV)
{
unsigned char c;
// receive byte
c = UDR;
// echo back to the terminal
usart_putc(c);
// write into buffer
data[wptr] = c;
wptr++;
// check bounds
if(wptr == BUFSZ) wptr = 0;
// check return
if(c == '\r') trans = 1;
}

/**** MORSE TRANSMISSION FUNCTIONS ****/
void morse_putc(unsigned char c)
{
// Get table entry
uint8_t x = morse[c];
// Get morse code length
uint8_t l = (x & 0xE0) >> 5;
// Output the code
char i;

for(i = l - 1; i >= 0; i--)
{
	// Enable morse LED
	PORTB |= (1 << PB0);

	if(x & (1 << i)) {
		// long beep
		delay_ms(500);
		usart_putc('-');
	} else {
		// short beep
		delay_ms(250);
		usart_putc('.');
	}

	// Disable morse LED
	PORTB &= ~(1 << PB0);
	// Make a pause between signals
	delay_ms(100);
}
}

void morse_puts (char *s) {
while (*s) {
	// Make a pause between symbols
	delay_ms(100);
	// Send next char
	morse_putc(*s);
	usart_putc(' ');
	s++;
}
usart_putc('\r');
}

/**** MAIN PROGRAM ENTRY POINT ****/

int main(void)
{
/* turn on the UART */
init(UART_BAUD_CALC); 
/* allow timer0 interrupt */
TIMSK |= (1 << TOIE0);
/* timer0 reset */
TCNT0 = (uint8_t) -OVERFLOW_COUNT;
/* enable prescaler CK/64 */
TCCR0 = (0 << CS02) | (1 << CS01) | (1 << CS00);
/* enable interrupts */
sei();
/* say hello to the user */
uart_puts("Serial Morse Code Transmitter v0.1 (c) 2007, Sergey Anoufrienko\rReady. Waiting for input\r\r");

// enable PB0 & PA0 as output
DDRB |= (1 << PB0);
DDRA |= (1 << PA0);

// Power LED on
PORTA |= (1 << PA0);

while(1)
{
	// Sleep until user press Return
	while (!trans) delay_ms(100);
	// Terminate message
	data[wptr - 1] = 0;
	// Print transmitted message
	uart_puts("Transmitting ");
	uart_puts((char*)data);
	uart_puts("...\r");
	// Reset transmit flag
	trans = 0;
	wptr = 0;
	morse_puts((char*)data);
}

return 0;
}

post-22665-1174603978_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  • 1 месяц спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Вероятно, в разделе "Работа" вам помогут. При условии предоставления чёткого и недвусмысленного технического задания.
    • Привет кто это еще читает. Знакомый купил в Москве по адекватной цене пару  B615D, дал на диагностику перед уверенной эксплуатацией. Одна сразу в защите, большой динамик спален, усилители на высокоомную нагрузку поют, буду позже разбираться. А вот вроде бы вполне работоспособная не сдюжила и 10 минут на хорошей мощности на плотном прогрессиве. Вылетели ключи в БП и драйвера на MMBTA56. Видно что был в ремонте, возможно ключи оказались палёнкой. Есть мысль впаять вместо FQPF13N50  чуток помощней по току 18N50-e. По параметру Qg аналогичные, а по  Сg будут потяжелей, 2350пф против 1800 у 13н50-х. 
    • Ну так теперь фигня вопрос. Проверить, что кнопки невозможно замкнуть одновременно, да определить, на какой ток транзисторы нужны. По характеристикам мотора или по максимально-допустимому току диодов D1-D4. Навскидку, моторчик низковольтный, диоды тоже. Транзисторы тогда на PBSS4350 можно заменить. Они на Али почти задаром продаются.
    • Сами же понимаете, что так не может быть. Или нет "сквозняка", или схема неправильно собрана, элементы не те, битые и пр., и схема защиты не работает. Проверьте сначала работу защёлки защиты при питании от 15 В, отпаяв R19 и подавая туда медленно увеличивающееся напряжение до 1,5 - 2 В (можно с потенциометра ом на 100-500). Добейтесь, чтобы работала. Порог срабатывания измерьте. Пересчитайте в ток через резистор 0,1 Ом. Соответствует ли "правильному"? Проверьте, что у этого резистора сопротивление действительно 0,1 Ом. Запаяйте 0,1 Ом обратно. Напишите, какая лампочка. А то мало ли какая, может она не от "сквозняка", а от броска тока заряда С18 С16 мигает. Транзисторы ключей проверьте. Впаяйте вместо первичной трансформатора резистор ом 150 - 300, чтобы ток с ключей в этот "эквивалент трансформатора" не больше 50-100 мА был. Посмотрите форму напряжения на выходе ключей, в точке соединения С16 и С18, на питании после лампочки. Ищите, где ляп. Умозрительно подсказать можно только по каким-то измеренным данным. Кроме вас никто их не добудет. В общем, как в анекдоте: - Молодой человек, ну делайте же уже хоть что-нибудь!
    • Ну так можно увеличить глубину ООС, тем самым понизив чувствительность и повысив линейность
    • Судя по этой картинке   в трухе передней панели под выступающие болты и шишки паек ЗК динамиков выковыряныфрезерованы выемки, иначе бы динамики так плотно не прилегали бы к ДВП.    А оно тебе надо? "Работает - не мешай"(с)/это уже аксиома, не требующая доказательств/ , пытаясь сделать лучше, чем сделано на заводе. Сanton-ят, т.е. поют, и лучше, чем есть, тебе не сделать. Ну перенесёшь ты динамики наружу, а что тебе это даст? Кроме того, что при попытке их продать(а продавать их когда-нибудь придётся, т.к. эта акустика бюджетного сегмента без потуг на высший класс Hi-Fi) , тебе придётся объяснять потенциальному покупателю причину, по которой какой-то умник заколхозил такую переделку с акустикой, ты ничего хорошего не получишь. Задуманная тобой переделка - это по сути возня ради возни. 
×
×
  • Создать...