Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimal Wandlung
Import-Script
12.01.2002, 15:47
Ich suche eine Routine in C um einen Hex-Wert von einem A/D Wandler dezimal auf einem LCD-Display darzustellen.
Import-Script
12.01.2002, 16:52
Hi! <BR>Ich habe mal eine Funktion mit Fixkommadarstellung geschrieben. <BR>Der Wert vom AD-Wandler 0-5V wird der Funktion als Integer-Wert übergeben,die zerteilt den Wert dann in ASCII-Zeichen und schreibt die dann in einen String,der dann aufs Display geschrieben wird. <BR> <BR>void LCD_vADC_PutValue(unsigned int value) // 5343 = 5.343 <BR>{ <BR> char i ; <BR> char help_str[6] ; <BR> char str[8] ; <BR> <BR> for ( i = 0x04; i >= 0x00; i-- ) <BR> { <BR> help_str[i] = '0' + ( value % 10 ) ; <BR> <BR> value/= 10 ; <BR> } <BR> <BR> help_str[5] = 0x00 ; <BR> <BR> str[0] = help_str[0] ; <BR> <BR> str[1] = '.' ; <BR> <BR> for ( i = 1; i < 6; i++ ) <BR> str[i+1] = help_str[i] ; <BR> <BR> str[7] = 0x00 ; <BR> <BR> LCD_vLCD_putstr ( &str[0] ) ; <BR>} <BR> <BR>mfg mike
Import-Script
12.01.2002, 17:20
Sieht zwar gut aus, aber da blicke ich nich so ganz durch. Fang ja gerade erst mit C an. <BR>Könntest du mal ein paar Kommentare einfügen?
Import-Script
12.01.2002, 19:29
Hi <BR> <BR>wenn du SDCC verwendest und genug Programmspeicher zur Verfügung hast kannst du auch mit printf oder printf_small arbeiten. Du mußt dann noch irgendwo eine putc Funktion zur Ausgabe von ASCII-Zeichen an das Display schreiben. Diese PUTC wird dann von printf aufgerufen. <BR> <BR>Matthias
Import-Script
12.01.2002, 20:21
Ok! <BR> <BR>Der Übergabewert ist eine "nicht vorzeichenbehaftete Integerzahl",d.h.der Wertebereich geht von 0-65535.Bei meinem Programm entspricht das dann einer Spannung von 0-6.5535V. <BR>Der Grundgedanke dabei war,den Integerwert in eine Zeichenkette umzuwandeln,ein Komma einzufügen und diese Zeichenkette am Display anzeigen. <BR> <BR>Der Integerwert wird mit der 1.For-Schleife in seine Ziffern zerlegt (mit der Modulo-Division -> z.B. 5343%10 ergibt 3). Das Ergebnis wird zum ASCII-Code von 0 dazuaddiert-> man erhält den ASCII-Code der Ziffer.Anschließend wird der Wert durch 10 dividiert,um an die nächste Stelle zu kommen -> Ergebnis: 534 <BR> <BR>Dann wird die 1. Stelle des Hilfsstings in den endgültigen String geschrieben,dann das Komma und schließlich die restlichen Stellen des Hilfsfeldes. <BR>Die Anweisung str[7]=0x00 fügt die binäre 0 ein (Abschlusszeichen für einen String). <BR> <BR>Sorry,hab grad ne zeile zuviel entdeckt: Die Anweisung help_str[5]=0x00 kann weggelassen werden, und bei der Variablendeklaration help_str[5] anstatt help_str[6] (etwas platzsparender :-) ) <BR> <BR>mike
Import-Script
13.01.2002, 14:23
Danke erstmal. <BR>Hab es ausprobiert. Fehlt ev. bei der 2. for Schleife die Klammern? <BR>Der Controller bleibt in der ersten Schleife hängen. <BR> <BR>Gruss Sascha
Import-Script
14.01.2002, 15:26
Also, irgendwo ist der wurm drin. <BR>krieg es einfach nicht zum laufen. <BR>hat jemand noch ne idee??????????? <BR> <BR>mfg sascha
Import-Script
14.01.2002, 16:11
Hallo Sascha, <BR> <BR>evtl. ist der RAM-Speicher voll??? Wenn Du zu viele Variablen in Deinem Programm definiert hast, koennte da ein Problem liegen. Ich bin nicht sicher, ob der Compiler meckert. Der weiss ja nicht zwangslaeufig, wie gross Dein RAM ist. <BR> <BR>Vielleicht erst mal ein Schmalspurprogramm machen oder Programm/Routine auf 'nem PC vortesten (geht die Routine, liegt's eher am RAM, geht die Routine auf dem PC nicht => andere Probleme!). <BR> <BR>Gruss, <BR>Thomas
Import-Script
14.01.2002, 19:11
Hi! <BR>Wenn nur 1 Anweisungszeile nach einer For-Schleife, While-Schleife, If-Anweisung steht, braucht man keine {},z.B. <BR>if ( j ) <BR> c = 1 ; <BR> <BR>Dass das Prog. in der 1.For-Schleife hängenbleibt,ist mir unerklärlich!Welchen Controller hast du denn? <BR>Mike
Import-Script
14.01.2002, 19:22
hab nen M16C62 M30624 Controller. Halt nen 16Bitter. Hat 256kb Flash und 20kb Ram. also kann es an zuwenig Ram nicht liegen. und der Overhead den der Compiler erzeugt is auch nicht riesig. <BR> <BR>Wenn ich in der ersten schleife hinschreibe: <BR>( i = 0x04; i <= 0x00; i-- ) <BR> <BR>läuft das Programm weiter und es erscheint auf dem Display: <BR>ein Leerzeichen, der Punkt, ein Leerzeichen, ein kleines e, zwei Leerzeichen und dann ein Wert zwischen 0-F, je nach Wert des AD-Wandlers.
Import-Script
15.01.2002, 08:54
Sascha: <BR> <BR>Deine For-Schleife wird gar nicht durchlaufen!!! <BR> <BR>Verbal gesagt steht bei Dir: 'i' ist gleich vier. Durchlaufe schleife so lange, wie 'i' kleiner oder gleich null ist, erniedrige i bei jedem Durchlauf um eins. <BR> <BR>Entscheidend ist, dass die Bedingung i <= 0 von Anfang an nicht erfuellt ist und damit die Schleife gar nicht durchlaufen wird. Damit laeuft das Programm ueber die Schleife hinweg weiter. Und Du siehst die fest definierten Zeichen! <BR> <BR>Gruss, <BR>Thomas
Import-Script
15.01.2002, 17:07
Hi! <BR>Du hast dich verschrieben! Es gehört <BR>for ( i=0x04; i>=0x00; i-- ) <BR> <BR>Mike
Import-Script
16.01.2002, 13:34
Wenn ich es so eingebe, bleibt der Controller in der Schleife stehen. <BR> <BR>Warum????????????????
Import-Script
16.01.2002, 17:50
Liegt es vieleicht daran, dass i eine 8-Bit Variabele ist? Dann wird die doch wenn sie 0 ist und um eins erniederigt wird(i--) den Wert 255 annehmen. Und die Schleife wird weiter durchlaufen. Ich bin kein C Fan. Daher weiß ich nicht ob das stimmt.
Import-Script
16.01.2002, 19:31
Du schreibst eine 4 in i, und dann wird sie solange dekremntiert bis sie 0 ist. <BR>Sollte normalerweise so sein.
Import-Script
16.01.2002, 23:24
Ich weiß jetzt wirklich nicht, was das Problem ist. Bei 20kB RAM nimm doch sprintf(). <BR> <BR>Ich nehms ja auch und das auf einem AT89C2051 mit 128 Byte RAM. <BR> <BR>So müßte es klappen: <BR> <BR>sprintf( buffer, "%d.%03d", val / 100, val % 100 ); <BR> <BR>Aber bei 20kB kannst Du Dir doch sogar float leisten. <BR> <BR> <BR>Peter
Import-Script
17.01.2002, 13:25
Wie schon mal getippert, hab ich von C so gut wie keine Ahnung. Also nochmal: <BR>Ich habe einen 16Bit Hex-Wert, am besten in 2 8Bit Variablen. Diese will ich dann Dezimal auf einen Display anzeigen. Dazu will ich sie als BCD-Wert im Ram stehen haben. Wie z.b. BCD0 = 1Stelle -> BCD4 = 5. Stelle. <BR> <BR>z.B.: <BR>unsigned char BCD0; <BR>unsigned char BCD1; <BR>unsigned char BCD2; <BR>unsigned char BCD3; <BR>unsigned char BCD4; <BR>unsigned char HEXWERT_LB; <BR>unsigned char HEXWERT_HB; <BR> <BR>HEXWERT_LB = 0x43 // Lowbyte Hexwert dez. = 13123 <BR>HEXWERT_HB = 0x33 // Highbyte <BR>hex_to_dez(); // Wandlung aufrufen <BR> // BCD0 = 3 <BR> // BCD1 = 2 <BR> // BCD2 = 1 <BR> // BCD3 = 3 <BR> // BCD4 = 1
Import-Script
17.01.2002, 13:48
schneidertobi hat übrigens recht: <BR> <BR>Da steht: <BR> <BR>for (i=4; i >= 0; i--) ... <BR> <BR>d.h. wenn i == 0, wird i nochmal dekrementiert, es kommt 0xFF dabei raus, das ist > 0, deshalb läuft die Schleife bis in alle Ewigkeit. <BR> <BR>Abhilfe: <BR>char i, j; <BR>for (i = 0, j = 4; i <= 4; i++, j--) { <BR> help_str[j] = '0' + ( value % 10 ) ; <BR> value /= 10; <BR>} <BR> <BR>oder -- falls der Compiler das unterstützt -- <BR>einfach i nicht als ``char'' sondern als ``signed char'' deklarieren (int ginge auch, aber das ist 1 Byte Verschwendung). <BR> <BR>Grüße
Import-Script
17.01.2002, 16:18
Hallo Sascha, <BR> <BR>dann empfehle ich dir dringend, Dich mit den Parametern von printf(), sprintf(), scanf(), sscanf() zu beschäftigen. <BR>Das sind sozusagen die Grundfunktionen für alle Arten der textuellen Ein- und Ausgabe (Brot und Butter des C-Programmierers). <BR> <BR>Das geht am besten direkt am PC, z.B. mit TC oder Borland-C. <BR> <BR>Das, was Bernd geschrieben hat müßte so gehen. <BR>Aber Du wirst von C-Profis nur verächtliche Blicke ernten, wenn Du Funktionen der Standardbibliotheken nachentwickelst. <BR>Üblicherweise steckt in den Bibliotheken das Knowhow von Generationen von Programmierern, d.h. sie sind meistens effizienter und schneller als "zu Fuß". <BR> <BR> <BR>Peter
Import-Script
17.01.2002, 23:22
Wenn mir jemand mal die Parametern und Funktion von printf(), sprintf(), scanf(), sscanf() mal auf deutsch erklärt, würde ich sie auch wohl nutzen. <BR> <BR> <BR>mfg sascha
Import-Script
18.01.2002, 01:14
Hallo Sascha, <BR> <BR>ich schreibe meine 8051 Programme vorzugsweise unter der deutschen Version von Borland C++ 3.1. <BR>Da ist dann auch eine deutschsprachige Hilfe dabei. <BR>Hab ich mir mal für 69,-DM gekauft. <BR> <BR> <BR>Peter
Import-Script
18.01.2002, 17:44
hab ja mehrere Compiler, darunter auch ne vollversion für den M16C62. aber halt alles in englisch. hab mir auch das C-Compiler Buch für µController von franzis gekauft. und da blicke ich halt nich so ganz durch.
Import-Script
22.01.2002, 10:25
Hallo Sascha, <BR> <BR>ich hab mal aus der BC++ Hilfe alles über printf() kopiert. <BR>Nur kann man das ja im Forum nicht leserlich darstellen. <BR>Wenn Du mir also Deine E-Mail Adresse gibst, kann ich es Dir schicken. Ist alles in Deutsch. <BR> <BR> <BR>Hallo Andre, <BR> <BR>warum kann man Bilder ins Forum stellen, ASCII-Textdateien jedoch nicht ? <BR> <BR>Z.B. im AVR-Forum hab ich gesehen, man kann Textdateien als Attachment anfügen. <BR> <BR>Peter
Import-Script
22.01.2002, 13:00
Hier hast du sie. <BR>danke schon mal...... <BR> <BR>mfg sascha
Powered by vBulletin® Version 4.1.7 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.