AM vysielač morzeovky s AVR
Pre účely jednej geocache som plánoval postaviť jednoduchý AM vysielač s dosahom max. pár metrov, ktorý by vysielal morzeovku. Pôvodne som chcel pomocou AVR spínať externý vysielač, ktorý by vysielal konštantný "beep", ale nakoniec som narazil na jednoduchú schému, ako sa to dá spraviť iba pomocou AVR a jedného tranzistora.
Pôvodný zdroj, z ktorého som čerpal, je na tejto stránke.
Schému som prekreslil do EAGLE-u, aby bolo jasne a jednoznačne vidieť hodnoty súčiastok.
Je to pomerne jednoduché.
AVR beží na internom oscilátore o takte 8 MHz, ktorý je delený ôsmimi, takže beží v skutočnosti na 1 MHz. Hodinové impulzy vystupujú z AVR na PB4 (pin 3). Tento nosný signál o frekvencii približne 1 MHz je modulovaný impulzmi z PB3 (pin 2), ktoré ovládame priamo z kódu. Výstup je zosilnený cez N-MOSFET a šup s ním na anténu.
Signál môžeme potom naladiť na AM frekvencii okolo 1 MHz (nie presne, keďže interný oscilátor nie je až taký presný).
Program je tiež pomerne jednoduchý:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define _BV(bit) (1 << (bit)) // _BV macro is not defined so define it here
void beep()
{
for (char i = 100; i; i--)
{
DDRB |= _BV(PB3);_delay_ms(1);
DDRB &= ~_BV(PB3);_delay_ms(1);
}
}
void rest()
{
_delay_ms(200);
}
void dot()
{
beep();
rest();
}
void dash()
{
beep();
beep();
beep();
rest();
}
void space()
{
rest();
rest();
rest();
rest();
}
void spaceWord()
{
space();
space();
}
int main()
{
DDRB |=_BV(PB3);
for (;;)
{
dash(); dash(); space(); // M
dot(); space(); // E
dash(); dot(); dash(); space(); // K
dot(); dash(); dash(); space(); // W
dot(); space(); // E
dash(); dot(); dot(); space(); // B
_delay_ms(1500); // silence
}
return 0;
}
Pri programovaní do AVR treba nastaviť poistky (FUSES) takto:
- Internal Oscillator 8 MHz
- DIV8 enabled
- CKOUT enabled
Dosah vysielača závisí od dĺžky antény. S 10 cm drôtom bol asi 1 meter, zato s 1,5m drôtom bol signál v celej miestnosti (ďalej som neskúšal). Najlepšie to išlo, keď som anténu chytil do ruky.
V pôvodnom prameni bol použitý AVR ATTiny44A, ja som použil ATTiny85, ktorý je menší, ale má stále viac než dosť pinov, ktoré sú potrebné. Rovnako, tranzistor mal byť 2N7000, ale ten je v našich končinách exotický. Rovnako dobre fungoval tranzistor FQPF8N60C, ktorý je tiež N-MOSFET typu enhancement-mode.
Výsledok môžeš vidieť na nasledujúcom videu. Ukazujem príjem na bežný rádioprijímač, aj cez SDR-Sharp v PC.
ZIP súbor na stiahnutie z tejto stránky obsahuje schému ako PNG, aj vo formáte EAGLE, a zdrojový kód vo forme projektu pre Atmel Studio.