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

Вопросы от начинающих по МК


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

наверное придется для каждого сигнала свой источник делать.. хотелось бы конечно что бы аппарат был целостным//

цифровым методом наверное не добиться острой верхушки..

а как это все делается в фирменных генераторах?

я тут еще покопался.. кажется в ДДС АД9954 можно "загрузить" свою форму сигнала.. не могли бы подсказать так ли это?

http://www.analog.co...eets/AD9954.pdf

наверное нет, ОЗУ что то там на счет частоты..

вот еще.. если все таки на ПЛИС организовать выдачу (по кругу с изменением интервала между значениями) минимально допустимого количества выборок для каждого сигнала (кстати подскажите/помогите определиться для каждого из четырех сигналов до 10МГц).

как то так..

в теории вроде бы возможно, только какие проблемы могут быть на практике?

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

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Эээ... тактировать ЦАП? Вы вообще представляете принцип прямого цифрового синтеза? Вообще такая штука прокатит только с синусом, потому что после некоторой частоты ЦАП будет проскакивать некоторые отсчеты - синус-то можно восстановить а вот произвольный сигнал в общем случае нет. Вот у меня есть фирменный генератор, тоже используется принцип прямого цифрового синтеза, синус он может выдать до 25Мгц, остальные произвольные сигналы до 5Мгц а пилу до 1Мгц, пользовательский сигнал и несколько встроенных произвольной формы семплируется на частоте до 125М семплов/сек(частота семплирования формируется плавно, думаю что тут применен такой же способ).

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

Здравствуйте, я начинающий программировать AVR хотел сделать часы с использованием DS1307 но вот не задача появилась проблема с фукцией rtc_ а точнее когда программа обращается к rtc_init или любой другой rtc_ то индикаторы не светятся вообще (это в железе) как только закоментируеш все rtc_ индикаторы работают а в протеусе все работает нормально - подскажите в чем может быть проблема

#include <mega8.h>
#include <delay.h>
#include <i2c.h>
#include <ds1307.h>
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#define btn_menu PINC.0
#define set_mp PINC.1
#define set_set PINC.2
#define set_hp PINC.3
unsigned char sek,min,hour;
unsigned char insek=0,inmin=15,inhour=0;
flash unsigned char cifra[] = {	 
   0b11000000,				   //0
   0b11111001,				   //1
   0b10100100,				   //2
   0b10110000,				   //3
   0b10011001,				   //4
   0b10010010,				   //5
   0b10000010,				   //6
   0b11111000,				   //7
   0b10000000,				   //8
   0b10010000,				   //9
   ~0b01110110				   //H
};
void ind1(unsigned char s){
unsigned char sd=0;
  while(s>=10){
  s-=10;
  sd++;
  }
  PORTB.1=1;
  PORTD=cifra[sd];
  delay_ms(5);
  PORTB.1=0;
  PORTB.0=1;
  PORTD=cifra[s];
  delay_ms(5);
  PORTB.0=0;
}
void ind2(unsigned char m){
unsigned char md=0;
  while(m>=10){
  m-=10;
  md++;
  }
  PORTB.3=1;
  PORTD=cifra[md];
  delay_ms(4);
  PORTB.3=0;
  PORTB.2=1;
  PORTD=cifra[m];
  delay_ms(4);
  PORTB.2=0;
}
void ind3(unsigned char h){
unsigned char hd=0;
  while(h>=10){
  h-=10;
  hd++;
  }
  PORTB.5=1;
  PORTD=cifra[hd];
  delay_ms(4);
  PORTB.5=0;
  PORTB.4=1;
  PORTD=cifra[h];
  delay_ms(4);
  PORTB.4=0;
}
void menu(unsigned char a){
while(a){
   if (set_hp==0) {
   delay_ms(250);
   hour++;
   };
if (hour>=24) {hour=0;};
ind3(hour);
   if (set_mp==0) {
   delay_ms(250);
   min++;
 };
if (min>=60) {min=0;};
ind2(min);
ind1(sek);
   if (set_set==0) {
   rtc_set_time(hour,min,sek);
   a=0;
   };
   if (btn_menu==0) {
   delay_ms(250);
   a=0;
};
}

}
void main(void)
{
PORTB=0b00000000;
DDRB=0b00111111;
PORTC=0b00001111;
DDRC=0b00000000;
PORTD=0b00000000;
DDRD=0b11111111;
i2c_init();
rtc_init(0,0,0);
rtc_set_time(inhour,inmin,insek);
while (1)
  {
  rtc_get_time(&hour,&min,&sek);
    ind3(hour);
    ind2(min);
    ind1(sek);
  if (btn_menu==0) {
  delay_ms(250);
  menu(1);
};

  }
}

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

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

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

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

Так пошагово отладь, зачем отладчики вообще существуют? Но кажется мне, что функции эти синхронны и держат поток программы пока не закончатся а в них что-то не так - например, ждут ответа от подчиненного устройства и если оно не отвечает - функция просто "висит" причем еще и запретив прерывания. Смотри внимательней, правильно ли ты пользуешься этими функциями.

