WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
семен78
Родился
Сообщения: 2
Зарегистрирован: Вт авг 11, 2009 10:33:29

с прерыванием непонятки

Сообщение семен78 »

одно прерывание по таймеру заставляет мигать диод
другое сбрасывает счетчик таймера (кнопкой) и исли кликать чаще периода таймера то по идее диод должен не мигать - но по факту идет обработка прерывания кнопки лишь раз то следующего прерыва по таймеру - почему?

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


ISR(INT0_vect){TCNT1=65500;}
ISR(TIMER1_OVF_vect){TCNT1=65500; PORTB^=1<<3;}   

int main(void){
CLKPR=0x80;CLKPR=0x08;//Cryst Oscil division:256
// Timer/Counter 1 initialization
TCCR1A=0x00;// Mode: Normal top=FFFFh
TCCR1B=5;// Clock value: /1024
TIMSK=0x80;// Timer 1 Overflow Interrupt: On
TCNT1=65500;

DDRB|=_BV(3);// Вывод порта настраеваем как выход (диод)
PORTD&=~_BV(PD2);// вешаем 0   -  на кнопку с +
 
GIMSK=0b01000000; //разрешаем прерывание int1
MCUCR=0x03; // int by rising front
sei();
while (1);
 }
семен78
Родился
Сообщения: 2
Зарегистрирован: Вт авг 11, 2009 10:33:29

Сообщение семен78 »

к земле подтяга не было - вот причина
oleg-him
Открыл глаза
Сообщения: 44
Зарегистрирован: Чт янв 31, 2008 15:51:25
Откуда: прим. край

Сообщение oleg-him »

Здравствуйте! Помогите пожалуйста разобраться с WinAVR не могу ни одну программу откомпилировать! Я МК занялся совсем недавно поэтому ни языка с/с++ не знаю. Как написать простенькую программку для atmega8 чтоб скажем два светодиода перемигивались? :shock:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

oleg-him писал(а):Здравствуйте! Помогите пожалуйста разобраться с WinAVR не могу ни одну программу откомпилировать! Я МК занялся совсем недавно поэтому ни языка с/с++ не знаю. Как написать простенькую программку для atmega8 чтоб скажем два светодиода перемигивались? :shock:
а при чем тут WinAVR? изучайте язык Си, изучайте строение МК - тогда будет можно о чем-то говорить.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Сообщение YS »

Мир всем! Люди добрые, подскажите пожалуйста, как заставить компилятор WinAVR генерировать ассемблерный файл вместе с хексом?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

YS писал(а):Мир всем! Люди добрые, подскажите пожалуйста, как заставить компилятор WinAVR генерировать ассемблерный файл вместе с хексом?
вместе по-моему нельзя заставить... а отдельно - можно: используйте опцию -S в командной строке, тогда компиляция будет закончена на этапе создания ассемблерных файлов.

а зачем вам это? для отладкии т.п. вещей достаточно листинга...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Сообщение YS »

используйте опцию -S в командной строке, тогда компиляция будет закончена на этапе создания ассемблерных файлов.


Это тоже подойдет. Спасибо, ARV!

а зачем вам это?


Вообще я пишу на ассемблере, хочу подглядеть реализацию деления, самому думать лень, инет рыть тоже лень, думаю, дай-ка я напишу на C что-то в духе c=a/b, и погляжу сгенерированный asm. Вот такой я хитрый. :wink: :))
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Lucifier
Родился
Сообщения: 4
Зарегистрирован: Сб апр 18, 2009 22:54:01

Сообщение Lucifier »

такая проблема....

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

 > "make.exe" all
      0 [main] sh 4636 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
  35729 [main] sh 4636 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
      0 [main] sh 2380 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
  21275 [main] sh 2380 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump

-------- begin --------
avr-gcc (WinAVR 20080610) 4.3.0
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

      0 [main] sh 2744 handle_exceptions: Exception: STATUS_INTEGER_DIVIDE_BY_ZERO
  30330 [main] sh 2744 open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
make.exe: *** [sizebefore] Error 100352

> Process Exit Code: 2
> Time Taken: 00:06


может кто знает как эту ошибку исправить?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Lucifier писал(а):может кто знает как эту ошибку исправить?
скачать последнюю версию WinAVR, удалив старую под корень
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Lucifier
Родился
Сообщения: 4
Зарегистрирован: Сб апр 18, 2009 22:54:01

Сообщение Lucifier »

ARV писал(а):
Lucifier писал(а):может кто знает как эту ошибку исправить?
скачать последнюю версию WinAVR, удалив старую под корень

спасибо! помогло!
Lucifier
Родился
Сообщения: 4
Зарегистрирован: Сб апр 18, 2009 22:54:01

Сообщение Lucifier »

еще 1 проблема....

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

ISR(SIG_ADC)
   {
   unsigned int ADCdata;
   ADCdata = ADCW;
   if(ADCdata > (2046/5)) PORTD = 3;
   
   else if (ADCdata < (1023/5)) PORTD = 6;
    else PORTD = 5;
   
   ADCSR = ADCSR | 0x40;
   
   }
   
   int main(void)             
   {
   
    DDRD = 7;
   ADMUX=3;
   ADCSRA=0b11001110;
   
   sei();
   while(1);
   

   }


когда я проверяю работоспособность программы в протеусе выдаёт целую кучу ошибок... но компилируется без ошибок....
Вложения
2.JPG
(126.73 КБ) 539 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

