Как прочитать int из AVR USART ?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

тоже нет, 5-ый не вычитается.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Гы, самому интересно. Знатоки Си, подскажите, в чём может быть дело?
Реклама
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

Re: Как прочитать int из AVR USART ?

Сообщение Совесть »

ploop писал(а): Мистика, или вы что-то не так делаете.
Мистикой не пахнет тут. Код сивола '0' = 0x30. И именно столько и надо вычитать. А откуда взялось 32?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Как прочитать int из AVR USART ?

Сообщение a_skr »

так работает?

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

ISR(USART_RXC_vect)
{
   unsigned char ReceivedByte;
   ReceivedByte = UDR;
   UDR = ReceivedByte;
   PORTB=d2led[ReceivedByte - '0'];
}
Реклама
Эиком - электронные компоненты и радиодетали
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

да, так работает..
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Код сивола '0' = 0x30. И именно столько и надо вычитать. А откуда взялось 32?
Я тупанул. Перепутал с 0x20 (32 в десятичной) - начало печатных символов. Теперь ясно.
Реклама
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

Так(((
следущая проблема.

тут всё работает:

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

void USART_Init(void)
{
   UCSRB |= (1 << RXEN) | (1 << TXEN);
   UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
   UBRRH = (BAUD_PRESCALE >> 8);
   UBRRL = BAUD_PRESCALE;
   UCSRB |= (1 << RXC);
}

void USART_SendByte(uint8_t u8Data)
{
   while((UCSRA &(1<<UDRE)) == 0);
   UDR = u8Data;
}

void USART_putstring(char* StringPtr)
{
	while(*StringPtr != 0x00)
	{
		USART_SendByte(*StringPtr);
		StringPtr++;
	}
}

void ADC_init(void)
{
	ADMUX=(1<<REFS0);
	ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);	
	set_sleep_mode(SLEEP_MODE_ADC);						
}

unsigned int ADC_read(unsigned char ch)
{
    uint16_t summary = 0;
    uint8_t count = 0;
    uint8_t sreg;
    ADMUX = (0<<ADLAR) | (ch&0b1111);
    while(count<64)
    {
        ADCSRA |= (1<<ADSC);
        while( ! (ADCSRA&(1<<ADIF)) ) asm("nop");
        ADCSRA |= (1<<ADIF);
	sreg = SREG;
        cli();
        summary += ADC;
        SREG = sreg;
        count++;
    }
    return (summary>>6); 
}
А вот тут проблема. Надо померять напряжение и отправить его значение на комп. Тут что не так?
на комп приходить только go go go....

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

int main(void)
{
    ADC_init();
    USART_Init();
    char voltage;
    while(1)
    {	
        USART_putstring("go");
        voltage=ADC_read(0)*5/1024;	
        _delay_ms(500);
        USART_putstring(voltage);
        _delay_ms(1000);
    }
}
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

аа, дошло.

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

void readV(char *buffer)
{
	int volatage;
	volatage = ADC_read(0);
	sprintf(buffer, "%d.%04u", volatage*5/1024);		
}

//и потом в майн
	readV(buffer);
	USART_putstring(buffer);
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»