CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

Re: CodeVision AVR в вопросах и ответах

Сообщение pashaumnov »

с наработающим проэктом разобрался))) у меня програмно были подключены подтягивающие резисторы ., поэтому светодиод горел постоянно. осталась последняя задача , снизить энерго потребление. помогите реализовать
Спойлер/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 16.11.2013
Author :
Company :
Comments:


Chip type : ATtiny13
AVR Core Clock frequency: 9,600000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*****************************************************/

#include <tiny13.h>
unsigned int counter;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(++counter > 732) PORTB.4= 0; // если истекли 20 сек

}

// Declare your global variables here

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=Out Func3=In Func2=Out Func1=Out Func0=Out
// State5=T State4=0 State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x17;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

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

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

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

// ADC initialization
// ADC disabled
ADCSRA=0x00;

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

while (1)
{
if(PINB.3) // если вход == 1
{
counter= 0; // сбрасываем счетчик
PORTB.4= 1; // устанавливаем порт в "1"
}
};

}

принцып такой после того как таймер благополучно осчитал свое время 20 сек и если на pinb3 за это время не появилась лог 1 то таймер должен уснут. а при появлении лог1 на этом пине должен пробудить его . или пробуждать придется pinb0?? так как на тини 13 там находится INTo, кажется она вызывает из глубокого сна.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Надо разрешить режим сна и организовать выход из него по прерыванию. На прерывание повесить кнопку.
Docendo discimus
Аватара пользователя
kaschak
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт май 10, 2013 15:56:40

Re: CodeVision AVR в вопросах и ответах

Сообщение kaschak »

Здравствуйте. При попытках создания прошивки возникли вопросы:
1. Как поведёт себя контроллер если во время задержки(delay) произойдёт прерывание, просто попадалась информация что это не хорошее явление.
2. Как посчитать количество тактов которое уходит на прерывание(да и вообще на любой кусок программы) включая время входа и выхода из прерывания.
3. Частота АЦП - как её определить, просто есть делители для частоты АЦП, но на одно преобразование нужно 13 тактов, так вот в чём вопрос - нужно 13 тактов на которых работает контроллер, 13 тактов которые получились от деления частоты контроллера на коэффициент деления для АЦП, или частота преобразования ацп - это то что получилось после деления частоты контроллера на делитель ацп. Короч нужно точно определиться с тем - какая реальная частота преобразования ацп (скоко раз в секунду он сможет измерить сигнал).
Будьте добры, подскажите начинающему ответы на такие вопросы.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

1. Поведет себя как ему и дОлжно - управление передастся в прерывание. Благодаря этому возрастет задержка, определенная в delay.
2. Воспользоваться отладчиком.
3. Проще сделать ловушку-счетчик: задать время 1 сек и при каждом считывании из АЦП наращивать обнуленный прежде счетчик. По истечении секунды посмотреть значение этого счетчика.
Docendo discimus
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

Привет!
Подскажите, какой ram globan variables size может быть максимальный в моем микроконтроллере для меги 168?
Значит так: если кое что удаляю (с измерением температуры связанно), то ram globan variables size равно 199 байт и работает отлично, не зависает.

А вот если ни чего не удалять, то ram globan variables size равно 384 байт. Виснет!!!

Во флеш переменные у меня есть.


работаю в CVAVR :-):

сейчас уменьшил до 259, тоже виснет...
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

Re: CodeVision AVR в вопросах и ответах

Сообщение pashaumnov »

На прерывание повесить кнопку.

прерывание должно происходить при 1 на пине входа, котоый используется для запуска таймера.это можно сделать?? и разрешить сон -asm (sleep) так надо написать а в конце программы написать sleep?? или в окне где порты и таймер задаю можно выставить???
Аватара пользователя
kaschak
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт май 10, 2013 15:56:40

Re: CodeVision AVR в вопросах и ответах

Сообщение kaschak »

pyzhman писал(а):2. Воспользоваться отладчиком.


Подскажите тогда пожалуйста и отладчик для CVAVR, а то отладчик в моей голове за не достаточным знанием не справляется со всем.

pyzhman писал(а):3. Проще сделать ловушку-счетчик: задать время 1 сек и при каждом считывании из АЦП наращивать обнуленный прежде счетчик. По истечении секунды посмотреть значение этого счетчика.


Счётчик это хорошо, но мне надо бы почаще значения считывать, до нескольких десятков килогерц желательно. Хотя считывать надо с 2х каналов наверно тяжеловато будет. Потянет ли atmega8L 20кГц АЦП(в смысле 20.000 преобразований в секунду) на 8МГц частоте работы?
Аватара пользователя
Garin
Потрогал лапой паяльник
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

Re: CodeVision AVR в вопросах и ответах

Сообщение Garin »

Подскажите как изменить выражение.

Код: Выделить всё

suns=PINC & 0b00000011; считываем состояние ножек 0 и 1 порта C. 

А мне нужно считывать состояние в suns с портов PINC.0 и PINB.2
Пытался как то так suns=PINC.0 & PINB.2;
Никак не пойму как можно это решить.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