во-первых, рекомендуется не использовать макросы SIG_xxx - они оставлены для совместимости, а им на смену пришли другие макросы, например для АЦП это будет ADC_vect

во-вторых, протеус выдает вам не ошибки, а предупреждения о том, что опорное напряжение для АЦП у вас равно 0. почему - это другой вопрос: или проинициализировали АЦП неверно, или в схеме ошибка.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
hunter03
Встал на лапы
Сообщения: 90
Зарегистрирован: Вт сен 22, 2009 10:52:58
Откуда: UU

Сообщение hunter03 »

доброго времени суток.

решил я заняться микроконтролерми
в протеусе моделирую, авр студия 4.16 и винавр для написания
и тут же столкнулся с проблемой
хочу изменить состояние пина
не суть важно на каком порту главное что прога отказывается компилится
прога(кусок выдран изи какогото исходника который компилиться):
#include <avr>

int main(void)
{
PORTC=0x00;
DDRC=0x00;

PORTC.4=1;
return 0;
}

ошибка:
../1.c: In function 'main':
../1.c:8: error: expected ';' before numeric constant
make: *** [1.o] Error 1
Build failed with 1 errors and 0 warnings...

что я не правильно делаю

сразу извиняюсь если такой вопрос пробегал просто сейчас интернет у меня жпрс, напряжно 19 страниц читать

заранее благодарен за ответ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

используя WinAVR забудьте про PORTC.4 :) точечная нотация для обращения к битам портов и регистров в WinAVR не реализована. используйте то, что скомпилируется на любом компиляторе:

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

PORTC |= (1<<PC4);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
hunter03
Встал на лапы
Сообщения: 90
Зарегистрирован: Вт сен 22, 2009 10:52:58
Откуда: UU

Сообщение hunter03 »

2ARV
спасибо


только вот интересно есть файлик скачанный с этого форума
и там точечная нотация работает
Вложения
untitled.c
этот компилится

в чем разница я не понял
(3.42 КБ) 477 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

этот файл компилиться в WinAVR не может - это исходник из-под CodeVision CVAVR. помимо точечной нотации там есть ряд абсолютно несовместимых с WinAVR вещей - поэтому я не верю, что он компилируется без ошибок.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
hunter03
Встал на лапы
Сообщения: 90
Зарегистрирован: Вт сен 22, 2009 10:52:58
Откуда: UU

Сообщение hunter03 »

извиняюсь
Вы правы

я тут запутался не много

(((

Не могли бы Вы разъяснить эту строку

<< - битовый сдвиг как я понял
а |= что такое

просто на си писал очень давно
счас в книжку сунулся
там нет ничего такого нет

ЗЫ. или это 2 оператора |и =?
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Подскжите пожалуста, мне WinAVR при компиляции выдает:
scroll_line.c:25: warning: built-in function 'index' declared as non-function
scroll_line.c:29: warning: function declaration isn't a prototype
scroll_line.c: In function 'shift':
scroll_line.c:81: warning: cast to pointer from integer of different size
scroll_line.c: In function 'to_ascii':
scroll_line.c:91: warning: cast to pointer from integer of different size
scroll_line.c: In function 'display':
scroll_line.c:186: warning: cast to pointer from integer of different size
scroll_line.c: In function 'error':
scroll_line.c:203: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c: At top level:
scroll_line.c:316: warning: function declaration isn't a prototype
scroll_line.c:335: warning: function declaration isn't a prototype
scroll_line.c:352: warning: function declaration isn't a prototype
scroll_line.c: In function '__vector_1':
scroll_line.c:384: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c: At top level:
scroll_line.c:416: warning: function declaration isn't a prototype
scroll_line.c: In function '__vector_2':
scroll_line.c:438: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:439: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:445: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:448: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:465: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:466: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c:473: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:476: warning: passing argument 1 of 'display' makes integer from pointer without a cast
scroll_line.c: In function 'main':
scroll_line.c:525: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:532: warning: passing argument 1 of 'shift' makes integer from pointer without a cast
scroll_line.c:537: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:542: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:549: warning: passing argument 1 of 'to_ascii' makes integer from pointer without a cast
scroll_line.c:556: warning: passing argument 1 of 'display' makes integer from pointer without a cast


На это можно закрыть глаза так как ошибок нет или нужно задуматься и чтото переделывать. И вообще что это значит?
Немного нервов и девайс готов
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

hunter03 писал(а):я тут запутался не много
"сдвоенные операторы вида |= &= += и т.п. полностью аналогичны следующим (т.е. представляют собой краткую запись):

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

а += 1;   равносильно   а = а + 1;
a |= 5;   равносильно   а = а | 5;
a <<= 3;  равносильно   a = a << 3;
и т.д.


Vergilium, warning - не ошибка, но следует сильно задуматься об их причинах! как правило, они свидетельствуют либо о простой неаккуратности или забывчивости, либо о недопонимании того, что делается в программе. в некоторых случаях результат будет плачевный: при ошибках программа не соберется просто, а при warning-ах запросто соберется, но может не работать или будет выкидывать чудеса.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Подскажите пожалуйста, как передать байт в регистр последовательно, т.е. есть переменная с определенным значением и нужно записать ее в внешний 8ми битный регистр последовательно бит за битом.
Немного нервов и девайс готов
Ответить

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