не извращение,та вынужденное решение, требуется рисовать синусоиду шимом, менять коэфффициент заполнения синуса, таймер 0, и менять частоту синусоиды 30-60Гц , таймер 0, а чтобы менять частоту необходимо в широких пределеах менять частоту самого генератора, а это не возможно, поэтому приходит на мысль использовать таймер 1 как источник регулированнй частоты для таймера 0pyzhman писал(а):Оставить заглушенным, т.е. 000. Не забыть разрешить прерывание по переполнению.
Вообще говоря, что за изврат? Для чего? Если событие по условиям, формируемым в таймере1, то там и обрабатывать. Или флажок взвести.
CodeVision AVR в вопросах и ответах
- totty
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Ср авг 03, 2011 22:26:02
- Откуда: Севастополь
Re: CodeVision AVR в вопросах и ответах
- Реклама
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
почитайте про DDS - там и частота генерируемого сигнала меняется, и частота генератора неизменна - принцип просто другой. на этом принципе вам будет достаточно одного-единственного таймера, работающего на постоянной частоте.totty писал(а):не извращение,та вынужденное решение, требуется рисовать синусоиду шимом, менять коэфффициент заполнения синуса, таймер 0, и менять частоту синусоиды 30-60Гц , таймер 0, а чтобы менять частоту необходимо в широких пределеах менять частоту самого генератора, а это не возможно, поэтому приходит на мысль использовать таймер 1 как источник регулированнй частоты для таймера 0
битва с дураками проиграна, победители торжествуют. слава победителям!
- totty
- Первый раз сказал Мяу!
- Сообщения: 39
- Зарегистрирован: Ср авг 03, 2011 22:26:02
- Откуда: Севастополь
Re: CodeVision AVR в вопросах и ответах
Мастер Ломастер, таймера то достаточно, но вот наличие ЦАП у контроллера крайне необходимо, но С ЦАПом на выходе у меня не получится сигнулов для управляющих ключей моста инвертора (речь идет о изменении скорости вращения асинхронного привода, частотой и пропорционально меняя напряжение)
Но если уж DDS для этой задачи самый оптимальный варинт, то как реализовать различное по амплитуде заполнение синусоиды?
и какой МК из не особо дорогих на борту имеет ЦАП?
Но если уж DDS для этой задачи самый оптимальный варинт, то как реализовать различное по амплитуде заполнение синусоиды?
и какой МК из не особо дорогих на борту имеет ЦАП?
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в качестве ЦАП-а отлично выступает ШИМ, выходы которого отлично могут управлять мостом - для того они, собственно, и предназанчены. если будете использовать что-то простое из МК, то обязательно придется ставить драйверы со встроенным мертвым временем, а если возьмете что-то более продвинутое, то мертвое время можно формировать прямо внутри МК.
битва с дураками проиграна, победители торжествуют. слава победителям!
-
a.garkin
- Нашел транзистор. Понюхал.
- Сообщения: 175
- Зарегистрирован: Вт сен 29, 2009 09:28:51
- Откуда: Ульяновск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Никак не пойму почему в терминал выводит 0 градусов...
в итоге на терминале вижу Temperature: 0.000000
Почему так? На LCD нормально шлет... float,wigt,precision в свойствах проекта стоит... Помогите плиз.
Код: Выделить всё
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 14.02.2012
Author : NeVaDa
Company :
Comments:
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/
#include <mega32.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=3
#endasm
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds1820.h>
// Standard Input/Output functions
#include <delay.h>
#include <stdio.h>
// Declare your global variables here
#include <ds18b20.h>
int temp; //переменная для температуры
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// 1 Wire Bus initialization
w1_init();
printf("1-Wire MicroLan Net demo\n\r");
while (1)
{
// Place your code here
temp=ds18b20_temperature(0); //меряем температуру с первого датчика
if(temp>1000) //для минусовой температуры
{ temp=4096-temp;; //отнимаем от значения 4096
temp=-temp; //ставим противоположный знак
}
printf("Temperature: %f\r",temp,temp%1); //выводим температуру на ПК
printf("\n\r"); //переходим на следующую строку
delay_ms(1100); //ждём
};
}
Почему так? На LCD нормально шлет... float,wigt,precision в свойствах проекта стоит... Помогите плиз.
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
пробуйте перед самым выводом присвоить переменной произвольное значение.так узнаете на каком этапе косяк.или отдельно делайте вывод от остальной программы.Отлаживайте отдельно вывод,когда добьетесь правильной работы подключать к проекту.
В поисках истины человек развивается.
-
a.garkin
- Нашел транзистор. Понюхал.
- Сообщения: 175
- Зарегистрирован: Вт сен 29, 2009 09:28:51
- Откуда: Ульяновск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а е подскажите как это? левое значение присвоить?vitalik_1984 писал(а):пробуйте перед самым выводом присвоить переменной произвольное значение.так узнаете на каком этапе косяк.или отдельно делайте вывод от остальной программы.Отлаживайте отдельно вывод,когда добьетесь правильной работы подключать к проекту.
-
a.garkin
- Нашел транзистор. Понюхал.
- Сообщения: 175
- Зарегистрирован: Вт сен 29, 2009 09:28:51
- Откуда: Ульяновск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а е подскажите как это? левое значение присвоить?vitalik_1984 писал(а):пробуйте перед самым выводом присвоить переменной произвольное значение.так узнаете на каком этапе косяк.или отдельно делайте вывод от остальной программы.Отлаживайте отдельно вывод,когда добьетесь правильной работы подключать к проекту.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ну это вот так
если при этом покажет правильные цифры,значит раньше косяк
Код: Выделить всё
temp=16.5;
printf("Temperature: %f\r",temp,temp%1); //выводим температуру на ПК
printf("\n\r"); //переходим на следующую строку
delay_ms(1100); //ждём
};В поисках истины человек развивается.
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Стоп, как вы так делаете?
Но это ещё не всё: переменная temp имеет тип int, а printf сказали, что она имеет тип float. Вероятно, именно по этому программа не вывалилась с крушением стека: вы передаёте printf два целых параметра (2 по 2 байта), а printf читает как одну float - 4 байта. В итоге количество данных считалось верно, но при этом функция приняла мусор в виде float переменной. Такое нужно писать так:
%d - знаковое десятичное целое, %u - беззнаковое целое.
А что это за конструкция такая:?
Это же остаток от деления целого числа на 1. А деление целого на 1 всегда даёт в остатке 0. Так что не знаю чем temp%1 лучше 0.
Ну ещё придирки, вот это место:
Почему бы это
Не написать просто как:
?
Вы передаёте функции printf 2 параметра, а ей самой говорите, что передали только одну переменную float. Это ещё повезло, что программа ещё пытается работать. Оставьте так, хотя бы:Код: Выделить всё
printf("Temperature: %f\r",temp,temp%1); //выводим температуру на ПК
Код: Выделить всё
printf("Temperature: %f\r\n", temp); //выводим температуру на ПК Код: Выделить всё
printf("Temperature: %d\r\n", temp); //выводим температуру на ПК А что это за конструкция такая:
Код: Выделить всё
temp%1Это же остаток от деления целого числа на 1. А деление целого на 1 всегда даёт в остатке 0. Так что не знаю чем temp%1 лучше 0.
Ну ещё придирки, вот это место:
Код: Выделить всё
temp=ds18b20_temperature(0); //меряем температуру с первого датчика
if(temp>1000) //для минусовой температуры
{ temp=4096-temp;; //отнимаем от значения 4096
temp=-temp; //ставим противоположный знак
} Код: Выделить всё
temp=4096-temp;; //отнимаем от значения 4096
temp=-temp; //ставим противоположный знак Код: Выделить всё
temp-=4096; Re: CodeVision AVR в вопросах и ответах
Ребят подскажите пожалуйста, в чем разница между:
putsf
putshar
printf
udr
В каком случае я какой оператор должем применять?
Я сейчас балуюсь с мобильником, и когда отправляю ему команду atd +7хххххххххх; (команда звонка на номер) из Hyper Terminal, то все работает (телефон начинает звонить), а если ту же команду отправляю из контроллера mega16 с помощью оператора printf, то ничего не происходит, хотя если опять же подцепить Hyper Terminal к МК то команда выводится правильно.
Пробывал другие операторы, но он либо какие то доп символы начинал слать, либо при компилировании ругался.
putsf
putshar
printf
udr
В каком случае я какой оператор должем применять?
Я сейчас балуюсь с мобильником, и когда отправляю ему команду atd +7хххххххххх; (команда звонка на номер) из Hyper Terminal, то все работает (телефон начинает звонить), а если ту же команду отправляю из контроллера mega16 с помощью оператора printf, то ничего не происходит, хотя если опять же подцепить Hyper Terminal к МК то команда выводится правильно.
Пробывал другие операторы, но он либо какие то доп символы начинал слать, либо при компилировании ругался.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
блин вы сначала русский язык выучите,а потом уже программные языки учите.Пробовал Пробую пробуйте попробовать пишется
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
Спасибо за совет, я ПОПРОБУЮ, думаю он мне поможет. А вы не могли бы еще и пунктуацию проверить?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
John79, так вопросы не задают. "Я что-то там делаю, но у меня ничего не работает. Что я не так делаю ? ...."
Прежде чем задать вопрос, напишите что Вы конкретно сделали и как (выложите код, если необходимо), а потом уже задавайте вопрос.
Вы, скорее всего, не передаёте (или передаёте, но не правильно) конец строки.
Прежде чем задать вопрос, напишите что Вы конкретно сделали и как (выложите код, если необходимо), а потом уже задавайте вопрос.
Вы, скорее всего, не передаёте (или передаёте, но не правильно) конец строки.
Re: CodeVision AVR в вопросах и ответах
Аlex, по моему я задал вопрос очень корректно:
Ребят подскажите пожалуйста, в чем разница между:
putsf
putshar
printf
udr
В каком случае я какой оператор должем применять?
Дальше я просто пояснил, что я пытаюсь сделать. Я не спрашиваю, что я делаю не так, я в этом сам разберусь, когда смылс этих опреаторов мне ясен будет. Сейчас я плохо себе это представляю, и справка CVAVR мне слабо помогла, поэтому я здесь и спросил об этом.
Но если вы настаиваете, то проблема в том, что когда я из терминала отправляю строку atd +7хххххххххх, мобильник подключенный к ПК начинает дозвон, а если прошить МК таким кодом:
while (1)
{
printf ("atd +7хххххххххх");
delay_ms(1000);
};
то дозвон не происходит.
Если применить такой код
while (1)
{
putsf ("atd +7хххххххххх");
delay_ms(1000);
};
то тоже ничего не происходит за исключение того, что МК отправляет еще и символ возврата каретки.
Телефон рабочий, уровни согласованы
Ребят подскажите пожалуйста, в чем разница между:
putsf
putshar
printf
udr
В каком случае я какой оператор должем применять?
Дальше я просто пояснил, что я пытаюсь сделать. Я не спрашиваю, что я делаю не так, я в этом сам разберусь, когда смылс этих опреаторов мне ясен будет. Сейчас я плохо себе это представляю, и справка CVAVR мне слабо помогла, поэтому я здесь и спросил об этом.
Но если вы настаиваете, то проблема в том, что когда я из терминала отправляю строку atd +7хххххххххх, мобильник подключенный к ПК начинает дозвон, а если прошить МК таким кодом:
while (1)
{
printf ("atd +7хххххххххх");
delay_ms(1000);
};
то дозвон не происходит.
Если применить такой код
while (1)
{
putsf ("atd +7хххххххххх");
delay_ms(1000);
};
то тоже ничего не происходит за исключение того, что МК отправляет еще и символ возврата каретки.
Телефон рабочий, уровни согласованы
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Не совсем корректно. Вы не показали каким образом передаёте строку, т.е. сам код.John79 писал(а):Аlex, по моему я задал вопрос очень корректно:
Ну вот, видите, про конечные символы забылиprintf ("atd +7хххххххххх");
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
printf ("ATD +7хххххххххх;\n"); Код: Выделить всё
printf ("ATD +7хххххххххх;\n\r"); Или ";" в конце не нужно?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
IfoR не выдержал. А я хотел помучить, что бы человек сам додумался. Ну или доку немного покурил
John79, во первых, в конце строки должен быть символ ";", а во вторых, строка должна заканчиваться символами 0x0D ("/r") и 0x0A ("/n").
Всё это есть в документах по AT-командам.
John79, во первых, в конце строки должен быть символ ";", а во вторых, строка должна заканчиваться символами 0x0D ("/r") и 0x0A ("/n").
Всё это есть в документах по AT-командам.
Re: CodeVision AVR в вопросах и ответах
да, верно, правда, я другим способом этого добился
Так, а все таки, когда какой оператор нужен?
И не зачем меня мучать, тем более AT команды у всех разные, мог бы и не додуматься вообще
Код: Выделить всё
putsf ("\x61\x74\x64\x20\x2B\x37\xхх\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\x0D")И не зачем меня мучать, тем более AT команды у всех разные, мог бы и не додуматься вообще
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Аlex, а-а, это было это...
Ну по крайней мере, на счёт ";" я сам тогда долго тупил, пока где-то не прочёл.
Ну по крайней мере, на счёт ";" я сам тогда долго тупил, пока где-то не прочёл.