kaschak писал(а):Подскажите тогда пожалуйста и отладчик для CVAVR, а то отладчик в моей голове за не достаточным знанием не справляется со всем.
Так это как бэ AVRStudio 4 отладчик... Об этом вроде даже при установке CVAVR говорится.
kaschak писал(а):Потянет ли atmega8L 20кГц АЦП(в смысле 20.000 преобразований в секунду) на 8МГц частоте работы?

Сделайте запуск преобразования АЦП по таймеру. И подберите делитель, чтобы частота АЦП была больше 260кГц
Garin писал(а):А мне нужно считывать состояние в suns с портов PINC.0 и PINB.2
Никак не пойму как можно это решить.
А про битовые операции слышали?

Код: Выделить всё

suns=(PINC & 0b0  0  0 0 0 0 0  1)|(PINB&0b00000100)
//             |  |  | | | | |  | 0
//             |  |  | | | | L__ 1 
//             |  |  | | | L____2
//             |  |  | | L_____3
//             |  |  | L______4
//             |  |  L_______5
//             |  L_________6
//             L___________7
//Здесь биты нумеруются начиная с нуля справа налево       

Этот вопрос больше относится к основам языка си, а никак не к CVAVR читайте азбуку Керниган и Риччи
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

pashaumnov писал(а):это можно сделать?

Конечно можно. Прописывать ручками в том месте программы, где нужно засыпать.
Docendo discimus
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: CodeVision AVR в вопросах и ответах

Сообщение ILYAUL »

НЕ понимаю как объявить . Мне нужна переменная флагов , биты в которой я хочу проверять и устанавливать независимо.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

ILYAUL писал(а):НЕ понимаю как объявить.
Что объявить ? Переменную ?
http://rubydev.ru/2012/05/variables-and ... ypes-in-c/
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: CodeVision AVR в вопросах и ответах

Сообщение oleg110592 »

ILYAUL писал(а): Мне нужна переменная флагов , биты в которой я хочу проверять и устанавливать независимо.

так делаю:

Код: Выделить всё

#define SETBIT(x,y) (x |= (y))  // Set bit y in byte x
#define CLRBIT(x,y) (x &= (~(y)))// Clear bit y in byte x
#define CHKBIT(x,y) (x & (y))   // Check bit y in byte x
#define TOGGLEBIT(x,y) (x^=y) // Toggle bit y in byte x


unsigned char Flags;

#define UPD     1<<0
#define NOIND   1<<1
#define BLINK   1<<2
#define POFF    1<<3

//пример использования
TOGGLEBIT(Flags, BLINK);
........
if(!CHKBIT(Flags, BLINK))
{
}
......
SETBIT(Flags, UPD);
......
while(!CHKBIT(Flags,UPD));
CLRBIT(Flags,UPD);
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: CodeVision AVR в вопросах и ответах

Сообщение ILYAUL »

СПАСИБО!!! Врубился.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: CodeVision AVR в вопросах и ответах

Сообщение kotriks »

помогите с занесением времени в еепром.
есть функция записи

Код: Выделить всё

void writeData(unsigned char read){ 
if (page_stop_status==1)  {
i2c_start();
i2c_write(0xa0);
i2c_write(addr>>8);
i2c_write(addr & 0x00FF);
page_stop_status=0;     }

i2c_write(read);
 
addr++;
pageSize++; 
if (pageSize==128) {
pageSize=0;
page_stop();
 }   
}


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

Код: Выделить всё

unsigned char times;
times=printf("%d:%d:%d" ,hours, minutes, seconds);
writeData(times);

помогите пожалуйста.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

kotriks писал(а):помогите пожалуйста.
Эх, я как раз кофе заварил, сижу пью. Оставлю немного для гущи...

А пока начнём издалека. Микросхему памяти припаяли к МК ?
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: CodeVision AVR в вопросах и ответах

Сообщение kotriks »

да всё собранно.
если делать
writeData(hours);
writeData(minutes);
writeData(seconds);
то заносит но в бинарном, если читать через юарт память то времени не видно нужен софт спец писать с формулой расшифровки, можно же сделать както чтобы писал не в бин а сразу как есть время 00:00:00 по принтиф то выводит же.
Последний раз редактировалось kotriks Ср ноя 20, 2013 09:28:03, всего редактировалось 2 раза.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Питание подали на память ?:)
ЗЫ: Негоже править посты после ответа на него другим участником :)

заносит но в бинарном
Это как понять ? Данные в памяти всегда хранятся в бинарном виде (в виде нулей и единичек) !
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Re: CodeVision AVR в вопросах и ответах

Сообщение kotriks »

Аlex писал(а):Питание подали на память ?:)
ЗЫ: Негоже править посты после ответа на него другим участником :)

заносит но в бинарном
Это как понять ? Данные в памяти всегда хранятся в бинарном виде (в виде нулей и единичек) !

всё подали.
пс. вас небыло я поправил :)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Меня то не было, но пост то мой уже был после Вашего :)
ЗЫ: И не цитируйте полностью предыдущее сообщение, а то придут злые модераторы и порубают Вас шашкой на колбаску :)
Ответить

Вернуться в «AVR»