roboforum.ru

Технический форум по робототехнике.


МикроКонтроллер AVR начинающим - общие вопросы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение boez » 09 ноя 2010, 02:47

А чего, такого чуда как внешние метки кодевиженский ассемблер не понимает? Гнутый скажем ассемблер все неизвестные метки считает внешними. Так что из ассемблерного файла "видны" сишные переменные и функции. И не надо как в каменном веке адреса ручками писать (и вообще знать, куда потом линкер какие переменные сложит)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Webspider » 17 ноя 2010, 21:19

Проблема с AT45db161
Использую 8выводную версию в SOIC. Питание 3.5 ( и для памяти и для МК).
Почему то при откл. - вкл. питания в СТРАНИЦУ 1 (вторую то есть) пишется какой-то мусор поверх моих данных. что делать?
Хидер для памяти использую от avr123(спасибо :)).

Подскажите что в хидере и как надо поменять чтобы запись и чтение новой информации начиналась с 3ей страницы всегда?
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение kalexi » 09 фев 2011, 20:14

Здравствуйте, я хотел узнать: как рассчитать какая будет задержка между вызовом прерываний от таймера при частоте генератора 7МГц?
kalexi
 
Сообщения: 8
Зарегистрирован: 09 дек 2010, 15:04

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Michael_K » 09 фев 2011, 20:15

Какую настроите, такая и будет. Вопрос бессмысленный.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение kalexi » 09 фев 2011, 20:28

Ладно, нужны формулы для расчета констант для таймера T0 Attiny13 или калькуляторы.
kalexi
 
Сообщения: 8
Зарегистрирован: 09 дек 2010, 15:04

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Radist » 09 фев 2011, 21:29

как рассчитать какая будет задержка между вызовом прерываний от таймера при частоте генератора 7МГц


Судя по вопросу, вы - новичок, поэтому я отвечу тоже "на пальцах". Таймер - такая штука, которая может считать тактовые импульсы и внешние импульсы. Остановимся пока на тактовых. Он считает их от того значения, которое в нем загружено (если обнулить таймер - то от нуля) до максимально возможного числа (если это 8 битный - то до 255, если 16 битный - то до 65535). У таймера есть такая штука, называется предделитель. Грубо говоря, он определяет каждый ли тактовый импульс надо считать. Можно считать каждый такт, можно каждый восьмой, шестнадцатый, шестьдесят четвертый, двести пятьдесят шестой, тысяча двадцать четвертый. Также у таймера есть несколько прерываний, вас пока интересуют прерывания по переполнению. Это прерывание надо разрешить в регистре масок прерываний таймеров. Также надо разрешить глобальные прерывания. Только после этого когда таймер переполнится, программа уйдет на вектор обработки прерывания от таймера. Соответственно там должен стоять безусловный переход на подпрограмму обработки прерывания, которая заканчивается не простым возвратом, а возвратом из прерывания.

Этой информации достаточно. Теперь вы можете все рассчитать сами. Удачи.

Добавлено спустя 1 минуту 53 секунды:
kalexi писал(а):нужны формулы для расчета констант для таймера T0 Attiny13 или калькуляторы.


Калькуляторы не нужны, а формулы выводятся при наличии понимания сути.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение kalexi » 10 фев 2011, 00:30

2Radist
Спасибо за столь полный ответ, но к сожалению я это знаю. Просто есть одна проблема.
Допустим у меня ATtiny13 с 8-разрядным таймером, частота внутреннего генератора 1МГц.
Следовательно если OCR0A=200 и предделитель отключен, кол-во прерываний насчитывается следующим образом:
1 000 000Гц / 200 = 5 000Гц = 5Кц.

Теперь в Протеусе я запускаю симуляцию, но в динамиках слышу щелчки.

Добавлено спустя 4 минуты 15 секунд:
А, все, проблема решена. Просто не знал, что Протеус по умолчанию ставит частоту генератора равной 9,6Мгц.

Добавлено спустя 4 минуты 3 секунды:
Кстати, хотел спросить: нужно ли в основном цикле что-то писать (ну для уменьшения нагрузки на процессор), а то я видел функцию следующего вида, вот и пришла мне в голову эта мысль:
Код: Выделить всёРазвернуть
void sleep(){ int i; for (i=0; i; i++);}
kalexi
 
Сообщения: 8
Зарегистрирован: 09 дек 2010, 15:04

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение flyroman » 26 фев 2011, 22:42

Ребят, а у меня 5 проводков прошивает atmega8 без питания контроллера - ЭТО НОРМАЛЬНО?

