Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Они возвращаются туда, откуда вызывают. В случае настольного софта - возвращаться будет вообще ядру, т.к. при копании вглубь - оно и вызывает.
Здесь просто МК загружается и начинает выполнять (или загрузчик запускает твою прошивку, не суть важно). Возвращать особо некуда.
Вот в случае вызова тобой других функций это важнее :)
Например, твой кусок с pause. От него не требуется возвращения каких-то данных, просто нужно подождать. Поэтому он void pause. Если бы это была какая-то ф-я по сложению двух переменных, например, то было бы так:

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

int sum(int a, int b)
{
return a+b;
}
Вызывалась бы уже таким образом (где-то внутри main или внутри другой ф-ии):

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

sum_result = sum(1, 2);
В случае твоего void pause тебе нужно просто чем-то загрузить проц, чтобы подождать. Загружаем мы его циклом, который ничего не делает, просто тикает. Т.е. твоя строка for (i=a;i>0;i--); занимается ничегонеделанием, пока переданное функции a (в скобках которое), присваеваемое i, будет уменьшаться и не станет равно нулю.
Вместо такой хрени в сишных либах AVR GCC есть _delay_us(), _delay_ms(), доступные при подключении utils/delay.h.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

усек....
а сколько в мс или мкс ставить задкржку ?
Tell Me The Truth
Реклама
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

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

На практике, если используем GCC в качестве компилятора, то делаем #include <utils/delay.h> и используем _delay_us(число_мкс) или _delay_ms(число_мс). Так же требуется указать частоту, на которой у тебя работает мк в виде #F_CPU (тут частота).
Подробнее - тут http://www.nongnu.org/avr-libc/user-man ... delay.html

Для всяких прочих CodeVision и IAR явно есть что-то подобное, я просто ими не пользовался.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Я в студии ничего не возвращаю и нормально работает, более того, даже не ругается.
В поисках истины человек развивается.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Если объявлено как int main, например, и ничего не возвращается то обязано выкидывать варнинг. Видимо по умолчание не все варнинги врублены или вообще вырублены. Собираться будет, но и варнинг будет.
Это стандарт Си, против него не попрёшь.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Варнинг есть если тип не инт :lol:
Может просто раз переменную не объявили,то она по умолчанию ноль передает?
В поисках истины человек развивается.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Кусок кода ваш в студию. Я не въезжаю про какую вы переменную. int (или ещё что-то) перед именем функции - это не переменная, а тип данных, возвращаемых функцией.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Я имел ввиду если возвращаемый тип мэйна не инт, то есть.
Если тип инт и ничего не возвращаем в МЭЙНЕ,то нет варнинга.
Если в другой функции ничего не возвращаем, то есть варнинг.
Особенности компилятора походу...
Как в КВ.Там вообще тип войд для мэйн можно и нормально, все равно реально то ничего не нужно возвращать.
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Ну с типом инт для мейна в CV видимо на самом деле какая-то примочка.
А войд мейну можно в любом поставить, хоть и на большом компе и ничего не возвращать, но всё-таки выматерит варнингом.
Вот:

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

debian:~# cat main.c
void main(void){}
debian:~# gcc main.c
debian:~# gcc -Wall main.c
main.c:1:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
debian:~# 
Как видим, собирается в любом случае, только матерится (но и собираю "настольным" компилятором, а не avr-gcc).

Теперь тип int и ничего не возвращаем:

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

debian:~# cat main.c
int main(void){}
debian:~# gcc main.c
debian:~# gcc -Wall main.c
main.c: In function ‘main’:
main.c:1:1: warning: control reaches end of non-void function [-Wreturn-type]
debian:~# 
Собирается, варнинг всё равно есть, но уже другой.

Ну и только в конце-концов, вариант совсем правильный:

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

debian:~# cat main.c
int main(void){return 1;}
debian:~# gcc -Wall main.c
Ругани нэту :)))
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

В КВ не инт а войд.
В студии и ГЦЦ инт для мейн обязателен.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Ну я уже выше показал, как он "обязателен" в GCC. Собирается всё на ура, разве что с варнингами. Учитывая, что возвращать нифига не надо и особо некому - не так уж обязателен.
Открыл глаза
Сообщения: 58
Зарегистрирован: Вс май 29, 2011 19:59:19

Сообщение neurofunk »

