Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 09.03.2010, 22:58  
123abcdefg
Прохожий
 
Регистрация: 02.09.2008
Сообщений: 9
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
123abcdefg на пути к лучшему
По умолчанию Первая программа Attiny85

Поможите чем можите.
Писано на CVAVR для Attiny85.
Что оно должно по моему мнению делать:Каждые несколько мс по прерыванию от таймера опрашивать АЦП, далее мажоритарная выборка из 3-х значений. По значению на канале АЦП выдавать сигнал шим, причем шим будет подходить снизу , то есть выдали значение OCR0A , он шимит до следующего прерывания , далее замеряем АЦП , если не хватило то добавляем наполнения, опять ждем до следующего прерывания.
Вот мой первый опыт:
Цитата:
/************************************************** ***
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 : Battery
Version : 1.01
Date : 08.03.2010
Author : Alex `
Company : UPZ
Comments:


Chip type : ATtiny85
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
************************************************** ***/

#include ‹tiny85.h›
#include ‹MATH.h›
#include ‹stdlib.h›

#include ‹delay.h›

// Timer1 output compare A interrupt service routine

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

// Declare your global variables here
unsigned char ADVal1=0;
unsigned char ADVal2=0;
unsigned char ADVal3=0;
unsigned char Y1=0;
unsigned char Y2=0;
unsigned char Y3=0;
int A=0;
void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State5=P State4=T State3=T State2=T State1=T State0=0
PORTB=0x20;
DDRB=0x01;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Phase correct PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x81;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: CTC top=OCR1C
// OC1A output: Disconnected
// OC1B output: Disconnected
// Timer1 Overflow Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
PLLCSR=0x00;

TCCR1=0x8E;
GTCCR=0x00;
TCNT1=0x00;
OCR1A=0xC4;
OCR1B=0x00;
OCR1C=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Bipolar Input Mode: Off
// ADC Reverse Input Polarity: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
ADCSRB&=0x5F;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

};
}
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
//мажоритарная выборка

ADVal1=read_adc(0);
delay_us(10);
ADVal2=read_adc(0);
delay_us(10);
ADVal3=read_adc(0);

Y1=abs(ADVal1-ADVal2);
Y2=abs(ADVal1-ADVal3);
Y3=abs(ADVal2-ADVal3);

if(Y1›Y2)
{ A=ADVal1+ADVal3;
if(Y2›Y3){A=ADVal2+ADVal3;}
}
else
{ A=ADVal1+ADVal2;
if(Y1›Y3){A=ADVal2+ADVal3;}
}
A=A/2;
if(A›90){OCR0A=0;}
else{
int STEP=(80-A)/2;
OCR0A=OCR0A+STEP; }
}


Теперь вопросы:
1)Взлетит?
2)Изначально прерывание самим код вижном было написано до инициализации ( я там оставил // Timer1 output compare A interrupt service routine) дак вот из этого места он отказывался работать с ацп и переменными объявленными ниже( что логично). Правильно ли я сделал?
3)Почему протеус ругается на такой код, хотя кодвижн и аврстудия вроде не возмущены.

и еще - есть у кого симуляци для IPS5751 или какого другого Intelligent switch ( в протеусе или альтиуме)? Может кстати посоветуете уж заодно какой-нить на 35В , 10А в импульсе и с быстродействием получше - я его хочу шимом управлять).
Реклама:

Последний раз редактировалось 123abcdefg; 09.03.2010 в 23:23.
123abcdefg вне форума  
Непрочитано 09.03.2010, 23:29  
Vetal-soft
Временная регистрация
 
Регистрация: 04.08.2006
Сообщений: 67
Сказал спасибо: 2
Сказали Спасибо 20 раз(а) в 11 сообщении(ях)
Vetal-soft на пути к лучшему
По умолчанию Re: Первая программа

А сам cvavr не ругается?
Vetal-soft вне форума  
Непрочитано 09.03.2010, 23:45  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Первая программа

очень странное сочетание прерывание по таймеру и delay
я бы сделал прерывание по таймеру, которое запускало бы АЦП
// Обработка прерывания по перерполнению Т0
Код:
проект для мега16
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
блаблабла

// старт АЦП
   ADCSRA.6 = 1; 
}
АЦП я бы снимал по прерыванию по его завершению.

Код:
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data[i]=ADCW;
i++;
if i›=3
{
бла-бла-бла крутим ШИМ
i=0;
}
}
spballiance вне форума  
Непрочитано 09.03.2010, 23:55  
Vetal-soft
Временная регистрация
 
Регистрация: 04.08.2006
Сообщений: 67
Сказал спасибо: 2
Сказали Спасибо 20 раз(а) в 11 сообщении(ях)
Vetal-soft на пути к лучшему
По умолчанию Re: Первая программа

И ...
Код:
бла-бла-бла крутим ШИМ
перенести в main
Vetal-soft вне форума  
Непрочитано 09.03.2010, 23:57  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Первая программа

Сообщение от Vetal-soft Посмотреть сообщение
И ...
перенести в main
если назначение АЦП только в этом - то можно оставить в прерывании

и 1000,000 kHz ADC не стоит. нормальный диапазон указан в даташите.

Последний раз редактировалось spballiance; 10.03.2010 в 00:16.
spballiance вне форума  
Непрочитано 10.03.2010, 13:37  
levabrigada1988
Прохожий
 
Регистрация: 23.10.2009
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
levabrigada1988 на пути к лучшему
По умолчанию Re: Первая программа

