Вы должны понять такую вещь - char он и в Африке char. Нету же двоичного чара, десятичного чара, шестнадцатиричного чара
Вы должны понять такую вещь - char он и в Африке char. Нету же двоичного чара, десятичного чара, шестнадцатиричного чара
ну с этого и нужно было начинать:)вот проект, в котором такой метод используется.Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)Автор тот же - DankoGhost in shell писал(а): это опорное у меня +5В. Я так понимаю, выше опорного АЦП не меряет?Запятые мне сейчас ненужны - хочу знать, какому напряжению на входе соответствует какое число в ADRES.Ghost in shell писал(а):мерять то не меряет, а подать то можно...только не больше напряжения питания вроде.Мне для аналоговой клавиатуры надо задать соответствие, и мне действительно все равно, что там будет. Абы такое-то число (точнее, диапазон чисел) соответствовало такой-то клавише.Ghost in shell писал(а):вообще это легко посчитать.если полный брать ADRES то 10 бит это 1024
делишь 5 на 1024. 0,0048828125 на бит...например напряжение 3.1в будет 1001111011 в двоичной или 635 в десятеричной системе.А реальное напряжение зависит от того,какой делитель поставить перед входом... В вашем случае это делитель с кнопок
Я стараюсь спрашивать по минимуму.ну с этого и нужно было начинать:)
По-вашему, здесь одни экстрасенсы?Ghost in shell писал(а):Я стараюсь спрашивать по минимуму.
пытаетесь спрашивать по минимуму, но даете мало полезной информации,вам мало отвечают и вы опять спрашиваете:)Ghost in shell писал(а):Я стараюсь спрашивать по минимуму.ну с этого и нужно было начинать:)
Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)demiurg301 писал(а):Подскажите какбы так сделать:
Хочу сделать универсальные define-ы для определения функционала портов ВВ
Типа такого как то нельзя сделать? (для меги)
#define Z_OUTPUT(X,Y) DDRX&=~Y PORTX&=~Y // выбрал портX и ногуY и выставил в нули (Z- состояние)
это как? вроде с адресами компилятор сам должен справляться.demiurg301 писал(а): Это адреса портов надо переопределять както?
ДА места валом... Надоело просто "городить огороды" из инициализаций портов ВВ. Как то "умять" хочу.vitalik_1984 писал(а): Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)
Да чтото типа этого...Типа такого ?
#define _dirI(port,bit,val) _bitL(DDR##port,bit)
#define _dirO(port,bit,val) _bitH(DDR##port,bit)
Если инициализировать, так можно и макрос:)demiurg301 писал(а):ДА места валом... Надоело просто "городить огороды" из инициализаций портов ВВ. Как то "умять" хочу.vitalik_1984 писал(а): Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)
Код: Выделить всё
void SetBright(unsigned short color, unsigned short bright)
{
color = bright;
}
Код: Выделить всё
volatile unsigned short LED1[3]={0,0,0};
#define R1 LED1[0]
Код: Выделить всё
SetBright(R1, 0x1F2);Код: Выделить всё
#define F_CPU 20000000UL // 20 MHz
#define BAUD 9600
#include <util/setbaud.h>
#include <avr/io.h> // ввод-вывод
#include <util/delay.h>
void UART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRB = (1 << TXEN) | (1 << RXEN);
UCSRC = (1 << USBS) | (3 << UCSZ0);
}
void Send(unsigned char *data)
{
USART_Send(data);
}
void USART_Send(unsigned char *data)
{
int i;
while(data[i]){
if (data == '\n')
USART_Send('\r');
while ( !( UCSRA & (1<<UDRE)) ){};
UDR = data[i];
i++;
}
}
int main(void)
{
DDRA = 0x00; // Весь порт как вход
DDRB = 0x00; // Весь порт как вход
UART_Init();
int tmp=2;
while (1){
if ((PINB & _BV(PB1)) == 1) {
if(tmp != 1) Send("Test 1\n");
tmp = 1;
} else {
if(tmp != 0) Send("Test 0\n");
tmp = 0;
}
}
return 0;
}Код: Выделить всё
if ((PINB & _BV(PB1)) == 1)ну как же вы не видите?! _BV(PB1) по-вашему равно какому числу?danger3466 писал(а):Похоже косяк тут:Но я его не вижуКод: Выделить всё
if ((PINB & _BV(PB1)) == 1)
Код: Выделить всё
if (PINB & _BV(PB1))а ничего, что color в вашем случае это массив?указатель на его начало точнееvan_de_luxe писал(а):использую ф-юКод: Выделить всё
void SetBright(unsigned short color, unsigned short bright) { color = bright; }
представьте себе получившийся код: перешли к выполнению функцииvan_de_luxe писал(а): переменные определены каккогда вызываю ее например такКод: Выделить всё
volatile unsigned short LED1[3]={0,0,0}; #define R1 LED1[0]ничего не происходитКод: Выделить всё
SetBright(R1, 0x1F2);
пишу для atmega8a
запускал на симуляторе в avrstudio, он строчку color = bright; вообще пропускает.
в чем может быть дело?
почему присваиваю 1 аргумент другому? - в последствии ф-я будет доработана, 2 аргумент должен изменяться в зависимости от глобальной переменной
Вы вообще задумывались когда ответ давали?Мастер Ломастер писал(а):вы в студии поглядите лучше, чему у вас LED1[0] равно к тому моменту, когда оно "пропускает строчку"... если кроме этого несчастного обращения к функции больше в программе и нет ничего, компилятор запросто может записать туда сразу "нужное" значение, чтобы не лепить бессмысленный вызов вашей функции.
Код: Выделить всё
void SetBright(unsigned short *color, unsigned short bright)
{
*color = bright;
}
SetBright(&LCD[0], 0x1F2);
Код: Выделить всё
unsigned short SetBright(unsigned short bright)
{
return bright;
}
LCD[0] = SetBright(0x1F2);
нет. а что, надо было?BerZerK-ku писал(а):Вы вообще задумывались когда ответ давали?