Как прочитать int из AVR USART ?
-
CheerfulCalf
- Нашел транзистор. Понюхал.
- Сообщения: 183
- Зарегистрирован: Чт мар 22, 2012 13:25:31
- Откуда: Odense, Danmark
Re: Как прочитать int из AVR USART ?
тоже нет, 5-ый не вычитается.
- Реклама
Re: Как прочитать int из AVR USART ?
Гы, самому интересно. Знатоки Си, подскажите, в чём может быть дело?
Re: Как прочитать int из AVR USART ?
Мистикой не пахнет тут. Код сивола '0' = 0x30. И именно столько и надо вычитать. А откуда взялось 32?ploop писал(а): Мистика, или вы что-то не так делаете.
Re: Как прочитать int из AVR USART ?
так работает?
Код: Выделить всё
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 ?
да, так работает..
- Реклама
Re: Как прочитать int из AVR USART ?
Я тупанул. Перепутал с 0x20 (32 в десятичной) - начало печатных символов. Теперь ясно.Код сивола '0' = 0x30. И именно столько и надо вычитать. А откуда взялось 32?
-
CheerfulCalf
- Нашел транзистор. Понюхал.
- Сообщения: 183
- Зарегистрирован: Чт мар 22, 2012 13:25:31
- Откуда: Odense, Danmark
Re: Как прочитать int из AVR USART ?
Так(((
следущая проблема.
тут всё работает:
А вот тут проблема. Надо померять напряжение и отправить его значение на комп. Тут что не так?
на комп приходить только go go go....
следущая проблема.
тут всё работает:
Код: Выделить всё
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 ?
аа, дошло.
Код: Выделить всё
void readV(char *buffer)
{
int volatage;
volatage = ADC_read(0);
sprintf(buffer, "%d.%04u", volatage*5/1024);
}
//и потом в майн
readV(buffer);
USART_putstring(buffer);