Подскажите пожалуста у меня не получаеться добиться нормальной работы проги.
Вкратце раскажу принцип ее работы: включаеться кнопка SB1 и она включает три пина выходом, а кнопка SB2 сбрасывает пин в логич. ноль но приэтом не срабатывает пока не пропал сигнал на кнопке SB1.

Вот исходник проги:

#include ‹LPC213x.h›

#define NAZHATA_SB1 (IOPIN0&(1‹‹0))
#define NAZHATA_SB2 (IOPIN0&(1‹‹1))

int main (void)
{
IODIR0=(1‹‹2)+(1‹‹3)+(1‹‹4);
IOSET0=(1‹‹2)+(1‹‹3)+(1‹‹4);
IOCLR0=(1‹‹2)+(1‹‹3)+(1‹‹4);

while(1)
{
if (NAZHATA_SB1)
{
IOSET0=(1‹‹2)+(1‹‹3)+(1‹‹4);
}



if (NAZHATA_SB2)
{
IOCLR0=(1‹‹3);
}
}
}
levabrigada1988 вне форума  
Непрочитано 10.03.2010, 14:08  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Первая программа

Сообщение от levabrigada1988 Посмотреть сообщение
Подскажите пожалуста у меня не получаеться добиться нормальной работы проги.
Нда. Не рано арм мучить?
Код:
while(1)
{
  if (NAZHATA_SB1)
    {
      IOSET0=(1‹‹2)+(1‹‹3)+(1‹‹4);
    }
  else
    {
    if (NAZHATA_SB2) IOCLR0=(1‹‹3);
    }
}
Старался сохранить Ваш незабываемый стиль
kison вне форума  
Непрочитано 10.03.2010, 16:10  
123abcdefg
Прохожий
 
Регистрация: 02.09.2008
Сообщений: 9
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
123abcdefg на пути к лучшему
По умолчанию Re: Первая программа

Спасибо ответившим.Чесно сказать, я не очень понял в каком регистре указывается пин и порт на который выдается ШИМ? Или наоборот где указывается пин с которого считат счетчик ?( планирую дописывать программу обработки сигнала с емкостного датчика).
Сообщение от spballiance Посмотреть сообщение
очень странное сочетание прерывание по таймеру и delay
я бы сделал прерывание по таймеру, которое запускало бы АЦП
// Обработка прерывания по перерполнению Т0
Код:
проект для мега16
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
блаблабла

// старт АЦП
   ADCSRA.6 = 1; 
}
АЦП я бы снимал по прерыванию по его завершению.

Код:
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data[i]=ADCW;
i++;
if i›=3
{
бла-бла-бла крутим ШИМ
i=0;
}
}
Чем лучше так? Там в массив будет писаться три последовательных значения? Там цикл наверно надо? Чесно сказать не отказался бы от более распространенных комментариев
Сообщение от Vetal-soft Посмотреть сообщение
И ...
Код:
бла-бла-бла крутим ШИМ
перенести в main
чем лучше?
123abcdefg вне форума  
Непрочитано 10.03.2010, 16:16  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Первая программа

Сообщение от 123abcdefg Посмотреть сообщение
Чем лучше так? Там в массив будет писаться три последовательных значения? Там цикл наверно надо?
чего комментировать? лучше хотя бы тем, что прога не крутится в ненужных паузах и при необходимости увеличивать частоту выборки не нужно править еще паузы
цикла никакого не надо AdVal_X эквивалентно adc_data[X]

при вашем методе программирования таймер вообще не нужен - тупо бесконечный цикл со снятием АЦП через равные delay
spballiance вне форума  
Сказали "Спасибо" spballiance
123abcdefg (10.03.2010)
Непрочитано 10.03.2010, 16:26  
123abcdefg
Прохожий
 
Регистрация: 02.09.2008
Сообщений: 9
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
123abcdefg на пути к лучшему
По умолчанию Re: Первая программа

Сообщение от spballiance Посмотреть сообщение
чего комментировать? лучше хотя бы тем, что прога не крутится в ненужных паузах и при необходимости увеличивать частоту выборки не нужно править еще паузы
цикла никакого не надо AdVal_X эквивалентно adc_data[X]

при вашем методе программирования таймер вообще не нужен - тупо бесконечный цикл со снятием АЦП через равные delay
Ну чесно сказать дальше планировалось написание передачи информации еще , поэтому по прерыванию, да и решил на этом же проце ряд других задач решать потому все так. Правда начинаю в сторону меги смотреть. Просто тут задача вычисления частоты на одном из пинов еще есть, итого получается таймер, таймер на ШИМ и таймер на счетчик- или можно двумя выкрутиться. Связываться эта фигня будет с промышленным контроллером-по какому протоколу посоветуете инфу гнать?
123abcdefg вне форума  
 

Закладки

Метки
re:первая прграммы
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отечественная программа моделирования uSpice вер.2 nata16 Proteus, KiCAD и другие ECAD 5 20.02.2010 23:54
Программа для учета деталей tigra440 Информация по радиокомпонентам 3 27.01.2010 17:26
Что такое программа и методика измерений и чем отличается программа от методики tumanovalex Измерительное оборудование 12 22.12.2009 20:40
[Решено] Простейшая программа на VHDL в Quartus II Proger89 Proteus, KiCAD и другие ECAD 1 24.09.2009 13:46


Часовой пояс GMT +4, время: 04:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot