Вс дек 06, 2020 13:27:22
BOB51 писал(а):У адуринки есть другой способ
Вс дек 06, 2020 22:56:37
Пн янв 18, 2021 23:08:50
typedef unsigned char byte ;
typedef unsigned int real ;
#include <tiny13.h>
#include <bcd.h>
#include <delay.h>
#define CE PORTB.2
#define CL PORTB.1
#define DA PORTB.0
void lm7001SendByte(byte k)
{
byte i ;
for (i = 0; i < 8; i++) {
if (k&0x1) DA = 1;
else
DA = 0;
delay_us(3);
CL = 1;
delay_us(3);
CL = 0;
k = k >> 1;
delay_us(3);
DA = 0;
}
}
// Формируем команды
void send_lm7001(){
real divisor;
//divisor = (27030 + 465) / 10; //делим на шаг заданный программно для микросхемы
divisor = (140575 + 10700) / 10; //делим на шаг заданный программно для микросхемы
// частота + ПЧ
// пример: (частота + пч) * (кварц / шаг делителя) / реальный кварц
// (27135 + 455) * (7200 / 10) / 7200 = 2759
// (27135 + 455) * (7200 / 9) / 8000 = 2759
CL = 0;
CE = 1;
delay_us(3);
lm7001SendByte(divisor & 0x00FF);
lm7001SendByte((divisor & 0xFF00)>>8);
lm7001SendByte(0b11010000);
// Настройка делителя синтезатора (1-Fmin,101 - 9кГц шаг)
// (1-Fmin, 001 - 10кГц шаг)
delay_us(3);
CE = 0;
}
void main(void)
{
PORTB=0x00;
DDRB=0x07;
delay_ms (20);
send_lm7001(); // отправляем частоту
delay_ms (200);
while (1)
{
#asm("sleep");
}
}
Вт янв 19, 2021 13:42:02
Рассмотрим примеры составления управляющей последовательности. Предположим, что синтезатор применен в УКВ радиоприемнике с промежуточной частотой 10,7 МГц, который принимает сигнал с несущей частотой 100 МГц. Шаг частотной сетки — 50 кГц.
Найдем необходимый коэффициент деления частоты. Если гетеродин работает на частоте ниже принимаемой, его частота равна 100 - 10,7 = 89,3 МГц. Коэффициент деления
Кдел = 89300:50 = 1786 = 6FA (hex) = 0110 1111 1010 (bin).
Вт янв 19, 2021 13:43:36
Вт янв 19, 2021 14:45:13
#define DIVISOR (140575 + 10700)/10;
...
lm7001SendByte(DIVISOR & 0x00FF);
lm7001SendByte((DIVISOR & 0xFF00)>>8);
...
divisor = (unsigned long)(140575 + 10700) / 10;
Вт янв 19, 2021 17:14:11
radteh писал(а):Тип данных unsigned int применённый для переменной divisor
real divisor;
typedef unsigned char byte ;
typedef unsigned int real ;
Вт янв 19, 2021 19:08:05
Вт янв 19, 2021 20:23:33
divisor = (unsigned long)(140575 + 10700) / 10;
Ср янв 20, 2021 03:20:20
Ср янв 20, 2021 08:59:13
Ср янв 20, 2021 10:36:51
NStorm писал(а):divisor = 15127
Ср янв 20, 2021 10:56:23
Ср янв 20, 2021 20:07:32
Пт янв 22, 2021 05:13:31
Вт июн 01, 2021 17:11:43
Chip type : ATtiny13A
AVR Core Clock frequency: 4,800000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*******************************************************/
typedef unsigned char byte ;
typedef unsigned int real ;
typedef unsigned long unreal ;
#include <tiny13a.h>
#include <bcd.h>
#include <delay.h>
//#include <sleep.h>
#define CE PORTB.2 //
#define CL PORTB.1 //
#define DA PORTB.0 //
byte
set, sw_key ;// номер запомненной позиции настройки
unreal
f_tun;
unreal eeprom set_frq [4]=
{163300, 163550, 163950, 164150};
byte eeprom chan0=0;
// Declare your global variables here
void lm7001SendByte(byte k)
{
byte i ;
for (i = 0; i < 8; i++) {
if (k&0x1) DA = 1;
else
DA = 0;
delay_us(3);
CL = 1;
delay_us(3);
CL = 0;
k = k >> 1;
delay_us(3);
DA = 0;
}
}
void write_lm7001(){
real frq;
frq=(f_tun - 10700) / 25 ;
CL = 0; // CL
CE = 1; // CE
delay_us(3);
lm7001SendByte(frq & 0x00FF);
lm7001SendByte((frq & 0xFF00)>>8);
lm7001SendByte(0b10100000); // - 25k
delay_us(3);
CE = 0; // CE
}
/*
void MCU_Off()
{
#asm("sei");
sleep_enable();
powerdown();
#asm("sleep");
}
*/
void blink () // мигаем диодом
{
if (set == 0){
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
}
if (set == 1){
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
}
if (set == 2){
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
}
if (set == 3){
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
delay_ms(20);
PORTB.3=0;
delay_ms(20);
}
}
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=0b001111;
// State: Bit5=T Bit4=P Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=01000;
sw_key = 0;
chan=chan0; // читаем из еепром номер канала
f_tun = set_frq [set0]; // устанавливаем частоту
write_lm7001 ();
while (1){
// Place your code here
if(PINB.4 == 0){
sw_key = 1;
delay_ms(10);
}
if (sw_key && (PINB.4 ==1)) {
sw_key = 0;
chan++;
if (chan>3)
chan=0;
f_tun = set_frq [chan];
write_lm7001 ();
blink ();
}
}
}
typedef unsigned char byte ;
typedef unsigned int real ;
typedef unsigned long unreal ;
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/iotn13.h>
#include <avr/eeprom.h>
#include <util/delay.h>
//#define CE PORTB.2 //
//#define CL PORTB.1 //
//#define DA PORTB.0 //
#define SetBit(reg, bit) reg |= (1<<bit)
#define ClearBit(reg, bit) reg &= (~(1<<bit))
#define InvBit(reg, bit) reg ^= (1<<bit)
#define BitIsSet(reg, bit) ((reg & (1<<bit)) != 0)
#define BitIsClear(reg, bit) ((reg & (1<<bit)) == 0)
byte set, set0;
byte sw_key ;// номер запомненной позиции настройки
unreal f_tun;
uint8_t eepromstring[5]={"Test"};
real frq;
unreal set_frq[4] ;
// unreal set_frq[4] EEMEM = {163300, 163550, 163950, 164150};
//byte EEMEM chan0=0;
byte chan0=0;
byte chan=0;
// Declare your global variables here
void lm7001SendByte(byte k)
{
byte i ;
for (i = 0; i < 8; i++) {
if (k&0x1)
SetBit(PINB, 0);
//DA = 1; // DA PORTB.0
else
SetBit(PINB, 0);
//DA = 0; // DA PORTB.0
_delay_us(3);
SetBit(PINB, 1);
//CL = 1; // CL PORTB.1
_delay_us(3);
SetBit(PINB, 1);
//CL = 0; // CL PORTB.1
k = k >> 1;
_delay_us(3);
SetBit(PINB, 0);
//DA = 0; // DA PORTB.0
}
}
void write_lm7001(){
// real frq;
frq=(f_tun - 10700) / 25 ;
//CL = 0; // CL // CL PORTB.1
SetBit(PORTB, 1);
//CE = 1; // CE // CE PORTB.2
SetBit(PORTB, 2);
_delay_us(3);
lm7001SendByte(frq & 0x00FF);
lm7001SendByte((frq & 0xFF00)>>8);
lm7001SendByte(0b10100000); // - 25k
_delay_us(3);
//CE = 0; // CE // CE PORTB.2
SetBit(PORTB, 0);
}
/*
void MCU_Off()
{
#asm("sei");
sleep_enable();
powerdown();
#asm("sleep");
}
*/
void blink () // мигаем диодом
{
if (set == 0){
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
}
if (set == 1){
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3);
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
}
if (set == 2){
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3);
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
}
if (set == 3){
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3) ;
_delay_ms(20);
SetBit(PORTB, 3);
_delay_ms(20);
ClearBit(PORTB, 3);
_delay_ms(20);
}
}
int main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=0b001111;
// State: Bit5=T Bit4=P Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB |(1<<3);
PORTB &=~(1<<0)|(1<<1)|(1<<2)|(1<<4);
//PORTB=01000;
sw_key = 0;
set_frq[0]=145450;
set_frq[1]=145500;
set_frq[2]=145550;
set_frq[3]=145600;
chan=chan0; // читаем из еепром номер канала
f_tun = set_frq [set0]; // устанавливаем частоту
write_lm7001 ();
while (1){
// Place your code here
if BitIsClear(PINB, 0) {
//if(PINB.4 == 0){
//if(PINB &(1<<4)){
sw_key = 1;
_delay_ms(10);
}
if (sw_key && BitIsSet(PINB, 0)) { // Если кнопка отжата переключаем частоту
sw_key = 0;
chan++;
set=chan;
if (chan>3){ chan=0; set=0;}
f_tun = set_frq [chan];
write_lm7001 ();
blink ();
}
}
}
Вт июн 01, 2021 18:00:50
Вт июн 01, 2021 19:17:34
Вт июн 01, 2021 19:25:39
Вт июн 01, 2021 20:03:32