Учение - изучение правил. Опыт - изучение исключений.

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

ждут ответа от подчиненного устройства и если оно не отвечает - функция просто "висит" причем еще и запретив прерывания.

я так понимаю что вы говорите про то что просто DS1307 не отвечает на запросы МК?

А по выложенному коду все правильно не подскажете

кстати написано все это в CVAVR.

Так пошагово отладь, зачем отладчики вообще существуют?

Кроме Протеуса не каким не пользовался - а в нем все идет хорошо

А какой отладчик посоветуете?

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

Смотри какой отладчик поддерживает CVAVR, похоже что тебе нужен именно аппаратный отладчик. Или пристально изучать примененную библиотеку.

по выложенному коду все правильно не подскажете

Увы, телепатическими способностями не обладаю.

Чем искать причину почему оно не работает, попробуй найти ХОТЯБЫ ОДНУ причину почему оно должно работать - это в тысячи раз проще!

И без цифрового анализатора/осциллографа или хотябы аппаратного отладчика искать причину неработоспособности схемы крайне трудно, если нет нужных приборов - дело гиблое, можно только долго и нудно перебирать всевозможные варианты отказа. Попробуй в протеусе отключить DS1307 если симптомы будут аналогичными, значит считай причину нашел.

Учение - изучение правил. Опыт - изучение исключений.

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

Попробуй в протеусе отключить DS1307 если симптомы будут аналогичными, значит считай причину нашел.

в протеусе кнопки работают и индикатор реагирует

а причем здесь телепатия код программы то выложен

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

Это только ооочень малая часть кода программы. А код функций кто выкладывать будет? Активируй UART, шли туда метки по которым ты будешь проверять как ведет себя программа. Для начала просто попробуй считать время и передать его по UART и посмотри что будет в терминале. Например, вначале выводишь "+" после выполнения функции "-" и время побайтно. Если выведется только "+" и все - значит функция подвисла. Точно так же расставь ловушек по коду, и в терминале потом можно будет разобрать реальное поведение программы. Без отладки в любом виде разгадывание причины неработы программы это ТЕЛЕПАТИЯ. Потом, проверить сигналы SCL-SDA на самой микросхеме, может их там нет вовсе а ты чего-то ожидаешь от микросхемы. Это надо делать только осциллографом или цифровым анализатором. И вобще, это первое что надо сделать.

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

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

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

Ох насмешил.... и что твой ОУ усиливать будет?

Шунт надо расположить так чтобы ОБЩИЙ провод был на ВЫХОДЕ схемы, ведь тебе измерять напряжение надо тоже на ВЫХОДЕ а не напряжение до шунта. Ну и собственно у шунта останется только один вывод куда можно подключится. Забей такую схему в симулятор, дай нагрузку и посмотри какое оно там будет. Дальше думай головой что делать...

Учение - изучение правил. Опыт - изучение исключений.

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

Маленький вопросик, нужен ли программатор для STM32F100C6T6 или же прошивку можно записать напрямую через USB компьютера как на простой накопитель?

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

Уважаемые форумчане, при разработке программы, для управления микшерским пультом столкнулся с не понятной вещью. Отладчик чётко выполняет программу, ни каких ошибок. Заливаю прошивку на эмулятор, программа не работает как надо. Просьба помочь, найти ошибку. Такое ощущение что выполняется только часть кода.

.include "m8def.inc"


.def temp = r16
.def zad = r17
.cseg
.org 0

ldi temp, 0x04
out SPH, temp
ldi temp, 0x5f
out SPL, temp

ldi temp, 0x00
out DDRD, temp
ldi temp, 0xff
out PORTD, temp
out DDRB, temp

ldi temp, 0x07
out PORTB, temp

ldi temp, 0x80
out ACSR, temp

main: in temp, PIND
sbrc temp, 0
rjmp knp1
sbrc temp, 1
rjmp knp2
sbrc temp, 2
rjmp knp3
rjmp main

knp1: rcall pauz
in temp, PINB
sbrc temp, 0
rjmp m1
sbi PORTB, 0
cbi PORTB, 3
rjmp m2
m1: cbi PORTB, 0
sbi PORTB, 3
m2: in temp, PIND
sbrc temp, 0
rjmp m2
rcall pauz
rjmp main

knp2: rcall pauz
in temp, PINB
sbrc temp, 1
rjmp m3
sbi PORTB, 1
cbi PORTB, 4
rjmp m4
m3: cbi PORTB, 1
sbi PORTB, 4
m4: in temp, PIND
sbrc temp, 1
rjmp m4
rcall pauz
rjmp main

knp3: rcall pauz
in temp, PINB
sbrc temp, 2
rjmp m5
sbi PORTB, 2
cbi PORTB, 5
rjmp m6
m5: cbi PORTB, 2
sbi PORTB, 5
m6: in temp, PIND
sbrc temp, 2
rjmp m6
rcall pauz
rjmp main