Здравствуйте! Кто-нибудь сталкивался с atxmega? А именно имеется atxmega256A3, в общем то есть программатор AVRISP mkII, но вот в тупор немного вводит одно:

в нескольких портах имеется mosi, miso, sck , дак вот к какому нужно подключать программатор, без разницы?

И еще.. У мк несколько VCC (а именно 4), и один AVCC, их всех подключать к питанию можно сразу?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

подключайте к Pdo pdi не ошибетесь он же J-tag.насколько я знаю интерфейс этот поддерживается AVRISP mkII и вашим контролером.плюс еще дополнительные возможности.
В поисках истины человек развивается.
Контактная информация:
Открыл глаза
Сообщения: 58
Зарегистрирован: Вс май 29, 2011 19:59:19

Сообщение neurofunk »

Можно по-подробней?: И про питание хотелось бы услышать мнение...
Друг Кота
Аватара пользователя
Сообщения: 26121
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

neurofunk писал(а):И про питание хотелось бы услышать мнение...
А причем тут "мнение"?
Подключать ВСЕ ВЫВОДЫ ЗЕМЛИ И ПИТАНИЯ ОБЯЗАТЕЛЬНО.
Эти выводы сделаны не для удобства, а из соображений выравнивания токов и потенциалов по кристаллу.
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

neurofunk
По выводам питания - согласно даташиту, который надо почитать.

Несколько выводов питания делают, чтобы снизить сопротивление и индуктивность, а также повысить нагрузочную способность. Да, их все надо подключить, но выводы питания цифровые и аналоговые нужно развязать, например LC-цепочкой (примеры должны быть в даташите), если аналоговая часть вообще используется (АЦП, аналоговый компаратор...)
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Граждане, накрапал первый более менее серьёзный проект. Можете прошивочку проверить?! За код извиняюсь,говорят криво оформил. Но это один из первых -- так было удобнее. . .

По идее, оно должно мигнуть светодиодами на РВ.0 РВ.3 и РВ.4 и уснуть. При нажатии на кнопку, что на выводе РВ.1 оно должно проснуться, включить таймер на 10 секунд и остановить его. Импульсы поступающие на РВ.2 будут посчитаны и в зависимости от их кол-ва зажжётся один из светиков. Затем он потухнет. Мигнут все и МК уснёт. Правильно?!

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

#include <tiny13.h>

    interrupt[2] void ExtInt1(void)
        {TCCR0B=00000111
        delay_ms(10000)
        TCCR0B=00000000
        if (TCNT0<5)
            {PORTB.3=1
             delay_ms(2000)
             PORTB.3=0};
             
        if (TCNT0<10 && TCNT0>5)
            {PORTB.4=1
             delay_ms(2000)
             PORTB.4=0}; 
             
        if (TCNT0>30)
            {PORTB.0=1
             delay_ms(5000)
             PORTB.0=0};        
             }           
    void main(void)
    {DDRB=0b11101;
    PORTB=0b00010;
    MCUCR=0b00000010
    GTCCR=0b10000000
    #asm("sei")
    while (1)
         {PORTB.0=1
          PORTB.3=1
          PORTB.4=1
          delay_ms(500)
          PORTB.0=0
          PORTB.3=0
          PORTB.4=0
          #asm ("sleep");};
     }
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Вы что в блокноте писали текст?
где можно не ставить; там поставили, где необходимо там пропустили.Внимательнее нужно.

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

interrupt[2] void ExtInt1(void) 
Откуда там ExtInt1? Только ноль есть...

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

MCUCR=0b00000010
сравните с
Изображение
Пока все...
Пишите сразу в нормальном виде - в КВ есть кнопка проверить синтаксис
Тут вот так нужно

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

if (TCNT0>30)
            {PORTB.0=1
             delay_ms(5000)
             PORTB.0=0};
             TCNT0=0x00;//Как же вы будете заново то считать?        
             }  
Вы уверены что знаете как этим пользоваться?

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

GTCCR=0b10000000
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

vitalik_1984 писал(а): Вы уверены что знаете как этим пользоваться?
Код:
GTCCR=0b10000000
Нет, не уверен.
vitalik_1984 писал(а):Код:
MCUCR=0b00000010

сравните с
У этой записи другая цель.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

просто КОТ писал(а):У этой записи другая цель.
А для Этой цели где? плюс SE я забыл отметить...
Просто в вашем проекте он спать не будет уходить...
В поисках истины человек развивается.
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»