roboforum.ru

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

 

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

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

Сообщение creatur » 11 мар 2006, 14:32

Спасибо Вам wolf!
Всё заработало.

 :D  :D  :D
creatur
 
Сообщения: 8
Зарегистрирован: 09 мар 2006, 15:40

Сообщение -= Александр =- » 11 мар 2006, 22:35

Подскажите плиз где в CodeVision увеличить размер стека? И возможно ли это? А то он предупреждает что 6 байтов осталось, а мне еще кучу функций дописывать надо...  :roll:

-----

Уже нашел. Вопрос снят.
Теперь такое дело: чем можно отсимулировать Тини26?  :roll:
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3664
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C++, VB, asm
ФИО: Курмис Александр Андреевич

Сообщение avr123.nm.ru » 12 мар 2006, 00:03

-= Александр =- писал(а):Подскажите плиз где в CodeVision увеличить размер стека?

-----

Уже нашел. Вопрос снят.  


Эту тайну в могилу унесешь ?



-= Александр =- писал(а): чем можно отсимулировать Тини26?  :roll:


Атмеловской студией конечно.

===========

А в одном фолианте

я советую по-возможности брать МК для которых у вас есть все необходимое.
Вложения
z12.png
Последний раз редактировалось avr123.nm.ru 30 мар 2007, 16:20, всего редактировалось 2 раз(а).
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение -= Александр =- » 12 мар 2006, 00:05

Размер стека я нашел в свойствах проекта.
А со студией я почти не работал и осваивать ее мне влом, отлаживать буду на макетке...
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3664
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C++, VB, asm
ФИО: Курмис Александр Андреевич

Сообщение avr123.nm.ru » 12 мар 2006, 04:32

USB программатор для AVR - сделан на ATmega8 - довольно простой

http://www.fischl.de/usbasp/
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение dx40 » 12 мар 2006, 22:56

Почему я не люблю Си - потому что на нем часто делаешь такие ошибки, что хрен поймешь где она...

вот например


Код: Выделить всёРазвернуть

unsigned char gen[]={     0x11101110b, 0x00000110b, 0x11110010b, 0x11010110b,
                                                        0x00011110b, 0x11011100b, 0x11111100b, 0x10000110b,
                                                        0x11111110b, 0x11010110b, 0x00010000b, 0x00000000b };

...
slcd_print(void)
{
unsigned char d,t;

...

for (d=0; d<10; d++)
{
t=gen[d] & 0x00001111b;
//t=t>>4;
PORTB=t;

...
}


В цикле выводится всегда одно и то же число
Если написать просто
t=d & 0x00001111b;
то как и положено выводятся разные числа..

В чем ошибка?????????????????
я уже 2 часа долбаюсь - нифига.
Аватара пользователя
dx40
 
Сообщения: 201
Зарегистрирован: 27 янв 2005, 11:49
Откуда: Мск

Сообщение wolf » 13 мар 2006, 00:10

Всё дело в числах :)
0x00001111b - это шестнадцатеричное число, большое такое.
wolf
 
Сообщения: 63
Зарегистрирован: 23 июл 2005, 00:39
Откуда: Казань

Сообщение dx40 » 13 мар 2006, 01:27

СПАСИБО!!!
Аватара пользователя
dx40
 
Сообщения: 201
Зарегистрирован: 27 янв 2005, 11:49
Откуда: Мск

Сообщение avr123.nm.ru » 13 мар 2006, 01:55

dx40 писал(а):    
Почему я не люблю Си - потому что на нем часто делаешь такие ошибки, что хрен поймешь где она...


пи чем же тут Си если вы даже не посмотрели Хелп компилятора (раздел Constants) о форме записи чисел ?!

dx40 писал(а):  
я уже 2 часа долбаюсь - нифига.


За это время можно было прочитать "Си для МК" на
стр. 5 все знают чего.

Там как раз и про это.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение dx40 » 13 мар 2006, 02:49

Вот поэтому мне си и не нравится.
ну если написано
const char a=8475982347529740;
то тут явно ошибка, а но прглатывает это... А потом ракеты взрываются...
Аватара пользователя
dx40
 
Сообщения: 201
Зарегистрирован: 27 янв 2005, 11:49
Откуда: Мск

Сообщение avr123.nm.ru » 13 мар 2006, 04:02

dx40 писал(а):Вот поэтому мне си и не нравится.
ну если написано
const char a=8475982347529740;
то тут явно ошибка, а но прглатывает это... А потом ракеты взрываются...


Дак тож не Си виновен, а автор компилятора который проглатывает это.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение BeFFz » 16 мар 2006, 03:13

Имею дело с mega8
Пытаюсь сделать робота...
Это мой первый опыт
прежде чем сделать что-то существенное хочу собрать схемку, в которой через заданное кол-во времени 2 диода будут мигать.
Я так понимаю, что если ножка сконфигурирована на выход, то если её через светодиод замкнуть на GND то он должен светиться (при условии что он работоспособен и правильно подключен и ток через него течёт допустимый).
Светодиоды замкнуты на B0-GND и D7-GND

Вот мой листинг

#include <mega8.h>

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xFF;
TCNT1L=0xFF;
// Place your code here
PORTB.0^=1;
PORTD.7^=1;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

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

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

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

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3,598 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xFF;
TCNT1L=0xFF;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

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

while (1)
     {
     };
}

С прошивкой проблем нет. Использую uniprof+codevision
Не понятно почему не работает.
BeFFz
 
Сообщения: 2
Зарегистрирован: 16 мар 2006, 02:56

Сообщение wolf » 16 мар 2006, 10:37

Неправильно обрабатывается прерывание. В прерывании в счётчик таймера1 загружается 0xFFFF, значит, он переполнится на следующем же тике, т.е. будет не мигание, а горение вполнакала.
Лучше использовать режим таймера СТС, тогда не нужно будет в прерывании ничего перегружать, достаточно будет загрузить на старте регистр OCR1A или OCR1B (не забываем поправить вектор прерывания TIM1_OVF на TIM1_COMPA/B).
Да, CV понимает 16-битные регистры, незачем писать REGH=aa, REGL=bb, можно сразу REG=aabb.
wolf
 
Сообщения: 63
Зарегистрирован: 23 июл 2005, 00:39
Откуда: Казань

Сообщение Иван_С » 16 мар 2006, 13:45

Подскажите как сделать обработчик прерываний к примеру на INT1
у меня не получилось.
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#define F_CPU 10.0
#include <avr/delay.h>

SIGNAL(SIG_INTERRUPT1)
{
asm volatile("sbi 0x15, 0x07");
SREG = SREG | 0x80;
}

int main(void)
{
asm volatile("Cbi 0x11, 0x03"); ///DDRD 3
asm volatile("sbi 0x14, 0x07"); ///DDRC 7


asm volatile("Cbi 0x12, 0x03");
asm volatile("cbi 0x15, 0x07");  

GICR = 0x80;
SREG = SREG | 0x80;

for(;;) _delay_ms(100);

return 0;
}
Иван_С
 
Сообщения: 6
Зарегистрирован: 07 мар 2006, 23:03
Откуда: Краснодар

Сообщение avr123.nm.ru » 16 мар 2006, 15:04

Советую использовать генераторы начального кода компиляторов CVAVR  или  ICC      - стр 4 курса.

для WinAVR есть оболочка AtmanAVR - там тоже генератор есть.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Пред.След.

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

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

Сейчас этот форум просматривают: Rambler [Bot] и гости: 2

Mail.ru counter