pauz: ldi zad, 200

pz1: dec zad
brne pz1
ret

post-89742-0-22951300-1394648217_thumb.jpg

Изменено пользователем bulser

Юность и рассвет жизни — суета.

Тянусь к Свету...

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

Да там черт ногу сломит... метки не именованы, определения не используются напрочь...

например такие конструкции как cbi PORTB, 2 sbi PORTB, 5 можно было бы сделать алиасами на что-то вроде

#define led13_off cbi PORTB, 2

#define led23_on sbi PORTB, 5

и в коде использовать понятные конструкции как led13_on которые сразу видно что они делают и с чем. Определения будут находится в начале файла, и если надо будет изменить порядок светодиодов для удобной разводки достаточно будет изменить только определения вверху файла, а не выискивать конструкции по всей программе.

эти вот штуки

ldi temp, 0x00

out DDRD, temp

завернуть в макрос

.macro set_io ; для загрузки константы в порт

LDI ACCUM, @1

.If @0<=0x3F

OUT @0, temp

.else

STS @0, temp

.endif

.endmacro

и использовать его в коде так: set_io DDRD, 0x00

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

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

Я только начинающий, и это моя первая реальная программа. С макросами работать пока не умею. Знаю что надо сразу приучаться писать коментарии, но для такой небольшой программы было просто лень. По поводу проблемы с которой я обращался: дебагер при отладке, не устанавливал PIND в 1, при включении подтягивающих резисторов. Соответственно в отладчике программа работала, а в эмуляторе нет.

Решение: при проверке порта D, команды "sbrc temp" заменил на "sbrs temp@

P.S. Alexeyslav, спасибо за совет.

Изменено пользователем bulser

Юность и рассвет жизни — суета.

Тянусь к Свету...

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

Вот кстати набросал прогу мультивибратора с включением и отключением от одной кнопки, правда на выключение кнопку нужно зажать на 2секунды. Кто что скажет какие ошибки?

#define F_CPU 1000000UL // Задание частоты кварца от которого зависят задержки
#include <avr/io.h> // Включение библиотеки для МК
#include <util/delay.h> // Включение библиотеки задержек

void main(void){
DDRC = 0xFF; // Настройка портов на вывод
DDRD = 0xFF;
DDRB = 0x0; // Настройка портов на ввод
mesto_2: while(1){	    // Место 2 - метка безусловного перехода
if (bit_is_set (PINB,PB1)>0) // Условие выполнения если пин В1 больше 0 то есть 1 значить выполнять
{
_delay_ms(15); // Задержка от дребезга контактов
while(2){  // бесконечный цикл
PORTD = 0x0; // Задание состояний выводов портов к которым подключены светодиоды
PORTC =0x2;
_delay_ms(2000);
if (bit_is_set (PINB,PB1)>0)
{ _delay_ms(15);
goto mesto_1; } // Безусловный переход к месту с меткой 1
PORTC = 0x0;
PORTD = 0x2;
if (bit_is_set (PINB,PB1)>0)
{_delay_ms(15);
goto mesto_1; }
_delay_ms(2000);
if (bit_is_set (PINB,PB1)>0)
{ _delay_ms(15);
goto mesto_1; }
};
mesto_1:
while(2){
PORTD = 0x0;
PORTC =0x0;
_delay_ms(600);
goto mesto_2; // Безусловный переход к месту с меткой 2
};
}
}
}

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

не знаю за ошибки, а вот с метками читабельность никакая. избавляйтесь от меток, используйте функции. ну и проверка нажатия кнопки через "> 0" тоже не совсем правильно,

if (bit_is_set (PINB,PB1)) { //код}

вполне достаточно

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

...нужен ли программатор для STM32F100C6T6 или же прошивку можно записать напрямую через USB компьютера как на простой накопитель?

http://tablock.org.ua/post/76/Универсальный+программатор+Versaloon.+STM32%2C+STM8%2C+AVR%2C+MSP430+и+мого+другое.+Схема+и+плата+в+Eagle

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

__alexander

не знаю за ошибки, а вот с метками читабельность никакая. избавляйтесь от меток, используйте функции

А что за функции и как использовать? А то я только разбираюсь пока что да как

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

Собрал вот себе такие часики,

http://startcd.narod.ru/clock/clock.html

но написанно при прошивке

Cбросить основные переменные в программе - SETUP -> СБРОС НАС. -> SET.

Как это сделать, и когда? Прошивать буду через программатор Громова, через программу UniProf

Просто буду прошивать МК первый раз

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

А тут вот написанно;

http://www.radiokot....igital/home/09/

прошить EEPROM, или сбросить основные переменные в программе таким образом - SETUP -> DEFAULT -> SET.

Проблема в том что у меня индикатор с ОК и мне подходит прошивка по этой ссылке

http://startcd.narod...lock/clock.html

так как здесь есть и для ОК и для ОА но нету отдельного файла EEPROM, значить мне нужно просто прошить а потом на самих часах в настройках сбросить?

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...