реклама на сайте
подробности

 
 
> _delay_us(), прошу помоч
Nerd
сообщение Mar 14 2010, 19:55
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 14-03-10
Пользователь №: 55 957



Кристал ATmega32, на внутреннем RC (по умолчанию 1000000UL).
_delay_ms работает правильно, а вот _delay_us ругается и отсылает

c:/winavr-20071221/bin/../avr/include/util/delay.h:143: sorry, unimplemented: inlining failed in call to '_delay_ms': function not considered for inlining
c:/winavr-20071221/bin/../avr/include/util/delay.h:116: sorry, unimplemented: called from here

ВОТ СЮДА

Код
_delay_us(double __us)
{
    uint8_t __ticks;
    double __tmp = ((F_CPU) / 3e6) * __us;
    if (__tmp < 1.0)
        __ticks = 1;
    else if (__tmp > 255)
    {
        _delay_ms(__us / 1000.0);
        return;
    }
    else
        __ticks = (uint8_t)__tmp;
    _delay_loop_1(__ticks);
}


Как я понял проверяется частота F_CPU и если она меньше чем нужно то микросекундных задержек нима.
На плате я непредусмотрел место для кварца о чём щас жалею.
Насколько максимально можно раскачегарить внутренний RC, или как сделать задержку на 50мкс.
?

Сообщение отредактировал rezident - Mar 16 2010, 16:52
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nerd
сообщение Mar 14 2010, 20:36
Сообщение #2





Группа: Участник
Сообщений: 5
Регистрация: 14-03-10
Пользователь №: 55 957



Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include "global.h"
#include "initport.h"
#include "string.h"
#include "avrlibtypes.h"

#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>

int main(void)
{
DDRA = 0xff;
PORTA = 0x00;

DDRD = 0x00;
PORTD = 0x00;

DDRB = 0xff;
PORTB = 0x00;


//char GetByte;
unsigned int speed = 25;
unsigned char Direct = 1;
unsigned int Data = 0;
char out = 0;

InitUSART();

                        _delay_ms(1);
        val_bit =  data & bit[i];
        Port0x1bSetBit(3, val_bit);         //DS2
        _delay_ms(1);
        Port0x1bSetBit(0, 1);    //CLOCK = 0;
        _delay_ms(1);
        Port0x1bSetBit(0, 0);    //CLOCK = 0;

return 0;
}


Скоро 12ночи мозг начал плавиться...((
Делаю нынчи модный ЧПУ фрезер, управляю 4 шагавиками, ну естественно раскидал их по регистрам сдвига типа HC595, шоб порты не занимать и буфир сделать, и вот упёрся что с минимальной задержкой 1мс. на один шаг приходится 25мс. а шагов в одном обороте 200, тобишь 5сек. на оборот вот и подкидываюсь..(

Сообщение отредактировал Nerd - Mar 14 2010, 20:51
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016