Добавлено спустя 15 секунд:
и читает и стирает и записывает
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Vooon » 27 фев 2011, 00:27

Не хорошо так делать.
Паразитная запитка через защитные диоды.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение bfrogg » 05 мар 2011, 01:05

Здравствуйте. Нужно сделать аппаратный ШИМ на Attiny2313. Немного почитал разные источники и вроде сделал 8-битный Fast PWM. Проверьте все ли правильно. Если да, то как мне сделать ФНЧ для этого ШИМа. Вообще задача состоит в том, чтобы управлять скоростью моторчиков у "робота".
Код: Выделить всёРазвернуть
   #define F_CPU 8000000UL  // указываем частоту в герцах
   
   #include <avr/io.h>
   #include <util/delay.h>

int main(void) // начало основной программы
{
   
   TCCR1A = (1<<COM1B1) | (1<<WGM10);
   TCCR1B = (1<<WGM12) | (1<<CS10);
   OCR1B = 50;
   DDRB |= (1<<PB4);
   
}
bfrogg
 
Сообщения: 4
Зарегистрирован: 05 мар 2011, 01:01

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение avr123.nm.ru » 09 мар 2011, 20:31

Зачем же ФНЧ для мотора ? Мотор сам является ФНЧ. ШИМ подайте на ключ как в задаче курса про ШИМ показано - http://www.proavr.narod.ru/z08.htm

А код проверьте в PROTEUS ! http://www.proteus123.narod.ru - И всегда его используйте. Там и модели моторов есть и привод с ОС ПИД есть.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Korbofos » 18 мар 2011, 15:01

Подскажите, что не так делаю?
Хочу запустить 36 кГц на таймере Attiny2313! С частотой вроде подгадал в протеусе с помощью ICC))) Почему, когда ногу конфигурирую ногу на вход на ней есть 1?
Код: Выделить всёРазвернуть
#include <TINY2313.H>
#include <delay.h>
#define ON_IR  DDRB.3 = 1
#define OFF_IR DDRB.3 = 0
void main(void)
{
PORTB = 0x00;
DDRB  = 0x09;
PORTD = 0x00;
DDRD  = 0x20;

//TCCR0B = 0x00; //stop timer   С Таймером_0 какие то странности
//TCNT0 = 0x91; //set count
//OCR0A = 0x6F; //set count
//OCR0B = 0x6F; //set count
//TCCR0A = 0x50; //start timer
//TCCR0B = 0x01; //start timer

TCCR1B = 0x00; //stop timer
TCNT1H = 0xFF; //set count value
TCNT1L = 0xE4;
OCR1AH  = 0x00; //set compare value
OCR1AL  = 0x1C;
OCR1BH  = 0x00; //set compare value
OCR1BL  = 0x1C;
TCCR1A = 0x53;
TCCR1B = 0x11; //start Timer
while (1)
{
ON_IR;
delay_us(600);
OFF_IR;
if (PIND.6 == 0){PORTB.0 = 1;}
else {PORTB.0 = 0;}
delay_us(8000);
}
}

Как бы по красивее сделать?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение vadinator » 18 мар 2011, 15:18

единица будет, если включён внутренний подтягивающий резистор... название регистров не помню, но в ICC есть мастер настройки периферии, посмотрите там чекбоксы внимательно.
Роботы, уже среди нас...
Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)
Аватара пользователя
vadinator
 
Сообщения: 979
Зарегистрирован: 19 янв 2010, 14:51
Откуда: Петрозаводск
прог. языки: C, FBD, Wiring-Processimg,,,LD, SFC, ST...
ФИО: Вадим

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Korbofos » 18 мар 2011, 16:48

Подтяжка отключена
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: МикроКонтроллер AVR начинающим - общие вопросы

Сообщение Korbofos » 18 мар 2011, 22:20

Кажется кусочки мозга уже выходят
Код: Выделить всёРазвернуть
#include <tiny2313.h>
#include <delay.h>
#define ON_IR TCCR0A = 0x50
#define OFF_IR TCCR0A = 0x00
// 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

// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=In Func0=Out
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=T State0=0
PORTB=0x00;
DDRB=0x1D;

// Port D initialization
// Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x20;

TCCR0B = 0x00; //stop timer
TCNT0 = 0x00; //set count
OCR0A = 0x6F; //set count
OCR0B = 0x6F; //set count
TCCR0A = 0x50; //start timer
TCCR0B = 0x01; //start timer

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 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;

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

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

// 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
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

while (1)
      {
      ON_IR;
      delay_us(600);
      OFF_IR;
      delay_us(600);

      };
}

Оттак поехало
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4