RIFMAN
25.04.2007, 09:18
hallo zusamen,
wie kann ich ein double zu string umwandeln.
ich versuch zur Zeit ein Programm zu schreiben, das mir eine analoge Spannung misst und auf LCD anzeigt, und das Formatieren ist mein einziges Problem, ich habe es auch mit sprintf probiert klappt aber auch nicht!
ich habe es so gelöst :
#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include "lcd.h"
void LCD(uint16_t result)
{
char buffer[5];
int t;
int x;
t = result / 1000;
x = result - (t * 1000);
sprintf(buffer,"%d.%d V",t,x);
// itoa(result,buffer,10);
lcd_gotoxy(7,1);
lcd_puts(buffer);
}
uint16_t readADC(uint8_t channel)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);// Den ADC aktivieren und Teilungsfaktor auf 64 stellen
ADMUX = channel;// Kanal des Multiplexers waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0);// Interne Referenzspannung verwenden (also 2,56 V)
ADCSRA |= (1<<ADSC); // Den ADC initialisieren..
while(ADCSRA & (1<<ADSC));// und einen sog. Dummyreadout machen
for(i=0; i<3; i++) // Jetzt 3x die analoge Spannung and Kanal channel auslesen
{
ADCSRA |= (1<<ADSC);// Eine Wandlung
while(ADCSRA & (1<<ADSC));// Auf Ergebnis warten...
result += ADCW;
}
ADCSRA &= ~(1<<ADEN);// ADC wieder deaktivieren
result /= 3;// und dann Durchschnittswert ausrechnen.
return result;
}
int main(void)
{
lcd_init(LCD_DISP_ON);
lcd_puts("Die Spannung =");
while(1)
{
uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
result*=2,56/1024;
LCD(result); // also ADC0. In result steht das Ergebnis.
}
return 0;
}
aber irgendwie habe ich das Gefühl, dass es einfacher geht
hat jemand eine Idee.
Danke.
wie kann ich ein double zu string umwandeln.
ich versuch zur Zeit ein Programm zu schreiben, das mir eine analoge Spannung misst und auf LCD anzeigt, und das Formatieren ist mein einziges Problem, ich habe es auch mit sprintf probiert klappt aber auch nicht!
ich habe es so gelöst :
#include <avr/io.h>
#include <inttypes.h>
#include <stdio.h>
#include "lcd.h"
void LCD(uint16_t result)
{
char buffer[5];
int t;
int x;
t = result / 1000;
x = result - (t * 1000);
sprintf(buffer,"%d.%d V",t,x);
// itoa(result,buffer,10);
lcd_gotoxy(7,1);
lcd_puts(buffer);
}
uint16_t readADC(uint8_t channel)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);// Den ADC aktivieren und Teilungsfaktor auf 64 stellen
ADMUX = channel;// Kanal des Multiplexers waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0);// Interne Referenzspannung verwenden (also 2,56 V)
ADCSRA |= (1<<ADSC); // Den ADC initialisieren..
while(ADCSRA & (1<<ADSC));// und einen sog. Dummyreadout machen
for(i=0; i<3; i++) // Jetzt 3x die analoge Spannung and Kanal channel auslesen
{
ADCSRA |= (1<<ADSC);// Eine Wandlung
while(ADCSRA & (1<<ADSC));// Auf Ergebnis warten...
result += ADCW;
}
ADCSRA &= ~(1<<ADEN);// ADC wieder deaktivieren
result /= 3;// und dann Durchschnittswert ausrechnen.
return result;
}
int main(void)
{
lcd_init(LCD_DISP_ON);
lcd_puts("Die Spannung =");
while(1)
{
uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
result*=2,56/1024;
LCD(result); // also ADC0. In result steht das Ergebnis.
}
return 0;
}
aber irgendwie habe ich das Gefühl, dass es einfacher geht
hat jemand eine Idee.
Danke.