роботы робототехника микроконтроллеры


 Страниц (6): « 1 2 [3] 4 5 6 »   

> Без описания
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



Спасибо что пояснили
Цитата:
за варнинги - у вас значения типа 01010101 подразумеваются в двоичном виде, но это только вы понимаете. Компилятор такую запись понимает в десятичном виде (один миллион десять тысяч сто один). Для пояснения компилятору двоичного вида надо писать b01010101.

А я то думаю зачем заморачиваться, и так сойдет. Улыбка Улыбка
Двойным щелчком кликнул, получил вот это:

void
_delay_us(double __us)
{
uint8_t __ticks;
double __tmp ;
#if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && !defined(__DELAY_BACKWARD_COMPATIBLE__)
uint32_t __ticks_dc;
extern void __builtin_avr_delay_cycles(unsigned long);
__tmp = ((F_CPU) / 1e6) * __us;

#if defined(__DELAY_ROUND_DOWN__)
__ticks_dc = (uint32_t)fabs(__tmp);

#elif defined(__DELAY_ROUND_CLOSEST__)
__ticks_dc = (uint32_t)(fabs(__tmp)+0.5);

#else
//round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif

__builtin_avr_delay_cycles(__ticks_dc);

#elif !__HAS_DELAY_CYCLES || (__HAS_DELAY_CYCLES && !defined(__OPTIMIZE__)) || defined (__DELAY_BACKWARD_COMPATIBLE__)
__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);
#endif
}

это и есть "инклуднуто" ???

(Отредактировано автором: 27 Января, 2019 - 12:47:25)

 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



#include - директива, которая представляет собой сообщение компилятору, о том, что надо вставить еще кусок кода.
в верхних строчках этого файла (это и есть delay.h) посмотрите, есть-ли
#include "math.h" или
#include <math.h>
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



там есть вот эти строчки
#include <inttypes.h>
#include <util/delay_basic.h>
а нужной нам инклудто нету. Замешательство
(Добавление)
или я опять не там искал???
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



вероятно там, сейчас покопаю в своих файлах, как там.
(Добавление)
хм....
у меня так:

CODE:

#include <inttypes.h>
#include <util/delay_basic.h>
#include <math.h>


попробуйте в свой исходник вставить
#include <math.h>

в смысле сюда:
CODE:

#define F_CPU 1000000UL
#include <math.h>
#include <util/delay.h>
#include <avr/io.h>
#define LED PORTC//переименовывание порта ц
#define k PORTD//переименовывание порта д
#define D 300// задержка
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



Ничего не меняется.
Грустный
(Добавление)
CODE:
#include <avr/io.h>


int main(void)
{
DDRD=0b00000000;
DDRC=0b11111111;
PORTC=0b00000000;
PORTD=0b11111111;

while(1)
{
if (PORTD=0b11111110)
{
PORTC=0b11111111;
}
else
{
PORTC=0b00000000;
}

}
}


А программка данного типа будет правильной??

компилятор ошибок не выдает, но на практике не работает.
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



if (PORTD=0b11111110) - в этой строчке вы сравниваете весь порт D, со значением 0b11111110

1) регистр чтения для входов называется PIND (это дурацкое разделение только у АВРов)
2) при таком сравнении нужно, чтобы на всех входах кроме PIN0 были 1, а на PIN0 был 0, и никак иначе. Если требуется анализировать только PIN0 - то сравнивайте так:
CODE:

if ((PIND&0b00000001)=0)

тогда все битики, кроме 0-го станут 0-ми (независимо от того что там на входах), а нулевой останется как есть.


глобальная проблема другой версии в функции _delay_ms, она описана в util/delay.h, а это описание в свою очередь использует fabs, которая описана в math.h (по крайней мере у меня).
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



Predator пишет:

if ((PIND&0b00000001)=0)

Вставил... Выдает вот эту ошибку:
Error 1 lvalue required as left operand of assignment.
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



да, мой косяк: == для сравнения.
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



Т.е вот так:
if ((PIND&0b00000001)==0)
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



да
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



В итоге я получил вот такую программу:

CODE:
#include <avr/io.h>
int main(void)
{
DDRD=0b00000000;
DDRC=0b11111111;
PORTC=0b00000000;
PORTD=0b11111111;

while(1)
{
if ((PIND&0b00000001)==0)

{
PORTC=0b11111111;
}
else
{
PORTC=0b00000000;
}

}
}


В которой четко сказано :

кнопка нажата-светодиод горит,
не нажата - не горит.
Все логично...
но у меня на практике программа работает неправильно, светодиод горит изначально,а когда нажимаешь кнопку гаснет.

может вы знаете в чем проблема??
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



а вот тут 2 варианта:
1) у вас кнопка подтянута к земле, при нажатии садится на + (в программе подразумевается наоборот)
2) у вас анод светодиода на +, а катод на ноге, в программе подразумевается, что анод на ноге, катод на земле. (ну и еще где-нибудь по пути есть и должен быть резистор).
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



А данные проблемы как лучше решить программно или плату перепаять,
ведь у всех остальных эта программа правильно работает...
Predator пишет:
вот тут 2 варианта:
1) у вас кнопка подтянута к земле, при нажатии садится на + (в программе подразумевается наоборот)
2) у вас анод светодиода на +, а катод на ноге, в программе подразумевается, что анод на ноге, катод на земле. (ну и еще где-нибудь по пути есть и должен быть резистор)

Начал экспериментировать над своей программой.

Возникли трудности с сохранением хекс файла. Я его сохраняю, а он то сохраняется,
то остается прежним. Ну а так как мне нужно много различных вариантов перепробовать из которых лишь один правильный, то работа становится крайне неудобной.
Думаю скачать новую АВРку, не подскажете сколько она весит и где ее лучше скачать?

(Отредактировано автором: 01 Февраля, 2019 - 14:23:48)

 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



для начала свою схему "в студию", желательно и фотографии.
сделаем правильно под вашу схему.

Atmel studio на сайте microchip.
 
 Top
Andrey 2004 Post Id



Капитан


Сообщений всего: 46
Дата рег-ции: Дек. 2018  



Ну все я наконец то разобрался со своей программой, дело в том что у меня отладочная плата, привезенная из китая, включает в себя кнопку и светодиод. Я посмотрел, кнопка была подключена к PD1, светодиод к PD2 . Ну я запомнил что кнопка подключена к первой ноге,а светодиод ко второй а про то что это все порт D я забыл, ну и в конце концов получал нужное мне напряжение не на той ноге... В общем я извиняюсь за то что из за своей халатности, потратил ваше время задавая глупые вопросы. А также СПАСИБО зато что помогли мне с этой программкой, теперь все работает.


Однако новую студию я все равно хотел бы скачать, у меня перед этим было много неудачных ошибок, и в итоге скачал вот эту, но она какая то глючная...
(Добавление)
Извините ответ сразу не увидел, просто мне не мешало бы страницу почаще перезагружать...
 
 Top
Страниц (6): « 1 2 [3] 4 5 6 »
« С чего начать? »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru