Hallo zusammen Ich will mit dem Poti Temperaturen simulieren können und bringe es ncht hin dass er bei unter 0 Minus ausgibt ( -1, -2, -3,) anstelle 524, 523 etc. Hier der Code abschnitt: GO_DONE = 1; // A/D-Prozess starten while (GO_DONE); // Warten bis A/D-Wandlung beendet ist AD_Wert = ADRESH; AD_Wert = AD_Wert ; lcd_goto(0x45); // Cursor auf . Zeile, . Spalte stellen lcd_int(AD_Wert,3,1); // Dezimal ausgeben
Als Du die Funktion lcd_int geschrieben hast, hast Du darin doch sicher die Behandlung negativer Zahlen berücksichtigt. Sag uns doch mal wie Du das gemacht hast. Vielleicht können wir das Problem ja darin finden.
Öh... Wo soll man da anfangen? Compiler? Version? µC? Was hast Du schon probiert? - Das Einzige, was man mit diesem Codeschnipsel anfangen kann, ist, Dir dieses zu raten:
1 | lcd_int(AD_Wert-525,3,1); |
Da wir nicht wissen, welchen Wertebereich AD_Wert hat, von welchem Typ AD_Wert ist und wir lcd_int funktioniert (kann diese Funktion vorzeichenbehaftete Zahlen ausgeben?), können wir sonst nur herumraten.
Sorry Hier alles was der ADC Wandler beinhaltet
1 | unsigned int AD_Wert; // RE0 |
2 | |
3 | |
4 | void main() |
5 | {
|
6 | |
7 | ANSEL = 0b01100000; // AN5 und AN6 als analoge Eingänge definieren |
8 | ANSELH = 0; |
9 | C1ON = 0; |
10 | C2ON = 0; |
11 | |
12 | TRISE = 0x07; // alle Ports als Eingänge definieren |
13 | ADCON1 = 0b00000000; // Resultat linksbündig ausrichten |
14 | ADCON1 = 0b00000000; // Resultat linksbündig ausrichten |
15 | |
16 | .....................................................................
|
17 | |
18 | |
19 | ADCON0 = 0b00010101; |
20 | __delay_us(1); |
21 | |
22 | GO_DONE = 1; // A/D-Prozess starten |
23 | while (GO_DONE); // Warten bis A/D-Wandlung beendet ist |
24 | AD_Wert = ADRESH; |
25 | AD_Wert = AD_Wert/4 ; |
26 | |
27 | lcd_goto(0x45); // Cursor auf . Zeile, . Spalte stellen |
28 | lcd_int(AD_Wert,3,1); // Dezimal ausgeben |
wenn ich unsigned rausnehme dann kann ich es nicht Kompilieren
hast du iwas im makefile verstellt? schreib mal
1 | signed int AD_werte |
Möglicherweise erwartet "lcd_int" ein unsigned, das sollte man dann natürlich auch ändern.
Hier der Compiler fehler: I-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83 Copyright (C) 2011 Microchip Technology Inc. (1273) Omniscient Code Generation ist in der Lite Version nicht verfügbar (warning) Warning [1393] C:\Users\Adem\Schule\Mikrocontrollertechnik 2\eigene Übungen\Semesterarbeit\main.c; 104. möglicher hardware stack Überlauf erkannt, geschätzte Stack Tiefe: 13 Error [1347] ; 0. kann 0x17 words (0x17 withtotal) für psect "text1876" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x15 words (0x15 withtotal) für psect "text1835" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x13 words (0x13 withtotal) für psect "inittext" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x11 words (0x11 withtotal) für psect "idataBANK3" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x11 words (0x11 withtotal) für psect "text1874" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x10 words (0x10 withtotal) für psect "text1855" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x10 words (0x10 withtotal) für psect "text1856" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x10 words (0x10 withtotal) für psect "text1858" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x10 words (0x10 withtotal) für psect "text1892" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0x10 words (0x10 withtotal) für psect "text1893" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xE words (0xe withtotal) für psect "text1848" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xE words (0xe withtotal) für psect "text1895" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xD words (0xd withtotal) für psect "text1833" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xC words (0xc withtotal) für psect "text1832" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xC words (0xc withtotal) für psect "text1888" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xB words (0xb withtotal) für psect "text1872" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) Error [1347] ; 0. kann 0xA words (0xa withtotal) für psect "text1871" im segment "CODE" nicht finden (grösster ungenutzter zusammenhängender Bereich 0x8) ********** Build failed! **********
Timmo H. schrieb: > Möglicherweise erwartet "lcd_int" ein unsigned, das sollte man dann > natürlich auch ändern. Ist das dann in der Biblithek? Weil das kann ich dann gleich vergessen!!
Alem Kiral schrieb: > Timmo H. schrieb: >> Möglicherweise erwartet "lcd_int" ein unsigned, das sollte man dann >> natürlich auch ändern. > > Ist das dann in der Biblithek? Weil das kann ich dann gleich vergessen!! Das musst du ja wissen. In der Standard Compiler Lib wirds denke ich nicht drin sein. Du hältst dich ja schon sehr zurück was deinen Code angeht. Deine Compilerfehler sehen eher so aus, als wenn du dann ein anderes Problem hast (zu wenig Speicher Flash und/oder RAM)
Der Compiler sagt, die Verschachtelung Deiner Funktionsaufrufe ist zu tief, und Dein Code zu groß. Daß das einfach durch Ändern von unsigned auf signed passiert, wage ich mal zu bezweifeln.
Dauergast schrieb: > Daß das einfach durch Ändern von unsigned auf signed passiert, wage ich > mal zu bezweifeln. Mit dem HI-TECH PICC passieren die unmöglichsten Sachen. XC8 ist mindestens genauso furchtbar. Anfänger dürfte man eigentlich nicht mit C auf PIC16 u.ä. loslassen. Bei den ganzen Seltsamkeiten, die da passieren können, sollte man schon ein geistig gefestigter Programmierer sein, der genügend Selbstvertrauen sowohl in den eigenen Code als auch in seine Assembler-Kenntnisse hat, um den Compiler in Frage stellen zu können. Aber die Controller sind halt so schön günstig, da nimmt man das Durcheinander (mehr oder weniger) gerne auf sich, sobald es um Stückzahlen geht.
Marcus schrieb: > gerne auf sich, sobald es um Stückzahlen geht. ..und man glaubt, sich mit C um das Stückchen Assemblerprogrammierung drücken zu können, und/oder sich um das Verständnis der Hardware drücken zu können, usw. Wenn der TO denn schon in C werkelt, dann wäre es ja wohl nicht zuviel verlangt, ein klein wenig nachzudenken: Also, angenommen, der ADC liefert in diesem Kontext immer Zahlen 0..1023 (10 Bit, so als Beispiel), dann muß man rechnerisch den Nullpunkt auf eine Zahl größer als 0 verschieben. Nennt man Subtraktion, sowas.
1 | unsigned int AD_Wert; |
2 | int i; |
3 | |
4 | AD_Wert = ADRESH>>2; |
5 | i = AD_Wert; |
6 | i = i - 100; |
7 | if (i<0) |
8 | { Char_Out('-'); |
9 | i = -i; |
10 | }
|
11 | else Char_Out('+'); |
12 | Integer_Out(i); |
Dann kannst du deine Zahlenausgabe ab -99 bewundern. Ist so etwas bereits zu kompliziert? W.S.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.